src/eric7/UI/upgrader.py

Wed, 13 Jul 2022 14:55:47 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Wed, 13 Jul 2022 14:55:47 +0200
branch
eric7
changeset 9221
bf71ee032bb4
parent 9209
b99e7fd55fd3
child 9324
7f7f3e47b238
permissions
-rw-r--r--

Reformatted the source code using the 'Black' utility.

8970
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 #!/usr/bin/env python3
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2 # -*- coding: utf-8 -*-
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
3
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 # Copyright (c) 2022 Detlev Offenbach <detlev@die-offenbachs.de>
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5 #
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 """
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 Script to upgrade the packages eric depends on.
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 This process must be performed while eric is closed. The script will upgrade
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 the requested packages and will restart eric.
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 """
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13
8994
3bebd76dc6ea Fine tuned the upgrader behavior and introduced a configurable delay to give eric sufficient time to exit before doing the upgrade.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8972
diff changeset
14 import contextlib
8970
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15 import subprocess
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16 import sys
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17 import time
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18
8972
54816b8f740f General
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8970
diff changeset
19
54816b8f740f General
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8970
diff changeset
20 _pyqtPackages = [
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
21 "pyqt6",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
22 "pyqt6-sip",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
23 "pyqt6-webengine",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
24 "pyqt6-charts",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
25 "pyqt6-qscintilla",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
26 "pyqt6-qt6",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
27 "pyqt6-webengine-qt6",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
28 "pyqt6-charts-qt6",
8972
54816b8f740f General
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8970
diff changeset
29 ]
54816b8f740f General
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8970
diff changeset
30 _ericPackages = ["eric-ide"]
8970
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32
8972
54816b8f740f General
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8970
diff changeset
33 def doUpgrade(packages):
8970
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 """
8972
54816b8f740f General
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8970
diff changeset
35 Function to upgrade the given packages via pip.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
36
8972
54816b8f740f General
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8970
diff changeset
37 @param packages list of packages to be upgraded
54816b8f740f General
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8970
diff changeset
38 @type list of str
8970
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 @return flag indicating a successful installation
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 @rtype bool
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
42 exitCode = subprocess.run( # secok
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
43 [sys.executable, "-m", "pip", "install", "--prefer-binary", "--upgrade"]
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
44 + packages
8970
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 ).returncode
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
46 ok = exitCode == 0
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
47
8970
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 return ok
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 def startEric(args):
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 """
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 Function to start eric with the given arguments.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
54
8970
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 @param args list containing the start arguments
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 @type list of str
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 """
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 args = [sys.executable] + args
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 subprocess.Popen(args)
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 def main():
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 """
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 Main entry point into the upgrader.
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 """
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 try:
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 ddindex = sys.argv.index("--")
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 except ValueError:
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 # '--' was not found. Start eric with all parameters given.
9015
dfeefad914ed Fixed some issues with the upgrader tool.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9001
diff changeset
70 ddindex = 0
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
71
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
72 ericStartArgs = sys.argv[ddindex + 1 :] if bool(ddindex) else []
8970
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 if not ericStartArgs:
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 # create default start arguments
8972
54816b8f740f General
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8970
diff changeset
75 ericStartArgs = ["-m", "eric7", "--start-session"]
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
76
9015
dfeefad914ed Fixed some issues with the upgrader tool.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9001
diff changeset
77 upgraderArgs = sys.argv[1:ddindex] if bool(ddindex) else sys.argv[:]
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
78
8994
3bebd76dc6ea Fine tuned the upgrader behavior and introduced a configurable delay to give eric sufficient time to exit before doing the upgrade.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8972
diff changeset
79 upgradeType = ""
3bebd76dc6ea Fine tuned the upgrader behavior and introduced a configurable delay to give eric sufficient time to exit before doing the upgrade.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8972
diff changeset
80 upgradeDelay = 2
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
81
8994
3bebd76dc6ea Fine tuned the upgrader behavior and introduced a configurable delay to give eric sufficient time to exit before doing the upgrade.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8972
diff changeset
82 for arg in upgraderArgs:
3bebd76dc6ea Fine tuned the upgrader behavior and introduced a configurable delay to give eric sufficient time to exit before doing the upgrade.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8972
diff changeset
83 if arg.startswith("--delay="):
3bebd76dc6ea Fine tuned the upgrader behavior and introduced a configurable delay to give eric sufficient time to exit before doing the upgrade.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8972
diff changeset
84 with contextlib.suppress(ValueError):
3bebd76dc6ea Fine tuned the upgrader behavior and introduced a configurable delay to give eric sufficient time to exit before doing the upgrade.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8972
diff changeset
85 upgradeDelay = int(arg.split("=")[1].strip())
3bebd76dc6ea Fine tuned the upgrader behavior and introduced a configurable delay to give eric sufficient time to exit before doing the upgrade.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8972
diff changeset
86 elif arg.startswith("--type="):
9001
a00cd6b55728 Corrected some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8994
diff changeset
87 upgradeType = arg.split("=")[1].strip()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
88
8994
3bebd76dc6ea Fine tuned the upgrader behavior and introduced a configurable delay to give eric sufficient time to exit before doing the upgrade.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8972
diff changeset
89 # wait a few seconds to give eric the chance to fully shut down
3bebd76dc6ea Fine tuned the upgrader behavior and introduced a configurable delay to give eric sufficient time to exit before doing the upgrade.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8972
diff changeset
90 time.sleep(upgradeDelay)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
91
8970
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 # now perform the upgrade and start eric, if it was successful
8994
3bebd76dc6ea Fine tuned the upgrader behavior and introduced a configurable delay to give eric sufficient time to exit before doing the upgrade.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8972
diff changeset
93 if upgradeType == "pyqt":
8972
54816b8f740f General
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8970
diff changeset
94 ok = doUpgrade(_pyqtPackages)
8994
3bebd76dc6ea Fine tuned the upgrader behavior and introduced a configurable delay to give eric sufficient time to exit before doing the upgrade.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8972
diff changeset
95 elif upgradeType == "eric":
8972
54816b8f740f General
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8970
diff changeset
96 ok = doUpgrade(_ericPackages)
8994
3bebd76dc6ea Fine tuned the upgrader behavior and introduced a configurable delay to give eric sufficient time to exit before doing the upgrade.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8972
diff changeset
97 elif upgradeType == "ericpyqt":
8972
54816b8f740f General
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8970
diff changeset
98 ok = doUpgrade(_ericPackages + _pyqtPackages)
8970
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 else:
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 ok = False
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
101
8970
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 if ok:
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 startEric(ericStartArgs)
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 sys.exit(0)
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 else:
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 sys.exit(1)
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
108
8970
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 if __name__ == "__main__":
188ff9ce8657 Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 main()

eric ide

mercurial