MCPcopy Index your code
hub / github.com/modelscope/modelscope / LazyImportModule

Class LazyImportModule

modelscope/utils/import_utils.py:412–523  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

410
411
412class LazyImportModule(ModuleType):
413 _AST_INDEX = None
414
415 def __init__(self,
416 name,
417 module_file,
418 import_structure,
419 module_spec=None,
420 extra_objects=None,
421 try_to_pre_import=False,
422 extra_import_func=None):
423 super().__init__(name)
424 self._modules = set(import_structure.keys())
425 self._class_to_module = {}
426 for key, values in import_structure.items():
427 for value in values:
428 self._class_to_module[value] = key
429 # Needed for autocompletion in an IDE
430 self.__all__ = list(import_structure.keys()) + list(
431 chain(*import_structure.values()))
432 self.__file__ = module_file
433 self.__spec__ = module_spec
434 self.__path__ = [os.path.dirname(module_file)]
435 self._objects = {} if extra_objects is None else extra_objects
436 self._name = name
437 self._import_structure = import_structure
438 self._extra_import_func = extra_import_func
439 if try_to_pre_import:
440 self._try_to_import()
441
442 def _try_to_import(self):
443 for sub_module in self._class_to_module.keys():
444 try:
445 getattr(self, sub_module)
446 except Exception as e:
447 logger.warning(
448 f'pre load module {sub_module} error, please check {e}')
449
450 # Needed for autocompletion in an IDE
451 def __dir__(self):
452 result = super().__dir__()
453 # The elements of self.__all__ that are submodules may or may not be in the dir already, depending on whether
454 # they have been accessed or not. So we only add the elements of self.__all__ that are not already in the dir.
455 for attr in self.__all__:
456 if attr not in result:
457 result.append(attr)
458 return result
459
460 def __getattr__(self, name: str) -> Any:
461 if name in self._objects:
462 return self._objects[name]
463 if name in self._modules:
464 value = self._get_module(name)
465 elif name in self._class_to_module.keys():
466 module = self._get_module(self._class_to_module[name])
467 value = getattr(module, name)
468 elif self._extra_import_func is not None:
469 value = self._extra_import_func(name)

Callers 15

__init__.pyFile · 0.90
__init__.pyFile · 0.90
__init__.pyFile · 0.90
__init__.pyFile · 0.90
__init__.pyFile · 0.90
__init__.pyFile · 0.90
__init__.pyFile · 0.90
__init__.pyFile · 0.90
__init__.pyFile · 0.90
__init__.pyFile · 0.90
__init__.pyFile · 0.90
__init__.pyFile · 0.90

Calls

no outgoing calls

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…