Skip to content

Commit fe83e52

Browse files
committed
SettingsBase: custom validation to ensure date is not from the future
rename save_date -> save_datetime
1 parent 6d42742 commit fe83e52

File tree

1 file changed

+23
-3
lines changed

1 file changed

+23
-3
lines changed

bpod_rig/config/models/base.py

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
"""Base classes for configuration classes"""
22

33
import 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

810
class 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

3959
class ModuleBase(SettingsBase):
4060
name: Annotated[

0 commit comments

Comments
 (0)