From fd5a1672b0cde3bd440e7104bd75b232ab25ea84 Mon Sep 17 00:00:00 2001 From: hayden Date: Mon, 25 Jan 2021 07:54:49 -0900 Subject: [PATCH] added card section card --- frontend/src/App.vue | 44 +++---- .../Settings/Migration/ChowdownCard.vue | 79 ------------ .../Settings/Migration/NextcloudCard.vue | 112 ------------------ .../Migration/UploadMigrationButton.vue | 49 -------- frontend/src/components/UI/CardSection.vue | 66 +++++++++++ frontend/src/components/UI/RecentRecipes.vue | 40 ------- frontend/src/pages/HomePage.vue | 38 +++++- mealie/app.py | 3 +- mealie/db/database.py | 20 ++-- mealie/db/db_base.py | 33 +++++- mealie/db/sql/theme_models.py | 2 +- mealie/routes/recipe_routes.py | 1 - mealie/services/recipe_services.py | 20 ++-- mealie/services/settings_services.py | 2 +- 14 files changed, 167 insertions(+), 342 deletions(-) delete mode 100644 frontend/src/components/Settings/Migration/ChowdownCard.vue delete mode 100644 frontend/src/components/Settings/Migration/NextcloudCard.vue delete mode 100644 frontend/src/components/Settings/Migration/UploadMigrationButton.vue create mode 100644 frontend/src/components/UI/CardSection.vue delete mode 100644 frontend/src/components/UI/RecentRecipes.vue diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 630fa1cce..f03cf1cbe 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -17,7 +17,7 @@ @selected="navigateFromSearch" /> - + mdi-magnify @@ -34,11 +34,11 @@ \ No newline at end of file diff --git a/frontend/src/components/Settings/Migration/NextcloudCard.vue b/frontend/src/components/Settings/Migration/NextcloudCard.vue deleted file mode 100644 index 83230d97a..000000000 --- a/frontend/src/components/Settings/Migration/NextcloudCard.vue +++ /dev/null @@ -1,112 +0,0 @@ - - - - - \ No newline at end of file diff --git a/frontend/src/components/Settings/Migration/UploadMigrationButton.vue b/frontend/src/components/Settings/Migration/UploadMigrationButton.vue deleted file mode 100644 index b34ff6b27..000000000 --- a/frontend/src/components/Settings/Migration/UploadMigrationButton.vue +++ /dev/null @@ -1,49 +0,0 @@ -c - - - - \ No newline at end of file diff --git a/frontend/src/components/UI/CardSection.vue b/frontend/src/components/UI/CardSection.vue new file mode 100644 index 000000000..307647ce3 --- /dev/null +++ b/frontend/src/components/UI/CardSection.vue @@ -0,0 +1,66 @@ + + + + + \ No newline at end of file diff --git a/frontend/src/components/UI/RecentRecipes.vue b/frontend/src/components/UI/RecentRecipes.vue deleted file mode 100644 index 684d482bd..000000000 --- a/frontend/src/components/UI/RecentRecipes.vue +++ /dev/null @@ -1,40 +0,0 @@ - - - - - diff --git a/frontend/src/pages/HomePage.vue b/frontend/src/pages/HomePage.vue index db14c5ee5..07ba573bc 100644 --- a/frontend/src/pages/HomePage.vue +++ b/frontend/src/pages/HomePage.vue @@ -1,15 +1,45 @@ diff --git a/mealie/app.py b/mealie/app.py index 5444c15cd..1f8574a2c 100644 --- a/mealie/app.py +++ b/mealie/app.py @@ -3,7 +3,7 @@ from fastapi import FastAPI from fastapi.staticfiles import StaticFiles # import utils.startup as startup -from app_config import PORT, PRODUCTION, SQLITE_FILE, WEB_PATH, docs_url, redoc_url +from app_config import PORT, PRODUCTION, WEB_PATH, docs_url, redoc_url from routes import ( backup_routes, meal_routes, @@ -26,7 +26,6 @@ app = FastAPI( ) - def mount_static_files(): app.mount("/static", StaticFiles(directory=WEB_PATH, html=True)) diff --git a/mealie/db/database.py b/mealie/db/database.py index c8ecef7c5..1085100e9 100644 --- a/mealie/db/database.py +++ b/mealie/db/database.py @@ -1,3 +1,5 @@ +from sqlalchemy.orm.session import Session + from db.db_base import BaseDocument from db.sql.meal_models import MealPlanModel from db.sql.recipe_models import RecipeModel @@ -16,8 +18,12 @@ class _Recipes(BaseDocument): self.primary_key = "slug" self.sql_model = RecipeModel - def update_image(self, slug: str, extension: str) -> None: - pass + def update_image(self, session: Session, slug: str, extension: str) -> str: + entry = self._query_one(session, match_value=slug) + entry.image = f"{slug}.{extension}" + session.commit() + + return f"{slug}.{extension}" class _Meals(BaseDocument): @@ -31,7 +37,7 @@ class _Settings(BaseDocument): self.primary_key = "name" self.sql_model = SiteSettingsModel - def save_new(self, session, main: dict, webhooks: dict) -> str: + def save_new(self, session: Session, main: dict, webhooks: dict) -> str: new_settings = self.sql_model(main.get("name"), webhooks) session.add(new_settings) @@ -45,14 +51,6 @@ class _Themes(BaseDocument): self.primary_key = "name" self.sql_model = SiteThemeModel - def update(self, session, data: dict) -> dict: - theme_model = self._query_one( - session=session, match_value=data["name"], match_key="name" - ) - - theme_model.update(**data) - session.commit() - class Database: def __init__(self) -> None: diff --git a/mealie/db/db_base.py b/mealie/db/db_base.py index 7318de7ad..a7354bbbc 100644 --- a/mealie/db/db_base.py +++ b/mealie/db/db_base.py @@ -1,4 +1,4 @@ -from typing import Union +from typing import List, Union from sqlalchemy.orm.session import Session @@ -11,7 +11,10 @@ class BaseDocument: self.store: str self.sql_model: SqlAlchemyBase - def get_all(self, session: Session, limit: int = None, order_by: str = None): + # TODO: Improve Get All Query Functionality + def get_all( + self, session: Session, limit: int = None, order_by: str = None + ) -> List[dict]: list = [x.dict() for x in session.query(self.sql_model).all()] if limit == 1: @@ -21,7 +24,7 @@ class BaseDocument: def _query_one( self, session: Session, match_value: str, match_key: str = None - ) -> Union[Session, SqlAlchemyBase]: + ) -> SqlAlchemyBase: """Query the sql database for one item an return the sql alchemy model object. If no match key is provided the primary_key attribute will be used. @@ -43,7 +46,7 @@ class BaseDocument: def get( self, session: Session, match_value: str, match_key: str = None, limit=1 - ) -> dict or list[dict]: + ) -> dict or List[dict]: """Retrieves an entry from the database by matching a key/value pair. If no key is provided the class objects primary key will be used to match against. @@ -67,6 +70,15 @@ class BaseDocument: return db_entry def save_new(self, session: Session, document: dict) -> dict: + """Creates a new database entry for the given SQL Alchemy Model. + + Args: + session (Session): A Database Session + document (dict): A python dictionary representing the data structure + + Returns: + dict: A dictionary representation of the database entry + """ new_document = self.sql_model(**document) session.add(new_document) return_data = new_document.dict() @@ -74,7 +86,18 @@ class BaseDocument: return return_data - def update(self, session: Session, match_value, new_data) -> dict: + def update(self, session: Session, match_value: str, new_data: str) -> dict: + """Update a database entry. + + Args: + session (Session): Database Session + match_value (str): Match "key" + new_data (str): Match "value" + + Returns: + dict: Returns a dictionary representation of the database entry + """ + entry = self._query_one(session=session, match_value=match_value) entry.update(session=session, **new_data) return_data = entry.dict() diff --git a/mealie/db/sql/theme_models.py b/mealie/db/sql/theme_models.py index 90c8f0ce6..7b12e34f0 100644 --- a/mealie/db/sql/theme_models.py +++ b/mealie/db/sql/theme_models.py @@ -12,7 +12,7 @@ class SiteThemeModel(SqlAlchemyBase): self.name = name self.colors = ThemeColorsModel(**colors) - def update(self, name, colors: dict) -> dict: + def update(self, session=None, name: str = None, colors: dict = None) -> dict: self.colors.update(**colors) return self.dict() diff --git a/mealie/routes/recipe_routes.py b/mealie/routes/recipe_routes.py index de6ed4434..9f0df9582 100644 --- a/mealie/routes/recipe_routes.py +++ b/mealie/routes/recipe_routes.py @@ -68,7 +68,6 @@ def get_recipe_img(recipe_slug: str): return FileResponse(recipe_image) -# Recipe Creations @router.post( "/api/recipe/create-url/", status_code=201, diff --git a/mealie/services/recipe_services.py b/mealie/services/recipe_services.py index 939e2d3ca..0dbbaca0c 100644 --- a/mealie/services/recipe_services.py +++ b/mealie/services/recipe_services.py @@ -82,15 +82,6 @@ class Recipe(BaseModel): slug = calc_slug return slug - @classmethod - def _unpack_doc(cls, document): - document = json.loads(document.to_json()) - del document["_id"] - - document["dateAdded"] = document["dateAdded"]["$date"] - - return cls(**document) - @classmethod def get_by_slug(cls, session, slug: str): """ Returns a Recipe Object by Slug """ @@ -132,8 +123,15 @@ class Recipe(BaseModel): return updated_slug.get("slug") @staticmethod - def update_image(slug: str, extension: str): - db.recipes.update_image(slug, extension) + def update_image(slug: str, extension: str) -> str: + """A helper function to pass the new image name and extension + into the database. + + Args: + slug (str): The current recipe slug + extension (str): the file extension of the new image + """ + return db.recipes.update_image(slug, extension) @staticmethod def get_all(session: Session): diff --git a/mealie/services/settings_services.py b/mealie/services/settings_services.py index f562b63cc..2f5b9323e 100644 --- a/mealie/services/settings_services.py +++ b/mealie/services/settings_services.py @@ -103,7 +103,7 @@ class SiteTheme(BaseModel): db.themes.save_new(session, self.dict()) def update_document(self, session: Session): - db.themes.update(session, self.dict()) + db.themes.update(session, self.name, self.dict()) @staticmethod def delete_theme(session: Session, theme_name: str) -> str: