PluginCxFreeze.py

Wed, 30 Dec 2020 11:02:05 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Wed, 30 Dec 2020 11:02:05 +0100
changeset 130
c15aad5f55cf
parent 127
a76379d552f2
child 131
86d810eea380
permissions
-rw-r--r--

Updated copyright for 2021.

25
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
1 # -*- coding: utf-8 -*-
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
2
130
c15aad5f55cf Updated copyright for 2021.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 127
diff changeset
3 # Copyright (c) 2010 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
25
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
4 #
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
5
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
6 """
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
7 Module implementing the CxFreeze plugin.
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
8 """
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
9
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
10 import os
47
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
11 import platform
25
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
12
108
13fb1d9e7049 Improved executable and Python version determination.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 106
diff changeset
13 from PyQt5.QtCore import QObject, QTranslator, QCoreApplication, QProcess
102
78d1632d4b83 Fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 100
diff changeset
14 from PyQt5.QtWidgets import QDialog
25
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
15
80
a349a1b6cb83 Ported to PyQt5 and eric6.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 77
diff changeset
16 from E5Gui import E5MessageBox
a349a1b6cb83 Ported to PyQt5 and eric6.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 77
diff changeset
17 from E5Gui.E5Action import E5Action
a349a1b6cb83 Ported to PyQt5 and eric6.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 77
diff changeset
18 from E5Gui.E5Application import e5App
54
d14ff08ea519 A little improvement to Tobias' patches.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 52
diff changeset
19
25
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
20 import Utilities
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
21
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
22 # Start-of-Header
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
23 name = "CxFreeze Plugin"
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
24 author = "Detlev Offenbach <detlev@die-offenbachs.de>"
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
25 autoactivate = True
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
26 deactivateable = True
127
a76379d552f2 Changed calls of exec_() into exec().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 125
diff changeset
27 version = "7.1.0"
25
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
28 className = "CxFreezePlugin"
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
29 packageName = "CxFreeze"
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
30 shortDescription = "Show the CxFreeze dialogs."
123
dd6f7c9041a4 Added code to search the executable in virtual environment as well on Windows platforms.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 122
diff changeset
31 longDescription = (
dd6f7c9041a4 Added code to search the executable in virtual environment as well on Windows platforms.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 122
diff changeset
32 """This plugin implements the CxFreeze dialogs."""
64
c878aac7d3f5 Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 60
diff changeset
33 """ CxFreeze is used to generate a distribution package."""
123
dd6f7c9041a4 Added code to search the executable in virtual environment as well on Windows platforms.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 122
diff changeset
34 )
25
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
35 needsRestart = False
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
36 pyqtApi = 2
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
37 # End-of-Header
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
38
80
a349a1b6cb83 Ported to PyQt5 and eric6.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 77
diff changeset
39 error = ""
a349a1b6cb83 Ported to PyQt5 and eric6.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 77
diff changeset
40
47
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
41 exePy3 = []
25
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
42
60
8bf1407ebc46 Fixed some PEP8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 57
diff changeset
43
47
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
44 def exeDisplayDataList():
25
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
45 """
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
46 Public method to support the display of some executable info.
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
47
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
48 @return dictionary containing the data to query the presence of
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
49 the executable
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
50 """
47
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
51 dataList = []
25
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
52 data = {
56
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 54
diff changeset
53 "programEntry": True,
64
c878aac7d3f5 Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 60
diff changeset
54 "header": QCoreApplication.translate(
c878aac7d3f5 Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 60
diff changeset
55 "CxFreezePlugin", "Packagers - cx_freeze"),
56
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 54
diff changeset
56 "exe": 'dummyfreeze',
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 54
diff changeset
57 "versionCommand": '--version',
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 54
diff changeset
58 "versionStartsWith": 'dummyfreeze',
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 54
diff changeset
59 "versionPosition": -1,
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 54
diff changeset
60 "version": "",
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 54
diff changeset
61 "versionCleanup": None,
25
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
62 }
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
63
47
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
64 if _checkProgram():
125
13f16f4e355a Removed support for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 123
diff changeset
65 for exePath in exePy3:
47
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
66 data["exe"] = exePath
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
67 data["versionStartsWith"] = "cxfreeze"
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
68 dataList.append(data.copy())
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
69 else:
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
70 dataList.append(data)
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
71 return dataList
25
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
72
60
8bf1407ebc46 Fixed some PEP8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 57
diff changeset
73
47
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
74 def _findExecutable(majorVersion):
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
75 """
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
76 Restricted function to determine the names of the executable.
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
77
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
78 @param majorVersion major python version of the executables (int)
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
79 @return names of the executable (list)
25
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
80 """
47
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
81 # Determine Python Version
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
82 if majorVersion == 3:
104
192bc09e64de Fixed an issue preventing the activation of the plug-in with Python 3 >= 3.5.x.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 102
diff changeset
83 minorVersions = range(10)
47
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
84 else:
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
85 return []
25
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
86
47
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
87 executables = set()
25
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
88 if Utilities.isWindowsPlatform():
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
89 #
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
90 # Windows
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
91 #
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
92 try:
47
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
93 import winreg
25
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
94 except ImportError:
47
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
95 import _winreg as winreg # __IGNORE_WARNING__
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
96
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
97 def getExePath(branch, access, versionStr):
25
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
98 try:
47
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
99 software = winreg.OpenKey(branch, 'Software', 0, access)
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
100 python = winreg.OpenKey(software, 'Python', 0, access)
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
101 pcore = winreg.OpenKey(python, 'PythonCore', 0, access)
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
102 version = winreg.OpenKey(pcore, versionStr, 0, access)
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
103 installpath = winreg.QueryValue(version, 'InstallPath')
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
104 exe = os.path.join(installpath, 'Scripts', 'cxfreeze.bat')
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
105 if os.access(exe, os.X_OK):
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
106 return exe
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
107 except WindowsError: # __IGNORE_WARNING__
25
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
108 return None
47
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
109 return None
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
110
108
13fb1d9e7049 Improved executable and Python version determination.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 106
diff changeset
111 versionSuffixes = ["", "-32", "-64"]
47
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
112 for minorVersion in minorVersions:
108
13fb1d9e7049 Improved executable and Python version determination.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 106
diff changeset
113 for versionSuffix in versionSuffixes:
13fb1d9e7049 Improved executable and Python version determination.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 106
diff changeset
114 versionStr = '{0}.{1}{2}'.format(majorVersion, minorVersion,
13fb1d9e7049 Improved executable and Python version determination.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 106
diff changeset
115 versionSuffix)
64
c878aac7d3f5 Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 60
diff changeset
116 exePath = getExePath(
c878aac7d3f5 Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 60
diff changeset
117 winreg.HKEY_CURRENT_USER,
108
13fb1d9e7049 Improved executable and Python version determination.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 106
diff changeset
118 winreg.KEY_WOW64_32KEY | winreg.KEY_READ, versionStr)
47
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
119 if exePath is not None:
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
120 executables.add(exePath)
67
28fd1bbe2e34 Fixed a bug determining cxfreeze executable names on Windows.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 66
diff changeset
121
64
c878aac7d3f5 Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 60
diff changeset
122 exePath = getExePath(
c878aac7d3f5 Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 60
diff changeset
123 winreg.HKEY_LOCAL_MACHINE,
108
13fb1d9e7049 Improved executable and Python version determination.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 106
diff changeset
124 winreg.KEY_WOW64_32KEY | winreg.KEY_READ, versionStr)
47
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
125 if exePath is not None:
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
126 executables.add(exePath)
108
13fb1d9e7049 Improved executable and Python version determination.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 106
diff changeset
127
13fb1d9e7049 Improved executable and Python version determination.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 106
diff changeset
128 # Even on Intel 64-bit machines it's 'AMD64'
13fb1d9e7049 Improved executable and Python version determination.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 106
diff changeset
129 if platform.machine() == 'AMD64':
13fb1d9e7049 Improved executable and Python version determination.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 106
diff changeset
130 exePath = getExePath(
13fb1d9e7049 Improved executable and Python version determination.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 106
diff changeset
131 winreg.HKEY_CURRENT_USER,
13fb1d9e7049 Improved executable and Python version determination.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 106
diff changeset
132 winreg.KEY_WOW64_64KEY | winreg.KEY_READ, versionStr)
13fb1d9e7049 Improved executable and Python version determination.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 106
diff changeset
133 if exePath is not None:
13fb1d9e7049 Improved executable and Python version determination.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 106
diff changeset
134 executables.add(exePath)
13fb1d9e7049 Improved executable and Python version determination.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 106
diff changeset
135
13fb1d9e7049 Improved executable and Python version determination.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 106
diff changeset
136 exePath = getExePath(
13fb1d9e7049 Improved executable and Python version determination.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 106
diff changeset
137 winreg.HKEY_LOCAL_MACHINE,
13fb1d9e7049 Improved executable and Python version determination.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 106
diff changeset
138 winreg.KEY_WOW64_64KEY | winreg.KEY_READ, versionStr)
13fb1d9e7049 Improved executable and Python version determination.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 106
diff changeset
139 if exePath is not None:
13fb1d9e7049 Improved executable and Python version determination.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 106
diff changeset
140 executables.add(exePath)
123
dd6f7c9041a4 Added code to search the executable in virtual environment as well on Windows platforms.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 122
diff changeset
141
dd6f7c9041a4 Added code to search the executable in virtual environment as well on Windows platforms.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 122
diff changeset
142 if not executables and majorVersion >= 3:
dd6f7c9041a4 Added code to search the executable in virtual environment as well on Windows platforms.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 122
diff changeset
143 # check the PATH environment variable if nothing was found
dd6f7c9041a4 Added code to search the executable in virtual environment as well on Windows platforms.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 122
diff changeset
144 # Python 3 only
dd6f7c9041a4 Added code to search the executable in virtual environment as well on Windows platforms.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 122
diff changeset
145 path = Utilities.getEnvironmentEntry('PATH')
dd6f7c9041a4 Added code to search the executable in virtual environment as well on Windows platforms.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 122
diff changeset
146 if path:
dd6f7c9041a4 Added code to search the executable in virtual environment as well on Windows platforms.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 122
diff changeset
147 dirs = path.split(os.pathsep)
dd6f7c9041a4 Added code to search the executable in virtual environment as well on Windows platforms.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 122
diff changeset
148 for directory in dirs:
dd6f7c9041a4 Added code to search the executable in virtual environment as well on Windows platforms.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 122
diff changeset
149 for suffix in (".bat", ".exe"):
dd6f7c9041a4 Added code to search the executable in virtual environment as well on Windows platforms.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 122
diff changeset
150 exe = os.path.join(directory, "cxfreeze" + suffix)
dd6f7c9041a4 Added code to search the executable in virtual environment as well on Windows platforms.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 122
diff changeset
151 if os.access(exe, os.X_OK):
dd6f7c9041a4 Added code to search the executable in virtual environment as well on Windows platforms.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 122
diff changeset
152 executables.add(exe)
25
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
153 else:
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
154 #
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
155 # Linux, Unix ...
28
bbcf4437e32a Fixed the algorithm searching for the right cxfreeze executable in the presence of multiple installations for different Python versions..
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 25
diff changeset
156 cxfreezeScript = 'cxfreeze'
64
c878aac7d3f5 Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 60
diff changeset
157 scriptSuffixes = ["", "-python{0}".format(majorVersion)]
47
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
158 for minorVersion in minorVersions:
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
159 scriptSuffixes.append(
64
c878aac7d3f5 Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 60
diff changeset
160 "-python{0}.{1}".format(majorVersion, minorVersion))
30
153f0acb2ebb Corrected some more stuff in the main plug-in file.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 28
diff changeset
161 # There could be multiple cxfreeze executables in the path
28
bbcf4437e32a Fixed the algorithm searching for the right cxfreeze executable in the presence of multiple installations for different Python versions..
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 25
diff changeset
162 # e.g. for different python variants
bbcf4437e32a Fixed the algorithm searching for the right cxfreeze executable in the presence of multiple installations for different Python versions..
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 25
diff changeset
163 path = Utilities.getEnvironmentEntry('PATH')
bbcf4437e32a Fixed the algorithm searching for the right cxfreeze executable in the presence of multiple installations for different Python versions..
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 25
diff changeset
164 # environment variable not defined
bbcf4437e32a Fixed the algorithm searching for the right cxfreeze executable in the presence of multiple installations for different Python versions..
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 25
diff changeset
165 if path is None:
64
c878aac7d3f5 Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 60
diff changeset
166 return []
28
bbcf4437e32a Fixed the algorithm searching for the right cxfreeze executable in the presence of multiple installations for different Python versions..
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 25
diff changeset
167
bbcf4437e32a Fixed the algorithm searching for the right cxfreeze executable in the presence of multiple installations for different Python versions..
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 25
diff changeset
168 # step 1: determine possible candidates
bbcf4437e32a Fixed the algorithm searching for the right cxfreeze executable in the presence of multiple installations for different Python versions..
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 25
diff changeset
169 exes = []
bbcf4437e32a Fixed the algorithm searching for the right cxfreeze executable in the presence of multiple installations for different Python versions..
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 25
diff changeset
170 dirs = path.split(os.pathsep)
102
78d1632d4b83 Fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 100
diff changeset
171 for directory in dirs:
33
2a3b4b7a633f Enhanced the algorithm to determine the cxfreeze executable on non-Windows systems.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 32
diff changeset
172 for suffix in scriptSuffixes:
102
78d1632d4b83 Fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 100
diff changeset
173 exe = os.path.join(directory, cxfreezeScript + suffix)
33
2a3b4b7a633f Enhanced the algorithm to determine the cxfreeze executable on non-Windows systems.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 32
diff changeset
174 if os.access(exe, os.X_OK):
2a3b4b7a633f Enhanced the algorithm to determine the cxfreeze executable on non-Windows systems.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 32
diff changeset
175 exes.append(exe)
28
bbcf4437e32a Fixed the algorithm searching for the right cxfreeze executable in the presence of multiple installations for different Python versions..
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 25
diff changeset
176
47
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
177 # step 2: determine the Python variant
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
178 _exePy3 = set()
108
13fb1d9e7049 Improved executable and Python version determination.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 106
diff changeset
179 versionArgs = ["-c", "import sys; print(sys.version_info[0])"]
28
bbcf4437e32a Fixed the algorithm searching for the right cxfreeze executable in the presence of multiple installations for different Python versions..
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 25
diff changeset
180 for exe in exes:
127
a76379d552f2 Changed calls of exec_() into exec().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 125
diff changeset
181 with open(exe, "r") as f:
28
bbcf4437e32a Fixed the algorithm searching for the right cxfreeze executable in the presence of multiple installations for different Python versions..
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 25
diff changeset
182 line0 = f.readline()
127
a76379d552f2 Changed calls of exec_() into exec().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 125
diff changeset
183 program = line0.replace("#!", "").strip()
a76379d552f2 Changed calls of exec_() into exec().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 125
diff changeset
184 process = QProcess()
a76379d552f2 Changed calls of exec_() into exec().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 125
diff changeset
185 process.start(program, versionArgs)
a76379d552f2 Changed calls of exec_() into exec().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 125
diff changeset
186 process.waitForFinished(5000)
a76379d552f2 Changed calls of exec_() into exec().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 125
diff changeset
187 # get a QByteArray of the output
a76379d552f2 Changed calls of exec_() into exec().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 125
diff changeset
188 versionBytes = process.readAllStandardOutput()
a76379d552f2 Changed calls of exec_() into exec().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 125
diff changeset
189 versionStr = str(versionBytes, encoding='utf-8').strip()
a76379d552f2 Changed calls of exec_() into exec().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 125
diff changeset
190 if versionStr == "3":
a76379d552f2 Changed calls of exec_() into exec().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 125
diff changeset
191 _exePy3.add(exe)
47
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
192
125
13f16f4e355a Removed support for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 123
diff changeset
193 executables = _exePy3
25
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
194
47
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
195 # sort items, the probably newest topmost
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
196 executables = list(executables)
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
197 executables.sort(reverse=True)
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
198 return executables
25
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
199
60
8bf1407ebc46 Fixed some PEP8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 57
diff changeset
200
25
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
201 def _checkProgram():
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
202 """
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
203 Restricted function to check the availability of cxfreeze.
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
204
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
205 @return flag indicating availability (boolean)
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
206 """
125
13f16f4e355a Removed support for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 123
diff changeset
207 global error, exePy3
25
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
208
47
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
209 exePy3 = _findExecutable(3)
125
13f16f4e355a Removed support for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 123
diff changeset
210 if exePy3 == []:
86
c2fe73b1087b Change the error message for Windows for a missing executable to be more descriptive and to give a hint.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 85
diff changeset
211 if Utilities.isWindowsPlatform():
c2fe73b1087b Change the error message for Windows for a missing executable to be more descriptive and to give a hint.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 85
diff changeset
212 error = QCoreApplication.translate(
c2fe73b1087b Change the error message for Windows for a missing executable to be more descriptive and to give a hint.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 85
diff changeset
213 "CxFreezePlugin",
c2fe73b1087b Change the error message for Windows for a missing executable to be more descriptive and to give a hint.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 85
diff changeset
214 "The cxfreeze.bat executable could not be found."
c2fe73b1087b Change the error message for Windows for a missing executable to be more descriptive and to give a hint.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 85
diff changeset
215 "Did you run the cxfreeze-postinstall script?")
c2fe73b1087b Change the error message for Windows for a missing executable to be more descriptive and to give a hint.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 85
diff changeset
216 else:
c2fe73b1087b Change the error message for Windows for a missing executable to be more descriptive and to give a hint.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 85
diff changeset
217 error = QCoreApplication.translate(
c2fe73b1087b Change the error message for Windows for a missing executable to be more descriptive and to give a hint.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 85
diff changeset
218 "CxFreezePlugin",
c2fe73b1087b Change the error message for Windows for a missing executable to be more descriptive and to give a hint.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 85
diff changeset
219 "The cxfreeze executable could not be found.")
25
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
220 return False
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
221 else:
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
222 return True
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
223
56
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 54
diff changeset
224
25
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
225 class CxFreezePlugin(QObject):
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
226 """
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
227 Class implementing the CxFreeze plugin.
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
228 """
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
229 def __init__(self, ui):
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
230 """
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
231 Constructor
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
232
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
233 @param ui reference to the user interface object (UI.UserInterface)
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
234 """
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
235 QObject.__init__(self, ui)
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
236 self.__ui = ui
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
237 self.__initialize()
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
238 _checkProgram()
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
239
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
240 self.__translator = None
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
241 self.__loadTranslator()
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
242
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
243 def __initialize(self):
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
244 """
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
245 Private slot to (re)initialize the plugin.
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
246 """
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
247 self.__projectAct = None
113
696a9105939d Added a separator to the project packagers menu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 108
diff changeset
248 self.__projectSeparator = None
50
ed85ec1358f0 Avoid exception if used with Eric 5.0.x; bugfix for the error message.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 47
diff changeset
249
25
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
250 def activate(self):
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
251 """
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
252 Public method to activate this plugin.
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
253
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
254 @return tuple of None and activation status (boolean)
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
255 """
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
256 global error
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
257
54
d14ff08ea519 A little improvement to Tobias' patches.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 52
diff changeset
258 # There is already an error, don't activate
d14ff08ea519 A little improvement to Tobias' patches.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 52
diff changeset
259 if error:
d14ff08ea519 A little improvement to Tobias' patches.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 52
diff changeset
260 return None, False
d14ff08ea519 A little improvement to Tobias' patches.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 52
diff changeset
261
25
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
262 # cxfreeze is only activated if it is available
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
263 if not _checkProgram():
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
264 return None, False
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
265
47
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
266 project = e5App().getObject("Project")
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
267 menu = project.getMenu("Packagers")
25
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
268 if menu:
64
c878aac7d3f5 Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 60
diff changeset
269 self.__projectAct = E5Action(
80
a349a1b6cb83 Ported to PyQt5 and eric6.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 77
diff changeset
270 self.tr('Use cx_freeze'),
a349a1b6cb83 Ported to PyQt5 and eric6.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 77
diff changeset
271 self.tr('Use cx_&freeze'), 0, 0,
64
c878aac7d3f5 Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 60
diff changeset
272 self, 'packagers_cxfreeze')
25
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
273 self.__projectAct.setStatusTip(
80
a349a1b6cb83 Ported to PyQt5 and eric6.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 77
diff changeset
274 self.tr('Generate a distribution package using cx_freeze'))
a349a1b6cb83 Ported to PyQt5 and eric6.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 77
diff changeset
275 self.__projectAct.setWhatsThis(self.tr(
64
c878aac7d3f5 Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 60
diff changeset
276 """<b>Use cx_freeze</b>"""
c878aac7d3f5 Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 60
diff changeset
277 """<p>Generate a distribution package using cx_freeze."""
c878aac7d3f5 Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 60
diff changeset
278 """ The command is executed in the project path. All"""
c878aac7d3f5 Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 60
diff changeset
279 """ files and directories must be given absolute or"""
c878aac7d3f5 Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 60
diff changeset
280 """ relative to the project directory.</p>"""
25
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
281 ))
80
a349a1b6cb83 Ported to PyQt5 and eric6.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 77
diff changeset
282 self.__projectAct.triggered.connect(self.__cxfreeze)
47
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
283 project.addE5Actions([self.__projectAct])
113
696a9105939d Added a separator to the project packagers menu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 108
diff changeset
284 self.__projectSeparator = menu.addSeparator()
25
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
285 menu.addAction(self.__projectAct)
47
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
286 project.showMenu.connect(self.__projectShowMenu)
25
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
287
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
288 error = ""
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
289 return None, True
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
290
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
291 def deactivate(self):
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
292 """
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
293 Public method to deactivate this plugin.
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
294 """
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
295 menu = e5App().getObject("Project").getMenu("Packagers")
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
296 if menu:
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
297 if self.__projectAct:
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
298 menu.removeAction(self.__projectAct)
64
c878aac7d3f5 Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 60
diff changeset
299 e5App().getObject("Project").removeE5Actions(
c878aac7d3f5 Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 60
diff changeset
300 [self.__projectAct])
113
696a9105939d Added a separator to the project packagers menu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 108
diff changeset
301 if self.__projectSeparator:
696a9105939d Added a separator to the project packagers menu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 108
diff changeset
302 menu.removeAction(self.__projectSeparator)
696a9105939d Added a separator to the project packagers menu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 108
diff changeset
303
25
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
304 self.__initialize()
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
305
47
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
306 def __projectShowMenu(self, menuName, menu):
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
307 """
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
308 Private slot called, when the the project menu or a submenu is
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
309 about to be shown.
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
310
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
311 @param menuName name of the menu to be shown (string)
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
312 @param menu reference to the menu (QMenu)
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
313 """
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
314 if menuName == "Packagers":
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
315 if self.__projectAct is not None:
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
316 self.__projectAct.setEnabled(
125
13f16f4e355a Removed support for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 123
diff changeset
317 e5App().getObject("Project").getProjectLanguage() ==
13f16f4e355a Removed support for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 123
diff changeset
318 "Python3"
13f16f4e355a Removed support for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 123
diff changeset
319 )
47
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
320
25
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
321 def __loadTranslator(self):
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
322 """
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
323 Private method to load the translation file.
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
324 """
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
325 if self.__ui is not None:
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
326 loc = self.__ui.getLocale()
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
327 if loc and loc != "C":
123
dd6f7c9041a4 Added code to search the executable in virtual environment as well on Windows platforms.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 122
diff changeset
328 locale_dir = os.path.join(os.path.dirname(__file__),
dd6f7c9041a4 Added code to search the executable in virtual environment as well on Windows platforms.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 122
diff changeset
329 "CxFreeze", "i18n")
25
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
330 translation = "cxfreeze_{0}".format(loc)
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
331 translator = QTranslator(None)
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
332 loaded = translator.load(translation, locale_dir)
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
333 if loaded:
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
334 self.__translator = translator
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
335 e5App().installTranslator(self.__translator)
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
336 else:
64
c878aac7d3f5 Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 60
diff changeset
337 print("Warning: translation file '{0}' could not be"
c878aac7d3f5 Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 60
diff changeset
338 " loaded.".format(translation))
25
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
339 print("Using default.")
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
340
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
341 def __cxfreeze(self):
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
342 """
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
343 Private slot to handle the cxfreeze execution.
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
344 """
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
345 project = e5App().getObject("Project")
115
f2dd7703b9c2 PluginCxFreeze: modified the check for a defined project main script to make it more robust.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 113
diff changeset
346 if not project.getMainScript():
25
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
347 # no main script defined
64
c878aac7d3f5 Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 60
diff changeset
348 E5MessageBox.critical(
71
9cd82b80f987 Fixed a bug in the call of a message dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 69
diff changeset
349 self.__ui,
80
a349a1b6cb83 Ported to PyQt5 and eric6.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 77
diff changeset
350 self.tr("cxfreeze"),
a349a1b6cb83 Ported to PyQt5 and eric6.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 77
diff changeset
351 self.tr(
64
c878aac7d3f5 Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 60
diff changeset
352 """There is no main script defined for the current"""
c878aac7d3f5 Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 60
diff changeset
353 """ project."""),
39
27dcfe29985b Changed usage of QMessageBox and QFileDialog to the eric5 equivalents.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 37
diff changeset
354 E5MessageBox.StandardButtons(E5MessageBox.Abort))
25
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
355 return
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
356
47
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
357 majorVersionStr = project.getProjectLanguage()
125
13f16f4e355a Removed support for Python2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 123
diff changeset
358 exe = {"Python3": exePy3}.get(majorVersionStr)
47
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
359 if exe == []:
64
c878aac7d3f5 Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 60
diff changeset
360 E5MessageBox.critical(
71
9cd82b80f987 Fixed a bug in the call of a message dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 69
diff changeset
361 self.__ui,
80
a349a1b6cb83 Ported to PyQt5 and eric6.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 77
diff changeset
362 self.tr("cxfreeze"),
a349a1b6cb83 Ported to PyQt5 and eric6.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 77
diff changeset
363 self.tr("""The cxfreeze executable could not be found."""))
25
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
364 return
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
365
52
43d760ff8b3f ask to save modified files before freeze
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 50
diff changeset
366 # check if all files saved and errorfree before continue
43d760ff8b3f ask to save modified files before freeze
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 50
diff changeset
367 if not project.checkAllScriptsDirty(reportSyntaxErrors=True):
43d760ff8b3f ask to save modified files before freeze
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 50
diff changeset
368 return
43d760ff8b3f ask to save modified files before freeze
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 50
diff changeset
369
37
94949c60ef54 Modified the code to do lazy import.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
370 from CxFreeze.CxfreezeConfigDialog import CxfreezeConfigDialog
47
986f27beaad4 Py2 compatibility, freeze script based on project language, filedialog for icons, some PEP8.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
371 parms = project.getData('PACKAGERSPARMS', "CXFREEZE")
25
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
372 dlg = CxfreezeConfigDialog(project, exe, parms)
127
a76379d552f2 Changed calls of exec_() into exec().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 125
diff changeset
373 if dlg.exec() == QDialog.Accepted:
25
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
374 args, parms = dlg.generateParameters()
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
375 project.setData('PACKAGERSPARMS', "CXFREEZE", parms)
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
376
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
377 # now do the call
37
94949c60ef54 Modified the code to do lazy import.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
378 from CxFreeze.CxfreezeExecDialog import CxfreezeExecDialog
25
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
379 dia = CxfreezeExecDialog("cxfreeze")
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
380 dia.show()
56
c8a47a8536b0 filedialog to add distribution dependent files, e.g. *.ui, readme, which are copied after the freeze process
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 54
diff changeset
381 res = dia.start(args, parms, project.ppath,
95
df13e2492dd9 Fixed issues caused by using the pdata structure of the Project class directly.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 92
diff changeset
382 project.getMainScript())
25
737c623c90df Fixed the cxfreeze search algorithm to check a per user install as well.
detlev@die-offenbachs.de
parents: 24
diff changeset
383 if res:
127
a76379d552f2 Changed calls of exec_() into exec().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 125
diff changeset
384 dia.exec()
102
78d1632d4b83 Fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 100
diff changeset
385
78d1632d4b83 Fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 100
diff changeset
386 #
78d1632d4b83 Fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 100
diff changeset
387 # eflag: noqa = M801

eric ide

mercurial