src/eric7/MicroPython/MicroPythonWebreplUrlAddEditDialog.py

Sun, 16 Mar 2025 12:53:12 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 16 Mar 2025 12:53:12 +0100
branch
eric7
changeset 11170
6d6199d668fb
parent 11090
f5f5f5803935
permissions
-rw-r--r--

Added the Adafruit Feather nRF52840 to the list of known NRF52 boards and changed the list of known CircuitPython boards to be more explicit with respect to Adafruit boards (i.e. VID 0x239A).

10009
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
11090
f5f5f5803935 Updated copyright for 2025.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
3 # Copyright (c) 2023 - 2025 Detlev Offenbach <detlev@die-offenbachs.de>
10009
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing a dialog to edit the parameters for a WebREPL connection.
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 from PyQt6.QtCore import pyqtSlot
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 from PyQt6.QtWidgets import QDialog, QDialogButtonBox
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13 from .Devices import getSupportedDevices
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14 from .Ui_MicroPythonWebreplUrlAddEditDialog import Ui_MicroPythonWebreplUrlAddEditDialog
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17 class MicroPythonWebreplUrlAddEditDialog(
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18 QDialog, Ui_MicroPythonWebreplUrlAddEditDialog
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19 ):
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20 """
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21 Class implementing a dialog to edit the parameters for a WebREPL connection.
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 """
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 def __init__(self, definedNames, connectionParams=None, parent=None):
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 """
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 Constructor
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 @param definedNames list of already define WebREPL connection names
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 @type list of str
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 @param connectionParams parameters for the WebREPL connection to be edited
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 (default to None)
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 @type tuple of (str, str, str) (optional)
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 @param parent reference to the parent widget (defaults to None)
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 @type QWidget (optional)
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 """
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 super().__init__(parent)
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 self.setupUi(self)
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 self.__definedNames = definedNames[:]
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 self.deviceTypeComboBox.addItem("", "")
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 for board, description in sorted(getSupportedDevices(), key=lambda x: x[1]):
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 self.deviceTypeComboBox.addItem(description, board)
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 self.nameEdit.textChanged.connect(self.__updateOkButton)
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 self.descriptionEdit.textChanged.connect(self.__updateOkButton)
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 self.hostEdit.textChanged.connect(self.__updateOkButton)
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 self.portEdit.textChanged.connect(self.__updateOkButton)
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 self.deviceTypeComboBox.currentIndexChanged.connect(self.__updateOkButton)
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 if connectionParams:
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 self.__editName = connectionParams[0]
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 self.__populateFields(connectionParams)
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 else:
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 self.__editName = ""
10010
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10009
diff changeset
56 self.__updateOkButton()
10009
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 msh = self.minimumSizeHint()
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 self.resize(max(self.width(), msh.width()), msh.height())
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 def __populateFields(self, params):
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 """
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 Private method to populate the various dialog fields with the given parameters.
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 @param params arameters for the WebREPL connection to be edited
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 @type tuple of (str, str, str)
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 """
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 self.nameEdit.setText(params[0])
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 self.descriptionEdit.setText(params[1])
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 url = params[2].replace("ws://", "")
10010
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10009
diff changeset
72 password, hostPort = url.split("@", 1) if "@" in url else ("", url)
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10009
diff changeset
73 host, port = hostPort.split(":", 1) if ":" in hostPort else (hostPort, "")
10009
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 self.hostEdit.setText(host)
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 self.portEdit.setText(port)
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 self.passwordEdit.setText(password)
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77
10019
e56089d00750 Fixed a few issue in the MicroPython support related to behavior of devices and change caused by MicroPython release 1.20.0 on ESP32 devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10010
diff changeset
78 typeIndex = self.deviceTypeComboBox.findData(params[3])
10009
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 self.deviceTypeComboBox.setCurrentIndex(typeIndex)
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 @pyqtSlot()
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 def __updateOkButton(self):
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 """
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 Private slot to update the enabled state of the OK button.
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 """
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 port = self.portEdit.text()
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 if port == "":
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 portOk = True
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 else:
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 try:
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 portNo = int(port)
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 portOk = 1024 < portNo <= 65535
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 except ValueError:
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 portOk = False
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 name = self.nameEdit.text()
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 nameOk = bool(name) and (
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 name == self.__editName or name not in self.__definedNames
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 )
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 self.buttonBox.button(QDialogButtonBox.StandardButton.Ok).setEnabled(
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 nameOk
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 and bool(self.descriptionEdit.text())
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 and bool(self.hostEdit.text())
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 and portOk
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 and bool(self.deviceTypeComboBox.currentData())
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 )
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 def getWebreplUrl(self):
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 """
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 Public method to retrieve the entered WebREPL connection data.
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112
10010
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10009
diff changeset
113 @return tuple containing the name, description, URL and device type for
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10009
diff changeset
114 the WebREPL connection
8a68a7a7ab88 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10009
diff changeset
115 @rtype tuple of (str, str, str, str)
10009
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 """
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 password = self.passwordEdit.text()
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 host = self.hostEdit.text()
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 port = self.portEdit.text()
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 if password and port:
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 url = f"ws://{password}@{host}:{port}"
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123 elif password:
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124 url = f"ws://{password}@{host}"
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 elif port:
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 url = f"ws://{host}:{port}"
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 else:
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128 url = f"ws://{host}"
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130 return (
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 self.nameEdit.text(),
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132 self.descriptionEdit.text(),
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133 url,
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134 self.deviceTypeComboBox.currentData(),
61e5fe703818 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135 )

eric ide

mercurial