| import inspect | |
| import functools | |
| from typing import Any | |
| def fetch_factory_name(factory: Any) -> str: | |
| # unwrap decorated functions (inspect.unwrap works for functions with __wrapped__) | |
| try: | |
| orig = inspect.unwrap(factory) | |
| except Exception: | |
| orig = factory | |
| # handle functools.partial | |
| if isinstance(orig, functools.partial): | |
| return fetch_factory_name(orig.func) | |
| # class | |
| if inspect.isclass(orig): | |
| name = getattr(orig, "__qualname__", orig.__name__) | |
| module = getattr(orig, "__module__", "") | |
| # function | |
| elif inspect.isfunction(orig): | |
| name = getattr(orig, "__qualname__", orig.__name__) | |
| module = getattr(orig, "__module__", "") | |
| else: | |
| # callable instance (object with __call__) | |
| name = getattr(orig, "__name__", None) or orig.__class__.__name__ | |
| module = getattr(orig, "__module__", getattr(orig.__class__, "__module__", "")) | |
| if module and module != "builtins": | |
| return f"{module}.{name}" | |
| return name | |