summaryrefslogtreecommitdiff
path: root/venv/lib/python3.11/site-packages/litestar/dto/field.py
diff options
context:
space:
mode:
Diffstat (limited to 'venv/lib/python3.11/site-packages/litestar/dto/field.py')
-rw-r--r--venv/lib/python3.11/site-packages/litestar/dto/field.py50
1 files changed, 50 insertions, 0 deletions
diff --git a/venv/lib/python3.11/site-packages/litestar/dto/field.py b/venv/lib/python3.11/site-packages/litestar/dto/field.py
new file mode 100644
index 0000000..7ef8a39
--- /dev/null
+++ b/venv/lib/python3.11/site-packages/litestar/dto/field.py
@@ -0,0 +1,50 @@
+"""DTO domain types."""
+
+from __future__ import annotations
+
+from dataclasses import dataclass
+from enum import Enum
+from typing import Literal
+
+__all__ = (
+ "DTO_FIELD_META_KEY",
+ "DTOField",
+ "Mark",
+ "dto_field",
+)
+
+DTO_FIELD_META_KEY = "__dto__"
+
+
+class Mark(str, Enum):
+ """For marking field definitions on domain models."""
+
+ READ_ONLY = "read-only"
+ """To mark a field that can be read, but not updated by clients."""
+ WRITE_ONLY = "write-only"
+ """To mark a field that can be written to, but not read by clients."""
+ PRIVATE = "private"
+ """To mark a field that can neither be read or updated by clients."""
+
+
+@dataclass
+class DTOField:
+ """For configuring DTO behavior on model fields."""
+
+ mark: Mark | Literal["read-only", "write-only", "private"] | None = None
+ """Mark the field as read-only, or private."""
+
+
+def dto_field(mark: Literal["read-only", "write-only", "private"] | Mark) -> dict[str, DTOField]:
+ """Create a field metadata mapping.
+
+ Args:
+ mark: A DTO mark for the field, e.g., "read-only".
+
+ Returns:
+ A dict for setting as field metadata, such as the dataclass "metadata" field key, or the SQLAlchemy "info"
+ field.
+
+ Marking a field automates its inclusion/exclusion from DTO field definitions, depending on the DTO's purpose.
+ """
+ return {DTO_FIELD_META_KEY: DTOField(mark=Mark(mark))}