feat: Upgrade to Pydantic V2 (#3134)

* bumped pydantic
This commit is contained in:
Michael Genson
2024-02-11 10:47:37 -06:00
committed by GitHub
parent 248459671e
commit 7a107584c7
129 changed files with 1138 additions and 833 deletions

View File

@@ -1,4 +1,4 @@
from pydantic import UUID4, NoneStr
from pydantic import UUID4, ConfigDict
from sqlalchemy.orm import joinedload
from sqlalchemy.orm.interfaces import LoaderOption
@@ -54,9 +54,7 @@ class GroupEventNotifierOptionsSave(GroupEventNotifierOptions):
class GroupEventNotifierOptionsOut(GroupEventNotifierOptions):
id: UUID4
class Config:
orm_mode = True
model_config = ConfigDict(from_attributes=True)
# =======================================================================
@@ -65,7 +63,7 @@ class GroupEventNotifierOptionsOut(GroupEventNotifierOptions):
class GroupEventNotifierCreate(MealieModel):
name: str
apprise_url: str
apprise_url: str | None = None
class GroupEventNotifierSave(GroupEventNotifierCreate):
@@ -76,7 +74,7 @@ class GroupEventNotifierSave(GroupEventNotifierCreate):
class GroupEventNotifierUpdate(GroupEventNotifierSave):
id: UUID4
apprise_url: NoneStr = None
apprise_url: str | None = None
class GroupEventNotifierOut(MealieModel):
@@ -85,9 +83,7 @@ class GroupEventNotifierOut(MealieModel):
enabled: bool
group_id: UUID4
options: GroupEventNotifierOptionsOut
class Config:
orm_mode = True
model_config = ConfigDict(from_attributes=True)
@classmethod
def loader_options(cls) -> list[LoaderOption]:
@@ -100,6 +96,4 @@ class GroupEventPagination(PaginationBase):
class GroupEventNotifierPrivate(GroupEventNotifierOut):
apprise_url: str
class Config:
orm_mode = True
model_config = ConfigDict(from_attributes=True)

View File

@@ -1,6 +1,6 @@
from datetime import datetime
from pydantic import UUID4
from pydantic import UUID4, ConfigDict
from mealie.schema._mealie import MealieModel
@@ -13,6 +13,4 @@ class GroupDataExport(MealieModel):
path: str
size: str
expires: datetime
class Config:
orm_mode = True
model_config = ConfigDict(from_attributes=True)

View File

@@ -1,6 +1,6 @@
from uuid import UUID
from pydantic import UUID4
from pydantic import UUID4, ConfigDict
from mealie.schema._mealie import MealieModel
@@ -24,6 +24,4 @@ class CreateGroupPreferences(UpdateGroupPreferences):
class ReadGroupPreferences(CreateGroupPreferences):
id: UUID4
class Config:
orm_mode = True
model_config = ConfigDict(from_attributes=True)

View File

@@ -1,4 +1,4 @@
from pydantic import validator
from pydantic import field_validator
from mealie.schema._mealie.mealie_model import MealieModel
from mealie.schema._mealie.validators import validate_locale
@@ -7,8 +7,8 @@ from mealie.schema._mealie.validators import validate_locale
class SeederConfig(MealieModel):
locale: str
@validator("locale")
def valid_locale(cls, v, values, **kwargs):
@field_validator("locale")
def valid_locale(cls, v):
if not validate_locale(v):
raise ValueError("invalid locale")
return v

View File

@@ -2,7 +2,7 @@ from __future__ import annotations
from datetime import datetime
from pydantic import UUID4, validator
from pydantic import UUID4, ConfigDict, field_validator
from sqlalchemy.orm import joinedload, selectinload
from sqlalchemy.orm.interfaces import LoaderOption
@@ -15,7 +15,6 @@ from mealie.db.models.group import (
from mealie.db.models.recipe import IngredientFoodModel, RecipeModel
from mealie.schema._mealie import MealieModel
from mealie.schema._mealie.types import NoneFloat
from mealie.schema.getter_dict import ExtrasGetterDict
from mealie.schema.labels.multi_purpose_label import MultiPurposeLabelSummary
from mealie.schema.recipe.recipe import RecipeSummary
from mealie.schema.recipe.recipe_ingredient import (
@@ -38,7 +37,8 @@ class ShoppingListItemRecipeRefCreate(MealieModel):
recipe_note: str | None = None
"""the original note from the recipe"""
@validator("recipe_quantity", pre=True)
@field_validator("recipe_quantity", mode="before")
@classmethod
def default_none_to_zero(cls, v):
return 0 if v is None else v
@@ -49,8 +49,7 @@ class ShoppingListItemRecipeRefUpdate(ShoppingListItemRecipeRefCreate):
class ShoppingListItemRecipeRefOut(ShoppingListItemRecipeRefUpdate):
class Config:
orm_mode = True
model_config = ConfigDict(from_attributes=True)
class ShoppingListItemBase(RecipeIngredientBase):
@@ -67,6 +66,13 @@ class ShoppingListItemBase(RecipeIngredientBase):
is_food: bool = False
extras: dict | None = {}
@field_validator("extras", mode="before")
def convert_extras_to_dict(cls, v):
if isinstance(v, dict):
return v
return {x.key_name: x.value for x in v} if v else {}
class ShoppingListItemCreate(ShoppingListItemBase):
recipe_references: list[ShoppingListItemRecipeRefCreate] = []
@@ -85,14 +91,14 @@ class ShoppingListItemUpdateBulk(ShoppingListItemUpdate):
class ShoppingListItemOut(ShoppingListItemBase):
id: UUID4
food: IngredientFood | None
label: MultiPurposeLabelSummary | None
unit: IngredientUnit | None
food: IngredientFood | None = None
label: MultiPurposeLabelSummary | None = None
unit: IngredientUnit | None = None
recipe_references: list[ShoppingListItemRecipeRefOut] = []
created_at: datetime | None
update_at: datetime | None
created_at: datetime | None = None
update_at: datetime | None = None
def __init__(self, **kwargs):
super().__init__(**kwargs)
@@ -102,9 +108,7 @@ class ShoppingListItemOut(ShoppingListItemBase):
self.label = self.food.label
self.label_id = self.label.id
class Config:
orm_mode = True
getter_dict = ExtrasGetterDict
model_config = ConfigDict(from_attributes=True)
@classmethod
def loader_options(cls) -> list[LoaderOption]:
@@ -138,9 +142,7 @@ class ShoppingListMultiPurposeLabelUpdate(ShoppingListMultiPurposeLabelCreate):
class ShoppingListMultiPurposeLabelOut(ShoppingListMultiPurposeLabelUpdate):
label: MultiPurposeLabelSummary
class Config:
orm_mode = True
model_config = ConfigDict(from_attributes=True)
@classmethod
def loader_options(cls) -> list[LoaderOption]:
@@ -155,8 +157,15 @@ class ShoppingListCreate(MealieModel):
name: str | None = None
extras: dict | None = {}
created_at: datetime | None
update_at: datetime | None
created_at: datetime | None = None
update_at: datetime | None = None
@field_validator("extras", mode="before")
def convert_extras_to_dict(cls, v):
if isinstance(v, dict):
return v
return {x.key_name: x.value for x in v} if v else {}
class ShoppingListRecipeRefOut(MealieModel):
@@ -167,9 +176,7 @@ class ShoppingListRecipeRefOut(MealieModel):
"""the number of times this recipe has been added"""
recipe: RecipeSummary
class Config:
orm_mode = True
model_config = ConfigDict(from_attributes=True)
@classmethod
def loader_options(cls) -> list[LoaderOption]:
@@ -188,10 +195,7 @@ class ShoppingListSummary(ShoppingListSave):
id: UUID4
recipe_references: list[ShoppingListRecipeRefOut]
label_settings: list[ShoppingListMultiPurposeLabelOut]
class Config:
orm_mode = True
getter_dict = ExtrasGetterDict
model_config = ConfigDict(from_attributes=True)
@classmethod
def loader_options(cls) -> list[LoaderOption]:
@@ -222,10 +226,7 @@ class ShoppingListUpdate(ShoppingListSave):
class ShoppingListOut(ShoppingListUpdate):
recipe_references: list[ShoppingListRecipeRefOut]
label_settings: list[ShoppingListMultiPurposeLabelOut]
class Config:
orm_mode = True
getter_dict = ExtrasGetterDict
model_config = ConfigDict(from_attributes=True)
@classmethod
def loader_options(cls) -> list[LoaderOption]:

View File

@@ -1,6 +1,6 @@
from uuid import UUID
from pydantic import NoneStr
from pydantic import ConfigDict
from mealie.schema._mealie import MealieModel
@@ -19,9 +19,7 @@ class ReadInviteToken(MealieModel):
token: str
uses_left: int
group_id: UUID
class Config:
orm_mode = True
model_config = ConfigDict(from_attributes=True)
class EmailInvitation(MealieModel):
@@ -31,4 +29,4 @@ class EmailInvitation(MealieModel):
class EmailInitationResponse(MealieModel):
success: bool
error: NoneStr = None
error: str | None = None

View File

@@ -3,10 +3,10 @@ import enum
from uuid import UUID
from isodate import parse_time
from pydantic import UUID4, validator
from pydantic.datetime_parse import parse_datetime
from pydantic import UUID4, ConfigDict, field_validator
from mealie.schema._mealie import MealieModel
from mealie.schema._mealie.datetime_parse import parse_datetime
from mealie.schema.response.pagination import PaginationBase
@@ -22,7 +22,7 @@ class CreateWebhook(MealieModel):
webhook_type: WebhookType = WebhookType.mealplan
scheduled_time: datetime.time
@validator("scheduled_time", pre=True)
@field_validator("scheduled_time", mode="before")
@classmethod
def validate_scheduled_time(cls, v):
"""
@@ -55,9 +55,7 @@ class SaveWebhook(CreateWebhook):
class ReadWebhook(SaveWebhook):
id: UUID4
class Config:
orm_mode = True
model_config = ConfigDict(from_attributes=True)
class WebhookPagination(PaginationBase):