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-06-22 23:26:15
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gns3-gui (Old)
 and      /work/SRC/openSUSE:Factory/.gns3-gui.new.15902 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "gns3-gui"

Thu Jun 22 23:26:15 2023 rev:18 rq:1094588 version:2.2.40.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/gns3-gui/gns3-gui.changes        2023-03-19 
00:30:51.452170716 +0100
+++ /work/SRC/openSUSE:Factory/.gns3-gui.new.15902/gns3-gui.changes     
2023-06-22 23:26:41.606035075 +0200
@@ -1,0 +2,26 @@
+Mon Jun 19 15:26:19 UTC 2023 - Ben Greiner <c...@bnavigator.de>
+
+
+- Update to 2.2.40.1
+  * Change log messages for Websocket errors
+  * Do not proceed if an appliance symbol cannot be downloaded. Ref
+    #3466
+  * Delete a node or link from topology summary view using Delete
+    key. Ref #3445
+  * Fix "Start the capture visualization program" checkbox works
+    only one (first) time for a given link. Fixes #3442
+  * Let the selected link style applied when editing a link. Fixes
+    #3460
+  * Fix hovered color shown in style editing dialog. Fixes #3460
+- Release 2.2.39
+  * Fix nodes are not snapped to the grid at the moment of creation
+  * Upgrade distro and aiohttp dependencies
+- Remove version unpinnings: Not required for Tumbleweed, older
+  distributions have failed to provide the lowered requirements
+  already months ago
+- Remove old python-sip (v4) from BuildRequires: not needed
+- Remove unused old distro install methods, replace by PEP517
+  pyproject macros
+- Remove gns3-gui_fix_desktop_file.patch replace by macro
+
+-------------------------------------------------------------------

Old:
----
  gns3-gui-2.2.38.tar.gz
  gns3-gui_fix_desktop_file.patch

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

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

Other differences:
------------------
++++++ gns3-gui.spec ++++++
--- /var/tmp/diff_new_pack.LmDBKG/_old  2023-06-22 23:26:42.162037910 +0200
+++ /var/tmp/diff_new_pack.LmDBKG/_new  2023-06-22 23:26:42.174037972 +0200
@@ -17,42 +17,37 @@
 
 
 Name:           gns3-gui
-Version:        2.2.38
+Version:        2.2.40.1
 Release:        0
 Summary:        GNS3 graphical interface for the GNS3 server
 License:        GPL-3.0-or-later
 Group:          Productivity/Networking/Other
 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
 BuildRequires:  fdupes
 BuildRequires:  hicolor-icon-theme
 BuildRequires:  python-rpm-macros
+BuildRequires:  python3-pip
 BuildRequires:  python3-setuptools
+BuildRequires:  python3-wheel
 BuildRequires:  update-desktop-files
-%if 0%{?suse_version} > 1500
-Requires:       python3-jsonschema >= 3.2.0
-%else
-Requires:       python3-jsonschema < 3
-Requires:       python3-jsonschema >= 2.4.0
-%endif
 Requires:       python3-distro >= 1.6.0
-Requires:       python3-psutil >= 2.2.1
+Requires:       python3-jsonschema >= 4.17.3
+Requires:       python3-psutil >= 5.9.4
 Requires:       python3-qt5
-Requires:       python3-sentry-sdk >= 1.5.4
+Requires:       python3-sentry-sdk >= 1.17.0
 Recommends:     gns3-server
 Recommends:     libcap-progs
 Recommends:     sudo
 Recommends:     telnet
 BuildArch:      noarch
 # SECTION test requirements
-BuildRequires:  python3-distro >= 1.7.0
-BuildRequires:  python3-jsonschema >= 2.4.0
-BuildRequires:  python3-psutil >= 2.2.1
+BuildRequires:  python3-distro >= 1.8.0
+BuildRequires:  python3-jsonschema >= 4.17.3
+BuildRequires:  python3-psutil >= 5.9.4
 BuildRequires:  python3-pytest
 BuildRequires:  python3-qt5
-BuildRequires:  python3-sentry-sdk >= 1.5.4
-BuildRequires:  python3-sip
+BuildRequires:  python3-sentry-sdk >= 1.17.0
 BuildRequires:  xvfb-run
 # /SECTION
 
