* fix #1144

* fix type checks

* refactor test routes package

* fix #1208

* unify test routes into module
This commit is contained in:
Hayden
2022-05-07 20:08:04 -08:00
committed by GitHub
parent 07f6446526
commit 68f7efc177
23 changed files with 189 additions and 148 deletions

View File

@@ -149,8 +149,8 @@ class RepositoryGeneric(Generic[T, D]):
if match_key is None:
match_key = self.primary_key
filter = self._filter_builder(**{match_key: match_value})
return self.session.query(self.sql_model).filter_by(**filter).one()
fltr = self._filter_builder(**{match_key: match_value})
return self.session.query(self.sql_model).filter_by(**fltr).one()
def get_one(self, value: str | int | UUID4, key: str = None, any_case=False, override_schema=None) -> T | None:
key = key or self.primary_key
@@ -210,7 +210,7 @@ class RepositoryGeneric(Generic[T, D]):
return [eff_schema.from_orm(x) for x in result]
def create(self, document: T | BaseModel) -> T:
def create(self, document: T | BaseModel | dict) -> T:
"""Creates a new database entry for the given SQL Alchemy Model.
Args:
@@ -266,8 +266,10 @@ class RepositoryGeneric(Generic[T, D]):
return self.update(match_value, entry_as_dict)
def delete(self, primary_key_value) -> D:
result = self.session.query(self.sql_model).filter_by(**{self.primary_key: primary_key_value}).one()
def delete(self, value, match_key: str | None = None) -> T:
match_key = match_key or self.primary_key
result = self.session.query(self.sql_model).filter_by(**{match_key: value}).one()
results_as_model = self.schema.from_orm(result)
try:
@@ -313,7 +315,7 @@ class RepositoryGeneric(Generic[T, D]):
for x in self.session.query(self.sql_model).filter(attribute_name == attr_match).all() # noqa: 711
]
def create_many(self, documents: list[T]) -> list[T]:
def create_many(self, documents: list[T | dict]) -> list[T]:
new_documents = []
for document in documents:
document = document if isinstance(document, dict) else document.dict()

View File

@@ -2,6 +2,8 @@ import random
import shutil
from typing import Optional
from pydantic import UUID4
from mealie.assets import users as users_assets
from mealie.schema.user.user import PrivateUser, User
@@ -30,11 +32,11 @@ class RepositoryUsers(RepositoryGeneric[PrivateUser, User]):
return new_user
def delete(self, id: str) -> User:
entry = super().delete(id)
def delete(self, value: str | UUID4, match_key: str | None = None) -> User:
entry = super().delete(value, match_key)
# Delete the user's directory
shutil.rmtree(PrivateUser.get_directory(id))
return entry
shutil.rmtree(PrivateUser.get_directory(value))
return entry # type: ignore
def get_by_username(self, username: str, limit=1) -> Optional[User]:
dbuser = self.session.query(User).filter(User.username == username).one_or_none()

View File

@@ -128,7 +128,7 @@ class PrivateUser(UserOut):
orm_mode = True
@staticmethod
def get_directory(user_id: UUID4) -> Path:
def get_directory(user_id: UUID4 | str) -> Path:
user_dir = get_app_dirs().USER_DIR / str(user_id)
user_dir.mkdir(parents=True, exist_ok=True)
return user_dir

View File

@@ -178,7 +178,7 @@ class RecipeService(BaseService):
def delete_one(self, slug) -> Recipe:
recipe = self._get_recipe(slug)
self.can_update(recipe)
data = self.repos.recipes.delete(slug)
data = self.repos.recipes.delete(recipe.id, "id")
self.delete_assets(data)
return data