import_utils.py 634 B

12345678910111213141516171819202122
  1. import importlib
  2. from typing import Type, TypeVar
  3. T = TypeVar('T')
  4. def import_from(qual_name: str):
  5. """Import the value from the qualified name given"""
  6. parts = qual_name.split('.')
  7. module_name = '.'.join(parts[:-1])
  8. module = importlib.import_module(module_name)
  9. result = getattr(module, parts[-1])
  10. return result
  11. def get_impl(cls: Type[T], impl_name: str | None) -> Type[T]:
  12. """Import a named implementation of the specified class"""
  13. if impl_name is None:
  14. return cls
  15. impl_class = import_from(impl_name)
  16. assert cls == impl_class or issubclass(impl_class, cls)
  17. return impl_class