1
0
Fork 0
mirror of https://github.com/mealie-recipes/mealie.git synced 2025-07-24 07:39:41 +02:00

feat: Upgrade to Pydantic V2 (#3134)
Some checks are pending
CodeQL / Analyze (javascript-typescript) (push) Waiting to run
CodeQL / Analyze (python) (push) Waiting to run
Docker Nightly Production / Build Tagged Release (push) Blocked by required conditions
Docker Nightly Production / Notify Discord (push) Blocked by required conditions
Docker Nightly Production / Backend Server Tests (push) Waiting to run
Docker Nightly Production / Frontend and End-to-End Tests (push) Waiting to run

* bumped pydantic
This commit is contained in:
Michael Genson 2024-02-11 10:47:37 -06:00 committed by GitHub
parent 248459671e
commit 7a107584c7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
129 changed files with 1138 additions and 833 deletions

View file

@ -1,4 +1,7 @@
from pydantic import UUID4, validator
from typing import Annotated
from pydantic import UUID4, ConfigDict, Field, field_validator
from pydantic_core.core_schema import ValidationInfo
from slugify import slugify
from sqlalchemy.orm import joinedload
from sqlalchemy.orm.interfaces import LoaderOption
@ -14,9 +17,9 @@ from ..recipe.recipe_category import CategoryBase, TagBase
class CreateCookBook(MealieModel):
name: str
description: str = ""
slug: str | None = None
slug: Annotated[str | None, Field(validate_default=True)] = None
position: int = 1
public: bool = False
public: Annotated[bool, Field(validate_default=True)] = False
categories: list[CategoryBase] = []
tags: list[TagBase] = []
tools: list[RecipeTool] = []
@ -24,13 +27,13 @@ class CreateCookBook(MealieModel):
require_all_tags: bool = True
require_all_tools: bool = True
@validator("public", always=True, pre=True)
def validate_public(public: bool | None, values: dict) -> bool: # type: ignore
@field_validator("public", mode="before")
def validate_public(public: bool | None) -> bool:
return False if public is None else public
@validator("slug", always=True, pre=True)
def validate_slug(slug: str, values): # type: ignore
name: str = values["name"]
@field_validator("slug", mode="before")
def validate_slug(slug: str, info: ValidationInfo):
name: str = info.data["name"]
calc_slug: str = slugify(name)
if slug != calc_slug:
@ -50,9 +53,7 @@ class UpdateCookBook(SaveCookBook):
class ReadCookBook(UpdateCookBook):
group_id: UUID4
categories: list[CategoryBase] = []
class Config:
orm_mode = True
model_config = ConfigDict(from_attributes=True)
@classmethod
def loader_options(cls) -> list[LoaderOption]:
@ -66,6 +67,4 @@ class CookBookPagination(PaginationBase):
class RecipeCookBook(ReadCookBook):
group_id: UUID4
recipes: list[RecipeSummary]
class Config:
orm_mode = True
model_config = ConfigDict(from_attributes=True)