@@ -75,30 +70,21 @@
 
 # Relax strict requirements
 sed -i -r 's/==/>=/g' requirements.txt
-sed -i -r 's/sentry-sdk.*//g' requirements.txt
+sed -i -r '/jsonschema/ s/,<.*$//' requirements.txt
+sed -i -r '/sentry-sdk/ s/,<.*$//' 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
+# It's required but missing
+echo qt5 >> 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
-%else
-python3 setup.py build
-%endif
+%python3_pyproject_wheel
 
 %install
-%if 0%{?suse_version} > 1315
-%python3_install
-%else
-python3 setup.py install --root=%{buildroot} --prefix=%{_prefix}
-%endif
+%python3_pyproject_install
 
 rm %{buildroot}/%{python3_sitelib}/gns3/static/.keep
 #
@@ -107,24 +93,20 @@
 find %{buildroot}/%{python3_sitelib}/gns3  -name "*.svg" -exec chmod -x {} \;
 #
 install -D -m0644 %{name}.appdata.xml 
%{buildroot}/%{_datadir}/appdata/gns3.appdata.xml
-%fdupes %{buildroot}
+%suse_update_desktop_file gns3 System Emulator
+%fdupes %{buildroot}%{python3_sitelib}
+%fdupes %{buildroot}%{_datadir}/icons
 
+%check
 rm tests/test_main_window.py
 xvfb-run python3 -m pytest -rs
 
-%post
-%{_bindir}/update-mime-database %{_datadir}/mime > /dev/null 2>&1 || :
-%{_bindir}/update-desktop-database
-
-%postun
-%{_bindir}/update-mime-database %{_datadir}/mime > /dev/null 2>&1 || :
-%{_bindir}/update-desktop-database
-
 %files
 %license LICENSE
 %doc AUTHORS README.md
 %{_bindir}/gns3
