aboutsummaryrefslogtreecommitdiff
path: root/.venv/lib/python3.12/site-packages/uvicorn/importer.py
diff options
context:
space:
mode:
Diffstat (limited to '.venv/lib/python3.12/site-packages/uvicorn/importer.py')
-rw-r--r--.venv/lib/python3.12/site-packages/uvicorn/importer.py38
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