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
