Source code for betty.importlib
"""
Provide ``import`` utilities.
"""
from functools import reduce
from importlib import import_module
from typing import Any
[docs]
def import_any(fully_qualified_type_name: str) -> Any:
"""
Import any symbol in a module by its fully qualified type name.
"""
try:
module_name, attrs = fully_qualified_type_name.rsplit(":", 1)
module = import_module(module_name)
return reduce(
getattr, # type: ignore[arg-type]
attrs.split("."),
module,
)
except (AttributeError, ImportError, ValueError):
raise ImportError(f'Cannot import "{fully_qualified_type_name}".') from None