Project/Project.py

changeset 607
d95d60ba16aa
parent 606
cc26d1c27da5
child 608
d8fea1e76975
equal deleted inserted replaced
606:cc26d1c27da5 607:d95d60ba16aa
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>")

eric ide

mercurial