feat: add support for API extras on shopping lists, shopping list items, and food data (#1619)

* added api extras to other tables
genericized api extras model from recipes
added extras column to ingredient foods
added extras column to shopping lists
added extras column to shopping list items

* updated alembic version test

* made mypy happy

* added TODO on test that does nothing

* added extras tests for lists, items, and foods

* added docs for new extras

* modified alembic versions to eliminate branching
This commit is contained in:
Michael Genson
2022-09-27 21:53:22 -05:00
committed by GitHub
parent db70a210a2
commit 8271c3001e
12 changed files with 300 additions and 33 deletions

View File

@@ -4,7 +4,9 @@ from datetime import datetime
from typing import Optional, Union
from pydantic import UUID4
from pydantic.utils import GetterDict
from mealie.db.models.group.shopping_list import ShoppingList, ShoppingListItem
from mealie.schema._mealie import MealieModel
from mealie.schema.recipe.recipe_ingredient import IngredientFood, IngredientUnit
from mealie.schema.response.pagination import PaginationBase
@@ -39,6 +41,7 @@ class ShoppingListItemCreate(MealieModel):
label_id: Optional[UUID4] = None
recipe_references: list[ShoppingListItemRecipeRef] = []
extras: Optional[dict] = {}
created_at: Optional[datetime]
update_at: Optional[datetime]
@@ -55,9 +58,17 @@ class ShoppingListItemOut(ShoppingListItemUpdate):
class Config:
orm_mode = True
@classmethod
def getter_dict(cls, name_orm: ShoppingListItem):
return {
**GetterDict(name_orm),
"extras": {x.key_name: x.value for x in name_orm.extras},
}
class ShoppingListCreate(MealieModel):
name: str = None
extras: Optional[dict] = {}
created_at: Optional[datetime]
update_at: Optional[datetime]
@@ -84,6 +95,13 @@ class ShoppingListSummary(ShoppingListSave):
class Config:
orm_mode = True
@classmethod
def getter_dict(cls, name_orm: ShoppingList):
return {
**GetterDict(name_orm),
"extras": {x.key_name: x.value for x in name_orm.extras},
}
class ShoppingListPagination(PaginationBase):
items: list[ShoppingListSummary]

View File

@@ -6,7 +6,9 @@ from typing import Optional, Union
from uuid import UUID, uuid4
from pydantic import UUID4, Field, validator
from pydantic.utils import GetterDict
from mealie.db.models.recipe.ingredient import IngredientFoodModel
from mealie.schema._mealie import MealieModel
from mealie.schema._mealie.types import NoneFloat
from mealie.schema.response.pagination import PaginationBase
@@ -15,6 +17,7 @@ from mealie.schema.response.pagination import PaginationBase
class UnitFoodBase(MealieModel):
name: str
description: str = ""
extras: Optional[dict] = {}
class CreateIngredientFood(UnitFoodBase):
@@ -34,6 +37,13 @@ class IngredientFood(CreateIngredientFood):
class Config:
orm_mode = True
@classmethod
def getter_dict(cls, name_orm: IngredientFoodModel):
return {
**GetterDict(name_orm),
"extras": {x.key_name: x.value for x in name_orm.extras},
}
class IngredientFoodPagination(PaginationBase):
items: list[IngredientFood]