summaryrefslogtreecommitdiff
path: root/venv/lib/python3.11/site-packages/litestar/_signature/utils.py
diff options
context:
space:
mode:
authorcyfraeviolae <cyfraeviolae>2024-04-03 03:10:44 -0400
committercyfraeviolae <cyfraeviolae>2024-04-03 03:10:44 -0400
commit6d7ba58f880be618ade07f8ea080fe8c4bf8a896 (patch)
treeb1c931051ffcebd2bd9d61d98d6233ffa289bbce /venv/lib/python3.11/site-packages/litestar/_signature/utils.py
parent4f884c9abc32990b4061a1bb6997b4b37e58ea0b (diff)
venv
Diffstat (limited to 'venv/lib/python3.11/site-packages/litestar/_signature/utils.py')
-rw-r--r--venv/lib/python3.11/site-packages/litestar/_signature/utils.py58
1 files changed, 58 insertions, 0 deletions
diff --git a/venv/lib/python3.11/site-packages/litestar/_signature/utils.py b/venv/lib/python3.11/site-packages/litestar/_signature/utils.py
new file mode 100644
index 0000000..8c0d15f
--- /dev/null
+++ b/venv/lib/python3.11/site-packages/litestar/_signature/utils.py
@@ -0,0 +1,58 @@
+from __future__ import annotations
+
+from typing import TYPE_CHECKING, Any, Callable
+
+from litestar.constants import SKIP_VALIDATION_NAMES
+from litestar.exceptions import ImproperlyConfiguredException
+from litestar.params import DependencyKwarg
+from litestar.types import Empty, TypeDecodersSequence
+
+if TYPE_CHECKING:
+ from litestar.typing import FieldDefinition
+ from litestar.utils.signature import ParsedSignature
+
+
+__all__ = ("_validate_signature_dependencies", "_normalize_annotation", "_get_decoder_for_type")
+
+
+def _validate_signature_dependencies(
+ dependency_name_set: set[str], fn_name: str, parsed_signature: ParsedSignature
+) -> set[str]:
+ """Validate dependencies of ``parsed_signature``.
+
+ Args:
+ dependency_name_set: A set of dependency names
+ fn_name: A callable's name.
+ parsed_signature: A parsed signature.
+
+ Returns:
+ A set of validated dependency names.
+ """
+ dependency_names: set[str] = set(dependency_name_set)
+
+ for parameter in parsed_signature.parameters.values():
+ if isinstance(parameter.kwarg_definition, DependencyKwarg) and parameter.name not in dependency_name_set:
+ if not parameter.is_optional and parameter.default is Empty:
+ raise ImproperlyConfiguredException(
+ f"Explicit dependency '{parameter.name}' for '{fn_name}' has no default value, "
+ f"or provided dependency."
+ )
+ dependency_names.add(parameter.name)
+ return dependency_names
+
+
+def _normalize_annotation(field_definition: FieldDefinition) -> Any:
+ if field_definition.name in SKIP_VALIDATION_NAMES or (
+ isinstance(field_definition.kwarg_definition, DependencyKwarg)
+ and field_definition.kwarg_definition.skip_validation
+ ):
+ return Any
+
+ return field_definition.annotation
+
+
+def _get_decoder_for_type(target_type: Any, type_decoders: TypeDecodersSequence) -> Callable[[type, Any], Any] | None:
+ return next(
+ (decoder for predicate, decoder in type_decoders if predicate(target_type)),
+ None,
+ )