From a5ff9318f03e4cb85db62f71a02e008e439d46bc Mon Sep 17 00:00:00 2001 From: grossmj Date: Sat, 13 Jul 2024 16:32:13 +0200 Subject: [PATCH 1/7] Development on 2.2.49.dev1 --- gns3/version.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gns3/version.py b/gns3/version.py index 10323de8f..c29f111ef 100644 --- a/gns3/version.py +++ b/gns3/version.py @@ -23,8 +23,8 @@ # or negative for a release candidate or beta (after the base version # number has been incremented) -__version__ = "2.2.48.1" -__version_info__ = (2, 2, 48, -99) +__version__ = "2.2.49.dev1" +__version_info__ = (2, 2, 49, 99) if "dev" in __version__: try: From 279a91d402bbc53aa08ad26372b8255eafc99336 Mon Sep 17 00:00:00 2001 From: grossmj Date: Mon, 22 Jul 2024 18:58:32 +0200 Subject: [PATCH 2/7] Fix tests. Fixes #3605 --- gns3/schemas/appliance_v8.json | 1 + tests/registry/appliances/empty-vm-v8.gns3a | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/gns3/schemas/appliance_v8.json b/gns3/schemas/appliance_v8.json index 4b0e23ed4..214e7083d 100644 --- a/gns3/schemas/appliance_v8.json +++ b/gns3/schemas/appliance_v8.json @@ -7,6 +7,7 @@ "enum": [ "router", "multilayer_switch", + "switch", "firewall", "guest" ] diff --git a/tests/registry/appliances/empty-vm-v8.gns3a b/tests/registry/appliances/empty-vm-v8.gns3a index 8e1cc179d..bc1541a22 100644 --- a/tests/registry/appliances/empty-vm-v8.gns3a +++ b/tests/registry/appliances/empty-vm-v8.gns3a @@ -65,8 +65,8 @@ { "filename": "empty100G.qcow2", "version": "100G", - "checksum": "d08fdec95fffbda3f04e9a00db49295df73ae4a507396e442ba9e4ad5c14ce5a", - "checksum_type": "sha256", + "checksum": "1e6409a4523ada212dea2ebc50e50a65", + "checksum_type": "md5", "filesize": 198656, "download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/", "direct_download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty100G.qcow2/download" From 8df248a1e692b870a29067c7324b9e1b52ee162c Mon Sep 17 00:00:00 2001 From: grossmj Date: Sat, 27 Jul 2024 16:23:23 +0200 Subject: [PATCH 3/7] Add shortcuts info dialog --- gns3/main_window.py | 10 ++++++++++ gns3/ui/main_window.ui | 24 +++++++++++++++--------- gns3/ui/main_window_ui.py | 12 ++++++++---- 3 files changed, 33 insertions(+), 13 deletions(-) diff --git a/gns3/main_window.py b/gns3/main_window.py index 223902e5e..4f085d91c 100644 --- a/gns3/main_window.py +++ b/gns3/main_window.py @@ -268,6 +268,7 @@ def _connections(self): self.uiExportDebugInformationAction.triggered.connect(self._exportDebugInformationSlot) self.uiDoctorAction.triggered.connect(self._doctorSlot) self.uiAcademyAction.triggered.connect(self._academyActionSlot) + self.uiShortcutsAction.triggered.connect(self._shortcutsActionSlot) # browsers tool bar connections self.uiBrowseRoutersAction.triggered.connect(self._browseRoutersActionSlot) @@ -979,6 +980,15 @@ def _setupWizardActionSlot(self): # start and connect to the local server if needed LocalServer.instance().localServerAutoStartIfRequired() + def _shortcutsActionSlot(self): + + shortcuts_text = "" + for action in self.findChildren(QtWidgets.QAction): + shortcut = action.shortcut().toString() + if shortcut: + shortcuts_text += f"{action.toolTip()}: {shortcut}\n" + QtWidgets.QMessageBox.information(self, "Shortcuts", shortcuts_text) + def _aboutQtActionSlot(self): """ Slot to display the Qt About dialog. diff --git a/gns3/ui/main_window.ui b/gns3/ui/main_window.ui index 7b5ad8ad0..ddea88a55 100644 --- a/gns3/ui/main_window.ui +++ b/gns3/ui/main_window.ui @@ -112,6 +112,7 @@ background-none; + @@ -635,9 +636,6 @@ background-none; :/icons/start.svg :/icons/start-hover.svg:/icons/start.svg - - Ctrl+B - Start/Resume all nodes @@ -647,6 +645,9 @@ background-none; Start/Resume all devices + + Ctrl+B + @@ -657,9 +658,6 @@ background-none; :/icons/stop.svg :/icons/stop-hover.svg:/icons/stop.svg - - Ctrl+E - Stop all nodes @@ -669,6 +667,9 @@ background-none; Stop all devices + + Ctrl+E + @@ -794,9 +795,6 @@ background-none; :/icons/pause.svg :/icons/pause-hover.svg:/icons/pause.svg - - Ctrl+J - Suspend all nodes @@ -806,6 +804,9 @@ background-none; Suspend all devices + + Ctrl+J + @@ -1318,6 +1319,11 @@ background-none; Reset GUI state + + + &Shortcuts + + diff --git a/gns3/ui/main_window_ui.py b/gns3/ui/main_window_ui.py index d651c9fa2..765d1ee88 100644 --- a/gns3/ui/main_window_ui.py +++ b/gns3/ui/main_window_ui.py @@ -2,7 +2,7 @@ # Form implementation generated from reading ui file '/home/grossmj/PycharmProjects/gns3-gui/gns3/ui/main_window.ui' # -# Created by: PyQt5 UI code generator 5.15.6 +# Created by: PyQt5 UI code generator 5.15.10 # # WARNING: Any manual changes made to this file will be lost when pyuic5 is # run again. Do not edit this file unless you know what you are doing. @@ -455,6 +455,8 @@ def setupUi(self, MainWindow): self.uiResetConsoleAllAction.setObjectName("uiResetConsoleAllAction") self.uiResetGUIStateAction = QtWidgets.QAction(MainWindow) self.uiResetGUIStateAction.setObjectName("uiResetGUIStateAction") + self.uiShortcutsAction = QtWidgets.QAction(MainWindow) + self.uiShortcutsAction.setObjectName("uiShortcutsAction") self.uiEditMenu.addAction(self.uiSelectAllAction) self.uiEditMenu.addAction(self.uiSelectNoneAction) self.uiEditMenu.addSeparator() @@ -479,6 +481,7 @@ def setupUi(self, MainWindow): self.uiHelpMenu.addAction(self.uiAcademyAction) self.uiHelpMenu.addAction(self.uiDoctorAction) self.uiHelpMenu.addAction(self.uiExportDebugInformationAction) + self.uiHelpMenu.addAction(self.uiShortcutsAction) self.uiHelpMenu.addAction(self.uiAboutQtAction) self.uiHelpMenu.addAction(self.uiAboutAction) self.uiViewMenu.addAction(self.uiActionFullscreen) @@ -602,13 +605,13 @@ def retranslateUi(self, MainWindow): self.uiScreenshotAction.setToolTip(_translate("MainWindow", "Take a screenshot")) self.uiScreenshotAction.setStatusTip(_translate("MainWindow", "Take a screenshot")) self.uiStartAllAction.setText(_translate("MainWindow", "Start/Resume all nodes")) - self.uiStartAllAction.setShortcut(_translate("MainWindow", "Ctrl+B")) self.uiStartAllAction.setToolTip(_translate("MainWindow", "Start/Resume all nodes")) self.uiStartAllAction.setStatusTip(_translate("MainWindow", "Start/Resume all devices")) + self.uiStartAllAction.setShortcut(_translate("MainWindow", "Ctrl+B")) self.uiStopAllAction.setText(_translate("MainWindow", "Stop all nodes")) - self.uiStopAllAction.setShortcut(_translate("MainWindow", "Ctrl+E")) self.uiStopAllAction.setToolTip(_translate("MainWindow", "Stop all nodes")) self.uiStopAllAction.setStatusTip(_translate("MainWindow", "Stop all devices")) + self.uiStopAllAction.setShortcut(_translate("MainWindow", "Ctrl+E")) self.uiConsoleAllAction.setText(_translate("MainWindow", "Console connect to all nodes")) self.uiConsoleAllAction.setToolTip(_translate("MainWindow", "Console connect to all nodes")) self.uiConsoleAllAction.setStatusTip(_translate("MainWindow", "Console to all devices")) @@ -635,9 +638,9 @@ def retranslateUi(self, MainWindow): self.uiPreferencesAction.setStatusTip(_translate("MainWindow", "Preferences")) self.uiPreferencesAction.setShortcut(_translate("MainWindow", "Ctrl+Shift+P")) self.uiSuspendAllAction.setText(_translate("MainWindow", "Suspend all nodes")) - self.uiSuspendAllAction.setShortcut(_translate("MainWindow", "Ctrl+J")) self.uiSuspendAllAction.setToolTip(_translate("MainWindow", "Suspend all nodes")) self.uiSuspendAllAction.setStatusTip(_translate("MainWindow", "Suspend all devices")) + self.uiSuspendAllAction.setShortcut(_translate("MainWindow", "Ctrl+J")) self.uiAddNoteAction.setText(_translate("MainWindow", "Add note")) self.uiAddNoteAction.setToolTip(_translate("MainWindow", "Add a note")) self.uiAddNoteAction.setStatusTip(_translate("MainWindow", "Add a note")) @@ -728,6 +731,7 @@ def retranslateUi(self, MainWindow): self.uiResetDocksAction.setText(_translate("MainWindow", "Reset docks")) self.uiResetConsoleAllAction.setText(_translate("MainWindow", "Reset all console connections")) self.uiResetGUIStateAction.setText(_translate("MainWindow", "Reset GUI state")) + self.uiShortcutsAction.setText(_translate("MainWindow", "&Shortcuts")) from ..compute_summary_view import ComputeSummaryView from ..console_view import ConsoleView from ..graphics_view import GraphicsView From 9f3598d36de650f5202971bd38bc7f53f7e925d9 Mon Sep 17 00:00:00 2001 From: grossmj Date: Sat, 3 Aug 2024 11:55:40 +0200 Subject: [PATCH 4/7] Upgrade to PyQt5 v5.15.11 --- mac-requirements.txt | 2 +- win-requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mac-requirements.txt b/mac-requirements.txt index def2481a2..b435bace4 100644 --- a/mac-requirements.txt +++ b/mac-requirements.txt @@ -1,3 +1,3 @@ -rrequirements.txt -PyQt5==5.15.10 +PyQt5==5.15.11 diff --git a/win-requirements.txt b/win-requirements.txt index 1caf5da9c..cfbb4be3f 100644 --- a/win-requirements.txt +++ b/win-requirements.txt @@ -1,4 +1,4 @@ -rrequirements.txt -PyQt5==5.15.10 # pyup: ignore +PyQt5==5.15.11 # pyup: ignore pywin32==306 # pyup: ignore From 42ea34ca6c9ba4b898fc5a3c29800609df47cc34 Mon Sep 17 00:00:00 2001 From: grossmj Date: Sat, 3 Aug 2024 11:57:15 +0200 Subject: [PATCH 5/7] Upgrade jsonschema and sentry-sdk packages --- requirements.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index ef6131e48..bcdeddb53 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ -jsonschema>=4.22.0,<4.23 -sentry-sdk==2.7.1,<2.8 +jsonschema>=4.23.0,<4.24 +sentry-sdk==2.12.0,<2.13 psutil==6.0.0 distro>=1.9.0 truststore>=0.9.1; python_version >= '3.10' From 47432568e67fd74118dad45600c3c8b877820a25 Mon Sep 17 00:00:00 2001 From: grossmj Date: Sat, 3 Aug 2024 12:32:43 +0200 Subject: [PATCH 6/7] Upgrade development packages --- dev-requirements.txt | 5 ++--- requirements.txt | 4 ++-- setup.py | 8 ++++---- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/dev-requirements.txt b/dev-requirements.txt index bcd8c1128..aec7f24a7 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -1,5 +1,4 @@ -rrequirements.txt -pytest==7.2.0 -flake8==5.0.4 -pytest-timeout==2.1.0 +pytest==8.3.2 +pytest-timeout==2.3.1 diff --git a/requirements.txt b/requirements.txt index bcdeddb53..4ef10c35a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ -jsonschema>=4.23.0,<4.24 -sentry-sdk==2.12.0,<2.13 +jsonschema>=4.23,<4.24 +sentry-sdk==2.12,<2.13 psutil==6.0.0 distro>=1.9.0 truststore>=0.9.1; python_version >= '3.10' diff --git a/setup.py b/setup.py index d0acf5ec1..5d91a50c3 100644 --- a/setup.py +++ b/setup.py @@ -19,9 +19,9 @@ from setuptools import setup, find_packages from setuptools.command.test import test as TestCommand -# we only support Python 3 version >= 3.7 -if len(sys.argv) >= 2 and sys.argv[1] == "install" and sys.version_info < (3, 7): - raise SystemExit("Python 3.7 or higher is required") +# we only support Python 3 version >= 3.8 +if len(sys.argv) >= 2 and sys.argv[1] == "install" and sys.version_info < (3, 8): + raise SystemExit("Python 3.8 or higher is required") class PyTest(TestCommand): @@ -79,7 +79,7 @@ def run_tests(self): include_package_data=True, package_data={"gns3": ["configs/*.txt", "schemas/*.json"]}, platforms="any", - python_requires='>=3.7', + python_requires='>=3.8', setup_requires=["setuptools>=17.1"], classifiers=[ "Development Status :: 5 - Production/Stable", From b35ce7303db2707715943baa0882b652f1aa727c Mon Sep 17 00:00:00 2001 From: grossmj Date: Tue, 6 Aug 2024 12:55:15 +0200 Subject: [PATCH 7/7] Release v2.2.49 --- CHANGELOG | 7 +++++++ gns3/crash_report.py | 2 +- gns3/version.py | 4 ++-- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 17ca17dd8..625b63f65 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,5 +1,12 @@ # Change Log +## 2.2.49 06/08/2024 + +* Upgrade jsonschema and sentry-sdk packages +* Upgrade to PyQt5 v5.15.11 +* Add shortcuts info dialog +* Added Key Shortcuts + ## 2.2.48.1 12/07/2024 * No changes diff --git a/gns3/crash_report.py b/gns3/crash_report.py index 08e113b97..49fac2206 100644 --- a/gns3/crash_report.py +++ b/gns3/crash_report.py @@ -50,7 +50,7 @@ class CrashReport: Report crash to a third party service """ - DSN = "https://d8911cca18e158f44bedd216c770a478@o19455.ingest.us.sentry.io/38506" + DSN = "https://4cbe2abf0323ef3136a900d624b12567@o19455.ingest.us.sentry.io/38506" _instance = None def __init__(self): diff --git a/gns3/version.py b/gns3/version.py index c29f111ef..49bb63f8c 100644 --- a/gns3/version.py +++ b/gns3/version.py @@ -23,8 +23,8 @@ # or negative for a release candidate or beta (after the base version # number has been incremented) -__version__ = "2.2.49.dev1" -__version_info__ = (2, 2, 49, 99) +__version__ = "2.2.49" +__version_info__ = (2, 2, 49, 0) if "dev" in __version__: try: