Coverage for mongodb_odm / fields.py: 100%
20 statements
« prev ^ index » next coverage.py v7.12.0, created at 2025-12-07 08:37 +0000
« prev ^ index » next coverage.py v7.12.0, created at 2025-12-07 08:37 +0000
1from collections.abc import Mapping 1abcdef
2from collections.abc import Set as AbstractSet 1abcdef
3from typing import Any, Callable, Optional, Union 1abcdef
5from pydantic._internal._repr import Representation as PydanticRepresentation 1abcdef
6from pydantic.fields import FieldInfo as PydanticFieldInfo 1abcdef
7from pydantic_core import PydanticUndefined as Undefined 1abcdef
9IntStr = Union[int, str] 1abcdef
10AbstractSetIntStr = AbstractSet[IntStr] 1abcdef
11MappingIntStrAny = Mapping[IntStr, Any] 1abcdef
12NoArgAnyCallable = Callable[[], Any] 1abcdef
15def Field( 1abcdef
16 default: Any = Undefined,
17 *,
18 default_factory: Optional[NoArgAnyCallable] = None,
19 alias: Optional[str] = None,
20 title: Optional[str] = None,
21 description: Optional[str] = None,
22 exclude: Union[bool, None] = None,
23 # Will be deprecated soon
24 include: Union["AbstractSetIntStr", "MappingIntStrAny", Any] = None,
25 # Will be deprecated soon
26 const: Optional[bool] = None,
27 gt: Optional[float] = None,
28 ge: Optional[float] = None,
29 lt: Optional[float] = None,
30 le: Optional[float] = None,
31 multiple_of: Optional[float] = None,
32 allow_inf_nan: Optional[bool] = None,
33 max_digits: Optional[int] = None,
34 decimal_places: Optional[int] = None,
35 # Will be deprecated soon
36 unique_items: Optional[bool] = None,
37 min_length: Optional[int] = None,
38 max_length: Optional[int] = None,
39 frozen: bool = True,
40 pattern: Optional[str] = None,
41 discriminator: Optional[str] = None,
42 repr: bool = True,
43 **extra: Any,
44) -> Any:
45 # Extend Pydantic Field to have more control on the Field
46 field_info = PydanticFieldInfo( 1abcdef
47 default=default,
48 default_factory=default_factory,
49 alias=alias,
50 title=title,
51 description=description,
52 exclude=exclude,
53 gt=gt,
54 ge=ge,
55 lt=lt,
56 le=le,
57 multiple_of=multiple_of,
58 allow_inf_nan=allow_inf_nan,
59 max_digits=max_digits,
60 decimal_places=decimal_places,
61 min_length=min_length,
62 max_length=max_length,
63 frozen=frozen,
64 pattern=pattern,
65 discriminator=discriminator,
66 repr=repr,
67 **extra,
68 )
69 return field_info 1abcdef
72class RelationshipInfo(PydanticRepresentation): 1abcdef
73 def __init__( 1abcdef
74 self,
75 *,
76 local_field: str,
77 related_field: Optional[str] = None,
78 ) -> None:
79 self.local_field = local_field 1abcdef
80 self.related_field = related_field 1abcdef
83def Relationship( 1abcdef
84 *,
85 local_field: str,
86 related_field: Optional[str] = None,
87) -> Any:
88 """
89 This is a field of Representation.
90 That represents another model as the field type.
91 """
92 relationship_info = RelationshipInfo( 1abcdef
93 local_field=local_field,
94 related_field=related_field,
95 )
96 return relationship_info 1abcdef