-%{python3_sitelib}/gns3*
+%{python3_sitelib}/gns3
+%{python3_sitelib}/gns3_gui-%{version}.dist-info
 %{_datadir}/icons/hicolor/*
 %{_datadir}/applications/gns3.desktop
 %{_datadir}/mime/packages/gns3-gui.xml

++++++ gns3-gui-2.2.38.tar.gz -> gns3-gui-2.2.40.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gns3-gui-2.2.38/CHANGELOG 
new/gns3-gui-2.2.40.1/CHANGELOG
--- old/gns3-gui-2.2.38/CHANGELOG       2023-02-28 06:35:17.000000000 +0100
+++ new/gns3-gui-2.2.40.1/CHANGELOG     2023-06-10 12:36:40.000000000 +0200
@@ -1,5 +1,23 @@
 # Change Log
 
+## 2.2.40.1 10/06/2023
+
+* No changes
+
+## 2.2.40 06/06/2023
+
+* Change log messages for Websocket errors
+* Do not proceed if an appliance symbol cannot be downloaded. Ref #3466
+* Delete a node or link from topology summary view using Delete key. Ref #3445
+* Fix "Start the capture visualization program" checkbox works only one 
(first) time for a given link. Fixes #3442
+* Let the selected link style applied when editing a link. Fixes #3460
+* Fix hovered color shown in style editing dialog. Fixes #3460
+
+## 2.2.39 08/05/2023
+
+* Fix nodes are not snapped to the grid at the moment of creation
+* Upgrade distro and aiohttp dependencies
+
 ## 2.2.38 28/02/2023
 
 * Add long description content type in setup.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gns3-gui-2.2.38/gns3/controller.py 
new/gns3-gui-2.2.40.1/gns3/controller.py
--- old/gns3-gui-2.2.38/gns3/controller.py      2023-02-28 06:35:17.000000000 
+0100
+++ new/gns3-gui-2.2.40.1/gns3/controller.py    2023-06-10 12:36:40.000000000 
+0200
@@ -449,7 +449,7 @@
     @qslot
     def _websocket_error(self, error):
         if self._notification_stream:
-            log.error("Websocket notification stream error: 
{}".format(self._notification_stream.errorString()))
+            log.error("Websocket controller notification stream error: 
{}".format(self._notification_stream.errorString()))
             self._notification_stream = None
             self._startListenNotifications()
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gns3-gui-2.2.38/gns3/crash_report.py 
new/gns3-gui-2.2.40.1/gns3/crash_report.py
--- old/gns3-gui-2.2.38/gns3/crash_report.py    2023-02-28 06:35:17.000000000 
+0100
+++ new/gns3-gui-2.2.40.1/gns3/crash_report.py  2023-06-10 12:36:40.000000000 
+0200
@@ -51,7 +51,7 @@
     Report crash to a third party service
     """
 
-    DSN = 
"https://e1c08ac6a2f44c1f96055affc49b2...@o19455.ingest.sentry.io/38506";
+    DSN = 
"https://486bdeb4a1a94f129b676eb677f59...@o19455.ingest.sentry.io/38506";
     _instance = None
 
     def __init__(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gns3-gui-2.2.38/gns3/dialogs/style_editor_dialog_link.py 
new/gns3-gui-2.2.40.1/gns3/dialogs/style_editor_dialog_link.py
--- old/gns3-gui-2.2.38/gns3/dialogs/style_editor_dialog_link.py        
2023-02-28 06:35:17.000000000 +0100
+++ new/gns3-gui-2.2.40.1/gns3/dialogs/style_editor_dialog_link.py      
2023-06-10 12:36:40.000000000 +0200
@@ -58,7 +58,9 @@
         self.uiRotationLabel.hide()
         self.uiRotationSpinBox.hide()
 
+        link.setHovered(False)  # make sure we use the right style
         pen = link.pen()
+        link.setHovered(True)
 
         self._border_color = pen.color()
         self.uiBorderColorPushButton.setStyleSheet("background-color: rgba({}, 
{}, {}, {});".format(self._border_color.red(),
@@ -102,6 +104,7 @@
         
         # Store values
         self._link.setLinkStyle(new_link_style)
+        self._link.setHovered(False)  # allow to see the new style
 
     def done(self, result):
         """
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gns3-gui-2.2.38/gns3/items/drawing_item.py 
new/gns3-gui-2.2.40.1/gns3/items/drawing_item.py
--- old/gns3-gui-2.2.38/gns3/items/drawing_item.py      2023-02-28 
06:35:17.000000000 +0100
+++ new/gns3-gui-2.2.40.1/gns3/items/drawing_item.py    2023-06-10 
12:36:40.000000000 +0200
@@ -213,7 +213,7 @@
 
     def itemChange(self, change, value):
 
-        if change == QtWidgets.QGraphicsItem.ItemPositionChange and 
self.isActive() and self._main_window.uiSnapToGridAction.isChecked():
+        if change == QtWidgets.QGraphicsItem.ItemPositionChange and 
self._main_window.uiSnapToGridAction.isChecked():
             grid_size = self._graphics_view.drawingGridSize()
             mid_x = self.boundingRect().width() / 2
             value.setX((grid_size * round((value.x() + mid_x) / grid_size)) - 
mid_x)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gns3-gui-2.2.38/gns3/items/link_item.py 
new/gns3-gui-2.2.40.1/gns3/items/link_item.py
--- old/gns3-gui-2.2.38/gns3/items/link_item.py 2023-02-28 06:35:17.000000000 
+0100
+++ new/gns3-gui-2.2.40.1/gns3/items/link_item.py       2023-06-10 
12:36:40.000000000 +0200
@@ -320,13 +320,13 @@
 
         if not sip_is_deleted(self):
             # create the contextual menu
+            self.setHovered(True)
             self.setAcceptHoverEvents(False)
             menu = QtWidgets.QMenu()
             self.populateLinkContextualMenu(menu)
             menu.exec_(QtGui.QCursor.pos())
             self.setAcceptHoverEvents(True)
-            self._hovered = False
-            self.adjust()
+            self.setHovered(False)
 
     def keyPressEvent(self, event):
         """
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gns3-gui-2.2.38/gns3/items/node_item.py 
new/gns3-gui-2.2.40.1/gns3/items/node_item.py
--- old/gns3-gui-2.2.38/gns3/items/node_item.py 2023-02-28 06:35:17.000000000 
+0100
+++ new/gns3-gui-2.2.40.1/gns3/items/node_item.py       2023-06-10 
12:36:40.000000000 +0200
@@ -108,6 +108,9 @@
         if node.initialized():
             self.createdSlot(node.id())
 
+        if self._main_window.uiSnapToGridAction.isChecked():
+            self.setPos(QtCore.QPointF(self._node.x() + 0.1, self._node.y()))
+
     def updateNode(self):
         """
         Sync change to the node
@@ -466,7 +469,7 @@
         :param value: value of the change
         """
 
-        if change == QtWidgets.QGraphicsItem.ItemPositionChange and 
self.isActive() and self._main_window.uiSnapToGridAction.isChecked():
+        if change == QtWidgets.QGraphicsItem.ItemPositionChange and 
self._main_window.uiSnapToGridAction.isChecked():
             grid_size = self._main_window.uiGraphicsView.nodeGridSize()
             mid_x = self.boundingRect().width() / 2
             value.setX((grid_size * round((value.x() + mid_x) / grid_size)) - 
mid_x)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gns3-gui-2.2.38/gns3/packet_capture.py 
new/gns3-gui-2.2.40.1/gns3/packet_capture.py
--- old/gns3-gui-2.2.38/gns3/packet_capture.py  2023-02-28 06:35:17.000000000 
+0100
+++ new/gns3-gui-2.2.40.1/gns3/packet_capture.py        2023-06-10 
12:36:40.000000000 +0200
@@ -112,15 +112,20 @@
         """
         Starts the packet capture reader.
         """
+
         self._startPacketCommand(link, 
self.settings()["packet_capture_reader_command"])
 
     def stopPacketCaptureReader(self, link):
         """
         Stop the packet capture reader
         """
-        if link in self._tail_process and self._tail_process[link].poll() is 
None:
+
+        if link in self._tail_process:
             log.debug("Stopping packet capture reader for link 
{}".format(link.link_id()))
-            self._tail_process[link].kill()
+            try:
+                self._tail_process[link].kill()
+            except (PermissionError, OSError):
+                pass
             del self._tail_process[link]
 
     def startPacketCaptureAnalyzer(self, link):
@@ -183,14 +188,14 @@
                 QtWidgets.QMessageBox.critical(self.parent(), "Packet 
capture", "Can't create packet capture file {}: {}".format(capture_file_path, 
str(e)))
                 return
 
-        if link in self._tail_process and self._tail_process[link].poll() is 
None:
+        if link in self._tail_process:
             try:
                 self._tail_process[link].kill()
             except (PermissionError, OSError):
                 # Sometimes we have condition on windows where the process is 
in the process to quit
                 pass
             del self._tail_process[link]
-        if link in self._capture_reader_process and 
self._capture_reader_process[link].poll() is None:
+        if link in self._capture_reader_process:
             try:
                 self._capture_reader_process[link].kill()
             except (PermissionError, OSError):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gns3-gui-2.2.38/gns3/project.py 
new/gns3-gui-2.2.40.1/gns3/project.py
--- old/gns3-gui-2.2.38/gns3/project.py 2023-02-28 06:35:17.000000000 +0100
+++ new/gns3-gui-2.2.40.1/gns3/project.py       2023-06-10 12:36:40.000000000 
+0200
@@ -654,7 +654,7 @@
     @qslot
     def _websocket_error(self, error):
         if self._notification_stream:
-            log.error(self._notification_stream.errorString())
+            log.error("Websocket project notification stream error: 
{}".format(self._notification_stream.errorString()))
             self._notification_stream = None
             self._startListenNotifications()
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gns3-gui-2.2.38/gns3/registry/appliance_to_template.py 
new/gns3-gui-2.2.40.1/gns3/registry/appliance_to_template.py
--- old/gns3-gui-2.2.38/gns3/registry/appliance_to_template.py  2023-02-28 
06:35:17.000000000 +0100
+++ new/gns3-gui-2.2.40.1/gns3/registry/appliance_to_template.py        
2023-06-10 12:36:40.000000000 +0200
@@ -197,7 +197,8 @@
 
         url = 
"https://raw.githubusercontent.com/GNS3/gns3-registry/master/symbols/{}".format(symbol_id)
         try:
-            self._downloadApplianceSymbol(url, path)
+            if not self._downloadApplianceSymbol(url, path):
+                return None
             controller.clearStaticCache()
             if controller.isRemote():
                 controller.uploadSymbol(symbol_id, path)
@@ -230,5 +231,7 @@
                 log.debug("Error while saving appliance symbol to '{}': 
{}".format(path, e))
                 raise
             log.debug("Appliance symbol downloaded and saved to 
'{}'".format(path))
+            return True
         else:
-            log.warning("Error when downloading appliance symbol from '{}': 
{}".format(url, reply.errorString()))
+            log.error("Error when downloading appliance symbol from '{}': 
{}".format(url, reply.errorString()))
+        return False
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gns3-gui-2.2.38/gns3/topology_summary_view.py 
new/gns3-gui-2.2.40.1/gns3/topology_summary_view.py
--- old/gns3-gui-2.2.38/gns3/topology_summary_view.py   2023-02-28 
06:35:17.000000000 +0100
+++ new/gns3-gui-2.2.40.1/gns3/topology_summary_view.py 2023-06-10 
12:36:40.000000000 +0200
@@ -415,3 +415,22 @@
         for link in self._topology.links():
             if link.suspended():
                 link.toggleSuspend()
+
+    def keyPressEvent(self, event):
+        """
+        Handles key press events
+        """
+
+        from .main_window import MainWindow
+        view = MainWindow.instance().uiGraphicsView
+        # only deleting a link or node is supported for now
+        if event.key() == QtCore.Qt.Key_Delete:
+            current_item = self.currentItem()
+            if isinstance(current_item, TopologyNodeItem):
+                current_item.node().delete()
+            else:
+                link = current_item.data(0, QtCore.Qt.UserRole)
+                for item in view.scene().items():
+                    if isinstance(item, LinkItem) and item.link() == link:
+                        item.delete()
+        super().keyPressEvent(event)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gns3-gui-2.2.38/gns3/version.py 
new/gns3-gui-2.2.40.1/gns3/version.py
--- old/gns3-gui-2.2.38/gns3/version.py 2023-02-28 06:35:17.000000000 +0100
+++ new/gns3-gui-2.2.40.1/gns3/version.py       2023-06-10 12:36:40.000000000 
+0200
@@ -23,8 +23,8 @@
 # or negative for a release candidate or beta (after the base version
 # number has been incremented)
 
-__version__ = "2.2.38"
-__version_info__ = (2, 2, 38, 0)
+__version__ = "2.2.40.1"
+__version_info__ = (2, 2, 40, 0)
 
 if "dev" in __version__:
     try:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gns3-gui-2.2.38/requirements.txt 
new/gns3-gui-2.2.40.1/requirements.txt
--- old/gns3-gui-2.2.38/requirements.txt        2023-02-28 06:35:17.000000000 
+0100
+++ new/gns3-gui-2.2.40.1/requirements.txt      2023-06-10 12:36:40.000000000 
+0200
@@ -1,7 +1,7 @@
 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
+sentry-sdk==1.17.0,<1.18
 psutil==5.9.4
-distro>=1.7.0
+distro>=1.8.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.38/tests/items/test_line_item.py 
new/gns3-gui-2.2.40.1/tests/items/test_line_item.py
--- old/gns3-gui-2.2.38/tests/items/test_line_item.py   2023-02-28 
06:35:17.000000000 +0100
+++ new/gns3-gui-2.2.40.1/tests/items/test_line_item.py 2023-06-10 
12:36:40.000000000 +0200
@@ -61,6 +61,7 @@
 
 def test_fromSvg(project, controller):
     line = LineItem(project=project)
+    line._main_window.uiSnapToGridAction.isChecked = lambda: False
     line.setPos(50, 84)
     line.fromSvg('<svg height="150" width="250"><line x1="0" y1="0" x2="250" 
y2="150" stroke-width="5" stroke="#0000ff" stroke-dasharray="5, 25, 25" 
/></svg>')
     assert line.line().x1() == 0
@@ -75,6 +76,7 @@
 
 def test_fromSvg_top_direction(project, controller):
     line = LineItem(project=project)
+    line._main_window.uiSnapToGridAction.isChecked = lambda: False
     line.setPos(50, 84)
     line.fromSvg('<svg height="150" width="250"><line x1="0" y1="150" x2="250" 
y2="0" stroke-width="5" stroke="#0000ff" stroke-dasharray="5, 25, 25" /></svg>')
     assert line.line().x1() == 0

Reply via email to