11"""Base classes for configuration classes"""
22
33import datetime
4- from typing import Annotated , Union , Optional
5- from pydantic import BaseModel , Field , PastDate
4+ from typing import Annotated , Union , Optional , Any
5+
6+ import pydantic .types
7+ from pydantic import BaseModel , Field , PastDate , validator , field_validator
68
79
810class SettingsBase (BaseModel ):
@@ -14,7 +16,7 @@ class SettingsBase(BaseModel):
1416 ),
1517 ] = datetime .date .today ()
1618
17- save_date : Annotated [
19+ save_datetime : Annotated [
1820 Optional [
1921 Union [datetime .datetime , PastDate ]
2022 ], # Optional, but can be either type
@@ -35,6 +37,24 @@ class SettingsBase(BaseModel):
3537 ),
3638 ] = "BpodUser"
3739
40+ # noinspection PyNestedDecorators
41+ @field_validator ("creation_date" , mode = "after" )
42+ @classmethod
43+ def validate_nonfuture (cls , value : datetime .date ) -> datetime .date :
44+ if value > datetime .date .today ():
45+ raise ValueError (f'Provided creation_date { value } cannot be in the future!' )
46+ return value
47+
48+ # noinspection PyNestedDecorators
49+ @field_validator ("save_datetime" , mode = "after" )
50+ @classmethod
51+ def validate_nonfuture_datetime (cls , value : datetime .datetime ) -> datetime .datetime :
52+ if value > datetime .datetime .now ():
53+ raise ValueError (f'Provided save_datetime { value } cannot be in the future!' )
54+ return value
55+
56+
57+
3858
3959class ModuleBase (SettingsBase ):
4060 name : Annotated [
0 commit comments