1414 PositiveInt ,
1515 dataclasses ,
1616 error_wrappers ,
17- validator ,
17+ field_validator ,
1818)
1919from stac_pydantic import Collection , Item , shared
2020
2525
2626
2727class AccessibleAsset (shared .Asset ):
28- @validator ("href" )
28+ @field_validator ("href" )
2929 def is_accessible (cls , href ):
3030 url = urlparse (href )
3131
@@ -44,7 +44,7 @@ def is_accessible(cls, href):
4444class AccessibleItem (Item ):
4545 assets : Dict [str , AccessibleAsset ]
4646
47- @validator ("collection" )
47+ @field_validator ("collection" )
4848 def exists (cls , collection ):
4949 validators .collection_exists (collection_id = collection )
5050 return collection
@@ -66,15 +66,14 @@ class Status(str, enum.Enum):
6666class Ingestion (BaseModel ):
6767 id : str
6868 status : Status
69- message : Optional [str ]
69+ message : Optional [str ] = None
7070 created_by : str
71- created_at : datetime = None
72- updated_at : datetime = None
71+ created_at : datetime = datetime . now ()
72+ updated_at : datetime = datetime . now ()
7373
7474 item : Union [Item , Json [Item ]]
7575
76- @validator ("created_at" , pre = True , always = True , allow_reuse = True )
77- @validator ("updated_at" , pre = True , always = True , allow_reuse = True )
76+ @field_validator ("created_at" , "updated_at" , mode = "before" )
7877 def set_ts_now (cls , v ):
7978 return v or datetime .now ()
8079
@@ -94,10 +93,10 @@ def save(self, db: "services.Database"):
9493 def dynamodb_dict (self ):
9594 """DynamoDB-friendly serialization"""
9695 # convert to dictionary
97- output = self .dict (exclude = {"item" })
96+ output = self .model_dump (exclude = {"item" })
9897
9998 # add STAC item as string
100- output ["item" ] = self .item .json ()
99+ output ["item" ] = self .item .model_dump_json ()
101100
102101 # make JSON-friendly (will be able to do with Pydantic V2, https://github.com/pydantic/pydantic/issues/1409#issuecomment-1423995424)
103102 return jsonable_encoder (output )
@@ -106,7 +105,7 @@ def dynamodb_dict(self):
106105@dataclasses .dataclass
107106class ListIngestionRequest :
108107 status : Status = Status .queued
109- limit : PositiveInt = None
108+ limit : Optional [ PositiveInt ] = None
110109 next : Optional [str ] = None
111110
112111 def __post_init_post_parse__ (self ) -> None :
@@ -133,7 +132,7 @@ class ListIngestionResponse(BaseModel):
133132 items : List [Ingestion ]
134133 next : Optional [str ]
135134
136- @validator ("next" , pre = True )
135+ @field_validator ("next" , mode = "before" )
137136 def b64_encode_next (cls , next ):
138137 """
139138 Base64 encode next parameter for easier transportability
@@ -144,5 +143,5 @@ def b64_encode_next(cls, next):
144143
145144
146145class UpdateIngestionRequest (BaseModel ):
147- status : Status = None
148- message : str = None
146+ status : Optional [ Status ] = None
147+ message : Optional [ str ] = None
0 commit comments