|
10 | 10 | Point, |
11 | 11 | Polygon, |
12 | 12 | ) |
13 | | -from pydantic import BaseModel, Field, TypeAdapter, field_validator, model_validator |
| 13 | +from pydantic import ( |
| 14 | + BaseModel, |
| 15 | + Field, |
| 16 | + PrivateAttr, |
| 17 | + TypeAdapter, |
| 18 | + ValidationInfo, |
| 19 | + field_validator, |
| 20 | + model_validator, |
| 21 | +) |
14 | 22 |
|
15 | 23 | from stac_pydantic.api.extensions.fields import FieldsExtension |
16 | 24 | from stac_pydantic.api.extensions.query import Operator |
@@ -45,8 +53,8 @@ class Search(BaseModel): |
45 | 53 | limit: Optional[int] = 10 |
46 | 54 |
|
47 | 55 | # Private properties to store the parsed datetime values. Not part of the model schema. |
48 | | - _start_date: Optional[dt] = None |
49 | | - _end_date: Optional[dt] = None |
| 56 | + _start_date: Optional[dt] = PrivateAttr(default=None) |
| 57 | + _end_date: Optional[dt] = PrivateAttr(default=None) |
50 | 58 |
|
51 | 59 | # Properties to return the private values |
52 | 60 | @property |
@@ -96,9 +104,11 @@ def validate_bbox(cls, v: BBox) -> BBox: |
96 | 104 |
|
97 | 105 | return v |
98 | 106 |
|
99 | | - @field_validator("datetime") |
| 107 | + @field_validator("datetime", mode="after") |
100 | 108 | @classmethod |
101 | | - def validate_datetime(cls, value: Optional[str]) -> Optional[str]: |
| 109 | + def validate_datetime( |
| 110 | + cls, value: Optional[str], info: ValidationInfo |
| 111 | + ) -> Optional[str]: |
102 | 112 | # Split on "/" and replace no value or ".." with None |
103 | 113 | if value is None: |
104 | 114 | return value |
@@ -133,8 +143,9 @@ def validate_datetime(cls, value: Optional[str]) -> Optional[str]: |
133 | 143 | ) |
134 | 144 |
|
135 | 145 | # Store the parsed dates |
136 | | - cls._start_date = dates[0] |
137 | | - cls._end_date = dates[1] |
| 146 | + info.data["_start_date"] = dates[0] |
| 147 | + info.data["_end_date"] = dates[1] |
| 148 | + |
138 | 149 | # Return the original string value |
139 | 150 | return value |
140 | 151 |
|
|
0 commit comments