Compare commits

...

20 Commits

Author SHA1 Message Date
grossmj
e224a9ac29 Release v2.2.55 2025-11-19 12:13:57 +10:00
grossmj
5b87f36cfd Fix SyntaxWarning: invalid escape sequence. Fixes #3760 2025-11-17 11:47:55 +10:00
grossmj
a9354da184 Support for Python 3.14 2025-11-16 19:30:47 +10:00
grossmj
91d7ed187b Upgrade dependencies 2025-11-16 19:16:44 +10:00
grossmj
0f8724edc4 Merge branch 'master' into 2.2 2025-09-01 18:42:19 +02:00
grossmj
4e7f480af4 Upgrade pywin32 package 2025-08-30 22:02:16 +02:00
grossmj
5ce4863baa Upgrade sentry-sdk package 2025-08-30 21:51:24 +02:00
Jeremy Grossmann
bb5bfee256 Merge pull request #3740 from Raizo62/master
"console connect to all nodes" is now case-insensitively
2025-07-12 18:41:36 +02:00
Raizo62
0a74872ea2 Clicking the "console connect to all nodes" opens all consoles in name order with case-insensitively
ChatGPT : Use `sorted(nodes.keys(), key=str.casefold)` instead of simple sorted()
to ensure case-insensitive ordering. Improves UX by merging uppercase
and lowercase entries seamlessly. Python 3.11+ recommended approach.
2025-06-21 12:00:12 +02:00
grossmj
20ed599e65 Merge branch 'master' into 2.2 2025-05-13 20:48:44 +02:00
grossmj
2722b2854b Development on 2.2.55.dev1 2025-04-21 19:35:19 +07:00
Jeremy Grossmann
6b32d8bad6 Merge pull request #3727 from GNS3/release/v2.2.54
Release v2.2.54
2025-04-21 19:30:42 +07:00
grossmj
fcf62fc507 Release v2.2.54 2025-04-21 17:15:26 +07:00
grossmj
c811c270ec Merge branch 'master' into 2.2 2025-04-21 17:08:42 +07:00
grossmj
dbc519e0af Development on 2.2.54.dev1 2025-04-18 15:05:37 +07:00
grossmj
bcbf8be182 Replace "Docker hub" by "Docker repository" because it is possible to use different repositories 2025-04-16 17:42:44 +07:00
grossmj
43df10520f Upgrade dependencies 2025-04-16 17:08:13 +07:00
grossmj
55b37716a3 Fix bring console in front when clicking on "Open all consoles". Fixes #3706 2025-04-16 16:55:11 +07:00
grossmj
e08253e362 Add -F arg to wmctrl. Ref #3706 2025-02-16 00:10:10 +10:00
Jeremy Grossmann
b9a59183a1 Merge pull request #3699 from GNS3/release/v2.2.53
Release v2.2.53
2025-01-21 09:46:53 +07:00
14 changed files with 33 additions and 17 deletions

View File

@@ -1,5 +1,18 @@
# Change Log
## 2.2.55 19/11/2025
* Fix SyntaxWarning: invalid escape sequence. Fixes #3760
* Support for Python 3.14
* Clicking the "console connect to all nodes" opens all consoles in name order with case-insensitively
## 2.2.54 21/04/2025
* Replace "Docker hub" by "Docker repository" because it is possible to use different repositories
* Upgrade dependencies
* Fix bring console in front when clicking on "Open all consoles". Fixes #3706
* Add -F arg to wmctrl. Ref #3706
## 2.2.53 21/01/2025
* Update file browser filters for all files and IOU images

View File

