-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathmodels.py
More file actions
54 lines (38 loc) · 1.58 KB
/
Copy pathmodels.py
File metadata and controls
54 lines (38 loc) · 1.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import datetime
from pydantic import BaseModel, ConfigDict, model_validator
from event.constants import EventFrequencyEnum
class BaseEvent(BaseModel):
name: str
start_time: datetime.datetime
end_time: datetime.datetime
description: str | None = None
frequency: EventFrequencyEnum | None = None
repeat_start_date: datetime.date | None = None
repeat_end_date: datetime.date | None = None
@model_validator(mode="after")
def validate_time_range(self) -> "BaseEvent":
if self.start_time >= self.end_time:
raise ValueError("The event start must be before the event end")
if self.repeat_start_date and self.repeat_end_date:
if self.repeat_start_date > self.repeat_end_date:
raise ValueError("The event repeat start date must be before the end date")
if (self.repeat_start_date is None) != (self.repeat_end_date is None):
raise ValueError("The event must have both repeat start and repeat end or have neither.")
return self
class Event(BaseEvent):
model_config = ConfigDict(from_attributes=True)
eid: int
class EventCreate(BaseEvent):
pass
class EventUpdate(BaseModel):
model_config = ConfigDict(extra="forbid")
name: str | None = None
start_time: datetime.datetime | None = None
end_time: datetime.datetime | None = None
description: str | None = None
frequency: EventFrequencyEnum | None = None
repeat_start_date: datetime.date | None = None
repeat_end_date: datetime.date | None = None
class EventDelete(BaseModel):
result: bool
eid: int