Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.11/site-packages/tlz/_build_tlz.py: 81%
Shortcuts on this page
r m x toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
Shortcuts on this page
r m x toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1import sys
2import types
3import toolz
4from importlib import import_module
5from importlib.machinery import ModuleSpec
8class TlzLoader:
9 """ Finds and loads ``tlz`` modules when added to sys.meta_path"""
10 def __init__(self):
11 self.always_from_toolz = {
12 toolz.pipe,
13 }
15 def _load_toolz(self, fullname):
16 rv = {}
17 package, dot, submodules = fullname.partition('.')
18 try:
19 module_name = ''.join(['cytoolz', dot, submodules])
20 rv['cytoolz'] = import_module(module_name)
21 except ImportError:
22 pass
23 try:
24 module_name = ''.join(['toolz', dot, submodules])
25 rv['toolz'] = import_module(module_name)
26 except ImportError:
27 pass
28 if not rv:
29 raise ImportError(fullname)
30 return rv
32 def find_module(self, fullname, path=None): # pragma: py3 no cover
33 package, dot, submodules = fullname.partition('.')
34 if package == 'tlz':
35 return self
37 def load_module(self, fullname): # pragma: py3 no cover
38 if fullname in sys.modules: # pragma: no cover
39 return sys.modules[fullname]
40 spec = ModuleSpec(fullname, self)
41 module = self.create_module(spec)
42 sys.modules[fullname] = module
43 self.exec_module(module)
44 return module
46 def find_spec(self, fullname, path, target=None): # pragma: no cover
47 package, dot, submodules = fullname.partition('.')
48 if package == 'tlz':
49 return ModuleSpec(fullname, self)
51 def create_module(self, spec):
52 return types.ModuleType(spec.name)
54 def exec_module(self, module):
55 toolz_mods = self._load_toolz(module.__name__)
56 fast_mod = toolz_mods.get('cytoolz') or toolz_mods['toolz']
57 slow_mod = toolz_mods.get('toolz') or toolz_mods['cytoolz']
58 module.__dict__.update(toolz.merge(fast_mod.__dict__, module.__dict__))
59 package = fast_mod.__package__
60 if package is not None:
61 package, dot, submodules = package.partition('.')
62 module.__package__ = ''.join(['tlz', dot, submodules])
63 if not module.__doc__:
64 module.__doc__ = fast_mod.__doc__
66 # show file from toolz during introspection
67 try:
68 module.__file__ = slow_mod.__file__
69 except AttributeError:
70 pass
72 for k, v in fast_mod.__dict__.items():
73 tv = slow_mod.__dict__.get(k)
74 try:
75 hash(tv)
76 except TypeError:
77 tv = None
78 if tv in self.always_from_toolz:
79 module.__dict__[k] = tv
80 elif (
81 isinstance(v, types.ModuleType)
82 and v.__package__ == fast_mod.__name__
83 ):
84 package, dot, submodules = v.__name__.partition('.')
85 module_name = ''.join(['tlz', dot, submodules])
86 submodule = import_module(module_name)
87 module.__dict__[k] = submodule
90tlz_loader = TlzLoader()
91sys.meta_path.append(tlz_loader)
92tlz_loader.exec_module(sys.modules['tlz'])