Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package gns3-gui for openSUSE:Factory 
checked in at 2023-01-30 17:10:09
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gns3-gui (Old)
 and      /work/SRC/openSUSE:Factory/.gns3-gui.new.32243 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "gns3-gui"

Mon Jan 30 17:10:09 2023 rev:16 rq:1061886 version:2.2.37

Changes:
--------
--- /work/SRC/openSUSE:Factory/gns3-gui/gns3-gui.changes        2022-10-24 
11:12:44.311153100 +0200
+++ /work/SRC/openSUSE:Factory/.gns3-gui.new.32243/gns3-gui.changes     
2023-01-30 17:22:14.976174788 +0100
@@ -1,0 +2,22 @@
+Wed Jan 25 21:10:02 UTC 2023 - Martin Hauke <mar...@gmx.de>
+
+- Bugfix release
+  * no functional changes
+
+-------------------------------------------------------------------
+Sat Jan 21 22:46:57 UTC 2023 - Martin Hauke <mar...@gmx.de>
+
+- Update to version 2.2.36
+  https://github.com/GNS3/gns3-server/releases/tag/v2.2.36
+- Update to version 2.2.35
+  https://github.com/GNS3/gns3-server/releases/tag/v2.2.35
+- Update to version 2.2.34
+  https://github.com/GNS3/gns3-server/releases/tag/v2.2.34
+- Update to version 2.2.33
+  https://github.com/GNS3/gns3-server/releases/tag/v2.2.33
+- Update to version 2.2.32
+  https://github.com/GNS3/gns3-server/releases/tag/v2.2.32
+- Drop patch:
+  * gns3-gui-fix-requirements.patch
+
+-------------------------------------------------------------------

Old:
----
  gns3-gui-2.2.31.tar.gz
  gns3-gui-fix-requirements.patch

New:
----
  gns3-gui-2.2.37.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ gns3-gui.spec ++++++
--- /var/tmp/diff_new_pack.Z0Zrpt/_old  2023-01-30 17:22:15.432177217 +0100
+++ /var/tmp/diff_new_pack.Z0Zrpt/_new  2023-01-30 17:22:15.436177238 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package gns3-gui
 #
-# Copyright (c) 2022 SUSE LLC
+# Copyright (c) 2023 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -17,7 +17,7 @@
 
 
 Name:           gns3-gui
-Version:        2.2.31
+Version:        2.2.37
 Release:        0
 Summary:        GNS3 graphical interface for the GNS3 server
 License:        GPL-3.0-or-later
@@ -25,7 +25,6 @@
 URL:            http://github.com/GNS3/%{name}
 Source:         
https://github.com/GNS3/gns3-gui/archive/v%{version}.tar.gz#/%{name}-%{version}.tar.gz
 Patch0:         %{name}_fix_desktop_file.patch
-Patch1:         gns3-gui-fix-requirements.patch
 BuildRequires:  fdupes
 BuildRequires:  hicolor-icon-theme
 BuildRequires:  python-rpm-macros
@@ -51,9 +50,9 @@
 BuildRequires:  python3-jsonschema >= 2.4.0
 BuildRequires:  python3-psutil >= 2.2.1
 BuildRequires:  python3-pytest
+BuildRequires:  python3-qt5
 BuildRequires:  python3-sentry-sdk >= 1.5.4
 BuildRequires:  python3-sip
-BuildRequires:  python3-qt5
 BuildRequires:  xvfb-run
 # /SECTION
 
@@ -74,6 +73,19 @@
 find . -type f -name "*\.py" -exec sed -i 's/^#!\/usr\/bin\/env 
python3/#!\/usr\/bin\/python3/' {} \;
 find . -type f -name "*\.py" -exec sed -i 's/^#!\/usr\/bin\/env 
python/#!\/usr\/bin\/python3/' {} \;
 
+# Relax strict requirements
+sed -i -r 's/==/>=/g' requirements.txt
+sed -i -r 's/sentry-sdk.*//g' requirements.txt
+sed -i -r '/setuptools/d' requirements.txt
+# Lower psutil>=5.8.0
+sed -i -r 's/psutil>=5.9.4/psutil>=5.8.0/' requirements.txt
+sed -i -r 's/distro>=1.7.*/distro>=1.6.0/' requirements.txt
+sed -i -r 's/jsonschema>=4.17.3/jsonschema>=3.2.0/' requirements.txt
+# Disable update alerts
+sed -i 's/"check_for_update": True,/"check_for_update": False,/' 
gns3/settings.py
+# Disable anonymous data collection
+sed -i 's/"send_stats": True,/"send_stats": False,/' gns3/settings.py
+
 %build
 %if 0%{?suse_version} > 1315
 %python3_build
@@ -110,7 +122,7 @@
 
 %files
 %license LICENSE
