Coverage for opt/mealie/lib/python3.12/site-packages/mealie/schema/household/webhook.py: 100%
35 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 03:04 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 03:04 +0000
1import datetime
2import enum
4from isodate import parse_time
5from pydantic import UUID4, ConfigDict, field_validator
7from mealie.schema._mealie import MealieModel
8from mealie.schema._mealie.datetime_parse import parse_datetime
9from mealie.schema.response.pagination import PaginationBase
12class WebhookType(str, enum.Enum):
13 mealplan = "mealplan"
16class CreateWebhook(MealieModel):
17 enabled: bool = True
18 name: str = ""
19 url: str = ""
21 webhook_type: WebhookType = WebhookType.mealplan
22 scheduled_time: datetime.time
24 @field_validator("scheduled_time", mode="before")
25 @classmethod
26 def validate_scheduled_time(cls, v):
27 """
28 Validator accepts both datetime and time values from external sources.
29 DateTime types are parsed and converted to time objects without timezones
31 type: time is treated as a UTC value
32 type: datetime is treated as a value with a timezone
33 """
34 parser_funcs = [
35 lambda x: parse_datetime(x).astimezone(datetime.UTC).time(),
36 parse_time,
37 ]
39 if isinstance(v, datetime.time):
40 return v
42 for parser_func in parser_funcs:
43 try:
44 return parser_func(v)
45 except ValueError:
46 continue
48 raise ValueError(f"Invalid scheduled time: {v}")
51class SaveWebhook(CreateWebhook):
52 group_id: UUID4
53 household_id: UUID4
56class ReadWebhook(SaveWebhook):
57 id: UUID4
58 model_config = ConfigDict(from_attributes=True)
61class WebhookPagination(PaginationBase):
62 items: list[ReadWebhook]