MCPcopy Create free account
hub / github.com/apache/fory / lazy_import

Function lazy_import

python/pyfory/utils.py:25–66  ·  view source on GitHub ↗
(
    name: str,
    package: str = None,
    globals_: Dict = None,  # pylint: disable=redefined-builtin
    locals_: Dict = None,  # pylint: disable=redefined-builtin
    rename: str = None,
    placeholder: bool = False,
)

Source from the content-addressed store, hash-verified

23
24# This method is derived from https://github.com/mars-project/mars/blob/c36c53fa22e10ef9477d9c454401a2f281375f31/mars/utils.py.
25def lazy_import(
26 name: str,
27 package: str = None,
28 globals_: Dict = None, # pylint: disable=redefined-builtin
29 locals_: Dict = None, # pylint: disable=redefined-builtin
30 rename: str = None,
31 placeholder: bool = False,
32):
33 rename = rename or name
34 prefix_name = name.split(".", 1)[0]
35 globals_ = globals_ or inspect.currentframe().f_back.f_globals
36
37 class LazyModule(object):
38 def __init__(self):
39 self._on_loads = []
40
41 def __getattr__(self, item):
42 if item.startswith("_pytest") or item in ("__bases__", "__test__"):
43 raise AttributeError(item)
44
45 real_mod = importlib.import_module(name, package=package)
46 if rename in globals_:
47 globals_[rename] = real_mod
48 elif locals_ is not None:
49 locals_[rename] = real_mod
50 ret = getattr(real_mod, item)
51 for on_load_func in self._on_loads:
52 on_load_func()
53 # make sure on_load hooks only executed once
54 self._on_loads = []
55 return ret
56
57 def add_load_handler(self, func: Callable):
58 self._on_loads.append(func)
59 return func
60
61 if importlib.util.find_spec(prefix_name) is not None:
62 return LazyModule()
63 elif placeholder:
64 return ModulePlaceholder(prefix_name)
65 else:
66 return None
67
68
69class ModulePlaceholder:

Callers 5

record.pyFile · 0.90
test_serializer.pyFile · 0.90
test_buffer.pyFile · 0.90
test_vectorized.pyFile · 0.90

Calls 2

LazyModuleClass · 0.85
ModulePlaceholderClass · 0.85

Tested by

no test coverage detected