Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-QtPy for openSUSE:Factory 
checked in at 2021-09-16 23:14:44
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-QtPy (Old)
 and      /work/SRC/openSUSE:Factory/.python-QtPy.new.1899 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-QtPy"

Thu Sep 16 23:14:44 2021 rev:17 rq:918909 version:1.11.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-QtPy/python-QtPy.changes  2021-08-19 
10:02:06.795184119 +0200
+++ /work/SRC/openSUSE:Factory/.python-QtPy.new.1899/python-QtPy.changes        
2021-09-16 23:17:15.267958732 +0200
@@ -1,0 +2,18 @@
+Tue Sep 14 11:06:30 UTC 2021 - Ben Greiner <[email protected]>
+
+- Update to 1.11.1
+  * Wrap pysideuic and pyside2uic imports since they could be
+    unavailable
+  * qtpy/tests/test_uic.py: skip if pyside2uic not installed
+- Release 1.11.0
+  * Add QtWebEngineWidgets.QWebEngineProfile for PyQt5 and PySide2
+  * Rename QtDatavisualization to use uppercase v
+  * Add support for QStyleOptionFrameV3 from PyQt4
+  * Add QtWinExtras module
+  * Add support for QtSerialPort add-on
+  * Add support for the QtPositioning module
+  * Add loadUiType implementation for PySide2
+- Drop patch merged upstream gh#spyder-ide/QtPy#228
+  * 0001-Add-QtDatavisualization-alias-to-QtDataVisualization.patch
+
+-------------------------------------------------------------------

Old:
----
  0001-Add-QtDatavisualization-alias-to-QtDataVisualization.patch
  QtPy-1.10.0.tar.gz

New:
----
  QtPy-1.11.1.tar.gz

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

Other differences:
------------------
++++++ python-QtPy.spec ++++++
--- /var/tmp/diff_new_pack.GI5kDr/_old  2021-09-16 23:17:15.715959196 +0200
+++ /var/tmp/diff_new_pack.GI5kDr/_new  2021-09-16 23:17:15.723959204 +0200
@@ -19,15 +19,13 @@
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 %bcond_without python2
 Name:           python-QtPy
-Version:        1.10.0
+Version:        1.11.1
 Release:        0
 Summary:        Abstraction layer on top of Qt bindings
 License:        MIT
 Group:          Development/Languages/Python
 URL:            https://github.com/spyder-ide/qtpy
 Source:         
https://files.pythonhosted.org/packages/source/Q/QtPy/QtPy-%{version}.tar.gz
-# PATCH-FIX-UPSTREAM 
0001-Add-QtDatavisualization-alias-to-QtDataVisualization.patch -- 
gh#spyder-ide/qtpy#228
-Patch0:         0001-Add-QtDatavisualization-alias-to-QtDataVisualization.patch
 BuildRequires:  %{python_module setuptools}
 BuildRequires:  fdupes
 BuildRequires:  python-rpm-macros
@@ -76,9 +74,6 @@
 sed -i '/skipif.*not PYSIDE2/ d' qtpy/tests/test_qtcharts.py
 # remove script calling pytest so that pytest does not discover it
 rm qtpy/tests/runtests.py
-# Submitted to upstream at gh#spyder-ide/qtpy#228
-mv qtpy/QtDatavisualization.py qtpy/QtDataVisualization.py
-%patch0 -p1
 
 %build
 %python_build

++++++ QtPy-1.10.0.tar.gz -> QtPy-1.11.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/QtPy-1.10.0/CHANGELOG.md new/QtPy-1.11.1/CHANGELOG.md
--- old/QtPy-1.10.0/CHANGELOG.md        2021-08-17 09:47:58.000000000 +0200
+++ new/QtPy-1.11.1/CHANGELOG.md        2021-09-13 19:25:36.000000000 +0200
@@ -1,5 +1,49 @@
 # History of changes
 
