From eb74386f49070d5d95b546b072c84827b6496122 Mon Sep 17 00:00:00 2001 From: hay-kot Date: Wed, 28 Apr 2021 18:52:23 -0800 Subject: [PATCH] add recipeSettings model --- mealie/db/models/recipe/recipe.py | 7 ++++++- mealie/db/models/recipe/settings.py | 18 ++++++++++++++++++ mealie/routes/recipe/recipe_assets.py | 2 -- mealie/schema/recipe.py | 23 +++++++++++++++++------ 4 files changed, 41 insertions(+), 9 deletions(-) create mode 100644 mealie/db/models/recipe/settings.py diff --git a/mealie/db/models/recipe/recipe.py b/mealie/db/models/recipe/recipe.py index d827c9025..7c02abf0c 100644 --- a/mealie/db/models/recipe/recipe.py +++ b/mealie/db/models/recipe/recipe.py @@ -11,6 +11,7 @@ from mealie.db.models.recipe.ingredient import RecipeIngredient from mealie.db.models.recipe.instruction import RecipeInstruction from mealie.db.models.recipe.note import Note from mealie.db.models.recipe.nutrition import Nutrition +from mealie.db.models.recipe.settings import RecipeSettings from mealie.db.models.recipe.tag import Tag, recipes2tags from mealie.db.models.recipe.tool import Tool from sqlalchemy.ext.orderinglist import ordering_list @@ -52,6 +53,7 @@ class RecipeModel(SqlAlchemyBase, BaseMixins): # Mealie Specific slug = sa.Column(sa.String, index=True, unique=True) + settings = orm.relationship("RecipeSettings", uselist=False, cascade="all, delete-orphan") tags: list[Tag] = orm.relationship("Tag", secondary=recipes2tags, back_populates="recipes") dateAdded = sa.Column(sa.Date, default=date.today) notes: list[Note] = orm.relationship("Note", cascade="all, delete-orphan") @@ -88,6 +90,7 @@ class RecipeModel(SqlAlchemyBase, BaseMixins): orgURL: str = None, extras: dict = None, assets: list = None, + settings: dict = None, *args, **kwargs ) -> None: @@ -97,6 +100,7 @@ class RecipeModel(SqlAlchemyBase, BaseMixins): self.recipeCuisine = recipeCuisine self.nutrition = Nutrition(**nutrition) if self.nutrition else Nutrition() + self.tools = [Tool(tool=x) for x in tools] if tools else [] self.recipeYield = recipeYield @@ -113,6 +117,8 @@ class RecipeModel(SqlAlchemyBase, BaseMixins): self.recipeCategory = [Category.create_if_not_exist(session=session, name=cat) for cat in recipeCategory] # Mealie Specific + self.settings = RecipeSettings(**settings) if settings else RecipeSettings() + print(self.settings) self.tags = [Tag.create_if_not_exist(session=session, name=tag) for tag in tags] self.slug = slug self.dateAdded = dateAdded @@ -123,5 +129,4 @@ class RecipeModel(SqlAlchemyBase, BaseMixins): def update(self, *args, **kwargs): """Updated a database entry by removing nested rows and rebuilds the row through the __init__ functions""" - self.__init__(*args, **kwargs) diff --git a/mealie/db/models/recipe/settings.py b/mealie/db/models/recipe/settings.py new file mode 100644 index 000000000..fa7f75ebb --- /dev/null +++ b/mealie/db/models/recipe/settings.py @@ -0,0 +1,18 @@ +import sqlalchemy as sa +from mealie.db.models.model_base import SqlAlchemyBase + + +class RecipeSettings(SqlAlchemyBase): + __tablename__ = "recipe_settings" + id = sa.Column(sa.Integer, primary_key=True) + parent_id = sa.Column(sa.Integer, sa.ForeignKey("recipes.id")) + public = sa.Column(sa.Boolean) + show_nutrition = sa.Column(sa.Boolean) + show_assets = sa.Column(sa.Boolean) + landscape_view = sa.Column(sa.Boolean) + + def __init__(self, public=True, show_nutrition=True, show_assets=True, landscape_view=True) -> None: + self.public = public + self.show_nutrition = show_nutrition + self.show_assets = show_assets + self.landscape_view = landscape_view diff --git a/mealie/routes/recipe/recipe_assets.py b/mealie/routes/recipe/recipe_assets.py index f8fa4bfd4..216a6af0d 100644 --- a/mealie/routes/recipe/recipe_assets.py +++ b/mealie/routes/recipe/recipe_assets.py @@ -2,7 +2,6 @@ import shutil from fastapi import APIRouter, Depends, File, Form from fastapi.datastructures import UploadFile -from fastapi.routing import run_endpoint_function from mealie.core.config import app_dirs from mealie.db.database import db from mealie.db.db_setup import generate_session @@ -20,7 +19,6 @@ router = APIRouter(prefix="/api/recipes", tags=["Recipe Assets"]) async def get_recipe_asset(recipe_slug, file_name: str): """ Returns a recipe asset """ file = app_dirs.RECIPE_DATA_DIR.joinpath(recipe_slug, file_name) - return FileResponse(file) diff --git a/mealie/schema/recipe.py b/mealie/schema/recipe.py index db851cdba..0b707633d 100644 --- a/mealie/schema/recipe.py +++ b/mealie/schema/recipe.py @@ -1,13 +1,23 @@ import datetime -from typing import Any, List, Optional +from typing import Any, Optional from fastapi_camelcase import CamelModel from mealie.db.models.recipe.recipe import RecipeModel -from pydantic import BaseModel, validator +from pydantic import BaseModel, Field, validator from pydantic.utils import GetterDict from slugify import slugify +class RecipeSettings(CamelModel): + public: bool = True + show_nutrition: bool = True + show_assets: bool = True + landscape_view: bool = True + + class Config: + orm_mode = True + + class RecipeNote(BaseModel): title: str text: str @@ -53,8 +63,8 @@ class RecipeSummary(BaseModel): image: Optional[Any] description: Optional[str] - recipeCategory: Optional[List[str]] = [] - tags: Optional[List[str]] = [] + recipeCategory: Optional[list[str]] = [] + tags: Optional[list[str]] = [] rating: Optional[int] class Config: @@ -81,9 +91,10 @@ class Recipe(RecipeSummary): performTime: Optional[str] = None # Mealie Specific + settings: Optional[RecipeSettings] assets: Optional[list[RecipeAsset]] = [] dateAdded: Optional[datetime.date] - notes: Optional[List[RecipeNote]] = [] + notes: Optional[list[RecipeNote]] = [] orgURL: Optional[str] extras: Optional[dict] = {} @@ -139,7 +150,7 @@ class Recipe(RecipeSummary): class AllRecipeRequest(BaseModel): - properties: List[str] + properties: list[str] limit: Optional[int] class Config: