9740
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1
|
# -*- coding: utf-8 -*- |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
2
|
|
10439
|
3
|
# Copyright (c) 2023 - 2024 Detlev Offenbach <detlev@die-offenbachs.de> |
9740
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
4
|
# |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
5
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
6
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
7
|
Module implementing an interface to the 'circup' package. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
8
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
9
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
10
|
import importlib |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
11
|
import logging |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
12
|
import os |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
13
|
import re |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
14
|
import shutil |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
15
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
16
|
import requests |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
17
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
18
|
from PyQt6.QtCore import QObject, pyqtSlot |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
19
|
from PyQt6.QtWidgets import QDialog, QInputDialog, QLineEdit, QMenu |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
20
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
21
|
from eric7 import Preferences |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
22
|
from eric7.EricGui.EricOverrideCursor import EricOverrideCursor |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
23
|
from eric7.EricWidgets import EricFileDialog, EricMessageBox |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
24
|
from eric7.EricWidgets.EricApplication import ericApp |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
25
|
from eric7.EricWidgets.EricListSelectionDialog import EricListSelectionDialog |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
26
|
from eric7.SystemUtilities import PythonUtilities |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
27
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
28
|
try: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
29
|
import circup |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
30
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
31
|
circup.logger.setLevel(logging.WARNING) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
32
|
except ImportError: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
33
|
circup = None |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
34
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
35
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
36
|
class CircuitPythonUpdaterInterface(QObject): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
37
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
38
|
Class implementing an interface to the 'circup' package. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
39
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
40
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
41
|
def __init__(self, device, parent=None): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
42
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
43
|
Constructor |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
44
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
45
|
@param device reference to the CircuitPython device interface |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
46
|
@type CircuitPythonDevice |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
47
|
@param parent reference to the parent object (defaults to None) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
48
|
@type QObject (optional) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
49
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
50
|
super().__init__(parent) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
51
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
52
|
self.__device = device |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
53
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
54
|
self.__installMenu = QMenu(self.tr("Install Modules")) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
55
|
self.__installMenu.setTearOffEnabled(True) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
56
|
self.__installMenu.addAction( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
57
|
self.tr("Select from Available Modules"), self.__installFromAvailable |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
58
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
59
|
self.__installMenu.addAction( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
60
|
self.tr("Install Requirements"), self.__installRequirements |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
61
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
62
|
self.__installMenu.addAction( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
63
|
self.tr("Install based on 'code.py'"), self.__installFromCode |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
64
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
65
|
self.__installMenu.addSeparator() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
66
|
self.__installPyAct = self.__installMenu.addAction( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
67
|
self.tr("Install Python Source") |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
68
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
69
|
self.__installPyAct.setCheckable(True) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
70
|
self.__installPyAct.setChecked(False) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
71
|
# kind of hack to make this action not hide the menu |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
72
|
# Note: parent menus are hidden nevertheless |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
73
|
self.__installPyAct.toggled.connect(self.__installMenu.show) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
74
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
75
|
def populateMenu(self, menu): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
76
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
77
|
Public method to populate the 'circup' menu. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
78
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
79
|
@param menu reference to the menu to be populated |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
80
|
@type QMenu |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
81
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
82
|
from .CircupFunctions import patch_circup |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
83
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
84
|
patch_circup() |
9743
741c61c2cfca
Changed the enabled status of some CircuitPython library management menu entries depending on the mounted state of the device.
Detlev Offenbach <detlev@die-offenbachs.de>
diff
changeset
|
85
|
isMounted = self.__device.supportsLocalFileAccess() |
9740
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
86
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
87
|
act = menu.addAction(self.tr("circup"), self.__aboutCircup) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
88
|
font = act.font() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
89
|
font.setBold(True) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
90
|
act.setFont(font) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
91
|
menu.addSeparator() |
9743
741c61c2cfca
Changed the enabled status of some CircuitPython library management menu entries depending on the mounted state of the device.
Detlev Offenbach <detlev@die-offenbachs.de>
diff
changeset
|
92
|
menu.addAction( |
741c61c2cfca
Changed the enabled status of some CircuitPython library management menu entries depending on the mounted state of the device.
Detlev Offenbach <detlev@die-offenbachs.de>
diff
changeset
|
93
|
self.tr("List Outdated Modules"), self.__listOutdatedModules |
741c61c2cfca
Changed the enabled status of some CircuitPython library management menu entries depending on the mounted state of the device.
Detlev Offenbach <detlev@die-offenbachs.de>
diff
changeset
|
94
|
).setEnabled(isMounted) |
741c61c2cfca
Changed the enabled status of some CircuitPython library management menu entries depending on the mounted state of the device.
Detlev Offenbach <detlev@die-offenbachs.de>
diff
changeset
|
95
|
menu.addAction(self.tr("Update Modules"), self.__updateModules).setEnabled( |
741c61c2cfca
Changed the enabled status of some CircuitPython library management menu entries depending on the mounted state of the device.
Detlev Offenbach <detlev@die-offenbachs.de>
diff
changeset
|
96
|
isMounted |
741c61c2cfca
Changed the enabled status of some CircuitPython library management menu entries depending on the mounted state of the device.
Detlev Offenbach <detlev@die-offenbachs.de>
diff
changeset
|
97
|
) |
741c61c2cfca
Changed the enabled status of some CircuitPython library management menu entries depending on the mounted state of the device.
Detlev Offenbach <detlev@die-offenbachs.de>
diff
changeset
|
98
|
menu.addAction( |
741c61c2cfca
Changed the enabled status of some CircuitPython library management menu entries depending on the mounted state of the device.
Detlev Offenbach <detlev@die-offenbachs.de>
diff
changeset
|
99
|
self.tr("Update All Modules"), self.__updateAllModules |
741c61c2cfca
Changed the enabled status of some CircuitPython library management menu entries depending on the mounted state of the device.
Detlev Offenbach <detlev@die-offenbachs.de>
diff
changeset
|
100
|
).setEnabled(isMounted) |
9740
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
101
|
menu.addSeparator() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
102
|
menu.addAction(self.tr("Show Available Modules"), self.__showAvailableModules) |
9743
741c61c2cfca
Changed the enabled status of some CircuitPython library management menu entries depending on the mounted state of the device.
Detlev Offenbach <detlev@die-offenbachs.de>
diff
changeset
|
103
|
menu.addAction( |
741c61c2cfca
Changed the enabled status of some CircuitPython library management menu entries depending on the mounted state of the device.
Detlev Offenbach <detlev@die-offenbachs.de>
diff
changeset
|
104
|
self.tr("Show Installed Modules"), self.__showInstalledModules |
741c61c2cfca
Changed the enabled status of some CircuitPython library management menu entries depending on the mounted state of the device.
Detlev Offenbach <detlev@die-offenbachs.de>
diff
changeset
|
105
|
).setEnabled(isMounted) |
741c61c2cfca
Changed the enabled status of some CircuitPython library management menu entries depending on the mounted state of the device.
Detlev Offenbach <detlev@die-offenbachs.de>
diff
changeset
|
106
|
menu.addMenu(self.__installMenu).setEnabled(isMounted) |
741c61c2cfca
Changed the enabled status of some CircuitPython library management menu entries depending on the mounted state of the device.
Detlev Offenbach <detlev@die-offenbachs.de>
diff
changeset
|
107
|
menu.addAction( |
741c61c2cfca
Changed the enabled status of some CircuitPython library management menu entries depending on the mounted state of the device.
Detlev Offenbach <detlev@die-offenbachs.de>
diff
changeset
|
108
|
self.tr("Uninstall Modules"), self.__uninstallModules |
741c61c2cfca
Changed the enabled status of some CircuitPython library management menu entries depending on the mounted state of the device.
Detlev Offenbach <detlev@die-offenbachs.de>
diff
changeset
|
109
|
).setEnabled(isMounted) |
9740
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
110
|
menu.addSeparator() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
111
|
menu.addAction( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
112
|
self.tr("Generate Requirements ..."), self.__generateRequirements |
9743
741c61c2cfca
Changed the enabled status of some CircuitPython library management menu entries depending on the mounted state of the device.
Detlev Offenbach <detlev@die-offenbachs.de>
diff
changeset
|
113
|
).setEnabled(isMounted) |
9740
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
114
|
menu.addSeparator() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
115
|
menu.addAction(self.tr("Show Bundles"), self.__showBundles) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
116
|
menu.addAction(self.tr("Show Bundles with Modules"), self.__showBundlesModules) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
117
|
menu.addSeparator() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
118
|
menu.addAction(self.tr("Add Bundle"), self.__addBundle) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
119
|
menu.addAction(self.tr("Remove Bundles"), self.__removeBundle) |
9869
|
120
|
menu.addSeparator() |
|
121
|
menu.addAction(self.tr("Show Local Cache Path"), self.__showCachePath) |
9740
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
122
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
123
|
@pyqtSlot() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
124
|
def __aboutCircup(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
125
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
126
|
Private slot to show some info about 'circup'. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
127
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
128
|
version = circup.get_circup_version() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
129
|
if version is None: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
130
|
version = self.tr("unknown") |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
131
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
132
|
EricMessageBox.information( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
133
|
None, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
134
|
self.tr("About circup"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
135
|
self.tr( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
136
|
"""<p><b>circup Version {0}</b></p>""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
137
|
"""<p><i>circup</i> is a tool to manage and update libraries on a""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
138
|
""" CircuitPython device.</p>""", |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
139
|
).format(version), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
140
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
141
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
142
|
@pyqtSlot() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
143
|
def installCircup(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
144
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
145
|
Public slot to install the 'circup' package via pip. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
146
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
147
|
global circup |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
148
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
149
|
pip = ericApp().getObject("Pip") |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
150
|
pip.installPackages( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
151
|
["circup"], interpreter=PythonUtilities.getPythonExecutable() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
152
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
153
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
154
|
circup = importlib.import_module("circup") |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
155
|
circup.logger.setLevel(logging.WARNING) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
156
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
157
|
@pyqtSlot() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
158
|
def __showBundles(self, withModules=False): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
159
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
160
|
Private slot to show the available bundles (default and local). |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
161
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
162
|
@param withModules flag indicating to list the modules and their version |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
163
|
(defaults to False) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
164
|
@type bool (optional) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
165
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
166
|
from .ShowBundlesDialog import ShowBundlesDialog |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
167
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
168
|
with EricOverrideCursor(): |
11005
|
169
|
dlg = ShowBundlesDialog( |
|
170
|
withModules=withModules, parent=self.__device.microPython |
|
171
|
) |
9740
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
172
|
dlg.exec() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
173
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
174
|
@pyqtSlot() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
175
|
def __showBundlesModules(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
176
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
177
|
Private slot to show the available bundles (default and local) with their |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
178
|
modules. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
179
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
180
|
self.__showBundles(withModules=True) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
181
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
182
|
@pyqtSlot() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
183
|
def __addBundle(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
184
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
185
|
Private slot to add a bundle to the local bundles list, by "user/repo" github |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
186
|
string. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
187
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
188
|
bundle, ok = QInputDialog.getText( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
189
|
None, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
190
|
self.tr("Add Bundle"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
191
|
self.tr("Enter Bundle by 'User/Repo' Github String:"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
192
|
QLineEdit.EchoMode.Normal, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
193
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
194
|
if ok and bundle: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
195
|
bundles = circup.get_bundles_local_dict() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
196
|
modified = False |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
197
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
198
|
# do some cleanup |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
199
|
bundle = re.sub(r"https?://github.com/([^/]+/[^/]+)(/.*)?", r"\1", bundle) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
200
|
if bundle in bundles: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
201
|
EricMessageBox.information( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
202
|
None, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
203
|
self.tr("Add Bundle"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
204
|
self.tr( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
205
|
"""<p>The bundle <b>{0}</b> is already in the list.</p>""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
206
|
).format(bundle), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
207
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
208
|
return |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
209
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
210
|
try: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
211
|
cBundle = circup.Bundle(bundle) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
212
|
except ValueError: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
213
|
EricMessageBox.critical( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
214
|
None, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
215
|
self.tr("Add Bundle"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
216
|
self.tr( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
217
|
"""<p>The bundle string is invalid, expecting github URL""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
218
|
""" or 'user/repository' string.</p>""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
219
|
), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
220
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
221
|
return |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
222
|
|
10170
|
223
|
result = requests.head("https://github.com/" + bundle, timeout=30) |
9740
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
224
|
if result.status_code == requests.codes.NOT_FOUND: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
225
|
EricMessageBox.critical( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
226
|
None, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
227
|
self.tr("Add Bundle"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
228
|
self.tr( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
229
|
"""<p>The bundle string is invalid. The repository doesn't""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
230
|
""" exist (error code 404).</p>""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
231
|
), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
232
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
233
|
return |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
234
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
235
|
if not cBundle.validate(): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
236
|
EricMessageBox.critical( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
237
|
None, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
238
|
self.tr("Add Bundle"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
239
|
self.tr( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
240
|
"""<p>The bundle string is invalid. Is the repository a valid""" |
9741
|
241
|
""" circup bundle?</p>""" |
9740
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
242
|
), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
243
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
244
|
return |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
245
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
246
|
# Use the bundle string as the dictionary key for uniqueness |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
247
|
bundles[bundle] = bundle |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
248
|
modified = True |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
249
|
EricMessageBox.information( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
250
|
None, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
251
|
self.tr("Add Bundle"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
252
|
self.tr("""<p>Added bundle <b>{0}</b> ({1}).</p>""").format( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
253
|
bundle, cBundle.url |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
254
|
), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
255
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
256
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
257
|
if modified: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
258
|
# save the bundles list |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
259
|
circup.save_local_bundles(bundles) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
260
|
# update and get the new bundle for the first time |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
261
|
circup.get_bundle_versions(circup.get_bundles_list()) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
262
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
263
|
@pyqtSlot() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
264
|
def __removeBundle(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
265
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
266
|
Private slot to remove one or more bundles from the local bundles list. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
267
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
268
|
localBundles = circup.get_bundles_local_dict() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
269
|
dlg = EricListSelectionDialog( |
10373
093dcebe5ecb
Corrected some uses of dict.keys(), dict.values() and dict.items().
Detlev Offenbach <detlev@die-offenbachs.de>
diff
changeset
|
270
|
sorted(localBundles), |
9740
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
271
|
title=self.tr("Remove Bundles"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
272
|
message=self.tr("Select the bundles to be removed:"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
273
|
checkBoxSelection=True, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
274
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
275
|
modified = False |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
276
|
if dlg.exec() == QDialog.DialogCode.Accepted: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
277
|
bundles = dlg.getSelection() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
278
|
for bundle in bundles: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
279
|
del localBundles[bundle] |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
280
|
modified = True |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
281
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
282
|
if modified: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
283
|
circup.save_local_bundles(localBundles) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
284
|
EricMessageBox.information( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
285
|
None, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
286
|
self.tr("Remove Bundles"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
287
|
self.tr( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
288
|
"""<p>These bundles were removed from the local bundles list.{0}""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
289
|
"""</p>""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
290
|
).format("""<ul><li>{0}</li></ul>""".format("</li><li>".join(bundles))), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
291
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
292
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
293
|
@pyqtSlot() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
294
|
def __listOutdatedModules(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
295
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
296
|
Private slot to list the outdated modules of the connected device. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
297
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
298
|
from .ShowOutdatedDialog import ShowOutdatedDialog |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
299
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
300
|
devicePath = self.__device.getWorkspace() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
301
|
|
10690
fab36645aa7d
Changed the source code and the source code documentation to improve the indication of unused method/function arguments.
Detlev Offenbach <detlev@die-offenbachs.de>
diff
changeset
|
302
|
cpyVersion, _board_id = circup.get_circuitpython_version(devicePath) |
9740
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
303
|
circup.CPY_VERSION = cpyVersion |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
304
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
305
|
with EricOverrideCursor(): |
11005
|
306
|
dlg = ShowOutdatedDialog( |
|
307
|
devicePath=devicePath, parent=self.__device.microPython |
|
308
|
) |
9740
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
309
|
dlg.exec() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
310
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
311
|
@pyqtSlot() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
312
|
def __updateModules(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
313
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
314
|
Private slot to update the modules of the connected device. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
315
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
316
|
from .ShowOutdatedDialog import ShowOutdatedDialog |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
317
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
318
|
devicePath = self.__device.getWorkspace() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
319
|
|
10690
fab36645aa7d
Changed the source code and the source code documentation to improve the indication of unused method/function arguments.
Detlev Offenbach <detlev@die-offenbachs.de>
diff
changeset
|
320
|
cpyVersion, _board_id = circup.get_circuitpython_version(devicePath) |
9740
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
321
|
circup.CPY_VERSION = cpyVersion |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
322
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
323
|
with EricOverrideCursor(): |
11005
|
324
|
dlg = ShowOutdatedDialog( |
|
325
|
devicePath=devicePath, |
|
326
|
selectionMode=True, |
|
327
|
parent=self.__device.microPython, |
|
328
|
) |
9740
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
329
|
if dlg.exec() == QDialog.DialogCode.Accepted: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
330
|
modules = dlg.getSelection() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
331
|
self.__doUpdateModules(modules) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
332
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
333
|
@pyqtSlot() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
334
|
def __updateAllModules(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
335
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
336
|
Private slot to update all modules of the connected device. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
337
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
338
|
devicePath = self.__device.getWorkspace() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
339
|
|
10690
fab36645aa7d
Changed the source code and the source code documentation to improve the indication of unused method/function arguments.
Detlev Offenbach <detlev@die-offenbachs.de>
diff
changeset
|
340
|
cpyVersion, _board_id = circup.get_circuitpython_version(devicePath) |
9740
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
341
|
circup.CPY_VERSION = cpyVersion |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
342
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
343
|
with EricOverrideCursor(): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
344
|
modules = [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
345
|
m |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
346
|
for m in circup.find_modules(devicePath, circup.get_bundles_list()) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
347
|
if m.outofdate |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
348
|
] |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
349
|
if modules: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
350
|
self.__doUpdateModules(modules) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
351
|
else: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
352
|
EricMessageBox.information( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
353
|
None, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
354
|
self.tr("Update Modules"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
355
|
self.tr("All modules are already up-to-date."), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
356
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
357
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
358
|
def __doUpdateModules(self, modules): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
359
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
360
|
Private method to perform the update of a list of modules. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
361
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
362
|
@param modules list of modules to be updated |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
363
|
@type circup.Module |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
364
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
365
|
updatedModules = [] |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
366
|
for module in modules: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
367
|
try: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
368
|
module.update() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
369
|
updatedModules.append(module.name) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
370
|
except Exception as ex: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
371
|
EricMessageBox.critical( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
372
|
None, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
373
|
self.tr("Update Modules"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
374
|
self.tr( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
375
|
"""<p>There was an error updating <b>{0}</b>.</p>""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
376
|
"""<p>Error: {1}</p>""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
377
|
).format(module.name, str(ex)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
378
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
379
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
380
|
if updatedModules: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
381
|
EricMessageBox.information( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
382
|
None, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
383
|
self.tr("Update Modules"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
384
|
self.tr( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
385
|
"""<p>These modules were updated on the connected device.{0}</p>""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
386
|
).format( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
387
|
"""<ul><li>{0}</li></ul>""".format("</li><li>".join(updatedModules)) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
388
|
), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
389
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
390
|
else: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
391
|
EricMessageBox.information( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
392
|
None, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
393
|
self.tr("Update Modules"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
394
|
self.tr("No modules could be updated."), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
395
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
396
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
397
|
@pyqtSlot() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
398
|
def __showAvailableModules(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
399
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
400
|
Private slot to show the available modules. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
401
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
402
|
These are modules which could be installed on the device. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
403
|
""" |
9817
|
404
|
from eric7.MicroPython.ShowModulesDialog import ShowModulesDialog |
9740
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
405
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
406
|
with EricOverrideCursor(): |
9748
|
407
|
availableModules = circup.get_bundle_versions(circup.get_bundles_list()) |
|
408
|
moduleNames = [m.replace(".py", "") for m in availableModules] |
|
409
|
|
11005
|
410
|
dlg = ShowModulesDialog(moduleNames, parent=self.__device.microPython) |
9740
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
411
|
dlg.exec() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
412
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
413
|
@pyqtSlot() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
414
|
def __showInstalledModules(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
415
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
416
|
Private slot to show the modules installed on the connected device. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
417
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
418
|
from .ShowInstalledDialog import ShowInstalledDialog |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
419
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
420
|
devicePath = self.__device.getWorkspace() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
421
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
422
|
with EricOverrideCursor(): |
11005
|
423
|
dlg = ShowInstalledDialog( |
|
424
|
devicePath=devicePath, parent=self.__device.microPython |
|
425
|
) |
9740
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
426
|
dlg.exec() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
427
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
428
|
@pyqtSlot() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
429
|
def __installFromAvailable(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
430
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
431
|
Private slot to install modules onto the connected device. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
432
|
""" |
9817
|
433
|
from eric7.MicroPython.ShowModulesDialog import ShowModulesDialog |
9740
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
434
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
435
|
with EricOverrideCursor(): |
9748
|
436
|
availableModules = circup.get_bundle_versions(circup.get_bundles_list()) |
|
437
|
moduleNames = [m.replace(".py", "") for m in availableModules] |
|
438
|
|
11005
|
439
|
dlg = ShowModulesDialog( |
|
440
|
moduleNames, selectionMode=True, parent=self.__device.microPython |
|
441
|
) |
9740
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
442
|
if dlg.exec() == QDialog.DialogCode.Accepted: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
443
|
modules = dlg.getSelection() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
444
|
self.__installModules(modules) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
445
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
446
|
@pyqtSlot() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
447
|
def __installRequirements(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
448
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
449
|
Private slot to install modules determined by a requirements file. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
450
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
451
|
homeDir = ( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
452
|
Preferences.getMicroPython("MpyWorkspace") |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
453
|
or Preferences.getMultiProject("Workspace") |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
454
|
or os.path.expanduser("~") |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
455
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
456
|
reqFile = EricFileDialog.getOpenFileName( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
457
|
None, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
458
|
self.tr("Install Modules"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
459
|
homeDir, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
460
|
self.tr("Text Files (*.txt);;All Files (*)"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
461
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
462
|
if reqFile: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
463
|
if os.path.exists(reqFile): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
464
|
with open(reqFile, "r") as fp: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
465
|
requirementsText = fp.read() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
466
|
modules = circup.libraries_from_requirements(requirementsText) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
467
|
if modules: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
468
|
self.__installModules(modules) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
469
|
else: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
470
|
EricMessageBox.critical( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
471
|
None, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
472
|
self.tr("Install Modules"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
473
|
self.tr( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
474
|
"""<p>The given requirements file <b>{0}</b> does not""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
475
|
""" contain valid modules.</p>""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
476
|
).format(reqFile), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
477
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
478
|
else: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
479
|
EricMessageBox.critical( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
480
|
None, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
481
|
self.tr("Install Modules"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
482
|
self.tr( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
483
|
"""<p>The given requirements file <b>{0}</b> does not exist.""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
484
|
"""</p>""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
485
|
).format(reqFile), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
486
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
487
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
488
|
@pyqtSlot() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
489
|
def __installFromCode(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
490
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
491
|
Private slot to install modules based on the 'code.py' file of the |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
492
|
connected device. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
493
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
494
|
devicePath = self.__device.getWorkspace() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
495
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
496
|
codeFile = EricFileDialog.getOpenFileName( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
497
|
None, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
498
|
self.tr("Install Modules"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
499
|
os.path.join(devicePath, "code.py"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
500
|
self.tr("Python Files (*.py);;All Files (*)"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
501
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
502
|
if codeFile: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
503
|
if os.path.exists(codeFile): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
504
|
with EricOverrideCursor(): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
505
|
availableModules = circup.get_bundle_versions( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
506
|
circup.get_bundles_list() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
507
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
508
|
moduleNames = {} |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
509
|
for module, metadata in availableModules.items(): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
510
|
moduleNames[module.replace(".py", "")] = metadata |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
511
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
512
|
modules = circup.libraries_from_imports(codeFile, moduleNames) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
513
|
if modules: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
514
|
self.__installModules(modules) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
515
|
else: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
516
|
EricMessageBox.critical( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
517
|
None, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
518
|
self.tr("Install Modules"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
519
|
self.tr( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
520
|
"""<p>The given code file <b>{0}</b> does not""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
521
|
""" contain valid import statements or does not import""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
522
|
""" external modules.</p>""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
523
|
).format(codeFile), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
524
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
525
|
else: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
526
|
EricMessageBox.critical( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
527
|
None, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
528
|
self.tr("Install Modules"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
529
|
self.tr( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
530
|
"""<p>The given code file <b>{0}</b> does not exist.</p>""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
531
|
).format(codeFile), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
532
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
533
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
534
|
def __installModules(self, installs): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
535
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
536
|
Private method to install the given list of modules. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
537
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
538
|
@param installs list of module names to be installed |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
539
|
@type list of str |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
540
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
541
|
devicePath = self.__device.getWorkspace() |
10900
|
542
|
backend = circup.DiskBackend(devicePath, circup.logger) |
9740
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
543
|
|
10690
fab36645aa7d
Changed the source code and the source code documentation to improve the indication of unused method/function arguments.
Detlev Offenbach <detlev@die-offenbachs.de>
diff
changeset
|
544
|
cpyVersion, _board_id = circup.get_circuitpython_version(devicePath) |
9740
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
545
|
circup.CPY_VERSION = cpyVersion |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
546
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
547
|
with EricOverrideCursor(): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
548
|
availableModules = circup.get_bundle_versions(circup.get_bundles_list()) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
549
|
moduleNames = {} |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
550
|
for module, metadata in availableModules.items(): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
551
|
moduleNames[module.replace(".py", "")] = metadata |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
552
|
toBeInstalled = circup.get_dependencies(installs, mod_names=moduleNames) |
10900
|
553
|
deviceModules = backend.get_device_versions() |
9740
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
554
|
if toBeInstalled is not None: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
555
|
dependencies = [m for m in toBeInstalled if m not in installs] |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
556
|
ok = EricMessageBox.yesNo( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
557
|
None, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
558
|
self.tr("Install Modules"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
559
|
self.tr("""<p>Ready to install these modules?{0}{1}</p>""").format( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
560
|
"""<ul><li>{0}</li></ul>""".format( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
561
|
"</li><li>".join(sorted(installs)) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
562
|
), |
10621
|
563
|
( |
|
564
|
self.tr("Dependencies:") |
|
565
|
+ """<ul><li>{0}</li></ul>""".format( |
|
566
|
"</li><li>".join(sorted(dependencies)) |
|
567
|
) |
|
568
|
if dependencies |
|
569
|
else "" |
|
570
|
), |
9740
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
571
|
), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
572
|
yesDefault=True, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
573
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
574
|
if ok: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
575
|
installedModules = [] |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
576
|
with EricOverrideCursor(): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
577
|
for library in toBeInstalled: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
578
|
success = circup.install_module( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
579
|
devicePath, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
580
|
deviceModules, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
581
|
library, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
582
|
self.__installPyAct.isChecked(), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
583
|
moduleNames, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
584
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
585
|
if success: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
586
|
installedModules.append(library) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
587
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
588
|
if installedModules: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
589
|
EricMessageBox.information( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
590
|
None, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
591
|
self.tr("Install Modules"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
592
|
self.tr( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
593
|
"<p>Installation complete. These modules were installed" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
594
|
" successfully.{0}</p>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
595
|
).format( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
596
|
"""<ul><li>{0}</li></ul>""".format( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
597
|
"</li><li>".join(sorted(installedModules)) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
598
|
), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
599
|
), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
600
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
601
|
else: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
602
|
EricMessageBox.information( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
603
|
None, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
604
|
self.tr("Install Modules"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
605
|
self.tr( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
606
|
"<p>Installation complete. No modules were installed.</p>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
607
|
), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
608
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
609
|
else: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
610
|
EricMessageBox.information( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
611
|
None, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
612
|
self.tr("Install Modules"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
613
|
self.tr("<p>No modules installation is required.</p>"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
614
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
615
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
616
|
@pyqtSlot() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
617
|
def __uninstallModules(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
618
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
619
|
Private slot to uninstall modules from the connected device. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
620
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
621
|
devicePath = self.__device.getWorkspace() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
622
|
libraryPath = os.path.join(devicePath, "lib") |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
623
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
624
|
with EricOverrideCursor(): |
10900
|
625
|
backend = circup.DiskBackend(devicePath, circup.logger) |
|
626
|
deviceModules = backend.get_device_versions() |
9740
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
627
|
modNames = {} |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
628
|
for moduleItem, metadata in deviceModules.items(): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
629
|
modNames[moduleItem.replace(".py", "").lower()] = metadata |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
630
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
631
|
dlg = EricListSelectionDialog( |
10373
093dcebe5ecb
Corrected some uses of dict.keys(), dict.values() and dict.items().
Detlev Offenbach <detlev@die-offenbachs.de>
diff
changeset
|
632
|
sorted(modNames), |
9740
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
633
|
title=self.tr("Uninstall Modules"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
634
|
message=self.tr("Select the modules/packages to be uninstalled:"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
635
|
checkBoxSelection=True, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
636
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
637
|
if dlg.exec() == QDialog.DialogCode.Accepted: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
638
|
names = dlg.getSelection() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
639
|
for name in names: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
640
|
modulePath = modNames[name]["path"] |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
641
|
if os.path.isdir(modulePath): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
642
|
target = os.path.basename(os.path.dirname(modulePath)) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
643
|
targetPath = os.path.join(libraryPath, target) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
644
|
# Remove the package directory. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
645
|
shutil.rmtree(targetPath) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
646
|
else: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
647
|
target = os.path.basename(modulePath) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
648
|
targetPath = os.path.join(libraryPath, target) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
649
|
# Remove the module file |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
650
|
os.remove(targetPath) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
651
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
652
|
EricMessageBox.information( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
653
|
None, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
654
|
self.tr("Uninstall Modules"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
655
|
self.tr( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
656
|
"""<p>These modules/packages were uninstalled from the connected""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
657
|
""" device.{0}</p>""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
658
|
).format("""<ul><li>{0}</li></ul>""".format("</li><li>".join(names))), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
659
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
660
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
661
|
@pyqtSlot() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
662
|
def __generateRequirements(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
663
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
664
|
Private slot to generate requirements for the connected device. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
665
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
666
|
from .RequirementsDialog import RequirementsDialog |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
667
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
668
|
devicePath = self.__device.getWorkspace() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
669
|
|
10690
fab36645aa7d
Changed the source code and the source code documentation to improve the indication of unused method/function arguments.
Detlev Offenbach <detlev@die-offenbachs.de>
diff
changeset
|
670
|
cpyVersion, _board_id = circup.get_circuitpython_version(devicePath) |
9740
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
671
|
circup.CPY_VERSION = cpyVersion |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
672
|
|
11005
|
673
|
dlg = RequirementsDialog( |
|
674
|
devicePath=devicePath, parent=self.__device.microPython |
|
675
|
) |
9740
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
676
|
dlg.exec() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
677
|
|
9869
|
678
|
@pyqtSlot() |
|
679
|
def __showCachePath(self): |
|
680
|
""" |
|
681
|
Private slot to show the path used by 'circup' to store the downloaded bundles. |
|
682
|
""" |
|
683
|
EricMessageBox.information( |
|
684
|
None, |
|
685
|
self.tr("Show Local Cache Path"), |
|
686
|
self.tr( |
|
687
|
"<p><b>circup</b> stores the downloaded CircuitPython bundles in this" |
|
688
|
" directory.</p><p>{0}</p>" |
|
689
|
).format(circup.DATA_DIR), |
|
690
|
) |
|
691
|
|
9740
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
692
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
693
|
def isCircupAvailable(): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
694
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
695
|
Function to check for the availability of 'circup'. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
696
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
697
|
@return flag indicating the availability of 'circup' |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
698
|
@rtype bool |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
699
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
700
|
global circup |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
701
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
702
|
return circup is not None |