+## Version 1.11.1 (2021-09-13)
+
+### Issues Closed
+
+* [Issue 245](https://github.com/spyder-ide/qtpy/issues/245) - Importing 
`qtpy.uic` raises an exception ([PR 
246](https://github.com/spyder-ide/qtpy/pull/246) by 
[@dalthviz](https://github.com/dalthviz))
+
+In this release 1 issue was closed.
+
+### Pull Requests Merged
+
+* [PR 246](https://github.com/spyder-ide/qtpy/pull/246) - PR: Wrap `pysideuic` 
and `pyside2uic` imports since they could be unavailable, by 
[@dalthviz](https://github.com/dalthviz) 
([245](https://github.com/spyder-ide/qtpy/issues/245))
+* [PR 244](https://github.com/spyder-ide/qtpy/pull/244) - 
qtpy/tests/test_uic.py: skip if pyside2uic not installed, by 
[@AndrewAmmerlaan](https://github.com/AndrewAmmerlaan)
+
+In this release 2 pull requests were closed.
+
+
+----
+
+
+## Version 1.11.0 (2021-09-03)
+
+### Issues Closed
+
+* [Issue 201](https://github.com/spyder-ide/qtpy/issues/201) - Missing 
QWebEngineProfile from QtWebEngineWidgets ([PR 
242](https://github.com/spyder-ide/qtpy/pull/242) by 
[@dalthviz](https://github.com/dalthviz))
+
+In this release 1 issue was closed.
+
+### Pull Requests Merged
+
+* [PR 243](https://github.com/spyder-ide/qtpy/pull/243) - PR: 
`QtDataVisualization` backward compatibility handling on Windows, by 
[@dalthviz](https://github.com/dalthviz)
+* [PR 242](https://github.com/spyder-ide/qtpy/pull/242) - PR: Add 
`QtWebEngineWidgets.QWebEngineProfile` for PyQt5 and PySide2, by 
[@dalthviz](https://github.com/dalthviz) 
([201](https://github.com/spyder-ide/qtpy/issues/201))
+* [PR 228](https://github.com/spyder-ide/qtpy/pull/228) - PR: Rename 
QtDatavisualization to use uppercase v, by 
[@antlarr](https://github.com/antlarr)
+* [PR 219](https://github.com/spyder-ide/qtpy/pull/219) - PR: Add support for 
QStyleOptionFrameV3 from PyQt4, by 
[@PierreRaybaut](https://github.com/PierreRaybaut)
+* [PR 218](https://github.com/spyder-ide/qtpy/pull/218) - PR: Add QtWinExtras 
module, by [@phil65](https://github.com/phil65)
+* [PR 209](https://github.com/spyder-ide/qtpy/pull/209) - PR: Add support for 
QtSerialPort add-on, by [@Stanowczo](https://github.com/Stanowczo)
+* [PR 205](https://github.com/spyder-ide/qtpy/pull/205) - PR: Add support for 
the QtPositioning module, by [@avalentino](https://github.com/avalentino)
+* [PR 202](https://github.com/spyder-ide/qtpy/pull/202) - PR: Add loadUiType 
implementation for PySide2, by [@avalentino](https://github.com/avalentino)
+
+In this release 8 pull requests were closed.
+
+
+----
+
+
 ## Version 1.10.0 (2021-08-17)
 
 ### Issues Closed
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/QtPy-1.10.0/PKG-INFO new/QtPy-1.11.1/PKG-INFO
--- old/QtPy-1.10.0/PKG-INFO    2021-08-17 09:51:29.000000000 +0200
+++ new/QtPy-1.11.1/PKG-INFO    2021-09-13 19:27:31.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: QtPy
-Version: 1.10.0
+Version: 1.11.1
 Summary: Provides an abstraction layer on top of the various Qt bindings 
(PyQt5, PyQt4 and PySide) and additional custom QWidgets.
 Home-page: https://github.com/spyder-ide/qtpy
 Author: Colin Duquesnoy and the Spyder Development Team
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/QtPy-1.10.0/QtPy.egg-info/PKG-INFO 
new/QtPy-1.11.1/QtPy.egg-info/PKG-INFO
--- old/QtPy-1.10.0/QtPy.egg-info/PKG-INFO      2021-08-17 09:51:27.000000000 
+0200
+++ new/QtPy-1.11.1/QtPy.egg-info/PKG-INFO      2021-09-13 19:27:26.000000000 
+0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: QtPy
-Version: 1.10.0
+Version: 1.11.1
 Summary: Provides an abstraction layer on top of the various Qt bindings 
(PyQt5, PyQt4 and PySide) and additional custom QWidgets.
 Home-page: https://github.com/spyder-ide/qtpy
 Author: Colin Duquesnoy and the Spyder Development Team
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/QtPy-1.10.0/QtPy.egg-info/SOURCES.txt 
new/QtPy-1.11.1/QtPy.egg-info/SOURCES.txt
--- old/QtPy-1.10.0/QtPy.egg-info/SOURCES.txt   2021-08-17 09:51:27.000000000 
+0200
+++ new/QtPy-1.11.1/QtPy.egg-info/SOURCES.txt   2021-09-13 19:27:26.000000000 
+0200
@@ -17,7 +17,7 @@
 qtpy/Qt3DRender.py
 qtpy/QtCharts.py
 qtpy/QtCore.py
-qtpy/QtDatavisualization.py
+qtpy/QtDataVisualization.py
 qtpy/QtDesigner.py
 qtpy/QtGui.py
 qtpy/QtHelp.py
@@ -26,10 +26,12 @@
 qtpy/QtMultimediaWidgets.py
 qtpy/QtNetwork.py
 qtpy/QtOpenGL.py
+qtpy/QtPositioning.py
 qtpy/QtPrintSupport.py
 qtpy/QtQml.py
 qtpy/QtQuick.py
 qtpy/QtQuickWidgets.py
+qtpy/QtSerialPort.py
 qtpy/QtSql.py
 qtpy/QtSvg.py
 qtpy/QtTest.py
@@ -37,6 +39,7 @@
 qtpy/QtWebEngineWidgets.py
 qtpy/QtWebSockets.py
 qtpy/QtWidgets.py
+qtpy/QtWinExtras.py
 qtpy/QtXmlPatterns.py
 qtpy/__init__.py
 qtpy/_version.py
@@ -71,15 +74,18 @@
 qtpy/tests/test_qtmultimedia.py
 qtpy/tests/test_qtmultimediawidgets.py
 qtpy/tests/test_qtnetwork.py
+qtpy/tests/test_qtpositioning.py
 qtpy/tests/test_qtprintsupport.py
 qtpy/tests/test_qtqml.py
 qtpy/tests/test_qtquick.py
 qtpy/tests/test_qtquickwidgets.py
+qtpy/tests/test_qtserialport.py
 qtpy/tests/test_qtsql.py
 qtpy/tests/test_qtsvg.py
 qtpy/tests/test_qttest.py
 qtpy/tests/test_qtwebchannel.py
 qtpy/tests/test_qtwebenginewidgets.py
 qtpy/tests/test_qtwebsockets.py
+qtpy/tests/test_qtwinextras.py
 qtpy/tests/test_qtxmlpatterns.py
 qtpy/tests/test_uic.py
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/QtPy-1.10.0/qtpy/QtDataVisualization.py 
new/QtPy-1.11.1/qtpy/QtDataVisualization.py
--- old/QtPy-1.10.0/qtpy/QtDataVisualization.py 1970-01-01 01:00:00.000000000 
+0100
+++ new/QtPy-1.11.1/qtpy/QtDataVisualization.py 2021-09-03 19:39:07.000000000 
+0200
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+# -----------------------------------------------------------------------------
+# Copyright ?? 2009- The Spyder Development Team
+#
+# Licensed under the terms of the MIT License
+# (see LICENSE.txt for details)
+# -----------------------------------------------------------------------------
+"""Provides QtDataVisualization classes and functions."""
+
+# Local imports
+from . import PYQT5, PYSIDE2, PythonQtError
+
+if PYQT5:
+    from PyQt5.QtDataVisualization import *
+elif PYSIDE2:
+    # https://bugreports.qt.io/projects/PYSIDE/issues/PYSIDE-1026
+    import PySide2.QtDataVisualization as __temp
+    import inspect
+    for __name in inspect.getmembers(__temp.QtDataVisualization):
+        globals()[__name[0]] = __name[1]
+else:
+    raise PythonQtError('No Qt bindings could be found')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/QtPy-1.10.0/qtpy/QtDatavisualization.py 
new/QtPy-1.11.1/qtpy/QtDatavisualization.py
--- old/QtPy-1.10.0/qtpy/QtDatavisualization.py 2021-08-17 08:58:19.000000000 
+0200
+++ new/QtPy-1.11.1/qtpy/QtDatavisualization.py 1970-01-01 01:00:00.000000000 
+0100
@@ -1,22 +0,0 @@
-# -*- coding: utf-8 -*-
-# -----------------------------------------------------------------------------
-# Copyright ?? 2009- The Spyder Development Team
-#
-# Licensed under the terms of the MIT License
-# (see LICENSE.txt for details)
-# -----------------------------------------------------------------------------
-"""Provides QtDataVisualization classes and functions."""
-
-# Local imports
-from . import PYQT5, PYSIDE2, PythonQtError
-
-if PYQT5:
-    from PyQt5.QtDataVisualization import *
-elif PYSIDE2:
-    # https://bugreports.qt.io/projects/PYSIDE/issues/PYSIDE-1026
-    import PySide2.QtDataVisualization as __temp
-    import inspect
-    for __name in inspect.getmembers(__temp.QtDataVisualization):
-        globals()[__name[0]] = __name[1]
-else:
-    raise PythonQtError('No Qt bindings could be found')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/QtPy-1.10.0/qtpy/QtPositioning.py 
new/QtPy-1.11.1/qtpy/QtPositioning.py
--- old/QtPy-1.10.0/qtpy/QtPositioning.py       1970-01-01 01:00:00.000000000 
+0100
+++ new/QtPy-1.11.1/qtpy/QtPositioning.py       2021-09-03 19:39:07.000000000 
+0200
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+# -----------------------------------------------------------------------------
+# Copyright 2020 Antonio Valentino
+#
+# Licensed under the terms of the MIT License
+# (see LICENSE.txt for details)
+# -----------------------------------------------------------------------------
+"""Provides QtPositioning classes and functions."""
+
+# Local imports
+from . import PYQT5, PYSIDE2, PythonQtError
+
+if PYQT5:
+    from PyQt5.QtPositioning import *
+elif PYSIDE2:
+    from PySide2.QtPositioning import *
+else:
+    raise PythonQtError('No Qt bindings could be found')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/QtPy-1.10.0/qtpy/QtSerialPort.py 
new/QtPy-1.11.1/qtpy/QtSerialPort.py
--- old/QtPy-1.10.0/qtpy/QtSerialPort.py        1970-01-01 01:00:00.000000000 
+0100
+++ new/QtPy-1.11.1/qtpy/QtSerialPort.py        2021-09-03 19:39:07.000000000 
+0200
@@ -0,0 +1,17 @@
+# -*- coding: utf-8 -*-
+# -----------------------------------------------------------------------------
+# Copyright ?? 2020 Marcin Stano
+# Copyright ?? 2009- The Spyder Development Team
+#
+# Licensed under the terms of the MIT License
+# (see LICENSE.txt for details)
+# -----------------------------------------------------------------------------
+"""Provides QtSerialPort classes and functions."""
+
+# Local imports
+from . import PYQT5, PythonQtError
+
+if PYQT5:
+    from PyQt5.QtSerialPort import *
+else:
+    raise PythonQtError('No Qt bindings could be found')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/QtPy-1.10.0/qtpy/QtWebEngineWidgets.py 
new/QtPy-1.11.1/qtpy/QtWebEngineWidgets.py
--- old/QtPy-1.10.0/qtpy/QtWebEngineWidgets.py  2021-08-17 08:58:19.000000000 
+0200
+++ new/QtPy-1.11.1/qtpy/QtWebEngineWidgets.py  2021-09-03 19:39:07.000000000 
+0200
@@ -22,6 +22,8 @@
         from PyQt5.QtWebEngineWidgets import QWebEnginePage
         from PyQt5.QtWebEngineWidgets import QWebEngineView
         from PyQt5.QtWebEngineWidgets import QWebEngineSettings
+        # Based on the work at https://github.com/spyder-ide/qtpy/pull/203
+        from PyQt5.QtWebEngineWidgets import QWebEngineProfile
     except ImportError:
         from PyQt5.QtWebKitWidgets import QWebPage as QWebEnginePage
         from PyQt5.QtWebKitWidgets import QWebView as QWebEngineView
@@ -31,6 +33,8 @@
     from PySide2.QtWebEngineWidgets import QWebEnginePage
     from PySide2.QtWebEngineWidgets import QWebEngineView
     from PySide2.QtWebEngineWidgets import QWebEngineSettings
+    # Based on the work at https://github.com/spyder-ide/qtpy/pull/203
+    from PySide2.QtWebEngineWidgets import QWebEngineProfile
 elif PYQT4:
     from PyQt4.QtWebKit import QWebPage as QWebEnginePage
     from PyQt4.QtWebKit import QWebView as QWebEngineView
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/QtPy-1.10.0/qtpy/QtWidgets.py 
new/QtPy-1.11.1/qtpy/QtWidgets.py
--- old/QtPy-1.10.0/qtpy/QtWidgets.py   2021-08-17 08:58:19.000000000 +0200
+++ new/QtPy-1.11.1/qtpy/QtWidgets.py   2021-09-03 19:39:07.000000000 +0200
@@ -26,6 +26,8 @@
     from PyQt4.QtGui import *
     QStyleOptionViewItem = QStyleOptionViewItemV4
     del QStyleOptionViewItemV4
+    QStyleOptionFrame = QStyleOptionFrameV3
+    del QStyleOptionFrameV3
 
     # These objects belong to QtGui
     try:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/QtPy-1.10.0/qtpy/QtWinExtras.py 
new/QtPy-1.11.1/qtpy/QtWinExtras.py
--- old/QtPy-1.10.0/qtpy/QtWinExtras.py 1970-01-01 01:00:00.000000000 +0100
+++ new/QtPy-1.11.1/qtpy/QtWinExtras.py 2021-09-03 19:39:07.000000000 +0200
@@ -0,0 +1,16 @@
+# -*- coding: utf-8 -*-
+# -----------------------------------------------------------------------------
+# Copyright ?? 2009- The Spyder Development Team
+#
+# Licensed under the terms of the MIT License
+# (see LICENSE.txt for details)
+
+from . import PYQT5, PYSIDE2, PythonQtError
+
+
+if PYQT5:
+    from PyQt5.QtWinExtras import *
+elif PYSIDE2:
+    from PySide2.QtWinExtras import *
+else:
+    raise PythonQtError('No Qt bindings could be found')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/QtPy-1.10.0/qtpy/__init__.py 
new/QtPy-1.11.1/qtpy/__init__.py
--- old/QtPy-1.10.0/qtpy/__init__.py    2021-08-17 08:58:19.000000000 +0200
+++ new/QtPy-1.11.1/qtpy/__init__.py    2021-09-03 19:39:07.000000000 +0200
@@ -70,6 +70,7 @@
 
 # Version of QtPy
 from ._version import __version__
+from .py3compat import PY2
 
 
 class PythonQtError(RuntimeError):
@@ -229,3 +230,8 @@
         API_NAME += (" (API v{0})".format(sip.getapi('QString')))
     except AttributeError:
         pass
+
+if (PYQT5 or PYSIDE2) and PY2 and sys.platform == "win32":
+    # QtDataVisualization backward compatibility (valid also on Windows)
+    # Only available for Python 2 on Windows and Qt5 bindings
+    from . import QtDataVisualization as QtDatavisualization
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/QtPy-1.10.0/qtpy/_version.py 
new/QtPy-1.11.1/qtpy/_version.py
--- old/QtPy-1.10.0/qtpy/_version.py    2021-08-17 09:48:24.000000000 +0200
+++ new/QtPy-1.11.1/qtpy/_version.py    2021-09-13 19:26:07.000000000 +0200
@@ -1,2 +1,2 @@
-version_info = (1, 10, 0)
+version_info = (1, 11, 1)
 __version__ = '.'.join(map(str, version_info))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/QtPy-1.10.0/qtpy/tests/test_qtdatavisualization.py 
new/QtPy-1.11.1/qtpy/tests/test_qtdatavisualization.py
--- old/QtPy-1.10.0/qtpy/tests/test_qtdatavisualization.py      2021-08-17 
08:58:19.000000000 +0200
+++ new/QtPy-1.11.1/qtpy/tests/test_qtdatavisualization.py      2021-09-03 
19:39:07.000000000 +0200
@@ -1,46 +1,86 @@
 from __future__ import absolute_import
 
+import sys
+
 import pytest
 from qtpy import PYQT5, PYSIDE2
+from qtpy.py3compat import PY3
 
[email protected](not (PYQT5 or PYSIDE2), reason="Only available in Qt5 
bindings")
[email protected](
+    sys.platform != "win32" or not (PYQT5 or PYSIDE2) or PY3,
+    reason="Only available in Qt5 bindings and Python 2 on Windows")
 def test_qtdatavisualization():
     """Test the qtpy.QtDataVisualization namespace"""
-    QtDataVisualization = pytest.importorskip("qtpy.QtDataVisualization")
+    # QtDataVisualization
+    assert qtpy.QtDataVisualization.QScatter3DSeries is not None
+    assert qtpy.QtDataVisualization.QSurfaceDataItem is not None
+    assert qtpy.QtDataVisualization.QSurface3DSeries is not None
+    assert qtpy.QtDataVisualization.QAbstract3DInputHandler is not None
+    assert qtpy.QtDataVisualization.QHeightMapSurfaceDataProxy is not None
+    assert qtpy.QtDataVisualization.QAbstractDataProxy is not None
+    assert qtpy.QtDataVisualization.Q3DCamera is not None
+    assert qtpy.QtDataVisualization.QAbstract3DGraph is not None
+    assert qtpy.QtDataVisualization.QCustom3DVolume is not None
+    assert qtpy.QtDataVisualization.Q3DInputHandler is not None
+    assert qtpy.QtDataVisualization.QBarDataProxy is not None
+    assert qtpy.QtDataVisualization.QSurfaceDataProxy is not None
+    assert qtpy.QtDataVisualization.QScatterDataItem is not None
+    assert qtpy.QtDataVisualization.Q3DLight is not None
+    assert qtpy.QtDataVisualization.QScatterDataProxy is not None
+    assert qtpy.QtDataVisualization.QValue3DAxis is not None
+    assert qtpy.QtDataVisualization.Q3DBars is not None
+    assert qtpy.QtDataVisualization.QBarDataItem is not None
+    assert qtpy.QtDataVisualization.QItemModelBarDataProxy is not None
+    assert qtpy.QtDataVisualization.Q3DTheme is not None
+    assert qtpy.QtDataVisualization.QCustom3DItem is not None
+    assert qtpy.QtDataVisualization.QItemModelScatterDataProxy is not None
+    assert qtpy.QtDataVisualization.QValue3DAxisFormatter is not None
+    assert qtpy.QtDataVisualization.QItemModelSurfaceDataProxy is not None
+    assert qtpy.QtDataVisualization.Q3DScatter is not None
+    assert qtpy.QtDataVisualization.QTouch3DInputHandler is not None
+    assert qtpy.QtDataVisualization.QBar3DSeries is not None
+    assert qtpy.QtDataVisualization.QAbstract3DAxis is not None
+    assert qtpy.QtDataVisualization.Q3DScene is not None
+    assert qtpy.QtDataVisualization.QCategory3DAxis is not None
+    assert qtpy.QtDataVisualization.QAbstract3DSeries is not None
+    assert qtpy.QtDataVisualization.Q3DObject is not None
+    assert qtpy.QtDataVisualization.QCustom3DLabel is not None
+    assert qtpy.QtDataVisualization.Q3DSurface is not None
+    assert qtpy.QtDataVisualization.QLogValue3DAxisFormatter is not None
 
-    assert QtDataVisualization.QScatter3DSeries is not None
-    assert QtDataVisualization.QSurfaceDataItem is not None
-    assert QtDataVisualization.QSurface3DSeries is not None
-    assert QtDataVisualization.QAbstract3DInputHandler is not None
-    assert QtDataVisualization.QHeightMapSurfaceDataProxy is not None
-    assert QtDataVisualization.QAbstractDataProxy is not None
-    assert QtDataVisualization.Q3DCamera is not None
-    assert QtDataVisualization.QAbstract3DGraph is not None
-    assert QtDataVisualization.QCustom3DVolume is not None
-    assert QtDataVisualization.Q3DInputHandler is not None
-    assert QtDataVisualization.QBarDataProxy is not None
-    assert QtDataVisualization.QSurfaceDataProxy is not None
-    assert QtDataVisualization.QScatterDataItem is not None
-    assert QtDataVisualization.Q3DLight is not None
-    assert QtDataVisualization.QScatterDataProxy is not None
-    assert QtDataVisualization.QValue3DAxis is not None
-    assert QtDataVisualization.Q3DBars is not None
-    assert QtDataVisualization.QBarDataItem is not None
-    assert QtDataVisualization.QItemModelBarDataProxy is not None
-    assert QtDataVisualization.Q3DTheme is not None
-    assert QtDataVisualization.QCustom3DItem is not None
-    assert QtDataVisualization.QItemModelScatterDataProxy is not None
-    assert QtDataVisualization.QValue3DAxisFormatter is not None
-    assert QtDataVisualization.QItemModelSurfaceDataProxy is not None
-    assert QtDataVisualization.Q3DScatter is not None
-    assert QtDataVisualization.QTouch3DInputHandler is not None
-    assert QtDataVisualization.QBar3DSeries is not None
-    assert QtDataVisualization.QAbstract3DAxis is not None
-    assert QtDataVisualization.Q3DScene is not None
-    assert QtDataVisualization.QCategory3DAxis is not None
-    assert QtDataVisualization.QAbstract3DSeries is not None
-    assert QtDataVisualization.Q3DObject is not None
-    assert QtDataVisualization.QCustom3DLabel is not None
-    assert QtDataVisualization.Q3DSurface is not None
-    assert QtDataVisualization.QLogValue3DAxisFormatter is not None
-    
+    # QtDatavisualization
+    assert qtpy.QtDatavisualization.QScatter3DSeries is not None
+    assert qtpy.QtDatavisualization.QSurfaceDataItem is not None
+    assert qtpy.QtDatavisualization.QSurface3DSeries is not None
+    assert qtpy.QtDatavisualization.QAbstract3DInputHandler is not None
+    assert qtpy.QtDatavisualization.QHeightMapSurfaceDataProxy is not None
+    assert qtpy.QtDatavisualization.QAbstractDataProxy is not None
+    assert qtpy.QtDatavisualization.Q3DCamera is not None
+    assert qtpy.QtDatavisualization.QAbstract3DGraph is not None
+    assert qtpy.QtDatavisualization.QCustom3DVolume is not None
+    assert qtpy.QtDatavisualization.Q3DInputHandler is not None
+    assert qtpy.QtDatavisualization.QBarDataProxy is not None
+    assert qtpy.QtDatavisualization.QSurfaceDataProxy is not None
+    assert qtpy.QtDatavisualization.QScatterDataItem is not None
+    assert qtpy.QtDatavisualization.Q3DLight is not None
+    assert qtpy.QtDatavisualization.QScatterDataProxy is not None
+    assert qtpy.QtDatavisualization.QValue3DAxis is not None
+    assert qtpy.QtDatavisualization.Q3DBars is not None
+    assert qtpy.QtDatavisualization.QBarDataItem is not None
+    assert qtpy.QtDatavisualization.QItemModelBarDataProxy is not None
+    assert qtpy.QtDatavisualization.Q3DTheme is not None
+    assert qtpy.QtDatavisualization.QCustom3DItem is not None
+    assert qtpy.QtDatavisualization.QItemModelScatterDataProxy is not None
+    assert qtpy.QtDatavisualization.QValue3DAxisFormatter is not None
+    assert qtpy.QtDatavisualization.QItemModelSurfaceDataProxy is not None
+    assert qtpy.QtDatavisualization.Q3DScatter is not None
+    assert qtpy.QtDatavisualization.QTouch3DInputHandler is not None
+    assert qtpy.QtDatavisualization.QBar3DSeries is not None
+    assert qtpy.QtDatavisualization.QAbstract3DAxis is not None
+    assert qtpy.QtDatavisualization.Q3DScene is not None
+    assert qtpy.QtDatavisualization.QCategory3DAxis is not None
+    assert qtpy.QtDatavisualization.QAbstract3DSeries is not None
+    assert qtpy.QtDatavisualization.Q3DObject is not None
+    assert qtpy.QtDatavisualization.QCustom3DLabel is not None
+    assert qtpy.QtDatavisualization.Q3DSurface is not None
+    assert qtpy.QtDatavisualization.QLogValue3DAxisFormatter is not None
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/QtPy-1.10.0/qtpy/tests/test_qtpositioning.py 
new/QtPy-1.11.1/qtpy/tests/test_qtpositioning.py
--- old/QtPy-1.10.0/qtpy/tests/test_qtpositioning.py    1970-01-01 
01:00:00.000000000 +0100
+++ new/QtPy-1.11.1/qtpy/tests/test_qtpositioning.py    2021-09-03 
19:39:07.000000000 +0200
@@ -0,0 +1,28 @@
+from __future__ import absolute_import
+
+import pytest
+from qtpy import PYQT5, PYSIDE2
+
[email protected](not (PYQT5 or PYSIDE2), reason="Only available in Qt5 
bindings")
+def test_qtpositioning():
+    """Test the qtpy.QtPositioning namespace"""
+    from qtpy import QtPositioning
+    assert QtPositioning.QGeoAddress is not None
+    assert QtPositioning.QGeoAreaMonitorInfo is not None
+    assert QtPositioning.QGeoAreaMonitorSource is not None
+    assert QtPositioning.QGeoCircle is not None
+    assert QtPositioning.QGeoCoordinate is not None
+    assert QtPositioning.QGeoLocation is not None
+    assert QtPositioning.QGeoPath is not None
+    # CI for Python 2.7 and 3.6 uses Qt 5.9
+    # assert QtPositioning.QGeoPolygon is not None  # New in Qt 5.10
+    assert QtPositioning.QGeoPositionInfo is not None
+    assert QtPositioning.QGeoPositionInfoSource is not None
+    # QGeoPositionInfoSourceFactory is not available in PyQt
+    # assert QtPositioning.QGeoPositionInfoSourceFactory is not None  # New in 
Qt 5.2
+    # assert QtPositioning.QGeoPositionInfoSourceFactoryV2 is not None  # New 
in Qt 5.14
+    assert QtPositioning.QGeoRectangle is not None
+    assert QtPositioning.QGeoSatelliteInfo is not None
+    assert QtPositioning.QGeoSatelliteInfoSource is not None
+    assert QtPositioning.QGeoShape is not None
+    assert QtPositioning.QNmeaPositionInfoSource is not None
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/QtPy-1.10.0/qtpy/tests/test_qtserialport.py 
new/QtPy-1.11.1/qtpy/tests/test_qtserialport.py
--- old/QtPy-1.10.0/qtpy/tests/test_qtserialport.py     1970-01-01 
01:00:00.000000000 +0100
+++ new/QtPy-1.11.1/qtpy/tests/test_qtserialport.py     2021-09-03 
19:39:07.000000000 +0200
@@ -0,0 +1,12 @@
+from __future__ import absolute_import
+
+import pytest
+from qtpy import PYQT5
+
[email protected](not PYQT5, reason="Only available in Qt5 bindings, but 
still not in PySide2")
+def test_qtserialport():
+    """Test the qtpy.QtSerialPort namespace"""
+    from qtpy import QtSerialPort
+
+    assert QtSerialPort.QSerialPort is not None
+    assert QtSerialPort.QSerialPortInfo is not None
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/QtPy-1.10.0/qtpy/tests/test_qtwinextras.py 
new/QtPy-1.11.1/qtpy/tests/test_qtwinextras.py
--- old/QtPy-1.10.0/qtpy/tests/test_qtwinextras.py      1970-01-01 
01:00:00.000000000 +0100
+++ new/QtPy-1.11.1/qtpy/tests/test_qtwinextras.py      2021-09-03 
19:39:07.000000000 +0200
@@ -0,0 +1,31 @@
+from __future__ import absolute_import
+
+import os
+import sys
+
+import pytest
+from qtpy import PYQT5, PYSIDE2
+from qtpy.py3compat import PY3
+
[email protected](
+    sys.platform != "win32" or not (PYQT5 or PYSIDE2) or
+    os.environ['USE_CONDA'] == 'Yes' and PY3 and PYQT5,
+    reason="Only available in Qt5 bindings and Windows platform")
+def test_qtwinextras():
+    """Test the qtpy.QtWinExtras namespace"""
+    from qtpy import QtWinExtras
+    assert QtWinExtras.QWinJumpList is not None
+    assert QtWinExtras.QWinJumpListCategory is not None
+    assert QtWinExtras.QWinJumpListItem is not None
+    assert QtWinExtras.QWinTaskbarButton is not None
+    assert QtWinExtras.QWinTaskbarProgress is not None
+    assert QtWinExtras.QWinThumbnailToolBar is not None
+    assert QtWinExtras.QWinThumbnailToolButton is not None
+    if not PYSIDE2:  # See https://bugreports.qt.io/browse/PYSIDE-1047
+        assert QtWinExtras.QtWin is not None
+
+    if PYSIDE2:
+        assert QtWinExtras.QWinColorizationChangeEvent is not None
+        assert QtWinExtras.QWinCompositionChangeEvent is not None
+        assert QtWinExtras.QWinEvent is not None
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/QtPy-1.10.0/qtpy/tests/test_uic.py 
new/QtPy-1.11.1/qtpy/tests/test_uic.py
--- old/QtPy-1.10.0/qtpy/tests/test_uic.py      2021-08-17 08:58:19.000000000 
+0200
+++ new/QtPy-1.11.1/qtpy/tests/test_uic.py      2021-09-13 19:20:44.000000000 
+0200
@@ -3,10 +3,14 @@
 import contextlib
 
 import pytest
-from qtpy import PYQT5, PYSIDE2, QtWidgets
+from qtpy import PYQT5, PYSIDE2, PYSIDE, QtWidgets
 from qtpy.QtWidgets import QComboBox
+
+if PYSIDE2 or PYSIDE:
+    pytest.importorskip("pyside2uic", reason="pyside2uic not installed")
+
 from qtpy import uic
-from qtpy.uic import loadUi
+from qtpy.uic import loadUi, loadUiType
 
 
 QCOMBOBOX_SUBCLASS = """
@@ -59,6 +63,30 @@
 @pytest.mark.skipif(((PYSIDE2 or PYQT5)
                      and os.environ.get('CI', None) is not None),
                     reason="It segfaults in our CIs with PYSIDE2 or PYQT5")
+def test_load_ui_type():
+    """
+    Make sure that the patched loadUiType function behaves as expected with a
+    simple .ui file.
+    """
+    app = get_qapp()
+    ui_type, ui_base_type = loadUiType(
+        os.path.join(os.path.dirname(__file__), 'test.ui'))
+    assert ui_type.__name__ == 'Ui_Form'
+
+    class Widget(ui_base_type, ui_type):
+        def __init__(self):
+            super(Widget, self).__init__()
+            self.setupUi(self)
+
+    ui = Widget()
+    assert isinstance(ui, QtWidgets.QWidget)
+    assert isinstance(ui.pushButton, QtWidgets.QPushButton)
+    assert isinstance(ui.comboBox, QComboBox)
+
+
[email protected](((PYSIDE2 or PYQT5)
+                     and os.environ.get('CI', None) is not None),
+                    reason="It segfaults in our CIs with PYSIDE2 or PYQT5")
 def test_load_ui_custom_auto(tmpdir):
     """
     Test that we can load a .ui file with custom widgets without having to
@@ -81,7 +109,7 @@
     QT_API = os.environ.get('QT_API', '').lower()
     if QT_API.startswith('pyside'):
         assert hasattr(uic, 'loadUi')
-        assert not hasattr(uic, 'loadUiType')
+        assert hasattr(uic, 'loadUiType')
     else:
         objects = ['compileUi', 'compileUiDir', 'loadUi', 'loadUiType',
                    'widgetPluginPath']
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/QtPy-1.10.0/qtpy/uic.py new/QtPy-1.11.1/qtpy/uic.py
--- old/QtPy-1.10.0/qtpy/uic.py 2021-08-17 08:58:19.000000000 +0200
+++ new/QtPy-1.11.1/qtpy/uic.py 2021-09-13 19:20:44.000000000 +0200
@@ -14,7 +14,7 @@
 
 else:
 
-    __all__ = ['loadUi']
+    __all__ = ['loadUi', 'loadUiType']
 
     # In PySide, loadUi does not exist, so we define it using QUiLoader, and
     # then make sure we expose that function. This is adapted from qt-helpers
@@ -81,9 +81,17 @@
     if PYSIDE:
         from PySide.QtCore import QMetaObject
         from PySide.QtUiTools import QUiLoader
+        try:
+            from pysideuic import compileUi
+        except ImportError:
+            pass
     elif PYSIDE2:
         from PySide2.QtCore import QMetaObject
         from PySide2.QtUiTools import QUiLoader
+        try:
+            from pyside2uic import compileUi
+        except ImportError:
+            pass
 
     class UiLoader(QUiLoader):
         """
@@ -226,3 +234,44 @@
         widget = loader.load(uifile)
         QMetaObject.connectSlotsByName(widget)
         return widget
+
+    def loadUiType(uifile, from_imports=False):
+        """Load a .ui file and return the generated form class and
+        the Qt base class.
+
+        The "loadUiType" command convert the ui file to py code
+        in-memory first and then execute it in a special frame to
+        retrieve the form_class.
+
+        Credit: https://stackoverflow.com/a/14195313/15954282
+        """
+
+        import sys
+        if sys.version_info >= (3, 0):
+            from io import StringIO
+        else:
+            from io import BytesIO as StringIO
+        from xml.etree.ElementTree import ElementTree
+        from . import QtWidgets
+
+        # Parse the UI file
+        etree = ElementTree()
+        ui = etree.parse(uifile)
+
+        widget_class = ui.find('widget').get('class')
+        form_class = ui.find('class').text
+
+        with open(uifile, 'r') as fd:
+            code_stream = StringIO()
+            frame = {}
+
+            compileUi(fd, code_stream, indent=0, from_imports=from_imports)
+            pyc = compile(code_stream.getvalue(), '<string>', 'exec')
+            exec(pyc, frame)
+
+            # Fetch the base_class and form class based on their type in the
+            # xml from designer
+            form_class = frame['Ui_%s' % form_class]
+            base_class = getattr(QtWidgets, widget_class)
+
+        return form_class, base_class

Reply via email to