@@ -50,7 +50,7 @@ class CrashReport:
Report crash to a third party service
"""
DSN = "https://3ab14deb02a197dfb74396582e088adf@o19455.ingest.us.sentry.io/38506"
DSN = "https://4787643437b9cd21a738c97fe5595c2b@o19455.ingest.us.sentry.io/38506"
_instance = None
def __init__(self):

View File

@@ -1137,7 +1137,7 @@ class GraphicsView(QtWidgets.QGraphicsView):
delay = self._main_window.settings()["delay_console_all"]
counter = 0
for name in sorted(nodes.keys()):
for name in sorted(nodes.keys(), key=str.casefold):
node = nodes[name]
callback = qpartial(self.consoleToNode, node)
self._main_window.run_later(counter, callback)
@@ -1216,7 +1216,7 @@ class GraphicsView(QtWidgets.QGraphicsView):
delay = self._main_window.settings()["delay_console_all"]
counter = 0
for name in sorted(nodes.keys()):
for name in sorted(nodes.keys(), key=str.casefold):
node = nodes[name]
callback = qpartial(self.consoleToNode, node, aux=True)
self._main_window.run_later(counter, callback)

View File

@@ -93,7 +93,7 @@
<string>Docker Virtual Machine</string>
</property>
<property name="subTitle">
<string>Please choose a Docker virtual machine from the list or provide an image name on Docker hub.</string>
<string>Please choose a Docker virtual machine from the list or provide an image name on a Docker repository.</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>

View File

@@ -205,7 +205,7 @@ class Ui_DockerVMWizard(object):
self.uiRemoteServersGroupBox.setTitle(_translate("DockerVMWizard", "Remote server"))
self.uiRemoteServersLabel.setText(_translate("DockerVMWizard", "Run on:"))
self.uiImageWizardPage.setTitle(_translate("DockerVMWizard", "Docker Virtual Machine"))
self.uiImageWizardPage.setSubTitle(_translate("DockerVMWizard", "Please choose a Docker virtual machine from the list or provide an image name on Docker hub."))
self.uiImageWizardPage.setSubTitle(_translate("DockerVMWizard", "Please choose a Docker virtual machine from the list or provide an image name on a Docker repository."))
self.uiExistingImageRadioButton.setText(_translate("DockerVMWizard", "Existing image"))
self.uiNewImageRadioButton.setText(_translate("DockerVMWizard", "New image"))
self.uiImageListLabel.setText(_translate("DockerVMWizard", "Image list:"))

View File

@@ -725,6 +725,9 @@ class Node(BaseNode):
if "console_type" in self.settings():
console_type = self.consoleType()
if aux is False and self.bringToFront() is True:
return
if console_type == "telnet":
from .telnet_console import nodeTelnetConsole
nodeTelnetConsole(self, console_port, command)
@@ -748,7 +751,7 @@ class Node(BaseNode):
if wmctrl_path:
try:
# use wmctrl to raise the window based on the node name (this doesn't work well with window having multiple tabs)
subprocess.run([wmctrl_path, "-a", self.name()], check=True, env=os.environ)
subprocess.run([wmctrl_path, "-Fa", self.name()], check=True, env=os.environ)
return True
except subprocess.CalledProcessError:
log.debug("Could not find window title '{}' to bring it to front".format(self.name()))

View File

@@ -146,7 +146,7 @@
},
"image": {
"type": "string",
"title": "Docker image in the Docker Hub"
"title": "Docker image on the Docker repository"
},
"start_command": {
"type": "string",

View File

@@ -110,7 +110,7 @@ class ConsoleThread(QtCore.QThread):
proc.wait() # wait for the terminal to open
try:
# use wmctrl to raise the window based on the node name
subprocess.run([wmctrl_path, "-a", self._name], env=os.environ)
subprocess.run([wmctrl_path, "-Fa", self._name], env=os.environ)
except OSError as e:
self.consoleError.emit("Count not focus on terminal window: '{}'".format(e))

View File

@@ -63,7 +63,7 @@ def parse_version(version):
"""
release_type_found = False
version_infos = re.split('(\.|[a-z]+)', version)
version_infos = re.split('(\\.|[a-z]+)', version)
version = []
for info in version_infos:
if info == '.' or len(info) == 0:

View File

@@ -40,7 +40,7 @@ def _get_windows_interfaces_from_registry():
hkeycard = winreg.OpenKey(hkey, network_card_id)
guid, _ = winreg.QueryValueEx(hkeycard, "ServiceName")
netcard, _ = winreg.QueryValueEx(hkeycard, "Description")
connection = r"SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}" + "\{}\Connection".format(guid)
connection = r"SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}" + r"\{}\Connection".format(guid)
hkeycon = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, connection)
name, _ = winreg.QueryValueEx(hkeycon, "Name")
interface = r"SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{}".format(guid)
@@ -85,7 +85,7 @@ def get_windows_interfaces():
try:
import win32com.client
locator = win32com.client.Dispatch("WbemScripting.SWbemLocator")
service = locator.ConnectServer(".", "root\cimv2")
service = locator.ConnectServer(".", r"root\cimv2")
network_configs = service.InstancesOf("Win32_NetworkAdapterConfiguration")
# more info on Win32_NetworkAdapter: http://msdn.microsoft.com/en-us/library/aa394216%28v=vs.85%29.aspx
for adapter in service.InstancesOf("Win32_NetworkAdapter"):

View File

@@ -23,9 +23,8 @@
# or negative for a release candidate or beta (after the base version
# number has been incremented)
__version__ = "2.2.53"
__version_info__ = (2, 2, 53, 0)
__version__ = "2.2.55"
__version_info__ = (2, 2, 55, 0)
if "dev" in __version__:
try:
import os

View File

@@ -1,6 +1,6 @@
jsonschema>=4.23,<4.24
sentry-sdk>=2.19.2,<2.20 # optional dependency
psutil>=6.1.1
sentry-sdk>=2.44.0,<2.45 # optional dependency
psutil>=7.1.3
distro>=1.9.0
truststore>=0.10.0; python_version >= '3.10'
importlib-resources>=1.3; python_version < '3.9'

View File

@@ -99,6 +99,7 @@ setup(
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Programming Language :: Python :: Implementation :: CPython",
],
)

View File

@@ -1,4 +1,4 @@
-rrequirements.txt
PyQt5==5.15.11 # pyup: ignore
pywin32==306 # pyup: ignore
pywin32==311 # pyup: ignore