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"""
11 def __init__(self):
12 self.always_from_toolz = {
13 toolz.pipe,
14 }
16 def _load_toolz(self, fullname):
17 rv = {}
18 package, dot, submodules = fullname.partition('.')
19 try:
20 module_name = ''.join(['cytoolz', dot, submodules])
21 rv['cytoolz'] = import_module(module_name)
22 except ImportError:
23 pass
24 try:
25 module_name = ''.join(['toolz', dot, submodules])
26 rv['toolz'] = import_module(module_name)
27 except ImportError:
28 pass
29 if not rv:
30 raise ImportError(fullname)
31 return rv
33 def find_module(self, fullname, path=None): # pragma: py3 no cover
34 package, dot, submodules = fullname.partition('.')
35 if package == 'tlz':
36 return self
38 def load_module(self, fullname): # pragma: py3 no cover
39 if fullname in sys.modules: # pragma: no cover
40 return sys.modules[fullname]
41 spec = ModuleSpec(fullname, self)
42 module = self.create_module(spec)
43 sys.modules[fullname] = module
44 self.exec_module(module)
45 return module
47 def find_spec(self, fullname, path, target=None): # pragma: no cover
48 package, dot, submodules = fullname.partition('.')
49 if package == 'tlz':
50 return ModuleSpec(fullname, self)
52 def create_module(self, spec):
53 return types.ModuleType(spec.name)
55 def exec_module(self, module):
56 toolz_mods = self._load_toolz(module.__name__)
57 fast_mod = toolz_mods.get('cytoolz') or toolz_mods['toolz']
58 slow_mod = toolz_mods.get('toolz') or toolz_mods['cytoolz']
59 module.__dict__.update(toolz.merge(fast_mod.__dict__, module.__dict__))
60 package = fast_mod.__package__
61 if package is not None:
62 package, dot, submodules = package.partition('.')
63 module.__package__ = ''.join(['tlz', dot, submodules])
64 if not module.__doc__:
65 module.__doc__ = fast_mod.__doc__
67 # show file from toolz during introspection
68 try:
69 module.__file__ = slow_mod.__file__
70 except AttributeError:
71 pass
73 for k, v in fast_mod.__dict__.items():
74 tv = slow_mod.__dict__.get(k)
75 try:
76 hash(tv)
77 except TypeError:
78 tv = None
79 if tv in self.always_from_toolz:
80 module.__dict__[k] = tv
81 elif (
82 isinstance(v, types.ModuleType)
83 and v.__package__ == fast_mod.__name__
84 ):
85 package, dot, submodules = v.__name__.partition('.')
86 module_name = ''.join(['tlz', dot, submodules])
87 submodule = import_module(module_name)
88 module.__dict__[k] = submodule
91tlz_loader = TlzLoader()
92sys.meta_path.append(tlz_loader)
93tlz_loader.exec_module(sys.modules['tlz'])