Skip to content

Commit 6e2337e

Browse files
committed
Mocking PySide and PyQt4 when building docs at readthedocs
1 parent 311b862 commit 6e2337e

File tree

1 file changed

+68
-42
lines changed

1 file changed

+68
-42
lines changed

src/pytestqt/qt_compat.py

Lines changed: 68 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -6,49 +6,75 @@
66

77
from __future__ import with_statement
88
from __future__ import division
9+
import os
910

10-
_TRY_PYSIDE = True
11+
on_rtd = os.environ.get('READTHEDOCS', None) == 'True'
1112

12-
try:
13-
if not _TRY_PYSIDE:
14-
raise ImportError()
15-
import PySide.QtCore as _QtCore
16-
QtCore = _QtCore
17-
USES_PYSIDE = True
18-
except ImportError:
19-
import sip
20-
sip.setapi('QString', 2)
21-
sip.setapi('QVariant', 2)
22-
import PyQt4.QtCore as _QtCore
23-
QtCore = _QtCore
24-
USES_PYSIDE = False
25-
26-
27-
def _pyside_import_module(moduleName):
28-
pyside = __import__('PySide', globals(), locals(), [moduleName], -1)
29-
return getattr(pyside, moduleName)
30-
31-
32-
def _pyqt4_import_module(moduleName):
33-
pyside = __import__('PyQt4', globals(), locals(), [moduleName], -1)
34-
return getattr(pyside, moduleName)
35-
36-
37-
if USES_PYSIDE:
38-
import_module = _pyside_import_module
39-
40-
Signal = QtCore.Signal
41-
Slot = QtCore.Slot
42-
Property = QtCore.Property
13+
if not on_rtd:
14+
try:
15+
import PySide.QtCore as _QtCore
16+
QtCore = _QtCore
17+
USES_PYSIDE = True
18+
except ImportError:
19+
import sip
20+
sip.setapi('QString', 2)
21+
sip.setapi('QVariant', 2)
22+
import PyQt4.QtCore as _QtCore
23+
QtCore = _QtCore
24+
USES_PYSIDE = False
25+
26+
27+
def _pyside_import_module(moduleName):
28+
pyside = __import__('PySide', globals(), locals(), [moduleName], -1)
29+
return getattr(pyside, moduleName)
30+
31+
32+
def _pyqt4_import_module(moduleName):
33+
pyside = __import__('PyQt4', globals(), locals(), [moduleName], -1)
34+
return getattr(pyside, moduleName)
35+
36+
37+
if USES_PYSIDE:
38+
import_module = _pyside_import_module
39+
40+
Signal = QtCore.Signal
41+
Slot = QtCore.Slot
42+
Property = QtCore.Property
43+
else:
44+
import_module = _pyqt4_import_module
45+
46+
Signal = QtCore.pyqtSignal
47+
Slot = QtCore.pyqtSlot
48+
Property = QtCore.pyqtProperty
49+
50+
51+
QtGui = import_module('QtGui')
52+
QtTest = import_module('QtTest')
53+
Qt = QtCore.Qt
54+
QEvent = QtCore.QEvent
55+
4356
else:
44-
import_module = _pyqt4_import_module
45-
46-
Signal = QtCore.pyqtSignal
47-
Slot = QtCore.pyqtSlot
48-
Property = QtCore.pyqtProperty
49-
57+
# mock Qt when we are generating documentation at readthedocs.org
5058

51-
QtGui = import_module('QtGui')
52-
QtTest = import_module('QtTest')
53-
Qt = QtCore.Qt
54-
QEvent = QtCore.QEvent
59+
class Mock(object):
60+
def __init__(self, *args, **kwargs):
61+
pass
62+
63+
def __call__(self, *args, **kwargs):
64+
return Mock()
65+
66+
@classmethod
67+
def __getattr__(cls, name):
68+
if name in ('__file__', '__path__'):
69+
return '/dev/null'
70+
elif name[0] == name[0].upper():
71+
mockType = type(name, (), {})
72+
mockType.__module__ = __name__
73+
return mockType
74+
else:
75+
return Mock()
76+
77+
QtGui = Mock()
78+
QtTest = Mock()
79+
Qt = Mock()
80+
QEvent = Mock()

0 commit comments

Comments
 (0)