-%doc AUTHORS README.rst
+%doc AUTHORS README.md
 %{_bindir}/gns3
 %{python3_sitelib}/gns3*
 %{_datadir}/icons/hicolor/*

++++++ gns3-gui-2.2.31.tar.gz -> gns3-gui-2.2.37.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gns3-gui-2.2.31/.github/workflows/codeql.yml 
new/gns3-gui-2.2.37/.github/workflows/codeql.yml
--- old/gns3-gui-2.2.31/.github/workflows/codeql.yml    1970-01-01 
01:00:00.000000000 +0100
+++ new/gns3-gui-2.2.37/.github/workflows/codeql.yml    2023-01-25 
08:06:12.000000000 +0100
@@ -0,0 +1,76 @@
+# For most projects, this workflow file will not need changing; you simply need
+# to commit it to your repository.
+#
+# You may wish to alter this file to override the set of languages analyzed,
+# or to provide custom queries or build logic.
+#
+# ******** NOTE ********
+# We have attempted to detect the languages in your repository. Please check
+# the `language` matrix defined below to confirm you have the correct set of
+# supported CodeQL languages.
+#
+name: "CodeQL"
+
+on:
+  push:
+    branches: [ "master" ]
+  pull_request:
+    # The branches below must be a subset of the branches above
+    branches: [ "master" ]
+  schedule:
+    - cron: '27 6 * * 2'
+
+jobs:
+  analyze:
+    name: Analyze
+    runs-on: ubuntu-latest
+    permissions:
+      actions: read
+      contents: read
+      security-events: write
+
+    strategy:
+      fail-fast: false
+      matrix:
+        language: [ 'python' ]
+        # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 
'python', 'ruby' ]
+        # Use only 'java' to analyze code written in Java, Kotlin or both
+        # Use only 'javascript' to analyze code written in JavaScript, 
TypeScript or both
+        # Learn more about CodeQL language support at 
https://aka.ms/codeql-docs/language-support
+
+    steps:
+    - name: Checkout repository
+      uses: actions/checkout@v3
+
+    # Initializes the CodeQL tools for scanning.
+    - name: Initialize CodeQL
+      uses: github/codeql-action/init@v2
+      with:
+        languages: ${{ matrix.language }}
+        # If you wish to specify custom queries, you can do so here or in a 
config file.
+        # By default, queries listed here will override any specified in a 
config file.
+        # Prefix the list here with "+" to use these queries and those in the 
config file.
+
+        # Details on CodeQL's query packs refer to : 
https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
+        # queries: security-extended,security-and-quality
+
+
+    # Autobuild attempts to build any compiled languages  (C/C++, C#, Go, or 
Java).
+    # If this step fails, then you should remove it and run the build manually 
(see below)
+    - name: Autobuild
+      uses: github/codeql-action/autobuild@v2
+
+    # ℹ️ Command-line programs to run using the OS shell.
+    # 📚 See 
https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
+
+    #   If the Autobuild fails above, remove it and uncomment the following 
three lines.
+    #   modify them (or add more) to build your code if your project, please 
refer to the EXAMPLE below for guidance.
+
+    # - run: |
+    #   echo "Run, Build Application using script"
+    #   ./location_of_script_within_repo/buildscript.sh
+
+    - name: Perform CodeQL Analysis
+      uses: github/codeql-action/analyze@v2
+      with:
+        category: "/language:${{matrix.language}}"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gns3-gui-2.2.31/.gitignore 
new/gns3-gui-2.2.37/.gitignore
--- old/gns3-gui-2.2.31/.gitignore      2022-02-26 08:52:17.000000000 +0100
+++ new/gns3-gui-2.2.37/.gitignore      2023-01-25 08:06:12.000000000 +0100
@@ -63,3 +63,4 @@
 
 # Virtualenv
 env
+venv
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gns3-gui-2.2.31/.whitesource 
new/gns3-gui-2.2.37/.whitesource
--- old/gns3-gui-2.2.31/.whitesource    2022-02-26 08:52:17.000000000 +0100
+++ new/gns3-gui-2.2.37/.whitesource    2023-01-25 08:06:12.000000000 +0100
@@ -2,7 +2,8 @@
   "scanSettings": {
     "configMode": "AUTO",
     "configExternalURL": "",
-    "projectToken" : ""
+    "projectToken" : "",
+    "baseBranches": ["master", "2.2", "3.0"]
   },
   "checkRunSettings": {
     "vulnerableCheckRunConclusionLevel": "failure"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gns3-gui-2.2.31/CHANGELOG 
new/gns3-gui-2.2.37/CHANGELOG
--- old/gns3-gui-2.2.31/CHANGELOG       2022-02-26 08:52:17.000000000 +0100
+++ new/gns3-gui-2.2.37/CHANGELOG       2023-01-25 08:06:12.000000000 +0100
@@ -1,5 +1,61 @@
 # Change Log
 
+## 2.2.37 25/01/2023
+
+* Upgrade to PyQt5 v5.15.7
+* Changed Windows Terminal telnet console profile from OS X to windows ref: 
issue #3193
+
+## 2.2.36 04/01/2023
+
+* Add Trusted Platform Module (TPM) support for Qemu VMs
+* Add "on_close" setting to appliance schema. Fixes 
https://github.com/GNS3/gns3-server/issues/2148
+* Add default 'ide' disk interface when manually creating Qemu VM template. 
Fixes #3360
+* Fix zoom factor is multiplied when loading projects. Fixes #3408
+* Remove deprecated PuTTY option in preferences. Ref 
https://github.com/GNS3/gns3-gui/discussions/3415
+
+
+## 2.2.35.1 10/11/2022
+
+* Re-release Web-Ui v2.2.35
+
+## 2.2.35 08/11/2022
+
+* Fix "variables": [] in project file leads to unlimited increase of empty 
name/value pairs in GUI. Fixes #3397
+* Make version PEP 440 compliant
+* Support for Python 3.11
+* Upgrade PyQt to 5.15.7 and pywin32 to v305
+* Allow for more dependency versions at patch level
+* Replace deprecated distro.linux_distribution() call
+* Add a fix for the CVE-2007-4559
+
+## 2.2.34 28/08/2022
+
+* Upgrade dev dependencies
+* Implement new option (Delete All) to contextual menu in "Console" dock. 
Fixes #3325
+* Fix 2560x1440 resolution for Docker container
+
+## 2.2.33.1 21/06/2022
+
+* Match GNS3 server version
+
+## 2.2.33 20/06/2022
+
+* Upgrade sentry-sdk and psutil
+* Check that node names for Qemu and Docker are valid
+* Backport reset all console connections. Fixes #2072
+* Add more video resolutions to Docker containers using VNC. Fixes #3329
+* Add python_requires=">=3.4" in setup.py. Fixes  #3326
+* Only allow post release corrective versions of GUI and server to interact
+* Allow minor versions of GUI and server to interact
+* Update VirtViewer path. Fixes #3334
+
+## 2.2.32 27/04/2022
+
+* Use public DSNs for Sentry
+* Fix exception when doubleclick on NAT node. Fixes #3312
+* Fix "Apply" button in the "Preferences" dialog stays gray when 
templates/nodes are opened by double-click. Fixes #3307
+* Add 'reset docks' in the view menu. Ref #3317
+
 ## 2.2.31 26/02/2022
 
 * Install setuptools v59.6.0 when using Python 3.6
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gns3-gui-2.2.31/MANIFEST.in 
new/gns3-gui-2.2.37/MANIFEST.in
--- old/gns3-gui-2.2.31/MANIFEST.in     2022-02-26 08:52:17.000000000 +0100
+++ new/gns3-gui-2.2.37/MANIFEST.in     2023-01-25 08:06:12.000000000 +0100
@@ -1,4 +1,4 @@
-include README.rst
+include README.md
 include AUTHORS
 include LICENSE
 include MANIFEST.in
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gns3-gui-2.2.31/README.md 
new/gns3-gui-2.2.37/README.md
--- old/gns3-gui-2.2.31/README.md       1970-01-01 01:00:00.000000000 +0100
+++ new/gns3-gui-2.2.37/README.md       2023-01-25 08:06:12.000000000 +0100
@@ -0,0 +1,62 @@
+GNS3-gui
+========
+
+[![image](https://github.com/GNS3/gns3-gui/workflows/testing/badge.svg)](https://github.com/GNS3/gns3-gui/actions?query=workflow%3Atesting)
+
+[![image](https://img.shields.io/pypi/v/gns3-gui.svg)](https://pypi.python.org/pypi/gns3-gui)
+
+[![image](https://snyk.io/test/github/GNS3/gns3-gui/badge.svg)](https://snyk.io/test/github/GNS3/gns3-gui)
+
+GNS3 GUI repository.
+
+Installation
+------------
+
+Please see <https://docs.gns3.com/>
+
+Software dependencies
+---------------------
+
+PyQt5 which is either part of the Linux distribution or installable from
+PyPi. The other Python dependencies are automatically installed during
+the GNS3 GUI installation and are listed
+[here](https://github.com/GNS3/gns3-gui/blob/master/requirements.txt)
+
+For connecting to nodes using Telnet, a Telnet client is required. On
+Linux that's a terminal emulator like xterm, gnome-terminal, konsole
+plus the telnet program. For connecting to nodes with a GUI, a VNC
+client is required, optionally a SPICE client can be used for Qemu
+nodes.
+
+For using packet captures within GNS3, Wireshark should be installed.
+It's recommended, but if you don't need that functionality you can go
+without it.
+
+Development
+-----------
+
+If you want to update the interface, modify the .ui files using QT
+tools. And:
+
+``` {.bash}
+cd scripts
+python build_pyqt.py
+```
+
+### Debug
+
+If you want to see the full logs in the internal shell you can type:
+
+``` {.bash}
+debug 2
+```
+
+Or start the app with --debug flag.
+
+Due to the fact PyQT intercept you can use a web debugger for inspecting
+stuff: <https://github.com/Kozea/wdb>
+
+Security issues
+---------------
+
+Please contact us at <secur...@gns3.net>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gns3-gui-2.2.31/README.rst 
new/gns3-gui-2.2.37/README.rst
--- old/gns3-gui-2.2.31/README.rst      2022-02-26 08:52:17.000000000 +0100
+++ new/gns3-gui-2.2.37/README.rst      1970-01-01 01:00:00.000000000 +0100
@@ -1,60 +0,0 @@
-GNS3-gui
-========
-
-.. image:: https://github.com/GNS3/gns3-gui/workflows/testing/badge.svg
-    :target: https://github.com/GNS3/gns3-gui/actions?query=workflow%3Atesting
-
-.. image:: https://img.shields.io/pypi/v/gns3-gui.svg
-    :target: https://pypi.python.org/pypi/gns3-gui
-
-.. image:: https://snyk.io/test/github/GNS3/gns3-gui/badge.svg
-    :target: https://snyk.io/test/github/GNS3/gns3-gui
-
-
-GNS3 GUI repository.
-
-Installation
-------------
-
-Please see https://docs.gns3.com/
-
-Software dependencies
----------------------
-
-PyQt5 which is either part of the Linux distribution or installable from PyPi. 
The other Python dependencies are automatically installed during the GNS3 GUI 
installation and are listed `here 
<https://github.com/GNS3/gns3-gui/blob/master/requirements.txt>`_
-
-For connecting to nodes using Telnet, a Telnet client is required. On Linux 
that's a terminal emulator like xterm, gnome-terminal, konsole plus the telnet 
program. For connecting to nodes with a GUI, a VNC client is required, 
optionally a SPICE client can be used for Qemu nodes.
-
-For using packet captures within GNS3, Wireshark should be installed. It's 
recommended, but if you don't need that functionality you can go without it.
-
-Development
--------------
-
-If you want to update the interface, modify the .ui files using QT tools. And:
-
-.. code:: bash
-
-    cd scripts
-    python build_pyqt.py
-
-Debug
-"""""
-
-If you want to see the full logs in the internal shell you can type:
-
-.. code:: bash
-    
-    debug 2
-
-
-Or start the app with --debug flag.
-
-Due to the fact PyQT intercept you can use a web debugger for inspecting stuff:
-https://github.com/Kozea/wdb
-
-Security issues
-----------------
-
-Please contact us at secur...@gns3.net
-
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gns3-gui-2.2.31/SECURITY.md 
new/gns3-gui-2.2.37/SECURITY.md
--- old/gns3-gui-2.2.31/SECURITY.md     1970-01-01 01:00:00.000000000 +0100
+++ new/gns3-gui-2.2.37/SECURITY.md     2023-01-25 08:06:12.000000000 +0100
@@ -0,0 +1,5 @@
+# Security Policy
+
+## Reporting a Vulnerability
+
+Please use GitHub's report a vulnerability feature. More information can be 
found in 
https://docs.github.com/en/code-security/security-advisories/guidance-on-reporting-and-writing/privately-reporting-a-security-vulnerability
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gns3-gui-2.2.31/appveyor.yml 
new/gns3-gui-2.2.37/appveyor.yml
--- old/gns3-gui-2.2.31/appveyor.yml    2022-02-26 08:52:17.000000000 +0100
+++ new/gns3-gui-2.2.37/appveyor.yml    2023-01-25 08:06:12.000000000 +0100
@@ -1,15 +1,16 @@
 version: '{build}-{branch}'
 
-image: Visual Studio 2017
+image: Visual Studio 2022
 
 platform: x64
 
 environment:
-    PYTHON: "C:\\Python36-x64"
+    PYTHON: "C:\\Python37-x64"
     DISTUTILS_USE_SDK: "1"
 
 install:
    - cinst nmap
+   - "%PYTHON%\\python.exe -m pip install -U pip setuptools"  # upgrade pip & 
setuptools first
    - "%PYTHON%\\python.exe -m pip install -r dev-requirements.txt"
    - "%PYTHON%\\python.exe -m pip install -r win-requirements.txt"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gns3-gui-2.2.31/dev-requirements.txt 
new/gns3-gui-2.2.37/dev-requirements.txt
--- old/gns3-gui-2.2.31/dev-requirements.txt    2022-02-26 08:52:17.000000000 
+0100
+++ new/gns3-gui-2.2.37/dev-requirements.txt    2023-01-25 08:06:12.000000000 
+0100
@@ -1,5 +1,6 @@
 -rrequirements.txt
 
-pytest==6.2.4
-flake8==3.9.2
-pytest-timeout==1.4.2
+pytest==7.2.0; python_version >= '3.7'
+pytest==7.0.1; python_version < '3.7'  # v7.0.1 is the last version to support 
Python 3.6
+flake8==5.0.4
+pytest-timeout==2.1.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gns3-gui-2.2.31/gns3/console_view.py 
new/gns3-gui-2.2.37/gns3/console_view.py
--- old/gns3-gui-2.2.31/gns3/console_view.py    2022-02-26 08:52:17.000000000 
+0100
+++ new/gns3-gui-2.2.37/gns3/console_view.py    2023-01-25 08:06:12.000000000 
+0100
@@ -22,7 +22,7 @@
 import datetime
 import platform
 
-from .qt import QtCore
+from .qt import QtCore, QtWidgets
 from .topology import Topology
 from .version import __version__
 from .console_cmd import ConsoleCmd
@@ -109,6 +109,29 @@
         self.stdout = sys.stdout
         self._topology = Topology.instance()
 
+    def contextMenuEvent(self, event):
+        """
+        Handles all context menu events.
+
+        :param event: QContextMenuEvent instance
+        """
+
+        menu = self.createStandardContextMenu()
+        delete_all_action = QtWidgets.QAction("Delete All", menu)
+        delete_all_action.triggered.connect(self._deleteAllActionSlot)
+        menu.addAction(delete_all_action)
+        menu.exec_(event.globalPos());
+
+    def _deleteAllActionSlot(self):
+        """
+        Delete all action slot
+        """
+
+        self.clear()
+        self.write(self.prompt)
+        self.lines = []
+        self._clearLine()
+
     def _writeMessageSlot(self, message, level):
         """
         Write a message in the console.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gns3-gui-2.2.31/gns3/crash_report.py 
new/gns3-gui-2.2.37/gns3/crash_report.py
--- old/gns3-gui-2.2.31/gns3/crash_report.py    2022-02-26 08:52:17.000000000 
+0100
+++ new/gns3-gui-2.2.37/gns3/crash_report.py    2023-01-25 08:06:12.000000000 
+0100
@@ -51,7 +51,7 @@
     Report crash to a third party service
     """
 
-    DSN = 
"https://3af06592e0804039befaae43066b8fb8:73e4b6fd709e4622a60c86ac5ece6...@o19455.ingest.sentry.io/38506";
+    DSN = 
"https://433337b5780f4fe8abec8ee5e85c5...@o19455.ingest.sentry.io/38506";
     _instance = None
 
     def __init__(self):
@@ -86,7 +86,7 @@
                 "os:release": platform.release(),
                 "os:win_32": " ".join(platform.win32_ver()),
                 "os:mac": "{} {}".format(platform.mac_ver()[0], 
platform.mac_ver()[2]),
-                "os:linux": " ".join(distro.linux_distribution()),
+                "os:linux": distro.name(pretty=True),
 
             }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gns3-gui-2.2.31/gns3/dialogs/edit_project_dialog.py 
new/gns3-gui-2.2.37/gns3/dialogs/edit_project_dialog.py
--- old/gns3-gui-2.2.31/gns3/dialogs/edit_project_dialog.py     2022-02-26 
08:52:17.000000000 +0100
+++ new/gns3-gui-2.2.37/gns3/dialogs/edit_project_dialog.py     2023-01-25 
08:06:12.000000000 +0100
@@ -46,19 +46,11 @@
         self.uiNewVarButton.clicked.connect(self.onAddNewVariable)
         self.uiGlobalVariablesGrid.addWidget(self.uiNewVarButton, 0, 3, 
QtCore.Qt.AlignRight)
 
-        self._variables = self.setUpVariables()
+        self._variables = self._project.variables()
+        if not self._variables:
+            self._variables = [{"name": "", "value": ""}]
         self.updateGlobalVariables()
 
-    def setUpVariables(self):
-        new_variable = {"name": "", "value": ""}
-        variables = self._project.variables()
-
-        if variables is not None:
-            variables.append(new_variable)
-        else:
-            variables = [new_variable]
-        return variables
-
     def updateGlobalVariables(self):
         while True:
             item = self.uiGlobalVariablesGrid.takeAt(1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gns3-gui-2.2.31/gns3/dialogs/preferences_dialog.py 
new/gns3-gui-2.2.37/gns3/dialogs/preferences_dialog.py
--- old/gns3-gui-2.2.31/gns3/dialogs/preferences_dialog.py      2022-02-26 
08:52:17.000000000 +0100
+++ new/gns3-gui-2.2.37/gns3/dialogs/preferences_dialog.py      2023-01-25 
08:06:12.000000000 +0100
@@ -131,6 +131,7 @@
             QtWidgets.QLineEdit: "textChanged",
             QtWidgets.QPlainTextEdit: "textChanged",
             # QtWidgets.QTreeWidget: "itemChanged",
+            QtWidgets.QTreeWidget: "itemDoubleClicked",
             QtWidgets.QComboBox: "currentIndexChanged",
             QtWidgets.QSpinBox: "valueChanged",
             QtWidgets.QAbstractButton: "pressed"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gns3-gui-2.2.31/gns3/graphics_view.py 
new/gns3-gui-2.2.37/gns3/graphics_view.py
--- old/gns3-gui-2.2.31/gns3/graphics_view.py   2022-02-26 08:52:17.000000000 
+0100
+++ new/gns3-gui-2.2.37/gns3/graphics_view.py   2023-01-25 08:06:12.000000000 
+0100
@@ -121,8 +121,6 @@
     def setZoom(self, zoom):
         """
         Sets zoom of the Graphics View
-        :param zoom:
-        :return:
         """
         if zoom:
             factor = zoom / 100.
@@ -193,6 +191,9 @@
         # clear all objects on the scene
         self.scene().clear()
 
+        # reset zoom / scale
+        self.resetTransform()
+
 
     def _loadSettings(self):
         """
@@ -659,7 +660,7 @@
         if not self._adding_link:
             if isinstance(item, NodeItem) and item.node().initialized():
                 item.setSelected(True)
-                if item.node().status() == Node.stopped or 
item.node().consoleType() == "none":
+                if item.node().status() == Node.stopped or 
item.node().consoleType() == "none" or item.node().consoleType() is None:
                     self.configureSlot()
                     return
                 else:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gns3-gui-2.2.31/gns3/http_client.py 
new/gns3-gui-2.2.37/gns3/http_client.py
--- old/gns3-gui-2.2.31/gns3/http_client.py     2022-02-26 08:52:17.000000000 
+0100
+++ new/gns3-gui-2.2.37/gns3/http_client.py     2023-01-25 08:06:12.000000000 
+0100
@@ -404,17 +404,12 @@
             self._query_waiting_connections = []
             return
 
-        if params["version"].split("-")[0] != __version__.split("-")[0]:
+        if params["version"].split("+")[0] != __version__.split("+")[0]:
             msg = "Client version {} is not the same as server (controller) 
version {}".format(__version__, params["version"])
-            # Stable release
-            if __version_info__[3] == 0:
-                log.error(msg)
-                for request, callback in self._query_waiting_connections:
-                    if callback is not None:
-                        callback({"message": msg}, error=True, server=server)
-                return
-            # We don't allow different major version to interact even with dev 
build
-            elif parse_version(__version__)[:2] != 
parse_version(params["version"])[:2]:
+            # We don't allow different versions to interact even with dev build
+            # (excepting post release corrections e.g 2.2.32.1, occassionally 
done when fixing a packaging problem)
+            # TODO: we should probably follow this standard starting with 
v3.0: https://semver.org/
+            if parse_version(__version__)[:3] != 
parse_version(params["version"])[:3]:
                 log.error(msg)
                 for request, callback in self._query_waiting_connections:
                     if callback is not None:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gns3-gui-2.2.31/gns3/main.py 
new/gns3-gui-2.2.37/gns3/main.py
--- old/gns3-gui-2.2.31/gns3/main.py    2022-02-26 08:52:17.000000000 +0100
+++ new/gns3-gui-2.2.37/gns3/main.py    2023-01-25 08:06:12.000000000 +0100
@@ -220,10 +220,14 @@
         if not options.debug:
             try:
                 # hide the console
+                # win32console.AllocConsole()
                 console_window = win32console.GetConsoleWindow()
-                win32gui.ShowWindow(console_window, win32con.SW_HIDE)
+                if console_window:
+                    win32gui.ShowWindow(console_window, win32con.SW_HIDE)
+                else:
+                    log.warning("Could not get the console window")
             except win32console.error as e:
-                print("warning: could not allocate console: {}".format(e))
+                log.warning("Could not allocate console: {}".format(e))
 
     local_config = LocalConfig.instance()
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gns3-gui-2.2.31/gns3/main_window.py 
new/gns3-gui-2.2.37/gns3/main_window.py
--- old/gns3-gui-2.2.31/gns3/main_window.py     2022-02-26 08:52:17.000000000 
+0100
+++ new/gns3-gui-2.2.37/gns3/main_window.py     2023-01-25 08:06:12.000000000 
+0100
@@ -234,6 +234,7 @@
         self.uiShowGridAction.triggered.connect(self._showGridActionSlot)
         self.uiSnapToGridAction.triggered.connect(self._snapToGridActionSlot)
         self.uiLockAllAction.triggered.connect(self._lockActionSlot)
+        self.uiResetDocksAction.triggered.connect(self._resetDocksSlot)
 
         # tool menu connections
         self.uiWebUIAction.triggered.connect(self._openWebInterfaceActionSlot)
@@ -245,6 +246,7 @@
         self.uiReloadAllAction.triggered.connect(self._reloadAllActionSlot)
         
self.uiAuxConsoleAllAction.triggered.connect(self._auxConsoleAllActionSlot)
         self.uiConsoleAllAction.triggered.connect(self._consoleAllActionSlot)
+        
self.uiResetConsoleAllAction.triggered.connect(self._consoleResetAllActionSlot)
 
         # device menu is contextual and is build on-the-fly
         self.uiDeviceMenu.aboutToShow.connect(self._deviceMenuActionSlot)
@@ -366,6 +368,16 @@
                         item.updateNode()
                     item.update()
 
+    def _resetDocksSlot(self):
+        """
+        Reset the dock widgets.
+        """
+
+        self.uiTopologySummaryDockWidget.setFloating(False)
+        self.uiComputeSummaryDockWidget.setFloating(False)
+        self.uiConsoleDockWidget.setFloating(False)
+        self.uiNodesDockWidget.setFloating(False)
+
     def analyticsClient(self):
         """
         Return the analytics client
@@ -859,6 +871,15 @@
         if project is not None:
             project.reload_all_nodes()
 
+    def _consoleResetAllActionSlot(self):
+        """
+        Slot called when reset all console connections.
+        """
+
+        project = Topology.instance().project()
+        if project is not None:
+            project.reset_console_all_nodes()
+
     def _deviceMenuActionSlot(self):
         """
         Slot to contextually show the device menu.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gns3-gui-2.2.31/gns3/modules/docker/docker_vm.py 
new/gns3-gui-2.2.37/gns3/modules/docker/docker_vm.py
--- old/gns3-gui-2.2.31/gns3/modules/docker/docker_vm.py        2022-02-26 
08:52:17.000000000 +0100
+++ new/gns3-gui-2.2.37/gns3/modules/docker/docker_vm.py        2023-01-25 
08:06:12.000000000 +0100
@@ -117,6 +117,18 @@
         return DockerVMConfigurationPage
 
     @staticmethod
+    def validateHostname(hostname):
+        """
+        Checks if the hostname is valid.
+
+        :param hostname: hostname to check
+
+        :returns: boolean
+        """
+
+        return DockerVM.isValidRfc1123Hostname(hostname)
+
+    @staticmethod
     def defaultSymbol():
         """
         Returns the default symbol path for this node.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gns3-gui-2.2.31/gns3/modules/docker/ui/docker_vm_configuration_page.ui 
new/gns3-gui-2.2.37/gns3/modules/docker/ui/docker_vm_configuration_page.ui
--- old/gns3-gui-2.2.31/gns3/modules/docker/ui/docker_vm_configuration_page.ui  
2022-02-26 08:52:17.000000000 +0100
+++ new/gns3-gui-2.2.37/gns3/modules/docker/ui/docker_vm_configuration_page.ui  
2023-01-25 08:06:12.000000000 +0100
@@ -177,10 +177,25 @@
         <widget class="QComboBox" name="uiConsoleResolutionComboBox">
          <item>
           <property name="text">
+           <string>2560x1440</string>
+          </property>
+         </item>
+         <item>
+          <property name="text">
            <string>1920x1080</string>
           </property>
          </item>
          <item>
+          <property name="text">
+           <string>1680x1050</string>
+          </property>
+         </item>
+         <item>
+          <property name="text">
+           <string>1440x900</string>
+          </property>
+         </item>
+         <item>
           <property name="text">
            <string>1366x768</string>
           </property>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gns3-gui-2.2.31/gns3/modules/docker/ui/docker_vm_configuration_page_ui.py 
new/gns3-gui-2.2.37/gns3/modules/docker/ui/docker_vm_configuration_page_ui.py
--- 
old/gns3-gui-2.2.31/gns3/modules/docker/ui/docker_vm_configuration_page_ui.py   
    2022-02-26 08:52:17.000000000 +0100
+++ 
new/gns3-gui-2.2.37/gns3/modules/docker/ui/docker_vm_configuration_page_ui.py   
    2023-01-25 08:06:12.000000000 +0100
@@ -2,12 +2,15 @@
 
 # Form implementation generated from reading ui file 
'/home/grossmj/PycharmProjects/gns3-gui/gns3/modules/docker/ui/docker_vm_configuration_page.ui'
 #
-# Created by: PyQt5 UI code generator 5.11.3
+# Created by: PyQt5 UI code generator 5.15.7
 #
-# WARNING! All changes made in this file will be lost!
+# 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.
+
 
 from PyQt5 import QtCore, QtGui, QtWidgets
 
+
 class Ui_dockerVMConfigPageWidget(object):
     def setupUi(self, dockerVMConfigPageWidget):
         dockerVMConfigPageWidget.setObjectName("dockerVMConfigPageWidget")
@@ -100,6 +103,9 @@
         self.uiConsoleResolutionComboBox.addItem("")
         self.uiConsoleResolutionComboBox.addItem("")
         self.uiConsoleResolutionComboBox.addItem("")
+        self.uiConsoleResolutionComboBox.addItem("")
+        self.uiConsoleResolutionComboBox.addItem("")
+        self.uiConsoleResolutionComboBox.addItem("")
         self.gridLayout.addWidget(self.uiConsoleResolutionComboBox, 8, 1, 1, 1)
         self.label = QtWidgets.QLabel(self.tab)
         self.label.setObjectName("label")
@@ -190,13 +196,16 @@
         self.uiConsoleTypeComboBox.setItemText(4, 
_translate("dockerVMConfigPageWidget", "none"))
         
self.uiConsoleAutoStartCheckBox.setText(_translate("dockerVMConfigPageWidget", 
"Auto start console"))
         
self.uiConsoleResolutionLabel.setText(_translate("dockerVMConfigPageWidget", 
"VNC console resolution:"))
-        self.uiConsoleResolutionComboBox.setItemText(0, 
_translate("dockerVMConfigPageWidget", "1920x1080"))
-        self.uiConsoleResolutionComboBox.setItemText(1, 
_translate("dockerVMConfigPageWidget", "1366x768"))
-        self.uiConsoleResolutionComboBox.setItemText(2, 
_translate("dockerVMConfigPageWidget", "1280x1024"))
-        self.uiConsoleResolutionComboBox.setItemText(3, 
_translate("dockerVMConfigPageWidget", "1280x800"))
-        self.uiConsoleResolutionComboBox.setItemText(4, 
_translate("dockerVMConfigPageWidget", "1024x768"))
-        self.uiConsoleResolutionComboBox.setItemText(5, 
_translate("dockerVMConfigPageWidget", "800x600"))
-        self.uiConsoleResolutionComboBox.setItemText(6, 
_translate("dockerVMConfigPageWidget", "640x480"))
+        self.uiConsoleResolutionComboBox.setItemText(0, 
_translate("dockerVMConfigPageWidget", "2560x1440"))
+        self.uiConsoleResolutionComboBox.setItemText(1, 
_translate("dockerVMConfigPageWidget", "1920x1080"))
+        self.uiConsoleResolutionComboBox.setItemText(2, 
_translate("dockerVMConfigPageWidget", "1680x1050"))
+        self.uiConsoleResolutionComboBox.setItemText(3, 
_translate("dockerVMConfigPageWidget", "1440x900"))
+        self.uiConsoleResolutionComboBox.setItemText(4, 
_translate("dockerVMConfigPageWidget", "1366x768"))
+        self.uiConsoleResolutionComboBox.setItemText(5, 
_translate("dockerVMConfigPageWidget", "1280x1024"))
+        self.uiConsoleResolutionComboBox.setItemText(6, 
_translate("dockerVMConfigPageWidget", "1280x800"))
+        self.uiConsoleResolutionComboBox.setItemText(7, 
_translate("dockerVMConfigPageWidget", "1024x768"))
+        self.uiConsoleResolutionComboBox.setItemText(8, 
_translate("dockerVMConfigPageWidget", "800x600"))
+        self.uiConsoleResolutionComboBox.setItemText(9, 
_translate("dockerVMConfigPageWidget", "640x480"))
         self.label.setText(_translate("dockerVMConfigPageWidget", "HTTP port 
in the container:"))
         self.label_2.setText(_translate("dockerVMConfigPageWidget", "HTTP 
path:"))
         self.uiEnvironmentLabel.setText(_translate("dockerVMConfigPageWidget", 
"Environment variables:\n"
@@ -217,4 +226,3 @@
         
self.uiExtraVolumeTextEdit.setPlaceholderText(_translate("dockerVMConfigPageWidget",
 "e.g. /etc/sysctl.d"))
         self.uiTabWidget.setTabText(self.uiTabWidget.indexOf(self.tab_2), 
_translate("dockerVMConfigPageWidget", "Advanced"))
         self.uiTabWidget.setTabText(self.uiTabWidget.indexOf(self.tab_3), 
_translate("dockerVMConfigPageWidget", "Usage"))
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gns3-gui-2.2.31/gns3/modules/dynamips/nodes/router.py 
new/gns3-gui-2.2.37/gns3/modules/dynamips/nodes/router.py
--- old/gns3-gui-2.2.31/gns3/modules/dynamips/nodes/router.py   2022-02-26 
08:52:17.000000000 +0100
+++ new/gns3-gui-2.2.37/gns3/modules/dynamips/nodes/router.py   2023-01-25 
08:06:12.000000000 +0100
@@ -310,8 +310,8 @@
 
         # IOS names must start with a letter, end with a letter or digit, and
         # have as interior characters only letters, digits, and hyphens.
-        # They must be 63 characters or fewer.
-        if re.search(r"""^[\-\w]+$""", hostname) and len(hostname) <= 63:
+        # They must be 63 characters or fewer (ARPANET rules).
+        if re.search(r"""^(?!-|[0-9])[a-zA-Z0-9-]{1,63}(?<!-)$""", hostname):
             return True
         return False
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gns3-gui-2.2.31/gns3/modules/iou/iou_device.py 
new/gns3-gui-2.2.37/gns3/modules/iou/iou_device.py
--- old/gns3-gui-2.2.31/gns3/modules/iou/iou_device.py  2022-02-26 
08:52:17.000000000 +0100
+++ new/gns3-gui-2.2.37/gns3/modules/iou/iou_device.py  2023-01-25 
08:06:12.000000000 +0100
@@ -131,8 +131,8 @@
 
         # IOS names must start with a letter, end with a letter or digit, and
         # have as interior characters only letters, digits, and hyphens.
-        # They must be 63 characters or fewer.
-        if re.search(r"""^[\-\w]+$""", hostname) and len(hostname) <= 63:
+        # They must be 63 characters or fewer (ARPANET rules).
+        if re.search(r"""^(?!-|[0-9])[a-zA-Z0-9-]{1,63}(?<!-)$""", hostname):
             return True
         return False
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gns3-gui-2.2.31/gns3/modules/qemu/dialogs/qemu_vm_wizard.py 
new/gns3-gui-2.2.37/gns3/modules/qemu/dialogs/qemu_vm_wizard.py
--- old/gns3-gui-2.2.31/gns3/modules/qemu/dialogs/qemu_vm_wizard.py     
2022-02-26 08:52:17.000000000 +0100
+++ new/gns3-gui-2.2.37/gns3/modules/qemu/dialogs/qemu_vm_wizard.py     
2023-01-25 08:06:12.000000000 +0100
@@ -157,6 +157,7 @@
 
         if self.uiHdaDiskImageLineEdit.text().strip():
             settings["hda_disk_image"] = 
self.uiHdaDiskImageLineEdit.text().strip()
+            settings["hda_disk_interface"] = "ide"
 
         if self.uiLegacyASACheckBox.isChecked():
             # special settings for legacy ASA VM
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gns3-gui-2.2.31/gns3/modules/qemu/pages/qemu_vm_configuration_page.py 
new/gns3-gui-2.2.37/gns3/modules/qemu/pages/qemu_vm_configuration_page.py
--- old/gns3-gui-2.2.31/gns3/modules/qemu/pages/qemu_vm_configuration_page.py   
2022-02-26 08:52:17.000000000 +0100
+++ new/gns3-gui-2.2.37/gns3/modules/qemu/pages/qemu_vm_configuration_page.py   
2023-01-25 08:06:12.000000000 +0100
@@ -578,6 +578,7 @@
             self.uiProcessPriorityComboBox.setCurrentIndex(index)
         self.uiQemuOptionsLineEdit.setText(settings["options"])
         self.uiUsageTextEdit.setPlainText(settings["usage"])
+        self.uiTPMCheckBox.setChecked(settings["tpm"])
 
     def saveSettings(self, settings, node=None, group=False):
         """
@@ -692,4 +693,5 @@
         settings["process_priority"] = 
self.uiProcessPriorityComboBox.currentText().lower()
         settings["options"] = self.uiQemuOptionsLineEdit.text()
         settings["usage"] = self.uiUsageTextEdit.toPlainText()
+        settings["tpm"] = self.uiTPMCheckBox.isChecked()
         return settings
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gns3-gui-2.2.31/gns3/modules/qemu/qemu_vm.py 
new/gns3-gui-2.2.37/gns3/modules/qemu/qemu_vm.py
--- old/gns3-gui-2.2.31/gns3/modules/qemu/qemu_vm.py    2022-02-26 
08:52:17.000000000 +0100
+++ new/gns3-gui-2.2.37/gns3/modules/qemu/qemu_vm.py    2023-01-25 
08:06:12.000000000 +0100
@@ -19,6 +19,8 @@
 QEMU VM implementation.
 """
 
+import re
+
 from gns3.node import Node
 from .settings import QEMU_VM_SETTINGS
 
@@ -72,6 +74,7 @@
                             "mac_address": QEMU_VM_SETTINGS["mac_address"],
                             "legacy_networking": 
QEMU_VM_SETTINGS["legacy_networking"],
                             "replicate_network_connection_state": 
QEMU_VM_SETTINGS["replicate_network_connection_state"],
+                            "tpm": QEMU_VM_SETTINGS["tpm"],
                             "create_config_disk": 
QEMU_VM_SETTINGS["create_config_disk"],
                             "platform": QEMU_VM_SETTINGS["platform"],
                             "on_close": QEMU_VM_SETTINGS["on_close"],
@@ -164,6 +167,18 @@
         return QemuVMConfigurationPage
 
     @staticmethod
+    def validateHostname(hostname):
+        """
+        Checks if the hostname is valid.
+
+        :param hostname: hostname to check
+
+        :returns: boolean
+        """
+
+        return QemuVM.isValidRfc1123Hostname(hostname)
+
+    @staticmethod
     def defaultSymbol():
         """
         Returns the default symbol path for this node.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gns3-gui-2.2.31/gns3/modules/qemu/settings.py 
new/gns3-gui-2.2.37/gns3/modules/qemu/settings.py
--- old/gns3-gui-2.2.31/gns3/modules/qemu/settings.py   2022-02-26 
08:52:17.000000000 +0100
+++ new/gns3-gui-2.2.37/gns3/modules/qemu/settings.py   2023-01-25 
08:06:12.000000000 +0100
@@ -57,6 +57,7 @@
     "mac_address": "",
     "legacy_networking": False,
     "replicate_network_connection_state": True,
+    "tpm": False,
     "create_config_disk": False,
     "on_close": "power_off",
     "platform": "",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gns3-gui-2.2.31/gns3/modules/qemu/ui/qemu_vm_configuration_page.ui 
new/gns3-gui-2.2.37/gns3/modules/qemu/ui/qemu_vm_configuration_page.ui
--- old/gns3-gui-2.2.31/gns3/modules/qemu/ui/qemu_vm_configuration_page.ui      
2022-02-26 08:52:17.000000000 +0100
+++ new/gns3-gui-2.2.37/gns3/modules/qemu/ui/qemu_vm_configuration_page.ui      
2023-01-25 08:06:12.000000000 +0100
@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>941</width>
-    <height>939</height>
+    <width>478</width>
+    <height>550</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -890,7 +890,7 @@
             </property>
            </widget>
           </item>
-          <item row="1" column="0" colspan="2">
+          <item row="2" column="0" colspan="2">
            <widget class="QCheckBox" name="uiBaseVMCheckBox">
             <property name="enabled">
              <bool>true</bool>
@@ -900,10 +900,18 @@
             </property>
            </widget>
           </item>
+          <item row="1" column="0" colspan="2">
+           <widget class="QCheckBox" name="uiTPMCheckBox">
+            <property name="text">
+             <string>Enable Trusted Platform Module (TPM)</string>
+            </property>
+           </widget>
+          </item>
          </layout>
          <zorder>uiQemuOptionsLineEdit</zorder>
          <zorder>uiQemuOptionsLabel</zorder>
          <zorder>uiBaseVMCheckBox</zorder>
+         <zorder>uiTPMCheckBox</zorder>
         </widget>
        </item>
        <item>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gns3-gui-2.2.31/gns3/modules/qemu/ui/qemu_vm_configuration_page_ui.py 
new/gns3-gui-2.2.37/gns3/modules/qemu/ui/qemu_vm_configuration_page_ui.py
--- old/gns3-gui-2.2.31/gns3/modules/qemu/ui/qemu_vm_configuration_page_ui.py   
2022-02-26 08:52:17.000000000 +0100
+++ new/gns3-gui-2.2.37/gns3/modules/qemu/ui/qemu_vm_configuration_page_ui.py   
2023-01-25 08:06:12.000000000 +0100
@@ -2,9 +2,10 @@
 
 # Form implementation generated from reading ui file 
'/home/grossmj/PycharmProjects/gns3-gui/gns3/modules/qemu/ui/qemu_vm_configuration_page.ui'
 #
-# Created by: PyQt5 UI code generator 5.13.2
+# Created by: PyQt5 UI code generator 5.15.6
 #
-# WARNING! All changes made in this file will be lost!
+# 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.
 
 
 from PyQt5 import QtCore, QtGui, QtWidgets
@@ -13,7 +14,7 @@
 class Ui_QemuVMConfigPageWidget(object):
     def setupUi(self, QemuVMConfigPageWidget):
         QemuVMConfigPageWidget.setObjectName("QemuVMConfigPageWidget")
-        QemuVMConfigPageWidget.resize(941, 939)
+        QemuVMConfigPageWidget.resize(478, 550)
         self.verticalLayout = QtWidgets.QVBoxLayout(QemuVMConfigPageWidget)
         self.verticalLayout.setObjectName("verticalLayout")
         self.uiQemutabWidget = QtWidgets.QTabWidget(QemuVMConfigPageWidget)
@@ -436,10 +437,14 @@
         self.uiBaseVMCheckBox = QtWidgets.QCheckBox(self.groupBox)
         self.uiBaseVMCheckBox.setEnabled(True)
         self.uiBaseVMCheckBox.setObjectName("uiBaseVMCheckBox")
-        self.gridLayout_3.addWidget(self.uiBaseVMCheckBox, 1, 0, 1, 2)
+        self.gridLayout_3.addWidget(self.uiBaseVMCheckBox, 2, 0, 1, 2)
+        self.uiTPMCheckBox = QtWidgets.QCheckBox(self.groupBox)
+        self.uiTPMCheckBox.setObjectName("uiTPMCheckBox")
+        self.gridLayout_3.addWidget(self.uiTPMCheckBox, 1, 0, 1, 2)
         self.uiQemuOptionsLineEdit.raise_()
         self.uiQemuOptionsLabel.raise_()
         self.uiBaseVMCheckBox.raise_()
+        self.uiTPMCheckBox.raise_()
         self.verticalLayout_2.addWidget(self.groupBox)
         spacerItem4 = QtWidgets.QSpacerItem(20, 40, 
QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
         self.verticalLayout_2.addItem(spacerItem4)
@@ -556,5 +561,6 @@
 "</ul>\n"
 "</body></html>"))
         self.uiBaseVMCheckBox.setText(_translate("QemuVMConfigPageWidget", 
"Use as a linked base VM"))
+        self.uiTPMCheckBox.setText(_translate("QemuVMConfigPageWidget", 
"Enable Trusted Platform Module (TPM)"))
         
self.uiQemutabWidget.setTabText(self.uiQemutabWidget.indexOf(self.uiAdvancedSettingsTab),
 _translate("QemuVMConfigPageWidget", "Advanced"))
         
self.uiQemutabWidget.setTabText(self.uiQemutabWidget.indexOf(self.uiUsageTab), 
_translate("QemuVMConfigPageWidget", "Usage"))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gns3-gui-2.2.31/gns3/node.py 
new/gns3-gui-2.2.37/gns3/node.py
--- old/gns3-gui-2.2.31/gns3/node.py    2022-02-26 08:52:17.000000000 +0100
+++ new/gns3-gui-2.2.37/gns3/node.py    2023-01-25 08:06:12.000000000 +0100
@@ -17,6 +17,7 @@
 
 import os
 import pathlib
+import re
 
 from gns3.controller import Controller
 from gns3.ports.ethernet_port import EthernetPort
@@ -650,10 +651,11 @@
 
         if not console_type:
             console_type = self.consoleType()
-        if console_type == "vnc":
-            return general_settings["vnc_console_command"]
-        elif console_type.startswith("spice"):
-            return general_settings["spice_console_command"]
+        if console_type:
+            if console_type == "vnc":
+                return general_settings["vnc_console_command"]
+            elif console_type.startswith("spice"):
+                return general_settings["spice_console_command"]
         return general_settings["telnet_console_command"]
 
     def consoleType(self):
@@ -864,6 +866,33 @@
             log.error("Error while import config: 
{}".format(result["message"]))
 
     @staticmethod
+    def isValidRfc1123Hostname(hostname):
+        """
+        Validate a hostname according to RFC 1123
+
+        Each element of the hostname must be from 1 to 63 characters long
+        and the entire hostname, including the dots, can be at most 253
+        characters long.  Valid characters for hostnames are ASCII
+        letters from a to z, the digits from 0 to 9, and the hyphen (-).
+        A hostname may not start with a hyphen.
+        """
+
+        if hostname[-1] == ".":
+            hostname = hostname[:-1]  # strip exactly one dot from the right, 
if present
+
+        if len(hostname) > 253:
+            return False
+
+        labels = hostname.split(".")
+
+        # the TLD must be not all-numeric
+        if re.match(r"[0-9]+$", labels[-1]):
+            return False
+
+        allowed = re.compile(r"(?!-)[a-zA-Z0-9-]{1,63}(?<!-)$")
+        return all(allowed.match(label) for label in labels)
+
+    @staticmethod
     def onCloseOptions():
         """
         Returns the on close options.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gns3-gui-2.2.31/gns3/project.py 
new/gns3-gui-2.2.37/gns3/project.py
--- old/gns3-gui-2.2.31/gns3/project.py 2022-02-26 08:52:17.000000000 +0100
+++ new/gns3-gui-2.2.37/gns3/project.py 2023-01-25 08:06:12.000000000 +0100
@@ -365,6 +365,15 @@
 
         
Controller.instance().post("/projects/{project_id}/nodes/reload".format(project_id=self._id),
 None, body={}, timeout=None)
 
+    def reset_console_all_nodes(self):
+        """Reset console for all nodes belonging to this project"""
+
+        # Don't do anything if the project doesn't exist on the server
+        if self._id is None:
+            return
+
+        
Controller.instance().post("/projects/{project_id}/nodes/console/reset".format(project_id=self._id),
 None, body={}, timeout=None)
+
     def get(self, path, callback, **kwargs):
         """
         HTTP GET on the remote server
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gns3-gui-2.2.31/gns3/registry/appliance.py 
new/gns3-gui-2.2.37/gns3/registry/appliance.py
--- old/gns3-gui-2.2.31/gns3/registry/appliance.py      2022-02-26 
08:52:17.000000000 +0100
+++ new/gns3-gui-2.2.37/gns3/registry/appliance.py      2023-01-25 
08:06:12.000000000 +0100
@@ -59,7 +59,7 @@
         """
         if "registry_version" not in self._appliance:
             raise ApplianceError("Invalid appliance configuration please 
report the issue on https://github.com/GNS3/gns3-registry";)
-        if self._appliance["registry_version"] > 6:
+        if self._appliance["registry_version"] > 7:
             raise ApplianceError("Please update GNS3 in order to install this 
appliance")
 
         with open(get_resource(os.path.join("schemas", "appliance.json"))) as 
f:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gns3-gui-2.2.31/gns3/schemas/appliance.json 
new/gns3-gui-2.2.37/gns3/schemas/appliance.json
--- old/gns3-gui-2.2.31/gns3/schemas/appliance.json     2022-02-26 
08:52:17.000000000 +0100
+++ new/gns3-gui-2.2.37/gns3/schemas/appliance.json     2023-01-25 
08:06:12.000000000 +0100
@@ -350,6 +350,14 @@
             "maximum": 100,
             "title": "Throttle the CPU"
         },
+        "tpm": {
+            "type": "boolean",
+            "title": "Enable the Trusted Platform Module (TPM)"
+        },
+        "on_close": {
+          "title": "Action to execute on the VM is closed",
+          "enum": ["power_off", "shutdown_signal", "save_vm_state"]
+        },
         "process_priority": {
             "title": "Process priority for QEMU",
             "enum": ["realtime",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gns3-gui-2.2.31/gns3/settings.py 
new/gns3-gui-2.2.37/gns3/settings.py
--- old/gns3-gui-2.2.31/gns3/settings.py        2022-02-26 08:52:17.000000000 
+0100
+++ new/gns3-gui-2.2.37/gns3/settings.py        2023-01-25 08:06:12.000000000 
+0100
@@ -56,7 +56,6 @@
         program_files_x86 = program_files = os.environ["PROGRAMFILES"]
 
     PRECONFIGURED_TELNET_CONSOLE_COMMANDS = {'Putty (normal standalone 
version)': 'putty_standalone.exe -telnet %h %p -loghost "%d"',
-                                             'Putty (custom deprecated 
version)': 'putty.exe -telnet %h %p -wt "%d" -gns3 5 -skin 4',
                                              'MobaXterm': 
r'"{}\Mobatek\MobaXterm Personal Edition\MobaXterm.exe" -newtab "telnet %h 
%p"'.format(program_files_x86),
                                              'Royal TS V3': 
r'{}\code4ward.net\Royal TS V3\RTS3App.exe /connectadhoc:%h /adhoctype:terminal 
/p:IsTelnetConnection="true" /p:ConnectionType="telnet;Telnet Connection" 
/p:Port="%p" /p:Name="%d"'.format(program_files),
                                              'Royal TS V5': r'"{}\Royal TS 
V5\RoyalTS.exe" /protocol:terminal /using:adhoc /uri:"%h" /property:Port="%p" 
/property:IsTelnetConnection="true" 
/property:Name="%d"'.format(program_files_x86),
@@ -65,6 +64,7 @@
                                              'SecureCRT (personal profile)': 
r'"{}\AppData\Local\VanDyke Software\SecureCRT\SecureCRT.exe" /T /N "%d" 
/TELNET %h %p'.format(userprofile),
                                              'TeraTerm Pro': 
r'"{}\teraterm\ttermpro.exe" /W="%d" /M="ttstart.macro" /T=1 %h 
%p'.format(program_files_x86),
                                              'Telnet': 'telnet %h %p',
+                                             'Windows Terminal': 'wt.exe -w 1 
new-tab --title %d telnet %h %p',
                                              'Xshell 4': 
r'"{}\NetSarang\Xshell 4\xshell.exe" -url 
telnet://%h:%p'.format(program_files_x86),
                                              'Xshell 5': 
r'"{}\NetSarang\Xshell 5\xshell.exe" -url telnet://%h:%p -newtab 
%d'.format(program_files_x86),
                                              'ZOC 6': r'"{}\ZOC6\zoc.exe" 
"/TELNET:%h:%p" /TABBED "/TITLE:%d"'.format(program_files_x86)}
@@ -141,7 +141,6 @@
                     r""" -e 'end tell'""",
         'Royal TSX': "open 'rtsx://telnet%3A%2F%2F%h:%p'",
         'SecureCRT': '/Applications/SecureCRT.app/Contents/MacOS/SecureCRT /N 
"%d" /T /TELNET %h %p',
-        'Windows Terminal': 'wt.exe -w 1 new-tab --title %d telnet %h %p',
         'ZOC 6': '/Applications/zoc6.app/Contents/MacOS/zoc6 "/TELNET:%h:%p" 
/TABBED "/TITLE:%d"',
         'ZOC 7': '/Applications/zoc7.app/Contents/MacOS/zoc7 "/TELNET:%h:%p" 
/TABBED "/TITLE:%d"',
         'ZOC 8': '/Applications/zoc8.app/Contents/MacOS/zoc8 "/TELNET:%h:%p" 
/TABBED "/TITLE:%d"'
@@ -213,7 +212,7 @@
 if sys.platform.startswith("win"):
     # Windows
     PRECONFIGURED_SPICE_CONSOLE_COMMANDS = {
-        'Remote Viewer': r'"{}\VirtViewer v7.0-256\bin\remote-viewer.exe" 
spice://%h:%p'.format(program_files),
+        'Remote Viewer': r'"{}\VirtViewer v11.0-256\bin\remote-viewer.exe" 
spice://%h:%p'.format(program_files),
     }
 
     # default Windows SPICE console command
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gns3-gui-2.2.31/gns3/ui/main_window.ui 
new/gns3-gui-2.2.37/gns3/ui/main_window.ui
--- old/gns3-gui-2.2.31/gns3/ui/main_window.ui  2022-02-26 08:52:17.000000000 
+0100
+++ new/gns3-gui-2.2.37/gns3/ui/main_window.ui  2023-01-25 08:06:12.000000000 
+0100
@@ -10,7 +10,7 @@
     <x>0</x>
     <y>0</y>
     <width>986</width>
-    <height>716</height>
+    <height>719</height>
    </rect>
   </property>
   <property name="contextMenuPolicy">
@@ -38,7 +38,16 @@
   </property>
   <widget class="QWidget" name="uiCentralWidget">
    <layout class="QGridLayout">
-    <property name="margin">
+    <property name="leftMargin">
+     <number>0</number>
+    </property>
+    <property name="topMargin">
+     <number>0</number>
+    </property>
+    <property name="rightMargin">
+     <number>0</number>
+    </property>
+    <property name="bottomMargin">
      <number>0</number>
     </property>
     <property name="spacing">
@@ -62,7 +71,7 @@
      <x>0</x>
      <y>0</y>
      <width>986</width>
-     <height>42</height>
+     <height>22</height>
     </rect>
    </property>
    <widget class="QMenu" name="uiEditMenu">
@@ -129,6 +138,7 @@
     <addaction name="uiShowPortNamesAction"/>
     <addaction name="uiLockAllAction"/>
     <addaction name="separator"/>
+    <addaction name="uiResetDocksAction"/>
     <addaction name="uiDocksMenu"/>
    </widget>
    <widget class="QMenu" name="uiControlMenu">
@@ -141,6 +151,7 @@
     <addaction name="uiReloadAllAction"/>
     <addaction name="uiAuxConsoleAllAction"/>
     <addaction name="uiConsoleAllAction"/>
+    <addaction name="uiResetConsoleAllAction"/>
    </widget>
    <widget class="QMenu" name="uiAnnotateMenu">
     <property name="title">
@@ -228,7 +239,16 @@
      <property name="spacing">
       <number>0</number>
      </property>
-     <property name="margin">
+     <property name="leftMargin">
+      <number>0</number>
+     </property>
+     <property name="topMargin">
+      <number>0</number>
+     </property>
+     <property name="rightMargin">
+      <number>0</number>
+     </property>
+     <property name="bottomMargin">
       <number>0</number>
      </property>
      <item>
@@ -372,7 +392,16 @@
      <property name="spacing">
       <number>0</number>
      </property>
-     <property name="margin">
+     <property name="leftMargin">
+      <number>0</number>
+     </property>
+     <property name="topMargin">
+      <number>0</number>
+     </property>
+     <property name="rightMargin">
+      <number>0</number>
+     </property>
+     <property name="bottomMargin">
       <number>0</number>
      </property>
      <item>
@@ -438,7 +467,16 @@
      </sizepolicy>
     </property>
     <layout class="QGridLayout">
-     <property name="margin">
+     <property name="leftMargin">
+      <number>0</number>
+     </property>
+     <property name="topMargin">
+      <number>0</number>
+     </property>
+     <property name="rightMargin">
+      <number>0</number>
+     </property>
+     <property name="bottomMargin">
       <number>0</number>
      </property>
      <property name="spacing">
@@ -482,7 +520,16 @@
    </attribute>
    <widget class="QWidget" name="dockWidgetContents">
     <layout class="QGridLayout" name="gridLayout">
-     <property name="margin">
+     <property name="leftMargin">
+      <number>0</number>
+     </property>
+     <property name="topMargin">
+      <number>0</number>
+     </property>
+     <property name="rightMargin">
+      <number>0</number>
+     </property>
+     <property name="bottomMargin">
       <number>0</number>
      </property>
      <property name="spacing">
@@ -1243,6 +1290,16 @@
     <string>New template</string>
    </property>
   </action>
+  <action name="uiResetDocksAction">
+   <property name="text">
+    <string>Reset docks</string>
+   </property>
+  </action>
+  <action name="uiResetConsoleAllAction">
+   <property name="text">
+    <string>Reset all console connections</string>
+   </property>
+  </action>
  </widget>
  <customwidgets>
   <customwidget>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gns3-gui-2.2.31/gns3/ui/main_window_ui.py 
new/gns3-gui-2.2.37/gns3/ui/main_window_ui.py
--- old/gns3-gui-2.2.31/gns3/ui/main_window_ui.py       2022-02-26 
08:52:17.000000000 +0100
+++ new/gns3-gui-2.2.37/gns3/ui/main_window_ui.py       2023-01-25 
08:06:12.000000000 +0100
@@ -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.13.2
+# Created by: PyQt5 UI code generator 5.14.1
 #
 # WARNING! All changes made in this file will be lost!
 
@@ -48,7 +48,7 @@
         self.gridlayout.addWidget(self.uiGraphicsView, 0, 0, 1, 1)
         MainWindow.setCentralWidget(self.uiCentralWidget)
         self.uiMenuBar = QtWidgets.QMenuBar(MainWindow)
-        self.uiMenuBar.setGeometry(QtCore.QRect(0, 0, 986, 42))
+        self.uiMenuBar.setGeometry(QtCore.QRect(0, 0, 986, 22))
         self.uiMenuBar.setObjectName("uiMenuBar")
         self.uiEditMenu = QtWidgets.QMenu(self.uiMenuBar)
         self.uiEditMenu.setObjectName("uiEditMenu")
@@ -448,6 +448,13 @@
         self.uiNewTemplateAction = QtWidgets.QAction(MainWindow)
         self.uiNewTemplateAction.setIcon(icon)
         self.uiNewTemplateAction.setObjectName("uiNewTemplateAction")
+        self.uiResetDocksAction = QtWidgets.QAction(MainWindow)
+        self.uiResetDocksAction.setObjectName("uiResetDocksAction")
+        self.uiEditReadmeAction = QtWidgets.QAction(MainWindow)
+        self.uiEditReadmeAction.setIcon(icon31)
+        self.uiEditReadmeAction.setObjectName("uiEditReadmeAction")
+        self.uiResetConsoleAllAction = QtWidgets.QAction(MainWindow)
+        self.uiResetConsoleAllAction.setObjectName("uiResetConsoleAllAction")
         self.uiEditMenu.addAction(self.uiSelectAllAction)
         self.uiEditMenu.addAction(self.uiSelectNoneAction)
         self.uiEditMenu.addSeparator()
@@ -488,6 +495,7 @@
         self.uiViewMenu.addAction(self.uiShowPortNamesAction)
         self.uiViewMenu.addAction(self.uiLockAllAction)
         self.uiViewMenu.addSeparator()
+        self.uiViewMenu.addAction(self.uiResetDocksAction)
         self.uiViewMenu.addAction(self.uiDocksMenu.menuAction())
         self.uiControlMenu.addAction(self.uiStartAllAction)
         self.uiControlMenu.addAction(self.uiSuspendAllAction)
@@ -495,6 +503,7 @@
         self.uiControlMenu.addAction(self.uiReloadAllAction)
         self.uiControlMenu.addAction(self.uiAuxConsoleAllAction)
         self.uiControlMenu.addAction(self.uiConsoleAllAction)
+        self.uiControlMenu.addAction(self.uiResetConsoleAllAction)
         self.uiAnnotateMenu.addAction(self.uiAddNoteAction)
         self.uiAnnotateMenu.addAction(self.uiInsertImageAction)
         self.uiAnnotateMenu.addAction(self.uiDrawRectangleAction)
@@ -711,6 +720,10 @@
         self.uiLockAllAction.setToolTip(_translate("MainWindow", "Lock or 
unlock all items"))
         self.uiWebUIAction.setText(_translate("MainWindow", "Web UI - beta"))
         self.uiNewTemplateAction.setText(_translate("MainWindow", "New 
template"))
+        self.uiResetDocksAction.setText(_translate("MainWindow", "Reset 
docks"))
+        self.uiEditReadmeAction.setText(_translate("MainWindow", "Edit 
readme"))
+        self.uiEditReadmeAction.setToolTip(_translate("MainWindow", "Edit 
readme"))
+        self.uiResetConsoleAllAction.setText(_translate("MainWindow", "Reset 
all console connections"))
 from ..compute_summary_view import ComputeSummaryView
 from ..console_view import ConsoleView
 from ..graphics_view import GraphicsView
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gns3-gui-2.2.31/gns3/update_manager.py 
new/gns3-gui-2.2.37/gns3/update_manager.py
--- old/gns3-gui-2.2.31/gns3/update_manager.py  2022-02-26 08:52:17.000000000 
+0100
+++ new/gns3-gui-2.2.37/gns3/update_manager.py  2023-01-25 08:06:12.000000000 
+0100
@@ -239,4 +239,22 @@
                 for member in members:
                     # Path separator is always / even on windows
                     member.name = member.name.split("/", 1)[1]
-                tar.extractall(path=self._package_directory, members=members)
+                def is_within_directory(directory, target):
+
+                    abs_directory = os.path.abspath(directory)
+                    abs_target = os.path.abspath(target)
+
+                    prefix = os.path.commonprefix([abs_directory, abs_target])
+
+                    return prefix == abs_directory
+
+                def safe_extract(tar, path=".", members=None, *, 
numeric_owner=False):
+
+                    for member in tar.getmembers():
+                        member_path = os.path.join(path, member.name)
+                        if not is_within_directory(path, member_path):
+                            raise Exception("Attempted Path Traversal in Tar 
File")
+
+                    tar.extractall(path, members, numeric_owner=numeric_owner)
+
+                safe_extract(tar, path=self._package_directory, 
members=members)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gns3-gui-2.2.31/gns3/version.py 
new/gns3-gui-2.2.37/gns3/version.py
--- old/gns3-gui-2.2.31/gns3/version.py 2022-02-26 08:52:17.000000000 +0100
+++ new/gns3-gui-2.2.37/gns3/version.py 2023-01-25 08:06:12.000000000 +0100
@@ -23,8 +23,8 @@
 # or negative for a release candidate or beta (after the base version
 # number has been incremented)
 
-__version__ = "2.2.31"
-__version_info__ = (2, 2, 31, 0)
+__version__ = "2.2.37"
+__version_info__ = (2, 2, 37, 0)
 
 if "dev" in __version__:
     try:
@@ -32,6 +32,6 @@
         import subprocess
         if 
os.path.exists(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", 
".git")):
             r = subprocess.check_output(["git", "rev-parse", "--short", 
"HEAD"]).decode().strip("\n")
-            __version__ += "-" + r
+            __version__ += "+" + r
     except Exception as e:
         print(e)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gns3-gui-2.2.31/mac-requirements.txt 
new/gns3-gui-2.2.37/mac-requirements.txt
--- old/gns3-gui-2.2.31/mac-requirements.txt    2022-02-26 08:52:17.000000000 
+0100
+++ new/gns3-gui-2.2.37/mac-requirements.txt    2023-01-25 08:06:12.000000000 
+0100
@@ -1,3 +1,3 @@
 -rrequirements.txt
 
-PyQt5==5.15.6
+PyQt5==5.15.7
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gns3-gui-2.2.31/requirements.txt 
new/gns3-gui-2.2.37/requirements.txt
--- old/gns3-gui-2.2.31/requirements.txt        2022-02-26 08:52:17.000000000 
+0100
+++ new/gns3-gui-2.2.37/requirements.txt        2023-01-25 08:06:12.000000000 
+0100
@@ -1,6 +1,7 @@
-jsonschema==3.2.0
-sentry-sdk==1.5.4
-psutil==5.9.0
-distro==1.6.0
-setuptools==60.6.0; python_version >= '3.7'  # don't upgrade because of 
https://github.com/pypa/setuptools/issues/3084
-setuptools==59.6.0; python_version < '3.7'  # v59.7.0 dropped support for 
Python 3.6
\ No newline at end of file
+jsonschema>=4.17.3,<4.18; python_version >= '3.7'
+jsonschema==3.2.0; python_version < '3.7'  # v3.2.0 is the last version to 
support Python 3.6
+sentry-sdk==1.12.1,<1.13
+psutil==5.9.4
+distro>=1.7.0
+setuptools>=60.8.1; python_version >= '3.7'
+setuptools==59.6.0; python_version < '3.7'  # v59.6.0 is the last version to 
support Python 3.6
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gns3-gui-2.2.31/setup.py new/gns3-gui-2.2.37/setup.py
--- old/gns3-gui-2.2.31/setup.py        2022-02-26 08:52:17.000000000 +0100
+++ new/gns3-gui-2.2.37/setup.py        2023-01-25 08:06:12.000000000 +0100
@@ -66,7 +66,7 @@
     author="Jeremy Grossmann",
     author_email="package-maintai...@gns3.net",
     description="GNS3 graphical interface for the GNS3 server.",
-    long_description=open("README.rst", "r").read(),
+    long_description=open("README.md", "r").read(),
     install_requires=open("requirements.txt", "r").read().splitlines(),
     entry_points={
         "gui_scripts": [
@@ -78,6 +78,7 @@
     include_package_data=True,
     package_data={"gns3": ["configs/*.txt", "schemas/*.json"]},
     platforms="any",
+    python_requires=">=3.4",
     setup_requires=["setuptools>=17.1"],
     classifiers=[
         "Development Status :: 5 - Production/Stable",
@@ -98,6 +99,7 @@
         "Programming Language :: Python :: 3.8",
         "Programming Language :: Python :: 3.9",
         "Programming Language :: Python :: 3.10",
+        "Programming Language :: Python :: 3.11",
         "Programming Language :: Python :: Implementation :: CPython",
     ],
 )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gns3-gui-2.2.31/tests/test_http_client.py 
new/gns3-gui-2.2.37/tests/test_http_client.py
--- old/gns3-gui-2.2.31/tests/test_http_client.py       2022-02-26 
08:52:17.000000000 +0100
+++ new/gns3-gui-2.2.37/tests/test_http_client.py       2023-01-25 
08:06:12.000000000 +0100
@@ -311,7 +311,7 @@
 
 def test_callbackConnect_minor_version_invalid(http_client):
 
-    new_version = "{}.{}.{}".format(__version_info__[0], __version_info__[1], 
__version_info__[2] + 1)
+    new_version = "{}.{}.{}".format(__version_info__[0], __version_info__[1] + 
1, 0)
     params = {
         "local": True,
         "version": new_version
@@ -319,14 +319,23 @@
     mock = unittest.mock.MagicMock()
 
     http_client._query_waiting_connections.append((None, mock))
-    # Stable release
-    if __version_info__[3] == 0:
-        http_client._callbackConnect(params)
-        assert http_client._connected is False
-        mock.assert_called_with({"message": "Client version {} is not the same 
as server (controller) version {}".format(__version__, new_version)}, 
error=True, server=None)
-    else:
-        http_client._callbackConnect(params)
-        assert http_client._connected is True
+    http_client._callbackConnect(params)
+    assert http_client._connected is False
+    mock.assert_called_with({"message": "Client version {} is not the same as 
server (controller) version {}".format(__version__, new_version)}, error=True, 
server=None)
+
+
+def test_callbackConnect_patch_version(http_client):
+
+    new_version = "{}.{}.{}.{}".format(__version_info__[0], 
__version_info__[1], __version_info__[2], 42)
+    params = {
+        "local": True,
+        "version": new_version
+    }
+    mock = unittest.mock.MagicMock()
+
+    http_client._query_waiting_connections.append((None, mock))
+    http_client._callbackConnect(params)
+    assert http_client._connected is True
 
 
 def test_callbackConnect_non_gns3_server(http_client):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gns3-gui-2.2.31/win-requirements.txt 
new/gns3-gui-2.2.37/win-requirements.txt
--- old/gns3-gui-2.2.31/win-requirements.txt    2022-02-26 08:52:17.000000000 
+0100
+++ new/gns3-gui-2.2.37/win-requirements.txt    2023-01-25 08:06:12.000000000 
+0100
@@ -1,4 +1,4 @@
 -rrequirements.txt
 
-PyQt5==5.15.6 # pyup: ignore
-pywin32==303 # pyup: ignore
+PyQt5==5.15.7 # pyup: ignore
+pywin32==305 # pyup: ignore

Reply via email to