Tue, 22 Mar 2022 19:28:43 +0100
Fine tuned the upgrader behavior and introduced a configurable delay to give eric sufficient time to exit before doing the upgrade.
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 | 19 | |
20 | _pyqtPackages = [ | |
21 | "pyqt6", "pyqt6-sip", "pyqt6-webengine", "pyqt6-charts", | |
22 | "pyqt6-qscintilla", "pyqt6-qt6", "pyqt6-webengine-qt6", | |
23 | "pyqt6-charts-qt6" | |
24 | ] | |
25 | _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
|
26 | |
188ff9ce8657
Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
27 | |
8972 | 28 | 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
|
29 | """ |
8972 | 30 | Function to upgrade the given packages via pip. |
8970
188ff9ce8657
Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
31 | |
8972 | 32 | @param packages list of packages to be upgraded |
33 | @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
|
34 | @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
|
35 | @rtype bool |
188ff9ce8657
Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
36 | """ |
188ff9ce8657
Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
37 | exitCode = subprocess.run( # secok |
188ff9ce8657
Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
38 | [sys.executable, "-m", "pip", "install", "--prefer-binary", |
8972 | 39 | "--upgrade"] + packages |
8970
188ff9ce8657
Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
40 | ).returncode |
188ff9ce8657
Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
41 | ok = (exitCode == 0) |
188ff9ce8657
Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
42 | |
188ff9ce8657
Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
43 | return ok |
188ff9ce8657
Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
44 | |
188ff9ce8657
Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
45 | |
188ff9ce8657
Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
46 | 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
|
47 | """ |
188ff9ce8657
Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
48 | Function to start eric with the given arguments. |
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 | @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
|
51 | @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
|
52 | """ |
188ff9ce8657
Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
53 | 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
|
54 | 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
|
55 | |
188ff9ce8657
Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
56 | |
188ff9ce8657
Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
57 | def main(): |
188ff9ce8657
Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
58 | """ |
188ff9ce8657
Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
59 | 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
|
60 | """ |
188ff9ce8657
Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
61 | try: |
188ff9ce8657
Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
62 | 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
|
63 | except ValueError: |
188ff9ce8657
Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
64 | # '--' was not found. Start eric with all parameters given. |
188ff9ce8657
Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
65 | ddindex = 1 |
188ff9ce8657
Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
66 | |
188ff9ce8657
Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
67 | ericStartArgs = sys.argv[ddindex + 1:] |
188ff9ce8657
Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
68 | 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
|
69 | # create default start arguments |
8972 | 70 | ericStartArgs = ["-m", "eric7", "--start-session"] |
8970
188ff9ce8657
Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
71 | |
188ff9ce8657
Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
72 | upgraderArgs = sys.argv[1:ddindex] |
188ff9ce8657
Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
73 | |
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
|
74 | 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
|
75 | upgradeDelay = 2 |
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
|
76 | |
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
|
77 | 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
|
78 | 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
|
79 | 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
|
80 | 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
|
81 | elif arg.startswith("--type="): |
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 | upgradeType=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
|
83 | |
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 | # 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
|
85 | time.sleep(upgradeDelay) |
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 | |
8970
188ff9ce8657
Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
87 | # 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
|
88 | if upgradeType == "pyqt": |
8972 | 89 | 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
|
90 | elif upgradeType == "eric": |
8972 | 91 | 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
|
92 | elif upgradeType == "ericpyqt": |
8972 | 93 | 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
|
94 | else: |
188ff9ce8657
Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
95 | ok = False |
188ff9ce8657
Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
96 | |
188ff9ce8657
Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
97 | if ok: |
188ff9ce8657
Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
98 | startEric(ericStartArgs) |
188ff9ce8657
Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
99 | 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
|
100 | else: |
188ff9ce8657
Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
101 | 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
|
102 | |
188ff9ce8657
Added capability to upgrade PyQt packages eric depends on from within eric.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
103 | 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
|
104 | main() |