Repository navigation
Expand file tree
/
Copy path_api.py
More file actions
82 lines (67 loc) · 2.11 KB
/
Copy path_api.py
File metadata and controls
82 lines (67 loc) · 2.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
"""
NOTE: Importing this module will select and commit to a Qt API.
"""
import os
import sys
import AnyQt
if sys.version_info < (3,):
_intern = intern
else:
_intern = sys.intern
USED_API = None
QT_API_PYQT5 = "pyqt5"
QT_API_PYQT4 = "pyqt4"
QT_API_PYSIDE = "pyside"
def comittoapi(api):
"""
Commit to the use of specified Qt api.
Raise an error if another Qt api is already loaded in sys.modules
"""
global USED_API
assert USED_API is None, "committoapi called again!"
check = ["PyQt4", "PyQt5", "PySide"]
assert api in [QT_API_PYQT5, QT_API_PYQT4, QT_API_PYSIDE]
for name in check:
if name.lower() != api and name in sys.modules:
raise RuntimeError(
"{} was allready imported. Cannot commit to {}!"
.format(name, api)
)
else:
api = _intern(api)
USED_API = api
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:
comittoapi(os.environ["QT_API"].lower())
else:
# Check sys.modules for existing imports
__existing = None
if "PyQt5" in sys.modules:
__existing = QT_API_PYQT5
elif "PyQt4" in sys.modules:
__existing = QT_API_PYQT4
elif "PySide" in sys.modules:
__existing = QT_API_PYSIDE
if __existing is not None:
comittoapi(__existing)
else:
available = AnyQt.availableapi()
__available = None
if AnyQt.__PREFERRED_API is not None and \
AnyQt.__PREFERRED_API.lower() in [name.lower() for name in available]:
__available = AnyQt.__PREFERRED_API.lower()
elif "PyQt5" in available:
__available = QT_API_PYQT5
elif "PyQt4" in available:
__available = QT_API_PYQT4
elif "PySide" in available:
__available = QT_API_PYSIDE
if __available is not None:
comittoapi(__available)
del __available
del __existing
if USED_API is None:
raise ImportError("PyQt4, PyQt5 or PySide are not available for import")