47 from E5XML.UserProjectWriter import UserProjectWriter |
47 from E5XML.UserProjectWriter import UserProjectWriter |
48 from E5XML.SessionReader import SessionReader |
48 from E5XML.SessionReader import SessionReader |
49 from E5XML.SessionWriter import SessionWriter |
49 from E5XML.SessionWriter import SessionWriter |
50 from E5XML.TasksReader import TasksReader |
50 from E5XML.TasksReader import TasksReader |
51 from E5XML.TasksWriter import TasksWriter |
51 from E5XML.TasksWriter import TasksWriter |
52 from E5XML.DebuggerPropertiesHandler import DebuggerPropertiesHandler |
52 from E5XML.DebuggerPropertiesReader import DebuggerPropertiesReader |
53 from E5XML.DebuggerPropertiesWriter import DebuggerPropertiesWriter |
53 from E5XML.DebuggerPropertiesWriter import DebuggerPropertiesWriter |
54 |
54 |
55 import VCS |
55 import VCS |
56 from VCS.CommandOptionsDialog import vcsCommandOptionsDialog |
56 from VCS.CommandOptionsDialog import vcsCommandOptionsDialog |
57 from VCS.ProjectHelper import VcsProjectHelper |
57 from VCS.ProjectHelper import VcsProjectHelper |
1001 self.trUtf8("Read debugger properties"), |
1001 self.trUtf8("Read debugger properties"), |
1002 self.trUtf8("Please save the project first.")) |
1002 self.trUtf8("Please save the project first.")) |
1003 return |
1003 return |
1004 |
1004 |
1005 fn, ext = os.path.splitext(os.path.basename(self.pfile)) |
1005 fn, ext = os.path.splitext(os.path.basename(self.pfile)) |
1006 |
1006 fn = os.path.join(self.getProjectManagementDir(), '{0}.e4d'.format(fn)) |
1007 try: |
1007 |
1008 if ext.lower() in [".e4pz"]: |
1008 f = QFile(fn) |
1009 fn = os.path.join(self.getProjectManagementDir(), '{0}.e4dz'.format(fn)) |
1009 if f.open(QIODevice.ReadOnly): |
1010 try: |
1010 reader = DebuggerPropertiesReader(f, self) |
1011 import gzip |
1011 reader.readXML(quiet = quiet) |
1012 except ImportError: |
|
1013 if not quiet: |
|
1014 E5MessageBox.critical(self.ui, |
|
1015 self.trUtf8("Read debugger properties"), |
|
1016 self.trUtf8("""Compressed project session files not""" |
|
1017 """ supported. The compression library is""" |
|
1018 """ missing.""")) |
|
1019 return |
|
1020 g = gzip.open(fn, "rb") |
|
1021 f = io.StringIO(g.read().decode("utf-8")) |
|
1022 g.close() |
|
1023 else: |
|
1024 fn = os.path.join(self.getProjectManagementDir(), '{0}.e4d'.format(fn)) |
|
1025 f = open(fn, "r", encoding = "utf-8") |
|
1026 line = f.readline() |
|
1027 dtdLine = f.readline() |
|
1028 f.close() |
1012 f.close() |
1029 except EnvironmentError: |
1013 else: |
1030 if not quiet: |
1014 if not quiet: |
1031 E5MessageBox.critical(self.ui, |
1015 E5MessageBox.critical(self.ui, |
1032 self.trUtf8("Read debugger properties"), |
1016 self.trUtf8("Read debugger properties"), |
1033 self.trUtf8("<p>The project debugger properties file <b>{0}</b> could" |
1017 self.trUtf8("<p>The project debugger properties file <b>{0}</b> could" |
1034 " not be read.</p>").format(fn)) |
1018 " not be read.</p>").format(fn)) |
1035 return |
1019 |
1036 |
1020 def __writeDebugProperties(self, quiet = False): |
1037 # now read the file |
|
1038 if line.startswith('<?xml'): |
|
1039 self.__readXMLDebugProperties(fn, dtdLine.startswith("<!DOCTYPE"), quiet) |
|
1040 else: |
|
1041 if not quiet: |
|
1042 E5MessageBox.critical(self.ui, |
|
1043 self.trUtf8("Read debugger properties"), |
|
1044 self.trUtf8("<p>The project debugger properties file <b>{0}</b> has" |
|
1045 " an unsupported format.</p>").format(fn)) |
|
1046 |
|
1047 def __readXMLDebugProperties(self, fn, validating, quiet): |
|
1048 """ |
|
1049 Public method to read the debugger properties from an XML file. |
|
1050 |
|
1051 @param fn filename of the project debugger properties file to be read |
|
1052 (string) |
|
1053 @param validating flag indicating a validation of the XML file is |
|
1054 requested (boolean) |
|
1055 @param quiet flag indicating quiet operations. |
|
1056 If this flag is true, no errors are reported. |
|
1057 """ |
|
1058 if fn.lower().endswith("e4dz"): |
|
1059 # work around for a bug in xmlproc |
|
1060 validating = False |
|
1061 |
|
1062 parser = make_parser(validating) |
|
1063 handler = DebuggerPropertiesHandler(self) |
|
1064 er = XMLEntityResolver() |
|
1065 eh = XMLErrorHandler() |
|
1066 |
|
1067 parser.setContentHandler(handler) |
|
1068 parser.setEntityResolver(er) |
|
1069 parser.setErrorHandler(eh) |
|
1070 |
|
1071 try: |
|
1072 if fn.lower().endswith("e4dz"): |
|
1073 try: |
|
1074 import gzip |
|
1075 except ImportError: |
|
1076 if not quiet: |
|
1077 E5MessageBox.critical(self.ui, |
|
1078 self.trUtf8("Read debugger properties"), |
|
1079 self.trUtf8("<p>The project debugger properties file" |
|
1080 " <b>{0}</b> could not be read.</p>").format(fn)) |
|
1081 return |
|
1082 g = gzip.open(fn, "rb") |
|
1083 f = io.StringIO(g.read().decode("utf-8")) |
|
1084 g.close() |
|
1085 else: |
|
1086 f = open(fn, "r", encoding = "utf-8") |
|
1087 try: |
|
1088 try: |
|
1089 parser.parse(f) |
|
1090 except UnicodeEncodeError: |
|
1091 f.seek(0) |
|
1092 buf = io.StringIO(f.read()) |
|
1093 parser.parse(buf) |
|
1094 if self.debugProperties["INTERPRETER"]: |
|
1095 self.debugPropertiesLoaded = True |
|
1096 else: |
|
1097 self.debugPropertiesLoaded = False |
|
1098 finally: |
|
1099 f.close() |
|
1100 except IOError: |
|
1101 if not quiet: |
|
1102 E5MessageBox.critical(self.ui, |
|
1103 self.trUtf8("Read debugger properties"), |
|
1104 self.trUtf8("<p>The project debugger properties file <b>{0}</b> could" |
|
1105 " not be read.</p>") |
|
1106 .format(fn)) |
|
1107 return |
|
1108 except XMLFatalParseError: |
|
1109 pass |
|
1110 |
|
1111 if not quiet: |
|
1112 eh.showParseMessages() |
|
1113 |
|
1114 def __writeDebugProperties(self, quiet=0): |
|
1115 """ |
1021 """ |
1116 Private method to write the project debugger properties file (.e4d) |
1022 Private method to write the project debugger properties file (.e4d) |
1117 |
1023 |
1118 @param quiet flag indicating quiet operations. |
1024 @param quiet flag indicating quiet operations. |
1119 If this flag is true, no errors are reported. |
1025 If this flag is true, no errors are reported. |
1124 self.trUtf8("Save debugger properties"), |
1030 self.trUtf8("Save debugger properties"), |
1125 self.trUtf8("Please save the project first.")) |
1031 self.trUtf8("Please save the project first.")) |
1126 return |
1032 return |
1127 |
1033 |
1128 fn, ext = os.path.splitext(os.path.basename(self.pfile)) |
1034 fn, ext = os.path.splitext(os.path.basename(self.pfile)) |
1129 |
1035 fn = os.path.join(self.getProjectManagementDir(), '{0}.e4d'.format(fn)) |
1130 try: |
1036 |
1131 if ext.lower() == ".e4pz": |
1037 f = QFile(fn) |
1132 fn = os.path.join(self.getProjectManagementDir(), '{0}.e4dz'.format(fn)) |
1038 if f.open(QIODevice.WriteOnly): |
1133 try: |
|
1134 import gzip |
|
1135 except ImportError: |
|
1136 if not quiet: |
|
1137 E5MessageBox.critical(self.ui, |
|
1138 self.trUtf8("Save debugger properties"), |
|
1139 self.trUtf8("""Compressed project debugger properties files""" |
|
1140 """ not supported. The compression library is""" |
|
1141 """ missing.""")) |
|
1142 return |
|
1143 f = io.StringIO() |
|
1144 else: |
|
1145 fn = os.path.join(self.getProjectManagementDir(), '{0}.e4d'.format(fn)) |
|
1146 f = open(fn, "w", encoding = "utf-8") |
|
1147 |
|
1148 DebuggerPropertiesWriter(f, os.path.splitext(os.path.basename(fn))[0])\ |
1039 DebuggerPropertiesWriter(f, os.path.splitext(os.path.basename(fn))[0])\ |
1149 .writeXML() |
1040 .writeXML() |
1150 |
|
1151 if fn.lower().endswith("e4dz"): |
|
1152 g = gzip.open(fn, "wb") |
|
1153 g.write(f.getvalue().encode("utf-8")) |
|
1154 g.close() |
|
1155 f.close() |
1041 f.close() |
1156 |
1042 else: |
1157 except IOError: |
|
1158 if not quiet: |
1043 if not quiet: |
1159 E5MessageBox.critical(self.ui, |
1044 E5MessageBox.critical(self.ui, |
1160 self.trUtf8("Save debugger properties"), |
1045 self.trUtf8("Save debugger properties"), |
1161 self.trUtf8("<p>The project debugger properties file <b>{0}</b> could" |
1046 self.trUtf8("<p>The project debugger properties file <b>{0}</b> could" |
1162 " not be written.</p>") |
1047 " not be written.</p>") |