diff options
Diffstat (limited to '.venv/lib/python3.12/site-packages/uvicorn/importer.py')
-rw-r--r-- | .venv/lib/python3.12/site-packages/uvicorn/importer.py | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/uvicorn/importer.py b/.venv/lib/python3.12/site-packages/uvicorn/importer.py new file mode 100644 index 00000000..338eba25 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/uvicorn/importer.py @@ -0,0 +1,38 @@ +import importlib +from typing import Any + + +class ImportFromStringError(Exception): + pass + + +def import_from_string(import_str: Any) -> Any: + if not isinstance(import_str, str): + return import_str + + module_str, _, attrs_str = import_str.partition(":") + if not module_str or not attrs_str: + message = ( + 'Import string "{import_str}" must be in format "<module>:<attribute>".' + ) + raise ImportFromStringError(message.format(import_str=import_str)) + + try: + module = importlib.import_module(module_str) + except ModuleNotFoundError as exc: + if exc.name != module_str: + raise exc from None + message = 'Could not import module "{module_str}".' + raise ImportFromStringError(message.format(module_str=module_str)) + + instance = module + try: + for attr_str in attrs_str.split("."): + instance = getattr(instance, attr_str) + except AttributeError: + message = 'Attribute "{attrs_str}" not found in module "{module_str}".' + raise ImportFromStringError( + message.format(attrs_str=attrs_str, module_str=module_str) + ) + + return instance |