7
7
# language=python
8
8
install_code = """
9
9
# add devtools `debug` function to builtins
10
- import sys
11
- # we don't install here for pytest as it breaks pytest, it is
12
- # installed later by a pytest fixture
13
- if not sys.argv[0].endswith('pytest'):
14
- import builtins
15
- try:
16
- from devtools import debug
17
- except ImportError:
18
- pass
19
- else:
20
- setattr(builtins, 'debug', debug)
10
+ # we don't want to import devtools until it's required
11
+ # since it breaks pytest, hence this proxy
12
+ class DebugProxy:
13
+ def __init__(self):
14
+ self._debug = None
15
+
16
+ def _import_debug(self):
17
+ if self._debug is None:
18
+ from devtools import debug
19
+ self._debug = debug
20
+
21
+ def __call__(self, *args, **kwargs):
22
+ self._import_debug()
23
+ return self._debug(*args, **kwargs)
24
+
25
+ def __getattr__(self, item):
26
+ self._import_debug()
27
+ return getattr(self._debug, item)
28
+
29
+ import builtins
30
+ setattr(builtins, 'debug', DebugProxy())
21
31
"""
22
32
23
33
@@ -27,12 +37,6 @@ def print_code() -> int:
27
37
28
38
29
39
def install () -> int :
30
- print ('[WARNING: this command is experimental, report issues at github.com/samuelcolvin/python-devtools]\n ' )
31
-
32
- if hasattr (builtins , 'debug' ):
33
- print ('Looks like devtools is already installed.' )
34
- return 0
35
-
36
40
try :
37
41
import sitecustomize # type: ignore
38
42
except ImportError :
@@ -48,7 +52,11 @@ def install() -> int:
48
52
else :
49
53
install_path = Path (sitecustomize .__file__ )
50
54
51
- print (f'Found path "{ install_path } " to install devtools into __builtins__' )
55
+ if hasattr (builtins , 'debug' ):
56
+ print (f'Looks like devtools is already installed at `{ install_path } `.' )
57
+ return 0
58
+
59
+ print (f'Found path `{ install_path } ` to install devtools into __builtins__' )
52
60
print ('To install devtools, run the following command:\n ' )
53
61
print (f' python -m devtools print-code >> { install_path } \n ' )
54
62
if not install_path .is_relative_to (Path .home ()):
0 commit comments