Toolbox/PyQt4ImportHook.py

Thu, 20 Jul 2017 18:42:33 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Thu, 20 Jul 2017 18:42:33 +0200
changeset 5814
50b299f6eb98
parent 5802
abfb67a6f376
child 5815
223fa32b3a32
permissions
-rw-r--r--

Refactored the PyQt4Importer.

3776
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
5389
9b1c800daff3 Updated copyright for 2017.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4631
diff changeset
3 # Copyright (c) 2014 - 2017 Detlev Offenbach <detlev@die-offenbachs.de>
3776
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
3991
73731c4bf5bd Corrected some coding style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3937
diff changeset
6 """
73731c4bf5bd Corrected some coding style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3937
diff changeset
7 Module implementing an import hook converting PyQt5 imports to PyQt4 imports.
73731c4bf5bd Corrected some coding style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3937
diff changeset
8 """
73731c4bf5bd Corrected some coding style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3937
diff changeset
9
4543
2e6a880670e9 Fixed a few code style issues (forgotten future imports, copyrights,...).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4289
diff changeset
10 from __future__ import unicode_literals
2e6a880670e9 Fixed a few code style issues (forgotten future imports, copyrights,...).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4289
diff changeset
11
3936
93fb2fd523f1 Completed the PyQt4 override installation and startup.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3857
diff changeset
12 import sys
5814
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
13 import importlib
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
14
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
15 class PyQt4Importer(object):
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
16 """
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
17 Class implementing an importer converting PyQt5 imports to PyQt4
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
18 imports.
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
19 """
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
20 def __init__(self):
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
21 """
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
22 Constructor
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
23 """
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
24 self.__path = None
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
25
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
26 def find_module(self, fullname, path=None):
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
27 """
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
28 Public method returning the module loader.
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
29
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
30 @param fullname name of the module to be loaded (string)
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
31 @param path path to resolve the module name (string)
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
32 @return module loader object
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
33 """
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
34 if fullname.startswith("PyQt5"):
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
35 self.__path = path
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
36 return self
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
37
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
38 return None
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
39
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
40 @staticmethod
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
41 def QComboBox_currentData(other, role=None):
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
42 """
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
43 Public method to emulate the currentData method of Qt5.
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
44
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
45 @param role role of which data should be retrived
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
46 @return stored data at current selection
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
47 """
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
48 import PyQt4.Qt
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
49 if role is None:
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
50 role = PyQt4.Qt.Qt.UserRole
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
51
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
52 idx = other.currentIndex()
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
53 return other.itemData(idx, role)
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
54
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
55 def load_module(self, fullname):
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
56 """
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
57 Public method to load a module.
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
58
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
59 @param fullname name of the module to be loaded (string)
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
60 @return reference to the loaded module (module)
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
61 """
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
62 if fullname in ["PyQt5.QtWidgets", "PyQt5.QtPrintSupport"]:
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
63 newname = "PyQt4.QtGui"
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
64 elif fullname in ["PyQt5.QtWebKitWidgets"]:
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
65 newname = "PyQt4.QtWebKit"
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
66 else:
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
67 newname = fullname.replace("PyQt5", "PyQt4")
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
68
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
69 module = importlib.import_module(newname)
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
70 sys.modules[fullname] = module
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
71 if fullname == "PyQt5.QtCore":
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
72 import PyQt4.QtGui
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
73 module.qInstallMessageHandler = module.qInstallMsgHandler
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
74 module.QItemSelectionModel = PyQt4.QtGui.QItemSelectionModel
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
75 module.QItemSelection = PyQt4.QtGui.QItemSelection
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
76 module.QSortFilterProxyModel = \
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
77 PyQt4.QtGui.QSortFilterProxyModel
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
78 module.QAbstractProxyModel = PyQt4.QtGui.QAbstractProxyModel
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
79 module.QStringListModel = PyQt4.QtGui.QStringListModel
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
80
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
81 PyQt4.QtGui.QComboBox.currentData = self.QComboBox_currentData
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
82 return module
50b299f6eb98 Refactored the PyQt4Importer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5802
diff changeset
83
3776
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 try:
3936
93fb2fd523f1 Completed the PyQt4 override installation and startup.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3857
diff changeset
85 if "--pyqt4" in sys.argv:
3937
607dd5b0079b Refined the PyQt4 compatibility stuff.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3936
diff changeset
86 sys.argv.remove("--pyqt4")
3936
93fb2fd523f1 Completed the PyQt4 override installation and startup.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3857
diff changeset
87 # fake a failed PyQt5 import
93fb2fd523f1 Completed the PyQt4 override installation and startup.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3857
diff changeset
88 raise ImportError
4289
6c1ab651c9ce Fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4021
diff changeset
89 import PyQt5 # __IGNORE_WARNING__
3776
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 except ImportError:
ccb6eacb50e5 Started adding code to make eric6 usable with PyQt5 and PyQt4.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 sys.meta_path.insert(0, PyQt4Importer())
3857
f8b548d399bc Python2 compatibility with PyQt4 restored.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3777
diff changeset
92
f8b548d399bc Python2 compatibility with PyQt4 restored.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3777
diff changeset
93 if sys.version_info[0] == 2:
f8b548d399bc Python2 compatibility with PyQt4 restored.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3777
diff changeset
94 import sip
f8b548d399bc Python2 compatibility with PyQt4 restored.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3777
diff changeset
95 sip.setapi('QString', 2)
f8b548d399bc Python2 compatibility with PyQt4 restored.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3777
diff changeset
96 sip.setapi('QVariant', 2)
f8b548d399bc Python2 compatibility with PyQt4 restored.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3777
diff changeset
97 sip.setapi('QTextStream', 2)

eric ide

mercurial