Source code for noob.utils
import builtins
import importlib
import sys
from typing import Any
from noob.types import AbsoluteIdentifier, AbsoluteIdentifierAdapter
[docs]
def resolve_python_identifier(ref: AbsoluteIdentifier) -> Any:
"""
Given some fully-qualified package.subpackage.Class identifier,
return the referenced object, importing if needed.
Returns a node from :data:`noob.node.SPECIAL_NODES` if match found
"""
from noob.node import SPECIAL_NODES
ref = AbsoluteIdentifierAdapter.validate_python(ref)
if ref in SPECIAL_NODES:
return SPECIAL_NODES[ref]
elif "." not in ref:
return getattr(builtins, ref)
else:
module_name, obj = ref.rsplit(".", 1)
module = sys.modules.get(module_name, importlib.import_module(module_name))
return getattr(module, obj)