Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-AnyQt for openSUSE:Factory checked in at 2022-08-02 22:09:37 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-AnyQt (Old) and /work/SRC/openSUSE:Factory/.python-AnyQt.new.1533 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-AnyQt" Tue Aug 2 22:09:37 2022 rev:9 rq:992329 version:0.1.1 Changes: -------- --- /work/SRC/openSUSE:Factory/python-AnyQt/python-AnyQt.changes 2022-03-07 17:49:08.899081598 +0100 +++ /work/SRC/openSUSE:Factory/.python-AnyQt.new.1533/python-AnyQt.changes 2022-08-02 22:10:29.065996048 +0200 @@ -1,0 +2,26 @@ +Tue Aug 2 09:46:16 UTC 2022 - Otto Hollmann <otto.hollm...@suse.com> + +- update to 0.1.1 + * importhooks: Fix deprecation warnings `find_module` and `load_module` are deprecated. +- from version 0.1.0 + * Update imports of QWebEngineCore components for Qt6 + * Add tests + * Add forward compatible QTextEdit.setTabStopDistance, ... + * Qt5: Add forward compatible QAbstractItem.itemDelegateForIndex method + * Add forward compatible QAbstractItemView.initViewItemOption + * Make available enum members in type when not present + * PyQt6: Add ctypes QAction.menu/setMenut + * Add QLibraryInfo.path if not present + * PyQt6: Add back obsolete accessors to QWheelEvent + * PyQt6: Add back obsolete accessors to QDropEvent, QEnterEvent + * PyQt6: Add back obsolete pos,x, ..., accessors to QMouseEvent + * PyQt6: Implement QAbstractItemView.viewOptions back compatible method + * PyQt6: Move QShortcut, QAction imports + * PyQt6: Move QUndoStack, ... imports + * PyQt6: Add back some common Enum/Flag type aliases + * PyQt6: Add QtSvgWidgets stub module + * Add support for PyQt6 + * Make all members of QFontDatabase static +- updated patch do-not-test-pyqt4.patch + +------------------------------------------------------------------- Old: ---- AnyQt-0.0.14.tar.gz New: ---- AnyQt-0.1.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-AnyQt.spec ++++++ --- /var/tmp/diff_new_pack.SzFskX/_old 2022-08-02 22:10:29.481997247 +0200 +++ /var/tmp/diff_new_pack.SzFskX/_new 2022-08-02 22:10:29.485997258 +0200 @@ -19,7 +19,7 @@ %define skip_python2 1 %{?!python_module:%define python_module() python-%{**} python3-%{**}} Name: python-AnyQt -Version: 0.0.14 +Version: 0.1.1 Release: 0 Summary: PyQt4/PyQt5 compatibility layer License: GPL-3.0-only ++++++ AnyQt-0.0.14.tar.gz -> AnyQt-0.1.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/AnyQt-0.0.14/AnyQt/QtCore.py new/AnyQt-0.1.1/AnyQt/QtCore.py --- old/AnyQt-0.0.14/AnyQt/QtCore.py 2022-02-25 09:13:49.000000000 +0100 +++ new/AnyQt-0.1.1/AnyQt/QtCore.py 2022-06-13 12:12:31.000000000 +0200 @@ -243,7 +243,33 @@ 'pyqtSignature', ] -if _api.USED_API == _api.QT_API_PYQT5: +if _api.USED_API == _api.QT_API_PYQT6: + from PyQt6.QtCore import * + Signal = pyqtSignal + Slot = pyqtSlot + Property = pyqtProperty + Qt.Alignment = Qt.AlignmentFlag + Qt.ApplicationStates = Qt.ApplicationState + Qt.DockWidgetAreas = Qt.DockWidgetArea + Qt.Edges = Qt.Edge + Qt.FindChildOptions = Qt.FindChildOption + Qt.GestureFlags = Qt.GestureFlag + Qt.ImageConversionFlags = Qt.ImageConversionFlag + Qt.ItemFlags = Qt.ItemFlag + Qt.KeyboardModifiers = Qt.KeyboardModifier + Qt.MatchFlags = Qt.MatchFlag + Qt.MouseButtons = Qt.MouseButton + Qt.MouseEventFlags = Qt.MouseEventFlag + Qt.Orientations = Qt.Orientation + Qt.ScreenOrientations = Qt.ScreenOrientation + # Qt.SplitBehavior = Qt.SplitBehaviorFlags + Qt.TextInteractionFlags = Qt.TextInteractionFlag + Qt.ToolBarAreas = Qt.ToolBarArea + Qt.TouchPointStates = Qt.TouchPointState + Qt.WindowFlags = Qt.WindowType + Qt.WindowStates = Qt.WindowState + QItemSelectionModel.SelectionFlags = QItemSelectionModel.SelectionFlag +elif _api.USED_API == _api.QT_API_PYQT5: from PyQt5.QtCore import * try: # QSignalMapper.mapped[QWidget] does not work unless QtWidgets is @@ -349,5 +375,16 @@ except (KeyError, TypeError): pass +if not hasattr(QLibraryInfo, "path"): + QLibraryInfo.path = QLibraryInfo.location + +if not hasattr(QLibraryInfo, "LibraryLocation"): + QLibraryInfo.LibraryLocation = QLibraryInfo.LibraryPath + +if not hasattr(QLibraryInfo, "location"): + QLibraryInfo.location = QLibraryInfo.path + #: Qt version as a (major, minor, micro) tuple QT_VERSION_INFO = tuple(map(int, qVersion().split(".")[:3])) + +_api.apply_global_fixes(globals()) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/AnyQt-0.0.14/AnyQt/QtDBus.py new/AnyQt-0.1.1/AnyQt/QtDBus.py --- old/AnyQt-0.0.14/AnyQt/QtDBus.py 2022-02-25 09:06:36.000000000 +0100 +++ new/AnyQt-0.1.1/AnyQt/QtDBus.py 2022-06-08 13:18:42.000000000 +0200 @@ -1,8 +1,12 @@ from . import _api -if _api.USED_API == _api.QT_API_PYQT5: +if _api.USED_API == _api.QT_API_PYQT6: + from PyQt6.QtDBus import * +elif _api.USED_API == _api.QT_API_PYQT5: from PyQt5.QtDBus import * elif _api.USED_API == _api.QT_API_PYQT4: from PyQt4.QtDBus import * elif _api.USED_API == _api.QT_API_PYSIDE: from PySide.QtDBus import * + +_api.apply_global_fixes(globals()) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/AnyQt-0.0.14/AnyQt/QtDesigner.py new/AnyQt-0.1.1/AnyQt/QtDesigner.py --- old/AnyQt-0.0.14/AnyQt/QtDesigner.py 2022-02-25 09:06:36.000000000 +0100 +++ new/AnyQt-0.1.1/AnyQt/QtDesigner.py 2022-06-08 13:18:42.000000000 +0200 @@ -1,8 +1,12 @@ from . import _api -if _api.USED_API == _api.QT_API_PYQT5: +if _api.USED_API == _api.QT_API_PYQT6: + from PyQt6.QtDesigner import * +elif _api.USED_API == _api.QT_API_PYQT5: from PyQt5.QtDesigner import * elif _api.USED_API == _api.QT_API_PYQT4: from PyQt4.QtDesigner import * elif _api.USED_API == _api.QT_API_PYSIDE: from PySide.QtDesigner import * + +_api.apply_global_fixes(globals()) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/AnyQt-0.0.14/AnyQt/QtGui.py new/AnyQt-0.1.1/AnyQt/QtGui.py --- old/AnyQt-0.0.14/AnyQt/QtGui.py 2022-02-25 09:06:36.000000000 +0100 +++ new/AnyQt-0.1.1/AnyQt/QtGui.py 2022-06-13 12:12:31.000000000 +0200 @@ -1,5 +1,5 @@ from warnings import warn - +from .QtCore import QT_VERSION_INFO as __QT_VERSION_INFO from . import _api # Names imported from Qt4's QtGui module @@ -136,8 +136,79 @@ 'qRgba' ] -if _api.USED_API == _api.QT_API_PYQT5: +if _api.USED_API == _api.QT_API_PYQT6: + from PyQt6.QtGui import * + # Deprecated QEnterEvent accessors + if not hasattr(QEnterEvent, "pos"): + QEnterEvent.pos = lambda self: self.position().toPoint() + if not hasattr(QEnterEvent, "globalPos"): + QEnterEvent.globalPos = lambda self: self.globalPosition().toPoint() + if not hasattr(QEnterEvent, "x"): + QEnterEvent.x = lambda self: self.position().toPoint().x() + if not hasattr(QEnterEvent, "y"): + QEnterEvent.y = lambda self: self.position().toPoint().y() + if not hasattr(QEnterEvent, "globalX"): + QEnterEvent.globalX = lambda self: self.globalPosition().toPoint().x() + if not hasattr(QEnterEvent, "globalY"): + QEnterEvent.globalY = lambda self: self.globalPosition().toPoint().y() + if not hasattr(QEnterEvent, "localPos"): + QEnterEvent.localPos = lambda self: self.position() + if not hasattr(QEnterEvent, "windowPos"): + QEnterEvent.windowPos = lambda self: self.scenePosition() + if not hasattr(QEnterEvent, "screenPos"): + QEnterEvent.screenPos = lambda self: self.globalPosition() + + # Deprecated QMouseEvent accessors + if not hasattr(QMouseEvent, "pos"): + QMouseEvent.pos = lambda self: self.position().toPoint() + if not hasattr(QMouseEvent, "globalPos"): + QMouseEvent.globalPos = lambda self: self.globalPosition().toPoint() + if not hasattr(QMouseEvent, "x"): + QMouseEvent.x = lambda self: self.position().x() + if not hasattr(QMouseEvent, "y"): + QMouseEvent.y = lambda self: self.position().y() + if not hasattr(QMouseEvent, "globalX"): + QMouseEvent.globalX = lambda self: self.globalPosition().x() + if not hasattr(QMouseEvent, "globalY"): + QMouseEvent.globalY = lambda self: self.globalPosition().y() + + # Deprecated QDropEvent accessors + if not hasattr(QDropEvent, "pos"): + QDropEvent.pos = lambda self: self.position().toPoint() + if not hasattr(QDropEvent, "posF"): + QDropEvent.posF = lambda self: self.position() + if not hasattr(QDropEvent, "mouseButtons"): + QDropEvent.mouseButtons = lambda self: self.buttons() + if not hasattr(QDropEvent, "keyboardModifiers"): + QDropEvent.keyboardModifiers = lambda self: self.modifiers() + + # Deprecated QWheelEvent accessors + if not hasattr(QWheelEvent, "pos"): + QWheelEvent.pos = lambda self: self.position().toPoint() + if not hasattr(QWheelEvent, "posF"): + QWheelEvent.posF = lambda self: self.position() + if not hasattr(QWheelEvent, "globalPos"): + QWheelEvent.globalPos = lambda self: self.globalPosition().toPoint() + if not hasattr(QWheelEvent, "globalPosF"): + QWheelEvent.globalPosF = lambda self: self.globalPosition() + if not hasattr(QWheelEvent, "x"): + QWheelEvent.x = lambda self: self.position().x() + if not hasattr(QWheelEvent, "y"): + QWheelEvent.y = lambda self: self.position().y() + if not hasattr(QWheelEvent, "globalX"): + QWheelEvent.globalX = lambda self: self.globalPosition().x() + if not hasattr(QWheelEvent, "globalY"): + QWheelEvent.globalY = lambda self: self.globalPosition().y() + if not hasattr(QWheelEvent, "mouseButtons"): + QWheelEvent.mouseButtons = lambda self: self.buttons() + if not hasattr(QWheelEvent, "keyboardModifiers"): + QWheelEvent.keyboardModifiers = lambda self: self.modifiers() + + +elif _api.USED_API == _api.QT_API_PYQT5: from PyQt5.QtGui import * + from PyQt5.QtWidgets import QUndoCommand, QUndoStack, QUndoGroup + from PyQt5.QtWidgets import QShortcut, QAction, QActionGroup from PyQt5.QtCore import PYQT_VERSION as _PYQT_VERSION if _PYQT_VERSION < 0x50c00: # 5.12.0 @@ -279,3 +350,31 @@ QFontMetricsF.width = QFontMetrics_width QFontMetrics.width = QFontMetrics_width del QFontMetrics_width + +if __QT_VERSION_INFO < (6, 0): + class QFontDatabase(QFontDatabase): + def staticwrapper(f): + from functools import wraps + @wraps(f) + def wrapped(*args, **kwargs): + return f(QFontDatabase(), *args, **kwargs) + return staticmethod(wrapped) + bold = staticwrapper(QFontDatabase.bold) + families = staticwrapper(QFontDatabase.families) + font = staticwrapper(QFontDatabase.font) + isBitmapScalable = staticwrapper(QFontDatabase.isBitmapScalable) + isFixedPitch = staticwrapper(QFontDatabase.isFixedPitch) + isPrivateFamily = staticwrapper(QFontDatabase.isPrivateFamily) + isScalable = staticwrapper(QFontDatabase.isScalable) + isSmoothlyScalable = staticwrapper(QFontDatabase.isSmoothlyScalable) + italic = staticwrapper(QFontDatabase.italic) + pointSizes = staticwrapper(QFontDatabase.pointSizes) + smoothSizes = staticwrapper(QFontDatabase.smoothSizes) + styleString = staticwrapper(QFontDatabase.styleString) + styles = staticwrapper(QFontDatabase.styles) + weight = staticwrapper(QFontDatabase.weight) + writingSystems = staticwrapper(QFontDatabase.writingSystems) + del staticwrapper + + +_api.apply_global_fixes(globals()) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/AnyQt-0.0.14/AnyQt/QtHelp.py new/AnyQt-0.1.1/AnyQt/QtHelp.py --- old/AnyQt-0.0.14/AnyQt/QtHelp.py 2022-02-25 09:06:36.000000000 +0100 +++ new/AnyQt-0.1.1/AnyQt/QtHelp.py 2022-06-08 13:18:42.000000000 +0200 @@ -1,6 +1,8 @@ from . import _api -if _api.USED_API == _api.QT_API_PYQT5: +if _api.USED_API == _api.QT_API_PYQT6: + from PyQt6.QtHelp import * +elif _api.USED_API == _api.QT_API_PYQT5: from PyQt5.QtHelp import * elif _api.USED_API == _api.QT_API_PYQT4: from PyQt4.QtHelp import * @@ -8,3 +10,5 @@ from PySide.QtHelp import * elif _api.USED_API == _api.QT_API_PYSIDE2: from PySide2.QtHelp import * + +_api.apply_global_fixes(globals()) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/AnyQt-0.0.14/AnyQt/QtMacExtras.py new/AnyQt-0.1.1/AnyQt/QtMacExtras.py --- old/AnyQt-0.0.14/AnyQt/QtMacExtras.py 2022-02-25 09:06:36.000000000 +0100 +++ new/AnyQt-0.1.1/AnyQt/QtMacExtras.py 2022-06-08 13:18:42.000000000 +0200 @@ -4,10 +4,13 @@ __Qt4_QtGui = [ 'QMacPasteboardMime' ] - -if _api.USED_API == _api.QT_API_PYQT5: +if _api.USED_API == _api.QT_API_PYQT6: + from PyQt6.QtMacExtras import * +elif _api.USED_API == _api.QT_API_PYQT5: from PyQt5.QtMacExtras import * elif _api.USED_API == _api.QT_API_PYQT4: from PyQt4.QtGui import QMacPasteboardMime elif _api.USED_API == _api.QT_API_PYSIDE: from PySide.QtGui import QMacPasteboardMime + +_api.apply_global_fixes(globals()) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/AnyQt-0.0.14/AnyQt/QtMultimedia.py new/AnyQt-0.1.1/AnyQt/QtMultimedia.py --- old/AnyQt-0.0.14/AnyQt/QtMultimedia.py 2022-02-25 09:06:36.000000000 +0100 +++ new/AnyQt-0.1.1/AnyQt/QtMultimedia.py 2022-06-08 13:18:42.000000000 +0200 @@ -1,6 +1,8 @@ from . import _api -if _api.USED_API == _api.QT_API_PYQT5: +if _api.USED_API == _api.QT_API_PYQT6: + from PyQt6.QtMultimedia import * +elif _api.USED_API == _api.QT_API_PYQT5: from PyQt5.QtMultimedia import * elif _api.USED_API == _api.QT_API_PYQT4: from PyQt4.QtMultimedia import * @@ -8,3 +10,5 @@ from PySide.QtMultimedia import * elif _api.USED_API == _api.QT_API_PYSIDE2: from PySide2.QtMultimedia import * + +_api.apply_global_fixes(globals()) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/AnyQt-0.0.14/AnyQt/QtMultimediaWidgets.py new/AnyQt-0.1.1/AnyQt/QtMultimediaWidgets.py --- old/AnyQt-0.0.14/AnyQt/QtMultimediaWidgets.py 2022-02-25 09:06:36.000000000 +0100 +++ new/AnyQt-0.1.1/AnyQt/QtMultimediaWidgets.py 2022-06-08 13:18:42.000000000 +0200 @@ -1,9 +1,13 @@ from . import _api -if _api.USED_API == _api.QT_API_PYQT5: +if _api.USED_API == _api.QT_API_PYQT6: + from PyQt6.QtMultimediaWidgets import * +elif _api.USED_API == _api.QT_API_PYQT5: from PyQt5.QtMultimediaWidgets import * elif _api.USED_API == _api.QT_API_PYSIDE2: from PySide2.QtMultimediaWidgets import * else: raise ImportError("No module named 'QtMultimediaWidgets' in the selected" "Qt api ({})".format(_api.USED_API)) + +_api.apply_global_fixes(globals()) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/AnyQt-0.0.14/AnyQt/QtNetwork.py new/AnyQt-0.1.1/AnyQt/QtNetwork.py --- old/AnyQt-0.0.14/AnyQt/QtNetwork.py 2022-02-25 09:06:36.000000000 +0100 +++ new/AnyQt-0.1.1/AnyQt/QtNetwork.py 2022-06-13 12:12:31.000000000 +0200 @@ -46,8 +46,9 @@ 'QTcpSocket', 'QUdpSocket', ] - -if _api.USED_API == _api.QT_API_PYQT5: +if _api.USED_API == _api.QT_API_PYQT6: + from PyQt6.QtNetwork import * +elif _api.USED_API == _api.QT_API_PYQT5: from PyQt5.QtNetwork import * elif _api.USED_API == _api.QT_API_PYQT4: from PyQt4.QtNetwork import * @@ -55,3 +56,5 @@ from PySide.QtNetwork import * elif _api.USED_API == _api.QT_API_PYSIDE2: from PySide2.QtNetwork import * + +_api.apply_global_fixes(globals()) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/AnyQt-0.0.14/AnyQt/QtOpenGL.py new/AnyQt-0.1.1/AnyQt/QtOpenGL.py --- old/AnyQt-0.0.14/AnyQt/QtOpenGL.py 2022-02-25 09:06:36.000000000 +0100 +++ new/AnyQt-0.1.1/AnyQt/QtOpenGL.py 2022-06-08 13:18:42.000000000 +0200 @@ -1,6 +1,8 @@ from . import _api -if _api.USED_API == _api.QT_API_PYQT5: +if _api.USED_API == _api.QT_API_PYQT6: + from PyQt6.QtOpenGL import * +elif _api.USED_API == _api.QT_API_PYQT5: from PyQt5.QtOpenGL import * elif _api.USED_API == _api.QT_API_PYQT4: from PyQt4.QtOpenGL import * @@ -9,3 +11,4 @@ elif _api.USED_API == _api.QT_API_PYSIDE2: from PySide2.QtOpenGL import * +_api.apply_global_fixes(globals()) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/AnyQt-0.0.14/AnyQt/QtPrintSupport.py new/AnyQt-0.1.1/AnyQt/QtPrintSupport.py --- old/AnyQt-0.0.14/AnyQt/QtPrintSupport.py 2022-02-25 09:06:36.000000000 +0100 +++ new/AnyQt-0.1.1/AnyQt/QtPrintSupport.py 2022-06-08 13:18:42.000000000 +0200 @@ -11,8 +11,9 @@ 'QPrinter', 'QPrinterInfo' ] - -if _api.USED_API == _api.QT_API_PYQT5: +if _api.USED_API == _api.QT_API_PYQT6: + from PyQt6.QtPrintSupport import * +elif _api.USED_API == _api.QT_API_PYQT5: from PyQt5.QtPrintSupport import * elif _api.USED_API == _api.QT_API_PYQT4: from PyQt4.QtGui import ( @@ -38,3 +39,5 @@ ) elif _api.USED_API == _api.QT_API_PYSIDE2: from PySide2.QtPrintSupport import * + +_api.apply_global_fixes(globals()) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/AnyQt-0.0.14/AnyQt/QtQml.py new/AnyQt-0.1.1/AnyQt/QtQml.py --- old/AnyQt-0.0.14/AnyQt/QtQml.py 2022-02-25 09:06:36.000000000 +0100 +++ new/AnyQt-0.1.1/AnyQt/QtQml.py 2022-06-08 13:18:42.000000000 +0200 @@ -1,9 +1,13 @@ from . import _api -if _api.USED_API == _api.QT_API_PYQT5: +if _api.USED_API == _api.QT_API_PYQT6: + from PyQt6.QtQml import * +elif _api.USED_API == _api.QT_API_PYQT5: from PyQt5.QtQml import * elif _api.USED_API == _api.QT_API_PYSIDE2: from PySide2.QtQml import * else: raise ImportError("No module named 'QtQml' in the selected " "Qt api ({})".format(_api.USED_API)) + +_api.apply_global_fixes(globals()) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/AnyQt-0.0.14/AnyQt/QtQuick.py new/AnyQt-0.1.1/AnyQt/QtQuick.py --- old/AnyQt-0.0.14/AnyQt/QtQuick.py 2022-02-25 09:06:36.000000000 +0100 +++ new/AnyQt-0.1.1/AnyQt/QtQuick.py 2022-06-08 13:18:42.000000000 +0200 @@ -1,9 +1,13 @@ from . import _api -if _api.USED_API == _api.QT_API_PYQT5: +if _api.USED_API == _api.QT_API_PYQT6: + from PyQt6.QtQuick import * +elif _api.USED_API == _api.QT_API_PYQT5: from PyQt5.QtQuick import * elif _api.USED_API == _api.QT_API_PYSIDE2: from PySide2.QtQuick import * else: raise ImportError("No module named 'QtQuick' in the selected " "Qt api ({})".format(_api.USED_API)) + +_api.apply_global_fixes(globals()) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/AnyQt-0.0.14/AnyQt/QtSql.py new/AnyQt-0.1.1/AnyQt/QtSql.py --- old/AnyQt-0.0.14/AnyQt/QtSql.py 2022-02-25 09:06:36.000000000 +0100 +++ new/AnyQt-0.1.1/AnyQt/QtSql.py 2022-06-08 13:18:42.000000000 +0200 @@ -1,6 +1,8 @@ from . import _api -if _api.USED_API == _api.QT_API_PYQT5: +if _api.USED_API == _api.QT_API_PYQT6: + from PyQt6.QtSql import * +elif _api.USED_API == _api.QT_API_PYQT5: from PyQt5.QtSql import * elif _api.USED_API == _api.QT_API_PYQT4: from PyQt4.QtSql import * @@ -8,3 +10,5 @@ from PySide.QtSql import * elif _api.USED_API == _api.QT_API_PYSIDE2: from PySide2.QtSql import * + +_api.apply_global_fixes(globals()) \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/AnyQt-0.0.14/AnyQt/QtSvg.py new/AnyQt-0.1.1/AnyQt/QtSvg.py --- old/AnyQt-0.0.14/AnyQt/QtSvg.py 2022-02-25 09:06:36.000000000 +0100 +++ new/AnyQt-0.1.1/AnyQt/QtSvg.py 2022-06-13 12:12:31.000000000 +0200 @@ -1,6 +1,9 @@ from . import _api -if _api.USED_API == _api.QT_API_PYQT5: +if _api.USED_API == _api.QT_API_PYQT6: + from PyQt6.QtSvg import * + from PyQt6.QtSvgWidgets import QSvgWidget, QGraphicsSvgItem +elif _api.USED_API == _api.QT_API_PYQT5: from PyQt5.QtSvg import * elif _api.USED_API == _api.QT_API_PYQT4: from PyQt4.QtSvg import * @@ -8,3 +11,5 @@ from PySide.QtSvg import * elif _api.USED_API == _api.QT_API_PYSIDE2: from PySide2.QtSvg import * + +_api.apply_global_fixes(globals()) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/AnyQt-0.0.14/AnyQt/QtSvgWidgets.py new/AnyQt-0.1.1/AnyQt/QtSvgWidgets.py --- old/AnyQt-0.0.14/AnyQt/QtSvgWidgets.py 1970-01-01 01:00:00.000000000 +0100 +++ new/AnyQt-0.1.1/AnyQt/QtSvgWidgets.py 2022-06-08 13:18:42.000000000 +0200 @@ -0,0 +1,14 @@ +from . import _api + +if _api.USED_API == _api.QT_API_PYQT6: + from PyQt6.QtSvgWidgets import * +elif _api.USED_API == _api.QT_API_PYQT5: + from PyQt5.QtSvg import QSvgWidget, QGraphicsSvgItem +elif _api.USED_API == _api.QT_API_PYQT4: + from PyQt4.QtSvg import QSvgWidget, QGraphicsSvgItem +elif _api.USED_API == _api.QT_API_PYSIDE: + from PySide.QtSvg import QSvgWidget, QGraphicsSvgItem +elif _api.USED_API == _api.QT_API_PYSIDE2: + from PySide2.QtSvg import QSvgWidget, QGraphicsSvgItem + +_api.apply_global_fixes(globals()) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/AnyQt-0.0.14/AnyQt/QtTest.py new/AnyQt-0.1.1/AnyQt/QtTest.py --- old/AnyQt-0.0.14/AnyQt/QtTest.py 2022-02-25 09:06:36.000000000 +0100 +++ new/AnyQt-0.1.1/AnyQt/QtTest.py 2022-06-13 12:12:31.000000000 +0200 @@ -1,6 +1,8 @@ from . import _api -if _api.USED_API == _api.QT_API_PYQT5: +if _api.USED_API == _api.QT_API_PYQT6: + from PyQt6.QtTest import * +elif _api.USED_API == _api.QT_API_PYQT5: from PyQt5.QtTest import * elif _api.USED_API == _api.QT_API_PYQT4: from PyQt4.QtTest import * @@ -150,3 +152,5 @@ if not hasattr(QTest, "qWaitFor"): # Qt < 5.10 QTest.qWaitFor = _QTest_qWaitFor + +_api.apply_global_fixes(globals()) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/AnyQt-0.0.14/AnyQt/QtWebChannel.py new/AnyQt-0.1.1/AnyQt/QtWebChannel.py --- old/AnyQt-0.0.14/AnyQt/QtWebChannel.py 2022-02-25 09:06:36.000000000 +0100 +++ new/AnyQt-0.1.1/AnyQt/QtWebChannel.py 2022-06-08 13:18:42.000000000 +0200 @@ -1,9 +1,12 @@ from . import _api - -if _api.USED_API == _api.QT_API_PYQT5: +if _api.USED_API == _api.QT_API_PYQT6: + from PyQt6.QtWebChannel import * +elif _api.USED_API == _api.QT_API_PYQT5: from PyQt5.QtWebChannel import * elif _api.USED_API == _api.QT_API_PYSIDE2: from PySide2.QtWebChannel import * else: raise ImportError("No module named 'QtWebChannel' in the selected " "Qt api ({})".format(_api.USED_API)) + +_api.apply_global_fixes(globals()) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/AnyQt-0.0.14/AnyQt/QtWebEngineCore.py new/AnyQt-0.1.1/AnyQt/QtWebEngineCore.py --- old/AnyQt-0.0.14/AnyQt/QtWebEngineCore.py 2022-02-25 09:06:36.000000000 +0100 +++ new/AnyQt-0.1.1/AnyQt/QtWebEngineCore.py 2022-06-08 13:18:42.000000000 +0200 @@ -1,7 +1,25 @@ from . import _api -if _api.USED_API == _api.QT_API_PYQT5: +if _api.USED_API == _api.QT_API_PYQT6: + from PyQt6.QtWebEngineCore import * +elif _api.USED_API == _api.QT_API_PYQT5: from PyQt5.QtWebEngineCore import * + try: + from PyQt5.QtWebEngineWidgets import ( + QWebEngineHistory, + QWebEngineProfile, + QWebEngineScript, + QWebEngineScriptCollection, + QWebEngineClientCertificateSelection, + QWebEngineSettings, + QWebEngineFullScreenRequest, + ) + except ImportError: + pass + + else: raise ImportError("No module named 'QtWebEngineCore' in the selected " "Qt api ({})".format(_api.USED_API)) + +_api.apply_global_fixes(globals()) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/AnyQt-0.0.14/AnyQt/QtWebEngineWidgets.py new/AnyQt-0.1.1/AnyQt/QtWebEngineWidgets.py --- old/AnyQt-0.0.14/AnyQt/QtWebEngineWidgets.py 2022-02-25 09:06:36.000000000 +0100 +++ new/AnyQt-0.1.1/AnyQt/QtWebEngineWidgets.py 2022-06-08 13:18:42.000000000 +0200 @@ -1,9 +1,22 @@ from . import _api -if _api.USED_API == _api.QT_API_PYQT5: +if _api.USED_API == _api.QT_API_PYQT6: + from PyQt6.QtWebEngineWidgets import * + from PyQt6.QtWebEngineCore import ( + QWebEngineHistory, + QWebEngineProfile, + QWebEngineScript, + QWebEngineScriptCollection, + QWebEngineClientCertificateSelection, + QWebEngineSettings, + QWebEngineFullScreenRequest, + ) +elif _api.USED_API == _api.QT_API_PYQT5: from PyQt5.QtWebEngineWidgets import * elif _api.USED_API == _api.QT_API_PYSIDE2: from PySide2.QtWebEngineWidgets import * else: raise ImportError("No module named 'QtWebEngineWidgets' in the selected " "Qt api ({})".format(_api.USED_API)) + +_api.apply_global_fixes(globals()) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/AnyQt-0.0.14/AnyQt/QtWebKit.py new/AnyQt-0.1.1/AnyQt/QtWebKit.py --- old/AnyQt-0.0.14/AnyQt/QtWebKit.py 2022-02-25 09:06:36.000000000 +0100 +++ new/AnyQt-0.1.1/AnyQt/QtWebKit.py 2022-06-08 13:18:42.000000000 +0200 @@ -16,7 +16,9 @@ 'qWebKitVersion' ] -if _api.USED_API == _api.QT_API_PYQT5: +if _api.USED_API == _api.QT_API_PYQT6: + from PyQt6.QtWebKit import * +elif _api.USED_API == _api.QT_API_PYQT5: from PyQt5.QtWebKit import * elif _api.USED_API == _api.QT_API_PYQT4: from PyQt4.QtWebKit import ( diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/AnyQt-0.0.14/AnyQt/QtWebKitWidgets.py new/AnyQt-0.1.1/AnyQt/QtWebKitWidgets.py --- old/AnyQt-0.0.14/AnyQt/QtWebKitWidgets.py 2022-02-25 09:06:36.000000000 +0100 +++ new/AnyQt-0.1.1/AnyQt/QtWebKitWidgets.py 2022-06-08 13:18:42.000000000 +0200 @@ -10,7 +10,9 @@ 'QWebView', ] -if _api.USED_API == _api.QT_API_PYQT5: +if _api.USED_API == _api.QT_API_PYQT6: + from PyQt6.QtWebKitWidgets import * +elif _api.USED_API == _api.QT_API_PYQT5: from PyQt5.QtWebKitWidgets import * elif _api.USED_API == _api.QT_API_PYQT4: from PyQt4.QtWebKit import ( @@ -30,3 +32,5 @@ QWebPage, QWebView, ) + +_api.apply_global_fixes(globals()) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/AnyQt-0.0.14/AnyQt/QtWebSockets.py new/AnyQt-0.1.1/AnyQt/QtWebSockets.py --- old/AnyQt-0.0.14/AnyQt/QtWebSockets.py 2022-02-25 09:06:36.000000000 +0100 +++ new/AnyQt-0.1.1/AnyQt/QtWebSockets.py 2022-06-08 13:18:42.000000000 +0200 @@ -1,9 +1,13 @@ from . import _api -if _api.USED_API == _api.QT_API_PYQT5: +if _api.USED_API == _api.QT_API_PYQT6: + from PyQt6.QtWebSockets import * +elif _api.USED_API == _api.QT_API_PYQT5: from PyQt5.QtWebSockets import * elif _api.USED_API == _api.QT_API_PYSIDE2: from PySide2.QtWebSockets import * else: raise ImportError("No module named 'QtWebSockets' in the selected " "Qt api ({})".format(_api.USED_API)) + +_api.apply_global_fixes(globals()) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/AnyQt-0.0.14/AnyQt/QtWidgets.py new/AnyQt-0.1.1/AnyQt/QtWidgets.py --- old/AnyQt-0.0.14/AnyQt/QtWidgets.py 2022-02-25 09:13:49.000000000 +0100 +++ new/AnyQt-0.1.1/AnyQt/QtWidgets.py 2022-06-13 12:12:31.000000000 +0200 @@ -211,8 +211,14 @@ 'qDrawWinPanel' ] - -if _api.USED_API == _api.QT_API_PYQT5: +if _api.USED_API == _api.QT_API_PYQT6: + from PyQt6.QtWidgets import * + from PyQt6.QtGui import QAction, QActionGroup + from PyQt6.QtGui import QUndoCommand, QUndoStack, QUndoGroup + from PyQt6.QtGui import QShortcut + QStyle.State = QStyle.StateFlag + QStyle.SubControls = QStyle.SubControl +elif _api.USED_API == _api.QT_API_PYQT5: from PyQt5.QtWidgets import * from PyQt5.QtCore import PYQT_VERSION as _PYQT_VERSION @@ -366,6 +372,50 @@ QLineEdit.getTextMargins = __QLineEdit_getTextMargins del __QLineEdit_getTextMargins +if not hasattr(QAbstractItemView, "viewOptions"): + def __QAbstractItemView_viewOptions(self): + opt = QStyleOptionViewItem() + self.initViewItemOption(opt) + return opt + QAbstractItemView.viewOptions = __QAbstractItemView_viewOptions + del __QAbstractItemView_viewOptions +elif not hasattr(QAbstractItemView, "initViewItemOption"): + def __QAbstractItemView_initViewItemOption(self, option): + opt = self.viewOptions() + option.initFrom(self) + option.state = opt.state + option.font = opt.font + option.decorationSize = opt.decorationSize + option.decorationPosition = opt.decorationPosition + option.decorationAlignment = opt.decorationAlignment + option.displayAlignment = opt.displayAlignment + option.textElideMode = opt.textElideMode + option.rect = opt.rect + option.showDecorationSelected = opt.showDecorationSelected + option.features = opt.features + option.locale = opt.locale + option.widget = opt.widget + QAbstractItemView.initViewItemOption = __QAbstractItemView_initViewItemOption + del __QAbstractItemView_initViewItemOption + +from AnyQt.QtCore import QModelIndex as __QModelIndex + + +def __QAbstractItemView_itemDelegate(self, *args): + if args and isinstance(args[0], __QModelIndex): + return self.itemDelegateForIndex(*args) + return __QAbstractItemView_itemDelegate_orig(self, *args) + + +if not hasattr(QAbstractItemView, "itemDelegateForIndex"): + def __QAbstractItemView_itemDelegateForIndex(self, index): + return __QAbstractItemView_itemDelegate_orig(self, index) + QAbstractItemView.itemDelegateForIndex = __QAbstractItemView_itemDelegateForIndex + +__QAbstractItemView_itemDelegate_orig = QAbstractItemView.itemDelegate +QAbstractItemView.itemDelegate = __QAbstractItemView_itemDelegate + + if hasattr(QApplication, "desktop"): def QApplication_desktop(): warn("QApplication.desktop is obsolete and is removed in Qt6", @@ -375,6 +425,23 @@ QApplication.desktop = staticmethod(QApplication_desktop) del QApplication_desktop +if not hasattr(QPlainTextEdit, "setTabStopDistance"): + def __QPlainTextEdit_setTabStopDistance(self, width: float): + self.setTabStopWidth(int(width)) + def __QPlainTextEdit_tabStopDistance(self) -> float: + return float(self.tabStopWidth()) + QPlainTextEdit.setTabStopDistance = __QPlainTextEdit_setTabStopDistance + QPlainTextEdit.tabStopDistance = __QPlainTextEdit_tabStopDistance + + +if not hasattr(QTextEdit, "setTabStopDistance"): + def __QTextEdit_setTabStopDistance(self, width: float): + self.setTabStopWidth(int(width)) + def __QTextEdit_tabStopDistance(self) -> float: + return float(self.tabStopWidth()) + QTextEdit.setTabStopDistance = __QTextEdit_setTabStopDistance + QTextEdit.tabStopDistance = __QTextEdit_tabStopDistance + from AnyQt.QtCore import Signal, Slot @@ -445,3 +512,5 @@ self.textHighlighted.emit(self.itemText(index)) del Signal, Slot + +_api.apply_global_fixes(globals()) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/AnyQt-0.0.14/AnyQt/QtWinExtras.py new/AnyQt-0.1.1/AnyQt/QtWinExtras.py --- old/AnyQt-0.0.14/AnyQt/QtWinExtras.py 2022-02-25 09:06:36.000000000 +0100 +++ new/AnyQt-0.1.1/AnyQt/QtWinExtras.py 2022-06-08 13:18:42.000000000 +0200 @@ -1,8 +1,13 @@ from . import _api -if _api.USED_API == _api.QT_API_PYQT5: +if _api.USED_API == _api.QT_API_PYQT6: + from PyQt6.QtWinExtras import * +elif _api.USED_API == _api.QT_API_PYQT5: from PyQt5.QtWinExtras import * elif _api.USED_API == _api.QT_API_PYSIDE2: from PySide2.QtWinExtras import * else: raise ImportError + +_api.apply_global_fixes(globals()) + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/AnyQt-0.0.14/AnyQt/QtX11Extras.py new/AnyQt-0.1.1/AnyQt/QtX11Extras.py --- old/AnyQt-0.0.14/AnyQt/QtX11Extras.py 2022-02-25 09:06:36.000000000 +0100 +++ new/AnyQt-0.1.1/AnyQt/QtX11Extras.py 2022-06-08 13:18:42.000000000 +0200 @@ -2,7 +2,9 @@ __all__ = ["QX11Info"] -if _api.USED_API == _api.QT_API_PYQT5: +if _api.USED_API == _api.QT_API_PYQT6: + from PyQt6.QtX11Extras import * +elif _api.USED_API == _api.QT_API_PYQT5: from PyQt5.QtX11Extras import * elif _api.USED_API == _api.QT_API_PYQT4: from PyQt4.QtGui import QX11Info @@ -10,3 +12,5 @@ from PySide.QtGui import QX11Info elif _api.USED_API == _api.QT_API_PYSIDE2: from PySide2.QtX11Extras import * + +_api.apply_global_fixes(globals()) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/AnyQt-0.0.14/AnyQt/QtXml.py new/AnyQt-0.1.1/AnyQt/QtXml.py --- old/AnyQt-0.0.14/AnyQt/QtXml.py 2022-02-25 09:06:36.000000000 +0100 +++ new/AnyQt-0.1.1/AnyQt/QtXml.py 2022-06-08 13:18:42.000000000 +0200 @@ -1,6 +1,8 @@ from . import _api -if _api.USED_API == _api.QT_API_PYQT5: +if _api.USED_API == _api.QT_API_PYQT6: + from PyQt6.QtXml import * +elif _api.USED_API == _api.QT_API_PYQT5: from PyQt5.QtXml import * elif _api.USED_API == _api.QT_API_PYQT4: from PyQt4.QtXml import * @@ -8,3 +10,5 @@ from PySide.QtXml import * elif _api.USED_API == _api.QT_API_PYSIDE2: from PySide2.QtXml import * + +_api.apply_global_fixes(globals()) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/AnyQt-0.0.14/AnyQt/QtXmlPatterns.py new/AnyQt-0.1.1/AnyQt/QtXmlPatterns.py --- old/AnyQt-0.0.14/AnyQt/QtXmlPatterns.py 2022-02-25 09:06:36.000000000 +0100 +++ new/AnyQt-0.1.1/AnyQt/QtXmlPatterns.py 2022-06-08 13:18:42.000000000 +0200 @@ -1,6 +1,8 @@ from . import _api -if _api.USED_API == _api.QT_API_PYQT5: +if _api.USED_API == _api.QT_API_PYQT6: + from PyQt6.QtXmlPatterns import * +elif _api.USED_API == _api.QT_API_PYQT5: from PyQt5.QtXmlPatterns import * elif _api.USED_API == _api.QT_API_PYQT4: from PyQt4.QtXmlPatterns import * @@ -8,3 +10,5 @@ from PySide.QtXmlPatterns import * elif _api.USED_API == _api.QT_API_PYSIDE2: from PySide2.QtXmlPatterns import * + +_api.apply_global_fixes(globals()) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/AnyQt-0.0.14/AnyQt/__init__.py new/AnyQt-0.1.1/AnyQt/__init__.py --- old/AnyQt-0.0.14/AnyQt/__init__.py 2022-02-25 09:06:36.000000000 +0100 +++ new/AnyQt-0.1.1/AnyQt/__init__.py 2022-06-08 13:18:42.000000000 +0200 @@ -68,5 +68,5 @@ """ Return a list of available Qt interfaces. """ - search = ["PyQt5", "PyQt4", "PySide", "PySide2"] + search = ["PyQt5", "PyQt6", "PyQt4", "PySide2", "PySide6", "PySide"] return [name for name in search if __islocatable(name)] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/AnyQt-0.0.14/AnyQt/_api.py new/AnyQt-0.1.1/AnyQt/_api.py --- old/AnyQt-0.0.14/AnyQt/_api.py 2022-02-25 09:06:36.000000000 +0100 +++ new/AnyQt-0.1.1/AnyQt/_api.py 2022-06-08 13:18:42.000000000 +0200 @@ -15,10 +15,19 @@ USED_API = None +QT_API_PYQT6 = "pyqt6" QT_API_PYQT5 = "pyqt5" QT_API_PYQT4 = "pyqt4" -QT_API_PYSIDE = "pyside" + +QT_API_PYSIDE6 = "pyside6" QT_API_PYSIDE2 = "pyside2" +QT_API_PYSIDE = "pyside" + +ALL_APIS = [ + QT_API_PYQT6, QT_API_PYQT5, QT_API_PYQT4, + QT_API_PYSIDE6, QT_API_PYSIDE2, QT_API_PYSIDE +] + def comittoapi(api): """ @@ -29,8 +38,8 @@ """ global USED_API assert USED_API is None, "committoapi called again!" - check = ["PyQt4", "PyQt5", "PySide", "PySide2"] - assert api in [QT_API_PYQT5, QT_API_PYQT4, QT_API_PYSIDE, QT_API_PYSIDE2] + check = ["PyQt4", "PyQt5", "PyQt6", "PySide", "PySide2", "PySide6"] + assert api in ALL_APIS for name in check: if name.lower() != api and name in sys.modules: raise RuntimeError( @@ -43,6 +52,7 @@ AnyQt.__SELECTED_API = api AnyQt.USED_API = api + if AnyQt.__SELECTED_API is not None: comittoapi(AnyQt.__SELECTED_API) elif "QT_API" in os.environ: @@ -51,7 +61,7 @@ # Qt.py allows both pyqt4 and pyqt to specify PyQt4. # When run from anaconda-navigator, pyqt is used. api = "pyqt4" - if api in [QT_API_PYQT4, QT_API_PYQT5, QT_API_PYSIDE, QT_API_PYSIDE2]: + if api in ALL_APIS: comittoapi(api) else: warnings.warn( @@ -63,10 +73,14 @@ if USED_API is None: # Check sys.modules for existing imports __existing = None - if "PyQt5" in sys.modules: + if "PyQt6" in sys.modules: + __existing = QT_API_PYQT6 + elif "PyQt5" in sys.modules: __existing = QT_API_PYQT5 elif "PyQt4" in sys.modules: __existing = QT_API_PYQT4 + elif "PySide6" in sys.modules: + __existing = QT_API_PYSIDE6 elif "PySide2" in sys.modules: __existing = QT_API_PYSIDE2 elif "PySide" in sys.modules: @@ -89,6 +103,8 @@ __available = QT_API_PYSIDE elif "PySide2" in available: __available = QT_API_PYSIDE2 + elif "PyQt6" in available: + __available = QT_API_PYQT6 if __available is not None: comittoapi(__available) @@ -113,3 +129,6 @@ if __backportapi.lower() != USED_API: install_backport_hook(__backportapi.lower()) del install_backport_hook + + +from ._fixes import global_fixes as apply_global_fixes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/AnyQt-0.0.14/AnyQt/_ctypes.py new/AnyQt-0.1.1/AnyQt/_ctypes.py --- old/AnyQt-0.0.14/AnyQt/_ctypes.py 1970-01-01 01:00:00.000000000 +0100 +++ new/AnyQt-0.1.1/AnyQt/_ctypes.py 2022-06-08 13:18:42.000000000 +0200 @@ -0,0 +1,87 @@ +import os +from itertools import chain +from typing import Iterable + +import glob +import sys +import sysconfig +import ctypes.util + +from AnyQt.QtCore import QLibraryInfo, QT_VERSION + + +def shlib_ext(): + """ + Return possible platform shared library extension. + """ + extensions = [] + if sys.platform == "win32": + extensions += [".dll"] + elif sys.platform == "darwin": + extensions += ["", ".dylib"] + else: + extensions += [".so"] + + confv = sysconfig.get_config_vars() + so_ext = confv.get("SO", None) + if so_ext is not None and so_ext not in extensions: + extensions += [so_ext] + return extensions + +# +# NOTE: posix dlsym resolves references over linked libs +# `LoadLibrary(QtGui.__file__)` is sufficient. Windows? +# No. Only referenced lib is searched (LoadLibrary and GetProcAddress). +# But LoadLibrary("Qt5Gui.dll") might just do the trick. +# + + +def find_library(name, path) -> Iterable[str]: + if sys.platform == "darwin": + test = [ + name, + name + ".so", + name + ".dylib" + "{name}.framework/{name}".format(name=name), + "{name}.framework/Versions/Current/{name}".format(name=name), + "{name}.framework/Versions/*/{name}".format(name=name), + ] + + elif sys.platform == "win32": + test = [name, name + ".dll"] + else: + test = [ + name, + name + ".so", + "lib{name}.so".format(name=name), + "lib{name}.so.*".format(name=name) + ] + + for suffix in test: + yield from glob.iglob(os.path.join(path, suffix)) + # try: + # return next(glob.iglob(os.path.join(path, suffix))) + # except StopIteration: + # pass + + +def find_qtlib(name) -> Iterable[str]: + qtlibpath = QLibraryInfo.path(QLibraryInfo.LibrariesPath) + major_version = (QT_VERSION >> 16) + paths = find_library(name, qtlibpath) + if name.startswith("Qt"): + # common case for Qt builds on windows + name_extra = "Qt{}{}".format(major_version, name[2:]) + extra = find_library(name_extra, qtlibpath) + else: + extra = [] + return chain(paths, extra, (name, *((name_extra,) if extra else ()))) + + +def load_qtlib(name): + for path in find_qtlib(name): + try: + return ctypes.cdll.LoadLibrary(path) + except OSError: + pass + return None diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/AnyQt-0.0.14/AnyQt/_fixes.py new/AnyQt-0.1.1/AnyQt/_fixes.py --- old/AnyQt-0.0.14/AnyQt/_fixes.py 2022-02-25 09:06:36.000000000 +0100 +++ new/AnyQt-0.1.1/AnyQt/_fixes.py 2022-06-13 12:12:31.000000000 +0200 @@ -1,4 +1,7 @@ +import os +import enum import warnings +from typing import Type, Dict, Any def fix_pyqt5_QGraphicsItem_itemChange(): @@ -46,4 +49,141 @@ QGraphicsItem.itemChange = QGraphicsItem_itemChange warnings.warn("Monkey patching QGraphicsItem.itemChange", - RuntimeWarning) \ No newline at end of file + RuntimeWarning) + + +def fix_pyqt6_qtgui_qaction_menu(namespace): + if namespace.get("__name__") != "AnyQt.QtGui": + return + import ctypes + from ._ctypes import load_qtlib + qtgui = load_qtlib("QtGui") + if os.name == "posix": # assuming gcc compatible compiler + _QAction_setMenuObject = qtgui['_ZN7QAction13setMenuObjectEP7QObject'] + _QAction_menuObject = qtgui['_ZNK7QAction10menuObjectEv'] + elif os.name == "nt": + _QAction_setMenuObject = qtgui['?setMenuObject@QAction@@AEAAXPEAVQObject@@@Z'] + _QAction_menuObject = qtgui['?menuObject@QAction@@AEBAPEAVQObject@@XZ'] + else: + return + + _QAction_menuObject.argtypes = [ctypes.c_void_p] + _QAction_menuObject.restype = ctypes.c_void_p + + _QAction_setMenuObject.argtypes = [ctypes.c_void_p, ctypes.c_void_p] + + from PyQt6.QtGui import QAction + from PyQt6.sip import isdeleted, unwrapinstance, wrapinstance + try: + from PyQt6.QtWidgets import QMenu + except ImportError: + return # No QtWidgets then no setMenu + + if hasattr(QAction, "setMenu"): + return + + def QAction_setMenu(self, menu): + if menu is not None and not isinstance(menu, QMenu): + raise TypeError() + if menu is not None and isdeleted(menu): + raise RuntimeError() + if isdeleted(self): + raise RuntimeError() + self.__QAction_menu = menu + _QAction_setMenuObject( + unwrapinstance(self), + unwrapinstance(menu) if menu is not None else 0 + ) + + def QAction_menu(self): + if isdeleted(self): + raise RuntimeError() + ptr = _QAction_menuObject(unwrapinstance(self)) + if ptr is None: + return None + menu = wrapinstance(ptr, QMenu) + return menu + + QAction.setMenu = QAction_setMenu + QAction.menu = QAction_menu + + +def fix_pyqt6_unscoped_enum(namespace: Dict[str, Any]): + """ + Lift all PyQt6 enum members up to class level. + i.e. Qt.ItemFlags.DisplayRole -> Qt.DisplayRole + """ + from PyQt6 import sip + + def members(enum: Type[enum.Enum]): + return ((name, enum[name]) for name in enum.__members__) + + def lift_enum_namespace(type_, enum: Type[enum.Enum]): + for name, value in members(enum): + setattr(type_, name, value) + + def is_unscoped_enum(value): + return isinstance(value, type) and issubclass(value, enum.Enum) + + def can_lift(type_, enum: Type[enum.Enum]): + namespace = type_.__dict__ + return not any(name in namespace and namespace[name] is not value + for name, value in members(enum)) + + for _, class_ in list(namespace.items()): + if isinstance(class_, (sip.simplewrapper, sip.wrappertype)): + for name, value in list(class_.__dict__.items()): + if is_unscoped_enum(value): + if can_lift(class_, value): + lift_enum_namespace(class_, value) + + +def fix_pyqt5_missing_enum_members(namespace: Dict[str, Any]): + import enum + from AnyQt import sip + + def is_pyqt_enum_type(value): + return (isinstance(value, type) + and issubclass(value, int) + and value is not int + and "." in value.__qualname__ + and not issubclass(value, enum.Enum)) + + for _, class_ in list(namespace.items()): + if isinstance(class_, (sip.simplewrapper, sip.wrappertype)): + enum_types = {} + for name, value in list(class_.__dict__.items()): + if is_pyqt_enum_type(value): + enum_types[value.__qualname__] = value + types_ = tuple(enum_types.values()) + for name, value in list(class_.__dict__.items()): + if type(value) in types_: + type_ = enum_types[type(value).__qualname__] + if hasattr(type_, name) and ( + getattr(type_, name) != value and + type_.__qualname__ != "QKeySequence.StandardKey" + ): + warnings.warn( + f"{type_} {name} is already present and is not " + f"{value}", RuntimeWarning + ) + elif not hasattr(type_, name): + setattr(type_, name, value) + + +GLOBAL_FIXES = { + "pyqt6": [ + fix_pyqt6_unscoped_enum, + fix_pyqt6_qtgui_qaction_menu, + ], + "pyqt5": [ + fix_pyqt5_missing_enum_members + ] +} + + +def global_fixes(namespace): + from AnyQt import _api + fixes = GLOBAL_FIXES.get(_api.USED_API, []) + for fixer in fixes: + fixer(namespace) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/AnyQt-0.0.14/AnyQt/importhooks.py new/AnyQt-0.1.1/AnyQt/importhooks.py --- old/AnyQt-0.0.14/AnyQt/importhooks.py 2022-01-28 10:38:44.000000000 +0100 +++ new/AnyQt-0.1.1/AnyQt/importhooks.py 2022-06-08 13:18:42.000000000 +0200 @@ -1,12 +1,18 @@ import sys import warnings +import importlib.util +from importlib.abc import MetaPathFinder, Loader from ._api import ( USED_API, QT_API_PYQT4, QT_API_PYQT5, QT_API_PYSIDE ) -class ImportHookBackport(object): +class _FinderLoader(MetaPathFinder, Loader): + pass + + +class ImportHookBackport(_FinderLoader): """ A python import hook (PEP-302) substituting Qt4 module imports, replacing them with a back compatible shim. @@ -14,24 +20,20 @@ def __init__(self, whichapi): self.whichapi = whichapi - def find_module(self, name, path=None): + def find_spec(self, fullname, path=None, target=None): if USED_API != QT_API_PYQT5: return - toplevel = name.split(".", 1)[0] + toplevel = fullname.split(".", 1)[0] if toplevel == "PyQt4" and self.whichapi == QT_API_PYQT4: - return self + return importlib.util.spec_from_loader(fullname, self) elif toplevel == "PySide" and self.whichapi == QT_API_PYSIDE: - return self + return importlib.util.spec_from_loader(fullname, self) else: return - def load_module(self, fullname): - if fullname in sys.modules: - # don't reload - return sys.modules[fullname] - - pkgpath = fullname.split(".") + def create_module(self, spec): + pkgpath = spec.name.split(".") toplevel = pkgpath[0] subpkg = pkgpath[1] if len(pkgpath) > 1 else None @@ -42,14 +44,16 @@ module = __import__(backportpkg, fromlist=["_"]) warnings.warn( "Loaded module {} as a substitute for {}" - .format(module.__name__, fullname), + .format(module.__name__, spec.name), RuntimeWarning, stacklevel=2, ) - sys.modules[fullname] = module return module + def exec_module(self, module): + return module -class ImportHookDeny(object): + +class ImportHookDeny(_FinderLoader): """ A python import hook (PEP-302) preventing imports of a Qt api. @@ -61,21 +65,20 @@ def __init__(self, whichapi): self.whichapi = whichapi - def find_module(self, name, path=None): - toplevel = name.split(".")[0] - if self.whichapi == QT_API_PYQT5 and toplevel == "PyQt5": - return self - elif self.whichapi == QT_API_PYQT4 and toplevel == "PyQt4": - return self - elif self.whichapi == QT_API_PYSIDE and toplevel == "PySide": - return self + def find_spec(self, fullname, path=None, target=None): + toplevel = fullname.split(".")[0] + if self.whichapi == QT_API_PYQT5 and toplevel == "PyQt5" or \ + self.whichapi == QT_API_PYQT4 and toplevel == "PyQt4" or \ + self.whichapi == QT_API_PYSIDE and toplevel == "PySide": + return importlib.util.spec_from_loader(fullname, self) else: return None - def load_module(self, fullname): - raise ImportError( - "Import of {} is denied.".format(fullname) - ) + def create_module(self, spec): + raise ImportError("Import of {} is denied.".format(spec.name)) + + def exec_module(self, module) -> None: + raise ImportError def install_backport_hook(api): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/AnyQt-0.0.14/AnyQt/sip.py new/AnyQt-0.1.1/AnyQt/sip.py --- old/AnyQt-0.0.14/AnyQt/sip.py 2022-02-25 09:06:36.000000000 +0100 +++ new/AnyQt-0.1.1/AnyQt/sip.py 2022-06-08 13:18:42.000000000 +0200 @@ -6,6 +6,8 @@ from PyQt5 import sip as __sip except ImportError: import sip as __sip +elif _api.USED_API == _api.QT_API_PYQT6: + from PyQt6 import sip as __sip elif _api.USED_API == _api.QT_API_PYQT4: import sip as __sip else: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/AnyQt-0.0.14/AnyQt.egg-info/PKG-INFO new/AnyQt-0.1.1/AnyQt.egg-info/PKG-INFO --- old/AnyQt-0.0.14/AnyQt.egg-info/PKG-INFO 2022-02-25 09:15:26.000000000 +0100 +++ new/AnyQt-0.1.1/AnyQt.egg-info/PKG-INFO 2022-06-13 13:00:26.000000000 +0200 @@ -1,7 +1,7 @@ Metadata-Version: 2.1 Name: AnyQt -Version: 0.0.14 -Summary: PyQt4/PyQt5 compatibility layer. +Version: 0.1.1 +Summary: PyQt5/PyQt6 compatibility layer. Home-page: https://github.com/ales-erjavec/anyqt Author: Ale?? Erjavec Author-email: ales.erja...@fri.uni-lj.si @@ -17,6 +17,7 @@ Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python :: 2 Classifier: Programming Language :: Python :: 3 +Requires-Python: >=3.6 License-File: LICENSE.txt AnyQt diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/AnyQt-0.0.14/AnyQt.egg-info/SOURCES.txt new/AnyQt-0.1.1/AnyQt.egg-info/SOURCES.txt --- old/AnyQt-0.0.14/AnyQt.egg-info/SOURCES.txt 2022-02-25 09:15:26.000000000 +0100 +++ new/AnyQt-0.1.1/AnyQt.egg-info/SOURCES.txt 2022-06-13 13:00:26.000000000 +0200 @@ -18,6 +18,7 @@ AnyQt/QtQuick.py AnyQt/QtSql.py AnyQt/QtSvg.py +AnyQt/QtSvgWidgets.py AnyQt/QtTest.py AnyQt/QtWebChannel.py AnyQt/QtWebEngineCore.py @@ -32,6 +33,7 @@ AnyQt/QtXmlPatterns.py AnyQt/__init__.py AnyQt/_api.py +AnyQt/_ctypes.py AnyQt/_fixes.py AnyQt/importhooks.py AnyQt/sip.py diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/AnyQt-0.0.14/PKG-INFO new/AnyQt-0.1.1/PKG-INFO --- old/AnyQt-0.0.14/PKG-INFO 2022-02-25 09:15:26.969040600 +0100 +++ new/AnyQt-0.1.1/PKG-INFO 2022-06-13 13:00:26.754608200 +0200 @@ -1,7 +1,7 @@ Metadata-Version: 2.1 Name: AnyQt -Version: 0.0.14 -Summary: PyQt4/PyQt5 compatibility layer. +Version: 0.1.1 +Summary: PyQt5/PyQt6 compatibility layer. Home-page: https://github.com/ales-erjavec/anyqt Author: Ale?? Erjavec Author-email: ales.erja...@fri.uni-lj.si @@ -17,6 +17,7 @@ Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python :: 2 Classifier: Programming Language :: Python :: 3 +Requires-Python: >=3.6 License-File: LICENSE.txt AnyQt diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/AnyQt-0.0.14/setup.cfg new/AnyQt-0.1.1/setup.cfg --- old/AnyQt-0.0.14/setup.cfg 2022-02-25 09:15:26.969040600 +0100 +++ new/AnyQt-0.1.1/setup.cfg 2022-06-13 13:00:26.754608200 +0200 @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.0.14 +current_version = 0.1.1 commit = True tag = True tag_name = {new_version} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/AnyQt-0.0.14/setup.py new/AnyQt-0.1.1/setup.py --- old/AnyQt-0.0.14/setup.py 2022-02-25 09:13:49.000000000 +0100 +++ new/AnyQt-0.1.1/setup.py 2022-06-13 12:58:54.000000000 +0200 @@ -5,13 +5,13 @@ from setuptools import setup, find_packages NAME = "AnyQt" -VERSION = "0.0.14" +VERSION = "0.1.1" AUTHOR = "Ale?? Erjavec" AUTHOR_EMAIL = "ales.erja...@fri.uni-lj.si" URL = "https://github.com/ales-erjavec/anyqt" -PACKAGES = find_packages(".") +PACKAGES = find_packages(".", include="AnyQt*") -DESCRIPTION = "PyQt4/PyQt5 compatibility layer." +DESCRIPTION = "PyQt5/PyQt6 compatibility layer." with io.open("README.txt", encoding="utf-8") as f: README = f.read() @@ -51,4 +51,5 @@ classifiers=CLASSIFIERS, packages=PACKAGES, project_urls=PROJECT_URLS, + python_requires=">=3.6", ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/AnyQt-0.0.14/test/test_import.py new/AnyQt-0.1.1/test/test_import.py --- old/AnyQt-0.0.14/test/test_import.py 2022-02-25 09:06:36.000000000 +0100 +++ new/AnyQt-0.1.1/test/test_import.py 2022-06-08 13:18:42.000000000 +0200 @@ -1,44 +1,76 @@ -from __future__ import print_function - - -import importlib import subprocess import sys -apis = {'pyqt4': 'PyQt4', 'pyqt5': 'PyQt5', 'pyside': 'PySide', 'pyside2': 'PySide2'} +apis = { + 'pyqt4': 'PyQt4', + 'pyqt5': 'PyQt5', + 'pyside': 'PySide', + 'pyside2': 'PySide2', + 'pyqt6:': "PyQt6" +} + +submodules_common = [ + 'QtCore', + 'QtGui', + 'QtHelp', + 'QtMultimedia', + 'QtNetwork', + 'QtOpenGL', + 'QtPrintSupport', + 'QtSql', + 'QtSvg', + 'QtTest', + 'QtWidgets', + 'QtXml', + +] +submodules_qt4 = [ + 'QtXmlPatterns' +] +submodules_qt5 = [ + 'QtMultimediaWidgets', + 'QtWebChannel', + 'QtWebEngineWidgets', + 'QtWebEngineCore', + 'QtWebSockets', + 'QtQml', + 'QtXmlPatterns', +] + +submodules_qt6 = [ + "QtSvgWidgets", +] -submodules_common = ['QtCore', 'QtGui', 'QtHelp', - 'QtMultimedia', 'QtNetwork', 'QtOpenGL', 'QtPrintSupport', - 'QtSql', 'QtSvg', 'QtTest', - 'QtWidgets', 'QtXml', 'QtXmlPatterns'] -submodules_qt5 = ['QtMultimediaWidgets', 'QtWebChannel', 'QtWebEngineWidgets', 'QtWebSockets', 'QtQml'] def get_qt_version(modname): cmd = [sys.executable, '-c', 'import '+modname+';from AnyQt.QtCore import QT_VERSION_STR; print(QT_VERSION_STR)'] - #print('cmd=', cmd) return subprocess.check_output(cmd) def try_import(modname): cmd = [sys.executable, '-c', 'import '+modname] - #print('cmd=', cmd) ret = subprocess.call(cmd) return ret == 0 + def try_import_anyqt(modname, submodule): cmd = [sys.executable, '-c', 'import '+modname+'; import AnyQt.'+submodule] - #print('cmd=', cmd) ret = subprocess.call(cmd) return ret == 0 + for api in apis: modname = apis[api] if try_import(modname): qt_version = get_qt_version(modname).decode() print('-- Found', modname, 'Qt=', qt_version) submodules = list(submodules_common) + if qt_version[0] == '4': + submodules.extend(submodules_qt4) if qt_version[0] == '5': submodules.extend(submodules_qt5) + if qt_version[0] == '6': + submodules.extend(submodules_qt6) for submodule in submodules: if try_import_anyqt(modname, submodule): print(submodule, 'Ok') ++++++ do-not-test-pyqt4.patch ++++++ --- /var/tmp/diff_new_pack.SzFskX/_old 2022-08-02 22:10:29.589997559 +0200 +++ /var/tmp/diff_new_pack.SzFskX/_new 2022-08-02 22:10:29.593997570 +0200 @@ -6,17 +6,16 @@ expect it. -Index: AnyQt-0.0.10/test/test_import.py +Index: AnyQt-0.1.1/test/test_import.py =================================================================== ---- AnyQt-0.0.10.orig/test/test_import.py -+++ AnyQt-0.0.10/test/test_import.py -@@ -5,7 +5,7 @@ import importlib - import subprocess +--- AnyQt-0.1.1.orig/test/test_import.py ++++ AnyQt-0.1.1/test/test_import.py +@@ -2,7 +2,6 @@ import subprocess import sys --apis = {'pyqt4': 'PyQt4', 'pyqt5': 'PyQt5', 'pyside': 'PySide', 'pyside2': 'PySide2'} -+apis = {'pyqt5': 'PyQt5', 'pyside': 'PySide', 'pyside2': 'PySide2'} - - submodules_common = ['QtCore', 'QtGui', 'QtHelp', - 'QtMultimedia', 'QtNetwork', 'QtOpenGL', 'QtPrintSupport', + apis = { +- 'pyqt4': 'PyQt4', + 'pyqt5': 'PyQt5', + 'pyside': 'PySide', + 'pyside2': 'PySide2',