Update vendored Qt.py to version 1.1.0

This commit is contained in:
albertosottile 2018-07-18 16:53:34 +02:00
parent d8d389bbf8
commit 4367301a9e

144
syncplay/vendor/Qt.py vendored
View File

@ -43,7 +43,7 @@ import types
import shutil import shutil
__version__ = "1.1.0.b5" __version__ = "1.1.0"
# Enable support for `from Qt import *` # Enable support for `from Qt import *`
__all__ = [] __all__ = []
@ -58,7 +58,7 @@ Qt = sys.modules[__name__]
Qt.QtCompat = types.ModuleType("QtCompat") Qt.QtCompat = types.ModuleType("QtCompat")
try: try:
int long
except NameError: except NameError:
# Python 3 compatibility # Python 3 compatibility
long = int long = int
@ -110,6 +110,7 @@ _common_members = {
"QGenericArgument", "QGenericArgument",
"QGenericReturnArgument", "QGenericReturnArgument",
"QHistoryState", "QHistoryState",
"QItemSelectionRange",
"QIODevice", "QIODevice",
"QLibraryInfo", "QLibraryInfo",
"QLine", "QLine",
@ -393,6 +394,16 @@ _common_members = {
"QGLFormat", "QGLFormat",
"QGLWidget" "QGLWidget"
], ],
"QtPrintSupport": [
"QAbstractPrintDialog",
"QPageSetupDialog",
"QPrintDialog",
"QPrintEngine",
"QPrintPreviewDialog",
"QPrintPreviewWidget",
"QPrinter",
"QPrinterInfo"
],
"QtSql": [ "QtSql": [
"QSql", "QSql",
"QSqlDatabase", "QSqlDatabase",
@ -611,6 +622,9 @@ _common_members = {
"QWizard", "QWizard",
"QWizardPage" "QWizardPage"
], ],
"QtX11Extras": [
"QX11Info"
],
"QtXml": [ "QtXml": [
"QDomAttr", "QDomAttr",
"QDomCDATASection", "QDomCDATASection",
@ -671,7 +685,7 @@ These members from the original submodule are misplaced relative PySide2
""" """
_misplaced_members = { _misplaced_members = {
"PySide2": { "PySide2": {
#"QtGui.QStringListModel": "QtCore.QStringListModel", "QtGui.QStringListModel": "QtCore.QStringListModel",
"QtCore.Property": "QtCore.Property", "QtCore.Property": "QtCore.Property",
"QtCore.Signal": "QtCore.Signal", "QtCore.Signal": "QtCore.Signal",
"QtCore.Slot": "QtCore.Slot", "QtCore.Slot": "QtCore.Slot",
@ -679,6 +693,7 @@ _misplaced_members = {
"QtCore.QSortFilterProxyModel": "QtCore.QSortFilterProxyModel", "QtCore.QSortFilterProxyModel": "QtCore.QSortFilterProxyModel",
"QtCore.QItemSelection": "QtCore.QItemSelection", "QtCore.QItemSelection": "QtCore.QItemSelection",
"QtCore.QItemSelectionModel": "QtCore.QItemSelectionModel", "QtCore.QItemSelectionModel": "QtCore.QItemSelectionModel",
"QtCore.QItemSelectionRange": "QtCore.QItemSelectionRange",
}, },
"PyQt5": { "PyQt5": {
"QtCore.pyqtProperty": "QtCore.Property", "QtCore.pyqtProperty": "QtCore.Property",
@ -689,6 +704,7 @@ _misplaced_members = {
"QtCore.QStringListModel": "QtCore.QStringListModel", "QtCore.QStringListModel": "QtCore.QStringListModel",
"QtCore.QItemSelection": "QtCore.QItemSelection", "QtCore.QItemSelection": "QtCore.QItemSelection",
"QtCore.QItemSelectionModel": "QtCore.QItemSelectionModel", "QtCore.QItemSelectionModel": "QtCore.QItemSelectionModel",
"QtCore.QItemSelectionRange": "QtCore.QItemSelectionRange",
}, },
"PySide": { "PySide": {
"QtGui.QAbstractProxyModel": "QtCore.QAbstractProxyModel", "QtGui.QAbstractProxyModel": "QtCore.QAbstractProxyModel",
@ -699,7 +715,15 @@ _misplaced_members = {
"QtCore.Property": "QtCore.Property", "QtCore.Property": "QtCore.Property",
"QtCore.Signal": "QtCore.Signal", "QtCore.Signal": "QtCore.Signal",
"QtCore.Slot": "QtCore.Slot", "QtCore.Slot": "QtCore.Slot",
"QtGui.QItemSelectionRange": "QtCore.QItemSelectionRange",
"QtGui.QAbstractPrintDialog": "QtPrintSupport.QAbstractPrintDialog",
"QtGui.QPageSetupDialog": "QtPrintSupport.QPageSetupDialog",
"QtGui.QPrintDialog": "QtPrintSupport.QPrintDialog",
"QtGui.QPrintEngine": "QtPrintSupport.QPrintEngine",
"QtGui.QPrintPreviewDialog": "QtPrintSupport.QPrintPreviewDialog",
"QtGui.QPrintPreviewWidget": "QtPrintSupport.QPrintPreviewWidget",
"QtGui.QPrinter": "QtPrintSupport.QPrinter",
"QtGui.QPrinterInfo": "QtPrintSupport.QPrinterInfo",
}, },
"PyQt4": { "PyQt4": {
"QtGui.QAbstractProxyModel": "QtCore.QAbstractProxyModel", "QtGui.QAbstractProxyModel": "QtCore.QAbstractProxyModel",
@ -710,6 +734,15 @@ _misplaced_members = {
"QtCore.pyqtProperty": "QtCore.Property", "QtCore.pyqtProperty": "QtCore.Property",
"QtCore.pyqtSignal": "QtCore.Signal", "QtCore.pyqtSignal": "QtCore.Signal",
"QtCore.pyqtSlot": "QtCore.Slot", "QtCore.pyqtSlot": "QtCore.Slot",
"QtGui.QItemSelectionRange": "QtCore.QItemSelectionRange",
"QtGui.QAbstractPrintDialog": "QtPrintSupport.QAbstractPrintDialog",
"QtGui.QPageSetupDialog": "QtPrintSupport.QPageSetupDialog",
"QtGui.QPrintDialog": "QtPrintSupport.QPrintDialog",
"QtGui.QPrintEngine": "QtPrintSupport.QPrintEngine",
"QtGui.QPrintPreviewDialog": "QtPrintSupport.QPrintPreviewDialog",
"QtGui.QPrintPreviewWidget": "QtPrintSupport.QPrintPreviewWidget",
"QtGui.QPrinter": "QtPrintSupport.QPrinter",
"QtGui.QPrinterInfo": "QtPrintSupport.QPrinterInfo",
} }
} }
@ -869,12 +902,12 @@ def _wrapinstance(func, ptr, base=None):
""" """
assert isinstance(ptr, int), "Argument 'ptr' must be of type <long>" assert isinstance(ptr, long), "Argument 'ptr' must be of type <long>"
assert (base is None) or issubclass(base, Qt.QtCore.QObject), ( assert (base is None) or issubclass(base, Qt.QtCore.QObject), (
"Argument 'base' must be of type <QObject>") "Argument 'base' must be of type <QObject>")
if base is None: if base is None:
q_object = func(int(ptr), Qt.QtCore.QObject) q_object = func(long(ptr), Qt.QtCore.QObject)
meta_object = q_object.metaObject() meta_object = q_object.metaObject()
class_name = meta_object.className() class_name = meta_object.className()
super_class_name = meta_object.superClass().className() super_class_name = meta_object.superClass().className()
@ -888,7 +921,7 @@ def _wrapinstance(func, ptr, base=None):
else: else:
base = Qt.QtCore.QObject base = Qt.QtCore.QObject
return func(int(ptr), base) return func(long(ptr), base)
def _reassign_misplaced_members(binding): def _reassign_misplaced_members(binding):
@ -899,20 +932,38 @@ def _reassign_misplaced_members(binding):
""" """
for src, dst in list(_misplaced_members[binding].items()): for src, dst in _misplaced_members[binding].items():
src_module, src_member = src.split(".") src_module, src_member = src.split(".")
dst_module, dst_member = dst.split(".") dst_module, dst_member = dst.split(".")
# Get the member we want to store in the namesapce.
try:
dst_value = getattr(getattr(Qt, "_" + src_module), src_member)
except AttributeError:
# If the member we want to store in the namespace does not exist,
# there is no need to continue. This can happen if a request was
# made to rename a member that didn't exist, for example
# if QtWidgets isn't available on the target platform.
_log("Misplaced member has no source: {}".format(src))
continue
try: try:
src_object = getattr(Qt, dst_module) src_object = getattr(Qt, dst_module)
except AttributeError: except AttributeError:
# Skip reassignment of non-existing members. if dst_module not in _common_members:
# This can happen if a request was made to # Only create the Qt parent module if its listed in
# rename a member that didn't exist, for example # _common_members. Without this check, if you remove QtCore
# if QtWidgets isn't available on the target platform. # from _common_members, the default _misplaced_members will add
continue # Qt.QtCore so it can add Signal, Slot, etc.
msg = 'Not creating missing member module "{m}" for "{c}"'
dst_value = getattr(getattr(Qt, "_" + src_module), src_member) _log(msg.format(m=dst_module, c=dst_member))
continue
# If the dst is valid but the Qt parent module does not exist
# then go ahead and create a new module to contain the member.
setattr(Qt, dst_module, _new_module(dst_module))
src_object = getattr(Qt, dst_module)
# Enable direct import of the new module
sys.modules[__name__ + "." + dst_module] = src_object
setattr( setattr(
src_object, src_object,
@ -948,9 +999,9 @@ def _build_compatibility_members(binding, decorators=None):
_QtCompat = type("QtCompat", (object,), {}) _QtCompat = type("QtCompat", (object,), {})
for classname, bindings in list(_compatibility_members[binding].items()): for classname, bindings in _compatibility_members[binding].items():
attrs = {} attrs = {}
for target, binding in list(bindings.items()): for target, binding in bindings.items():
namespaces = binding.split('.') namespaces = binding.split('.')
try: try:
src_object = getattr(Qt, "_" + namespaces[0]) src_object = getattr(Qt, "_" + namespaces[0])
@ -1020,6 +1071,7 @@ def _pyside2():
if hasattr(Qt, "_QtCore"): if hasattr(Qt, "_QtCore"):
Qt.__qt_version__ = Qt._QtCore.qVersion() Qt.__qt_version__ = Qt._QtCore.qVersion()
Qt.QtCompat.qInstallMessageHandler = _qInstallMessageHandler
Qt.QtCompat.translate = Qt._QtCore.QCoreApplication.translate Qt.QtCompat.translate = Qt._QtCore.QCoreApplication.translate
if hasattr(Qt, "_QtWidgets"): if hasattr(Qt, "_QtWidgets"):
@ -1062,12 +1114,16 @@ def _pyside():
if hasattr(Qt, "_QtGui"): if hasattr(Qt, "_QtGui"):
setattr(Qt, "QtWidgets", _new_module("QtWidgets")) setattr(Qt, "QtWidgets", _new_module("QtWidgets"))
setattr(Qt, "_QtWidgets", Qt._QtGui) setattr(Qt, "_QtWidgets", Qt._QtGui)
if hasattr(Qt._QtGui, "QX11Info"):
setattr(Qt, "QtX11Extras", _new_module("QtX11Extras"))
Qt.QtX11Extras.QX11Info = Qt._QtGui.QX11Info
Qt.QtCompat.setSectionResizeMode = Qt._QtGui.QHeaderView.setResizeMode Qt.QtCompat.setSectionResizeMode = Qt._QtGui.QHeaderView.setResizeMode
if hasattr(Qt, "_QtCore"): if hasattr(Qt, "_QtCore"):
Qt.__qt_version__ = Qt._QtCore.qVersion() Qt.__qt_version__ = Qt._QtCore.qVersion()
QCoreApplication = Qt._QtCore.QCoreApplication QCoreApplication = Qt._QtCore.QCoreApplication
Qt.QtCompat.qInstallMessageHandler = _qInstallMessageHandler
Qt.QtCompat.translate = ( Qt.QtCompat.translate = (
lambda context, sourceText, disambiguation, n: lambda context, sourceText, disambiguation, n:
QCoreApplication.translate( QCoreApplication.translate(
@ -1107,6 +1163,7 @@ def _pyqt5():
if hasattr(Qt, "_QtCore"): if hasattr(Qt, "_QtCore"):
Qt.__binding_version__ = Qt._QtCore.PYQT_VERSION_STR Qt.__binding_version__ = Qt._QtCore.PYQT_VERSION_STR
Qt.__qt_version__ = Qt._QtCore.QT_VERSION_STR Qt.__qt_version__ = Qt._QtCore.QT_VERSION_STR
Qt.QtCompat.qInstallMessageHandler = _qInstallMessageHandler
Qt.QtCompat.translate = Qt._QtCore.QCoreApplication.translate Qt.QtCompat.translate = Qt._QtCore.QCoreApplication.translate
if hasattr(Qt, "_QtWidgets"): if hasattr(Qt, "_QtWidgets"):
@ -1175,6 +1232,9 @@ def _pyqt4():
if hasattr(Qt, "_QtGui"): if hasattr(Qt, "_QtGui"):
setattr(Qt, "QtWidgets", _new_module("QtWidgets")) setattr(Qt, "QtWidgets", _new_module("QtWidgets"))
setattr(Qt, "_QtWidgets", Qt._QtGui) setattr(Qt, "_QtWidgets", Qt._QtGui)
if hasattr(Qt._QtGui, "QX11Info"):
setattr(Qt, "QtX11Extras", _new_module("QtX11Extras"))
Qt.QtX11Extras.QX11Info = Qt._QtGui.QX11Info
Qt.QtCompat.setSectionResizeMode = \ Qt.QtCompat.setSectionResizeMode = \
Qt._QtGui.QHeaderView.setResizeMode Qt._QtGui.QHeaderView.setResizeMode
@ -1182,8 +1242,8 @@ def _pyqt4():
if hasattr(Qt, "_QtCore"): if hasattr(Qt, "_QtCore"):
Qt.__binding_version__ = Qt._QtCore.PYQT_VERSION_STR Qt.__binding_version__ = Qt._QtCore.PYQT_VERSION_STR
Qt.__qt_version__ = Qt._QtCore.QT_VERSION_STR Qt.__qt_version__ = Qt._QtCore.QT_VERSION_STR
QCoreApplication = Qt._QtCore.QCoreApplication QCoreApplication = Qt._QtCore.QCoreApplication
Qt.QtCompat.qInstallMessageHandler = _qInstallMessageHandler
Qt.QtCompat.translate = ( Qt.QtCompat.translate = (
lambda context, sourceText, disambiguation, n: lambda context, sourceText, disambiguation, n:
QCoreApplication.translate( QCoreApplication.translate(
@ -1233,7 +1293,7 @@ def _none():
Qt.QtCompat.loadUi = lambda uifile, baseinstance=None: None Qt.QtCompat.loadUi = lambda uifile, baseinstance=None: None
Qt.QtCompat.setSectionResizeMode = lambda *args, **kwargs: None Qt.QtCompat.setSectionResizeMode = lambda *args, **kwargs: None
for submodule in list(_common_members.keys()): for submodule in _common_members.keys():
setattr(Qt, submodule, Mock()) setattr(Qt, submodule, Mock())
setattr(Qt, "_" + submodule, Mock()) setattr(Qt, "_" + submodule, Mock())
@ -1261,10 +1321,6 @@ def _loadUi(uifile, baseinstance=None):
return the newly created instance of the user interface. return the newly created instance of the user interface.
""" """
if hasattr(baseinstance, "layout") and baseinstance.layout():
message = ("QLayout: Attempting to add Layout to %s which "
"already has a layout")
raise RuntimeError(message % (baseinstance))
if hasattr(Qt, "_uic"): if hasattr(Qt, "_uic"):
return Qt._uic.loadUi(uifile, baseinstance) return Qt._uic.loadUi(uifile, baseinstance)
@ -1345,6 +1401,43 @@ def _loadUi(uifile, baseinstance=None):
raise NotImplementedError("No implementation available for loadUi") raise NotImplementedError("No implementation available for loadUi")
def _qInstallMessageHandler(handler):
"""Install a message handler that works in all bindings
Args:
handler: A function that takes 3 arguments, or None
"""
def messageOutputHandler(*args):
# In Qt4 bindings, message handlers are passed 2 arguments
# In Qt5 bindings, message handlers are passed 3 arguments
# The first argument is a QtMsgType
# The last argument is the message to be printed
# The Middle argument (if passed) is a QMessageLogContext
if len(args) == 3:
msgType, logContext, msg = args
elif len(args) == 2:
msgType, msg = args
logContext = None
else:
raise TypeError(
"handler expected 2 or 3 arguments, got {0}".format(len(args)))
if isinstance(msg, bytes):
# In python 3, some bindings pass a bytestring, which cannot be
# used elsewhere. Decoding a python 2 or 3 bytestring object will
# consistently return a unicode object.
msg = msg.decode()
handler(msgType, logContext, msg)
passObject = messageOutputHandler if handler else handler
if Qt.IsPySide or Qt.IsPyQt4:
return Qt._QtCore.qInstallMsgHandler(passObject)
elif Qt.IsPySide2 or Qt.IsPyQt5:
return Qt._QtCore.qInstallMessageHandler(passObject)
def _convert(lines): def _convert(lines):
"""Convert compiled .ui file from PySide2 to Qt.py """Convert compiled .ui file from PySide2 to Qt.py
@ -1472,7 +1565,7 @@ def _install():
raise ImportError("No Qt binding were found.") raise ImportError("No Qt binding were found.")
# Install individual members # Install individual members
for name, members in list(_common_members.items()): for name, members in _common_members.items():
try: try:
their_submodule = getattr(Qt, "_%s" % name) their_submodule = getattr(Qt, "_%s" % name)
except AttributeError: except AttributeError:
@ -1497,6 +1590,9 @@ def _install():
setattr(our_submodule, member, their_member) setattr(our_submodule, member, their_member)
# Enable direct import of QtCompat
sys.modules['Qt.QtCompat'] = Qt.QtCompat
# Backwards compatibility # Backwards compatibility
if hasattr(Qt.QtCompat, 'loadUi'): if hasattr(Qt.QtCompat, 'loadUi'):
Qt.QtCompat.load_ui = Qt.QtCompat.loadUi Qt.QtCompat.load_ui = Qt.QtCompat.loadUi