fix(backend): 🐛 Fix CI/CD Linting Failures

This commit is contained in:
hay-kot 2021-08-23 15:33:39 -08:00
parent abb0b84e22
commit d1a7ec3b95
15 changed files with 48 additions and 37 deletions

View File

@ -1,6 +1,6 @@
import { BaseCRUDAPI } from "./_base"; import { BaseCRUDAPI } from "./_base";
import { Recipe } from "~/types/api-types/admin"; import { Recipe , CreateRecipe } from "~/types/api-types/recipe";
import { CreateRecipe } from "~/types/api-types/recipe";
const prefix = "/api"; const prefix = "/api";

View File

@ -108,6 +108,7 @@ export default defineComponent({
}); });
async function updateUser() { async function updateUser() {
// @ts-ignore
const { response } = await api.users.updateOne(userCopy.value.id, userCopy.value); const { response } = await api.users.updateOne(userCopy.value.id, userCopy.value);
if (response?.status === 200) { if (response?.status === 200) {
context.emit(events.REFRESH); context.emit(events.REFRESH);
@ -151,17 +152,22 @@ export default defineComponent({
// } // }
// }, // },
async changePassword() { async changePassword() {
// @ts-ignore
this.paswordLoading = true; this.paswordLoading = true;
const data = { const data = {
currentPassword: this.password.current, currentPassword: this.password.current,
newPassword: this.password.newOne, newPassword: this.password.newOne,
}; };
// @ts-ignore
if (this.$refs.passChange.validate()) { if (this.$refs.passChange.validate()) {
// @ts-ignore
if (await api.users.changePassword(this.user.id, data)) { if (await api.users.changePassword(this.user.id, data)) {
this.$emit("refresh"); this.$emit("refresh");
} }
} }
// @ts-ignore
this.paswordLoading = false; this.paswordLoading = false;
}, },
}, },

View File

@ -1,4 +1,5 @@
import { useAsync, ref } from "@nuxtjs/composition-api"; import { useAsync, ref } from "@nuxtjs/composition-api";
import {set } from "@vueuse/core"
import { useAsyncKey } from "./use-utils"; import { useAsyncKey } from "./use-utils";
import { useApiSingleton } from "~/composables/use-api"; import { useApiSingleton } from "~/composables/use-api";
import { Recipe } from "~/types/api-types/recipe"; import { Recipe } from "~/types/api-types/recipe";
@ -29,7 +30,8 @@ export const useRecipes = (all = false, fetchRecipes = true) => {
async function refreshRecipes() { async function refreshRecipes() {
const { data } = await api.recipes.getAll(start, end); const { data } = await api.recipes.getAll(start, end);
if (data) { if (data) {
recipes.value = data; set(recipes, data);
} }
} }

View File

@ -223,7 +223,7 @@ import RecipeNotes from "~/components/Domain/Recipe/RecipeNotes.vue";
import RecipeImageUploadBtn from "~/components/Domain/Recipe/RecipeImageUploadBtn.vue"; import RecipeImageUploadBtn from "~/components/Domain/Recipe/RecipeImageUploadBtn.vue";
import RecipeSettingsMenu from "~/components/Domain/Recipe/RecipeSettingsMenu.vue"; import RecipeSettingsMenu from "~/components/Domain/Recipe/RecipeSettingsMenu.vue";
import RecipeIngredientEditor from "~/components/Domain/Recipe/RecipeIngredientEditor.vue"; import RecipeIngredientEditor from "~/components/Domain/Recipe/RecipeIngredientEditor.vue";
import { Recipe } from "~/types/api-types/admin"; import { Recipe } from "~/types/api-types/recipe";
import { useStaticRoutes } from "~/composables/api"; import { useStaticRoutes } from "~/composables/api";
export default defineComponent({ export default defineComponent({

View File

@ -4,9 +4,10 @@ from mealie.db.data_access_layer.group_access_model import GroupDataAccessModel
from mealie.db.models.event import Event, EventNotification from mealie.db.models.event import Event, EventNotification
from mealie.db.models.group import Group from mealie.db.models.group import Group
from mealie.db.models.mealplan import MealPlan from mealie.db.models.mealplan import MealPlan
from mealie.db.models.recipe.category import Category
from mealie.db.models.recipe.comment import RecipeComment from mealie.db.models.recipe.comment import RecipeComment
from mealie.db.models.recipe.ingredient import IngredientFoodModel, IngredientUnitModel from mealie.db.models.recipe.ingredient import IngredientFoodModel, IngredientUnitModel
from mealie.db.models.recipe.recipe import Category, RecipeModel, Tag from mealie.db.models.recipe.recipe import RecipeModel, Tag
from mealie.db.models.settings import CustomPage, SiteSettings from mealie.db.models.settings import CustomPage, SiteSettings
from mealie.db.models.shopping_list import ShoppingList from mealie.db.models.shopping_list import ShoppingList
from mealie.db.models.sign_up import SignUp from mealie.db.models.sign_up import SignUp
@ -82,5 +83,5 @@ class DatabaseAccessLayer:
self.users = UserDataAccessModel(DEFAULT_PK, User, UserInDB) self.users = UserDataAccessModel(DEFAULT_PK, User, UserInDB)
self.api_tokens = BaseAccessModel(DEFAULT_PK, LongLiveToken, LongLiveTokenInDB) self.api_tokens = BaseAccessModel(DEFAULT_PK, LongLiveToken, LongLiveTokenInDB)
self.groups = GroupDataAccessModel(DEFAULT_PK, Group, GroupInDB) self.groups = GroupDataAccessModel(DEFAULT_PK, Group, GroupInDB)
self.meals = BaseAccessModel("uid", MealPlan, MealPlanOut) self.meals = BaseAccessModel(DEFAULT_PK, MealPlan, MealPlanOut)
self.shopping_lists = BaseAccessModel(DEFAULT_PK, ShoppingList, ShoppingListOut) self.shopping_lists = BaseAccessModel(DEFAULT_PK, ShoppingList, ShoppingListOut)

View File

@ -1,7 +1,6 @@
import uuid import uuid
from datetime import datetime from datetime import datetime
from mealie.db.db_setup import SessionLocal
from sqlalchemy import Column, DateTime, Integer from sqlalchemy import Column, DateTime, Integer
from sqlalchemy.ext.declarative import as_declarative from sqlalchemy.ext.declarative import as_declarative
from sqlalchemy.orm import declarative_base from sqlalchemy.orm import declarative_base

View File

@ -1,6 +1,6 @@
import sqlalchemy.orm as orm import sqlalchemy.orm as orm
from mealie.db.models.group import Group
from mealie.db.models._model_base import BaseMixins, SqlAlchemyBase from mealie.db.models._model_base import BaseMixins, SqlAlchemyBase
from mealie.db.models.group import Group
from mealie.db.models.recipe.recipe import RecipeModel from mealie.db.models.recipe.recipe import RecipeModel
from mealie.db.models.shopping_list import ShoppingList from mealie.db.models.shopping_list import ShoppingList
from sqlalchemy import Column, Date, ForeignKey, Integer, String from sqlalchemy import Column, Date, ForeignKey, Integer, String
@ -33,7 +33,7 @@ class Meal(SqlAlchemyBase):
class MealDay(SqlAlchemyBase, BaseMixins): class MealDay(SqlAlchemyBase, BaseMixins):
__tablename__ = "mealdays" __tablename__ = "mealdays"
id = Column(Integer, primary_key=True) id = Column(Integer, primary_key=True)
parent_id = Column(Integer, ForeignKey("mealplan.uid")) parent_id = Column(Integer, ForeignKey("mealplan.id"))
date = Column(Date) date = Column(Date)
meals: list[Meal] = orm.relationship( meals: list[Meal] = orm.relationship(
Meal, Meal,
@ -49,7 +49,7 @@ class MealDay(SqlAlchemyBase, BaseMixins):
class MealPlan(SqlAlchemyBase, BaseMixins): class MealPlan(SqlAlchemyBase, BaseMixins):
__tablename__ = "mealplan" __tablename__ = "mealplan"
uid = Column(Integer, primary_key=True, unique=True) # TODO: Migrate to use ID as PK
start_date = Column(Date) start_date = Column(Date)
end_date = Column(Date) end_date = Column(Date)
plan_days: list[MealDay] = orm.relationship(MealDay, cascade="all, delete, delete-orphan") plan_days: list[MealDay] = orm.relationship(MealDay, cascade="all, delete, delete-orphan")

View File

@ -1,12 +1,8 @@
from functools import lru_cache
import sqlalchemy as sa import sqlalchemy as sa
import sqlalchemy.orm as orm import sqlalchemy.orm as orm
from mealie.core import root_logger from mealie.core import root_logger
from mealie.db.db_setup import SessionLocal
from mealie.db.models._model_base import BaseMixins, SqlAlchemyBase from mealie.db.models._model_base import BaseMixins, SqlAlchemyBase
from slugify import slugify from slugify import slugify
from sqlalchemy import inspect
from sqlalchemy.orm import validates from sqlalchemy.orm import validates
logger = root_logger.get_logger() logger = root_logger.get_logger()
@ -64,7 +60,9 @@ class Category(SqlAlchemyBase, BaseMixins):
if not session or not match_value: if not session or not match_value:
return None return None
result = session.query(Category).filter(Category.name == match_value).one_or_none() slug = slugify(match_value)
result = session.query(Category).filter(Category.slug == slug).one_or_none()
if result: if result:
logger.debug("Category exists, associating recipe") logger.debug("Category exists, associating recipe")
return result return result

View File

@ -10,7 +10,7 @@ from .._model_base import BaseMixins, SqlAlchemyBase
from .._model_utils import auto_init from .._model_utils import auto_init
from .api_extras import ApiExtras from .api_extras import ApiExtras
from .assets import RecipeAsset from .assets import RecipeAsset
from .category import Category, recipes2categories from .category import recipes2categories
from .ingredient import RecipeIngredient from .ingredient import RecipeIngredient
from .instruction import RecipeInstruction from .instruction import RecipeInstruction
from .note import Note from .note import Note

View File

@ -1,7 +1,6 @@
import sqlalchemy as sa import sqlalchemy as sa
import sqlalchemy.orm as orm import sqlalchemy.orm as orm
from mealie.core import root_logger from mealie.core import root_logger
from mealie.db.db_setup import SessionLocal
from mealie.db.models._model_base import BaseMixins, SqlAlchemyBase from mealie.db.models._model_base import BaseMixins, SqlAlchemyBase
from slugify import slugify from slugify import slugify
from sqlalchemy.orm import validates from sqlalchemy.orm import validates
@ -35,15 +34,17 @@ class Tag(SqlAlchemyBase, BaseMixins):
self.name = name.strip() self.name = name.strip()
self.slug = slugify(self.name) self.slug = slugify(self.name)
@staticmethod @classmethod
def create_if_not_exist(name: str = None): def get_ref(cls, match_value: str, session=None):
test_slug = slugify(name) if not session or not match_value:
with SessionLocal() as session: return None
result = session.query(Tag).filter(Tag.slug == test_slug).one_or_none()
if result: slug = slugify(match_value)
logger.debug("Tag exists, associating recipe")
return result result = session.query(Tag).filter(Tag.slug == slug).one_or_none()
else: if result:
logger.debug("Tag doesn't exists, creating tag") logger.debug("Category exists, associating recipe")
return Tag(name=name) return result
else:
logger.debug("Category doesn't exists, creating Category")
return Tag(name=match_value)

View File

@ -69,7 +69,7 @@ def get_meal_plan(
): ):
""" Returns a single Meal Plan from the Database """ """ Returns a single Meal Plan from the Database """
return db.meals.get(session, id, "uid") return db.meals.get(session, id)
@router.post("/create", status_code=status.HTTP_201_CREATED) @router.post("/create", status_code=status.HTTP_201_CREATED)
@ -97,7 +97,7 @@ def update_meal_plan(
): ):
""" Updates a meal plan based off ID """ """ Updates a meal plan based off ID """
set_mealplan_dates(meal_plan) set_mealplan_dates(meal_plan)
processed_plan = MealPlanOut(uid=plan_id, **meal_plan.dict()) processed_plan = MealPlanOut(id=plan_id, **meal_plan.dict())
try: try:
db.meals.update(session, plan_id, processed_plan.dict()) db.meals.update(session, plan_id, processed_plan.dict())
background_tasks.add_task( background_tasks.add_task(

View File

@ -44,6 +44,6 @@ def get_shopping_list(
mealplan.shopping_list = created_list.id mealplan.shopping_list = created_list.id
db.meals.update(session, mealplan.uid, mealplan) db.meals.update(session, mealplan.id, mealplan)
return created_list return created_list

View File

@ -48,7 +48,7 @@ class MealPlanIn(CamelModel):
class MealPlanOut(MealPlanIn): class MealPlanOut(MealPlanIn):
uid: int id: int
shopping_list: Optional[int] shopping_list: Optional[int]
class Config: class Config:

View File

@ -140,15 +140,18 @@ class MigrationBase(BaseModel):
return recipe_dict return recipe_dict
def clean_recipe_dictionary(self, recipe_dict) -> Recipe: def clean_recipe_dictionary(self, recipe_dict) -> Recipe:
"""Calls the rewrite_alias function and the Cleaner.clean function on a """
dictionary and returns the result unpacked into a Recipe object""" Calls the rewrite_alias function and the Cleaner.clean function on a
dictionary and returns the result unpacked into a Recipe object
"""
recipe_dict = self.rewrite_alias(recipe_dict) recipe_dict = self.rewrite_alias(recipe_dict)
recipe_dict = cleaner.clean(recipe_dict, url=recipe_dict.get("org_url", None)) recipe_dict = cleaner.clean(recipe_dict, url=recipe_dict.get("org_url", None))
return Recipe(**recipe_dict) return Recipe(**recipe_dict)
def import_recipes_to_database(self, validated_recipes: list[Recipe]) -> None: def import_recipes_to_database(self, validated_recipes: list[Recipe]) -> None:
"""Used as a single access point to process a list of Recipe objects into the """
Used as a single access point to process a list of Recipe objects into the
database in a predictable way. If an error occurs the session is rolled back database in a predictable way. If an error occurs the session is rolled back
and the process will continue. All import information is appended to the and the process will continue. All import information is appended to the
'migration_report' attribute to be returned to the frontend for display. 'migration_report' attribute to be returned to the frontend for display.
@ -166,6 +169,7 @@ class MigrationBase(BaseModel):
except Exception as inst: except Exception as inst:
exception = inst exception = inst
logger.error(inst)
self.session.rollback() self.session.rollback()
import_status = MigrationImport(slug=recipe.slug, name=recipe.name, status=status, exception=str(exception)) import_status = MigrationImport(slug=recipe.slug, name=recipe.name, status=status, exception=str(exception))

View File

@ -73,7 +73,7 @@ def test_update_mealplan(api_client: TestClient, api_routes: AppRoutes, slug_1,
existing_mealplan = existing_mealplan[0] existing_mealplan = existing_mealplan[0]
# Swap # Swap
plan_uid = existing_mealplan.get("uid") plan_uid = existing_mealplan.get("id")
existing_mealplan["planDays"][0]["meals"][0]["slug"] = slug_2 existing_mealplan["planDays"][0]["meals"][0]["slug"] = slug_2
existing_mealplan["planDays"][1]["meals"][0]["slug"] = slug_1 existing_mealplan["planDays"][1]["meals"][0]["slug"] = slug_1
@ -96,7 +96,7 @@ def test_delete_mealplan(api_client: TestClient, api_routes: AppRoutes, admin_to
existing_mealplan = json.loads(response.text) existing_mealplan = json.loads(response.text)
existing_mealplan = existing_mealplan[0] existing_mealplan = existing_mealplan[0]
plan_uid = existing_mealplan.get("uid") plan_uid = existing_mealplan.get("id")
response = api_client.delete(api_routes.meal_plans_plan_id(plan_uid), headers=admin_token) response = api_client.delete(api_routes.meal_plans_plan_id(plan_uid), headers=admin_token)
assert response.status_code == 200 assert response.status_code == 200