PluginCxFreeze.py

changeset 64
c878aac7d3f5
parent 60
8bf1407ebc46
child 66
8b8127353236
equal deleted inserted replaced
63:22352a68d186 64:c878aac7d3f5
19 from E5Gui import E5MessageBox 19 from E5Gui import E5MessageBox
20 from E5Gui.E5Action import E5Action 20 from E5Gui.E5Action import E5Action
21 from E5Gui.E5Application import e5App 21 from E5Gui.E5Application import e5App
22 error = "" 22 error = ""
23 except ImportError: 23 except ImportError:
24 error = QCoreApplication.translate("CxFreezePlugin", 24 error = QCoreApplication.translate(
25 "CxFreezePlugin",
25 """Your version of Eric5 is not supported.""" 26 """Your version of Eric5 is not supported."""
26 """ At least version 5.1.0 of Eric5 is needed.""") 27 """ At least version 5.1.0 of Eric5 is needed.""")
27 28
28 29
29 import Utilities 30 import Utilities
31 # Start-of-Header 32 # Start-of-Header
32 name = "CxFreeze Plugin" 33 name = "CxFreeze Plugin"
33 author = "Detlev Offenbach <detlev@die-offenbachs.de>" 34 author = "Detlev Offenbach <detlev@die-offenbachs.de>"
34 autoactivate = True 35 autoactivate = True
35 deactivateable = True 36 deactivateable = True
36 version = "5.2.0" 37 version = "5.2.1"
37 className = "CxFreezePlugin" 38 className = "CxFreezePlugin"
38 packageName = "CxFreeze" 39 packageName = "CxFreeze"
39 shortDescription = "Show the CxFreeze dialogs." 40 shortDescription = "Show the CxFreeze dialogs."
40 longDescription = """This plugin implements the CxFreeze dialogs.""" \ 41 longDescription = \
41 """ CxFreeze is used to generate a distribution package.""" 42 """This plugin implements the CxFreeze dialogs.""" \
43 """ CxFreeze is used to generate a distribution package."""
42 needsRestart = False 44 needsRestart = False
43 pyqtApi = 2 45 pyqtApi = 2
44 # End-of-Header 46 # End-of-Header
45 47
46 exePy2 = [] 48 exePy2 = []
55 the executable 57 the executable
56 """ 58 """
57 dataList = [] 59 dataList = []
58 data = { 60 data = {
59 "programEntry": True, 61 "programEntry": True,
60 "header": QCoreApplication.translate("CxFreezePlugin", "Packagers - cx_freeze"), 62 "header": QCoreApplication.translate(
63 "CxFreezePlugin", "Packagers - cx_freeze"),
61 "exe": 'dummyfreeze', 64 "exe": 'dummyfreeze',
62 "versionCommand": '--version', 65 "versionCommand": '--version',
63 "versionStartsWith": 'dummyfreeze', 66 "versionStartsWith": 'dummyfreeze',
64 "versionPosition": -1, 67 "versionPosition": -1,
65 "version": "", 68 "version": "",
115 return None 118 return None
116 return None 119 return None
117 120
118 for minorVersion in minorVersions: 121 for minorVersion in minorVersions:
119 versionStr = '{0}.{1}'.format(majorVersion, minorVersion) 122 versionStr = '{0}.{1}'.format(majorVersion, minorVersion)
120 exePath = getExePath(winreg.HKEY_CURRENT_USER, 123 exePath = getExePath(
124 winreg.HKEY_CURRENT_USER,
121 winreg.KEY_WOW64_32KEY | winreg.KEY_READ, versionStr) 125 winreg.KEY_WOW64_32KEY | winreg.KEY_READ, versionStr)
122 126
123 if exePath is not None: 127 if exePath is not None:
124 executables.add(exePath) 128 executables.add(exePath)
125 exePath = getExePath(winreg.HKEY_LOCAL_MACHINE, 129 exePath = getExePath(
130 winreg.HKEY_LOCAL_MACHINE,
126 winreg.KEY_WOW64_32KEY | winreg.KEY_READ, versionStr) 131 winreg.KEY_WOW64_32KEY | winreg.KEY_READ, versionStr)
127 132
128 # Even on Intel 64-bit machines it's 'AMD64' 133 # Even on Intel 64-bit machines it's 'AMD64'
129 if platform.machine() == 'AMD64': 134 if platform.machine() == 'AMD64':
130 if exePath is not None: 135 if exePath is not None:
131 executables.add(exePath) 136 executables.add(exePath)
132 exePath = getExePath(winreg.HKEY_CURRENT_USER, 137 exePath = getExePath(
138 winreg.HKEY_CURRENT_USER,
133 winreg.KEY_WOW64_64KEY | winreg.KEY_READ, versionStr) 139 winreg.KEY_WOW64_64KEY | winreg.KEY_READ, versionStr)
134 140
135 if exePath is not None: 141 if exePath is not None:
136 executables.add(exePath) 142 executables.add(exePath)
137 exePath = getExePath(winreg.HKEY_LOCAL_MACHINE, 143 exePath = getExePath(
144 winreg.HKEY_LOCAL_MACHINE,
138 winreg.KEY_WOW64_64KEY | winreg.KEY_READ, versionStr) 145 winreg.KEY_WOW64_64KEY | winreg.KEY_READ, versionStr)
139 146
140 if exePath is not None: 147 if exePath is not None:
141 executables.add(exePath) 148 executables.add(exePath)
142 else: 149 else:
143 # 150 #
144 # Linux, Unix ... 151 # Linux, Unix ...
145 cxfreezeScript = 'cxfreeze' 152 cxfreezeScript = 'cxfreeze'
146 scriptSuffixes = ["", 153 scriptSuffixes = ["", "-python{0}".format(majorVersion)]
147 "-python{0}".format(majorVersion)]
148 for minorVersion in minorVersions: 154 for minorVersion in minorVersions:
149 scriptSuffixes.append( 155 scriptSuffixes.append(
150 "-python{0}.{1}".format(majorVersion, minorVersion)) 156 "-python{0}.{1}".format(majorVersion, minorVersion))
151 # There could be multiple cxfreeze executables in the path 157 # There could be multiple cxfreeze executables in the path
152 # e.g. for different python variants 158 # e.g. for different python variants
153 path = Utilities.getEnvironmentEntry('PATH') 159 path = Utilities.getEnvironmentEntry('PATH')
154 # environment variable not defined 160 # environment variable not defined
155 if path is None: 161 if path is None:
156 return [] 162 return []
157 163
158 # step 1: determine possible candidates 164 # step 1: determine possible candidates
159 exes = [] 165 exes = []
160 dirs = path.split(os.pathsep) 166 dirs = path.split(os.pathsep)
161 for dir in dirs: 167 for dir in dirs:
203 global error, exePy2, exePy3 209 global error, exePy2, exePy3
204 210
205 exePy2 = _findExecutable(2) 211 exePy2 = _findExecutable(2)
206 exePy3 = _findExecutable(3) 212 exePy3 = _findExecutable(3)
207 if (exePy2 + exePy3) == []: 213 if (exePy2 + exePy3) == []:
208 error = QCoreApplication.translate("CxFreezePlugin", 214 error = QCoreApplication.translate(
215 "CxFreezePlugin",
209 "The cxfreeze executable could not be found.") 216 "The cxfreeze executable could not be found.")
210 return False 217 return False
211 else: 218 else:
212 return True 219 return True
213 220
253 return None, False 260 return None, False
254 261
255 project = e5App().getObject("Project") 262 project = e5App().getObject("Project")
256 menu = project.getMenu("Packagers") 263 menu = project.getMenu("Packagers")
257 if menu: 264 if menu:
258 self.__projectAct = E5Action(self.trUtf8('Use cx_freeze'), 265 self.__projectAct = E5Action(
259 self.trUtf8('Use cx_&freeze'), 0, 0, 266 self.trUtf8('Use cx_freeze'),
260 self, 'packagers_cxfreeze') 267 self.trUtf8('Use cx_&freeze'), 0, 0,
268 self, 'packagers_cxfreeze')
261 self.__projectAct.setStatusTip( 269 self.__projectAct.setStatusTip(
262 self.trUtf8('Generate a distribution package using cx_freeze')) 270 self.trUtf8('Generate a distribution package using cx_freeze'))
263 self.__projectAct.setWhatsThis(self.trUtf8( 271 self.__projectAct.setWhatsThis(self.trUtf8(
264 """<b>Use cx_freeze</b>""" 272 """<b>Use cx_freeze</b>"""
265 """<p>Generate a distribution package using cx_freeze.""" 273 """<p>Generate a distribution package using cx_freeze."""
266 """ The command is executed in the project path. All""" 274 """ The command is executed in the project path. All"""
267 """ files and directories must be given absolute or""" 275 """ files and directories must be given absolute or"""
268 """ relative to the project directory.</p>""" 276 """ relative to the project directory.</p>"""
269 )) 277 ))
270 self.__projectAct.triggered[()].connect(self.__cxfreeze) 278 self.__projectAct.triggered[()].connect(self.__cxfreeze)
271 project.addE5Actions([self.__projectAct]) 279 project.addE5Actions([self.__projectAct])
272 menu.addAction(self.__projectAct) 280 menu.addAction(self.__projectAct)
273 project.showMenu.connect(self.__projectShowMenu) 281 project.showMenu.connect(self.__projectShowMenu)
281 """ 289 """
282 menu = e5App().getObject("Project").getMenu("Packagers") 290 menu = e5App().getObject("Project").getMenu("Packagers")
283 if menu: 291 if menu:
284 if self.__projectAct: 292 if self.__projectAct:
285 menu.removeAction(self.__projectAct) 293 menu.removeAction(self.__projectAct)
286 e5App().getObject("Project").removeE5Actions([self.__projectAct]) 294 e5App().getObject("Project").removeE5Actions(
295 [self.__projectAct])
287 self.__initialize() 296 self.__initialize()
288 297
289 def __projectShowMenu(self, menuName, menu): 298 def __projectShowMenu(self, menuName, menu):
290 """ 299 """
291 Private slot called, when the the project menu or a submenu is 300 Private slot called, when the the project menu or a submenu is
295 @param menu reference to the menu (QMenu) 304 @param menu reference to the menu (QMenu)
296 """ 305 """
297 if menuName == "Packagers": 306 if menuName == "Packagers":
298 if self.__projectAct is not None: 307 if self.__projectAct is not None:
299 self.__projectAct.setEnabled( 308 self.__projectAct.setEnabled(
300 e5App().getObject("Project").getProjectLanguage() in \ 309 e5App().getObject("Project").getProjectLanguage() in
301 ["Python", "Python2", "Python3"]) 310 ["Python", "Python2", "Python3"])
302 311
303 def __loadTranslator(self): 312 def __loadTranslator(self):
304 """ 313 """
305 Private method to load the translation file. 314 Private method to load the translation file.
306 """ 315 """
314 loaded = translator.load(translation, locale_dir) 323 loaded = translator.load(translation, locale_dir)
315 if loaded: 324 if loaded:
316 self.__translator = translator 325 self.__translator = translator
317 e5App().installTranslator(self.__translator) 326 e5App().installTranslator(self.__translator)
318 else: 327 else:
319 print("Warning: translation file '{0}' could not be loaded."\ 328 print("Warning: translation file '{0}' could not be"
320 .format(translation)) 329 " loaded.".format(translation))
321 print("Using default.") 330 print("Using default.")
322 331
323 def __cxfreeze(self): 332 def __cxfreeze(self):
324 """ 333 """
325 Private slot to handle the cxfreeze execution. 334 Private slot to handle the cxfreeze execution.
326 """ 335 """
327 project = e5App().getObject("Project") 336 project = e5App().getObject("Project")
328 if len(project.pdata["MAINSCRIPT"]) == 0: 337 if len(project.pdata["MAINSCRIPT"]) == 0:
329 # no main script defined 338 # no main script defined
330 E5MessageBox.critical(None, 339 E5MessageBox.critical(
340 self,
331 self.trUtf8("cxfreeze"), 341 self.trUtf8("cxfreeze"),
332 self.trUtf8( 342 self.trUtf8(
333 """There is no main script defined for the current project."""), 343 """There is no main script defined for the current"""
344 """ project."""),
334 E5MessageBox.StandardButtons(E5MessageBox.Abort)) 345 E5MessageBox.StandardButtons(E5MessageBox.Abort))
335 return 346 return
336 347
337 majorVersionStr = project.getProjectLanguage() 348 majorVersionStr = project.getProjectLanguage()
338 exe = {"Python": exePy2, "Python2": exePy2, "Python3": exePy3}.get(majorVersionStr) 349 exe = {"Python": exePy2, "Python2": exePy2, "Python3": exePy3}\
350 .get(majorVersionStr)
339 if exe == []: 351 if exe == []:
340 E5MessageBox.critical(None, 352 E5MessageBox.critical(
353 self,
341 self.trUtf8("cxfreeze"), 354 self.trUtf8("cxfreeze"),
342 self.trUtf8("""The cxfreeze executable could not be found.""")) 355 self.trUtf8("""The cxfreeze executable could not be found."""))
343 return 356 return
344 357
345 # check if all files saved and errorfree before continue 358 # check if all files saved and errorfree before continue
356 # now do the call 369 # now do the call
357 from CxFreeze.CxfreezeExecDialog import CxfreezeExecDialog 370 from CxFreeze.CxfreezeExecDialog import CxfreezeExecDialog
358 dia = CxfreezeExecDialog("cxfreeze") 371 dia = CxfreezeExecDialog("cxfreeze")
359 dia.show() 372 dia.show()
360 res = dia.start(args, parms, project.ppath, 373 res = dia.start(args, parms, project.ppath,
361 project.pdata["MAINSCRIPT"][0]) 374 project.pdata["MAINSCRIPT"][0])
362 if res: 375 if res:
363 dia.exec_() 376 dia.exec_()

eric ide

mercurial