add recipeSettings model

This commit is contained in:
hay-kot 2021-04-28 18:52:23 -08:00
commit eb74386f49
4 changed files with 41 additions and 9 deletions

View file

@ -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.instruction import RecipeInstruction
from mealie.db.models.recipe.note import Note from mealie.db.models.recipe.note import Note
from mealie.db.models.recipe.nutrition import Nutrition 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.tag import Tag, recipes2tags
from mealie.db.models.recipe.tool import Tool from mealie.db.models.recipe.tool import Tool
from sqlalchemy.ext.orderinglist import ordering_list from sqlalchemy.ext.orderinglist import ordering_list
@ -52,6 +53,7 @@ class RecipeModel(SqlAlchemyBase, BaseMixins):
# Mealie Specific # Mealie Specific
slug = sa.Column(sa.String, index=True, unique=True) 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") tags: list[Tag] = orm.relationship("Tag", secondary=recipes2tags, back_populates="recipes")
dateAdded = sa.Column(sa.Date, default=date.today) dateAdded = sa.Column(sa.Date, default=date.today)
notes: list[Note] = orm.relationship("Note", cascade="all, delete-orphan") notes: list[Note] = orm.relationship("Note", cascade="all, delete-orphan")
@ -88,6 +90,7 @@ class RecipeModel(SqlAlchemyBase, BaseMixins):
orgURL: str = None, orgURL: str = None,
extras: dict = None, extras: dict = None,
assets: list = None, assets: list = None,
settings: dict = None,
*args, *args,
**kwargs **kwargs
) -> None: ) -> None:
@ -97,6 +100,7 @@ class RecipeModel(SqlAlchemyBase, BaseMixins):
self.recipeCuisine = recipeCuisine self.recipeCuisine = recipeCuisine
self.nutrition = Nutrition(**nutrition) if self.nutrition else Nutrition() self.nutrition = Nutrition(**nutrition) if self.nutrition else Nutrition()
self.tools = [Tool(tool=x) for x in tools] if tools else [] self.tools = [Tool(tool=x) for x in tools] if tools else []
self.recipeYield = recipeYield 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] self.recipeCategory = [Category.create_if_not_exist(session=session, name=cat) for cat in recipeCategory]
# Mealie Specific # 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.tags = [Tag.create_if_not_exist(session=session, name=tag) for tag in tags]
self.slug = slug self.slug = slug
self.dateAdded = dateAdded self.dateAdded = dateAdded
@ -123,5 +129,4 @@ class RecipeModel(SqlAlchemyBase, BaseMixins):
def update(self, *args, **kwargs): def update(self, *args, **kwargs):
"""Updated a database entry by removing nested rows and rebuilds the row through the __init__ functions""" """Updated a database entry by removing nested rows and rebuilds the row through the __init__ functions"""
self.__init__(*args, **kwargs) self.__init__(*args, **kwargs)

View file

@ -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

View file

@ -2,7 +2,6 @@ import shutil
from fastapi import APIRouter, Depends, File, Form from fastapi import APIRouter, Depends, File, Form
from fastapi.datastructures import UploadFile from fastapi.datastructures import UploadFile
from fastapi.routing import run_endpoint_function
from mealie.core.config import app_dirs from mealie.core.config import app_dirs
from mealie.db.database import db from mealie.db.database import db
from mealie.db.db_setup import generate_session 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): async def get_recipe_asset(recipe_slug, file_name: str):
""" Returns a recipe asset """ """ Returns a recipe asset """
file = app_dirs.RECIPE_DATA_DIR.joinpath(recipe_slug, file_name) file = app_dirs.RECIPE_DATA_DIR.joinpath(recipe_slug, file_name)
return FileResponse(file) return FileResponse(file)

View file

@ -1,13 +1,23 @@
import datetime import datetime
from typing import Any, List, Optional from typing import Any, Optional
from fastapi_camelcase import CamelModel from fastapi_camelcase import CamelModel
from mealie.db.models.recipe.recipe import RecipeModel 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 pydantic.utils import GetterDict
from slugify import slugify 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): class RecipeNote(BaseModel):
title: str title: str
text: str text: str
@ -53,8 +63,8 @@ class RecipeSummary(BaseModel):
image: Optional[Any] image: Optional[Any]
description: Optional[str] description: Optional[str]
recipeCategory: Optional[List[str]] = [] recipeCategory: Optional[list[str]] = []
tags: Optional[List[str]] = [] tags: Optional[list[str]] = []
rating: Optional[int] rating: Optional[int]
class Config: class Config:
@ -81,9 +91,10 @@ class Recipe(RecipeSummary):
performTime: Optional[str] = None performTime: Optional[str] = None
# Mealie Specific # Mealie Specific
settings: Optional[RecipeSettings]
assets: Optional[list[RecipeAsset]] = [] assets: Optional[list[RecipeAsset]] = []
dateAdded: Optional[datetime.date] dateAdded: Optional[datetime.date]
notes: Optional[List[RecipeNote]] = [] notes: Optional[list[RecipeNote]] = []
orgURL: Optional[str] orgURL: Optional[str]
extras: Optional[dict] = {} extras: Optional[dict] = {}
@ -139,7 +150,7 @@ class Recipe(RecipeSummary):
class AllRecipeRequest(BaseModel): class AllRecipeRequest(BaseModel):
properties: List[str] properties: list[str]
limit: Optional[int] limit: Optional[int]
class Config: class Config: