mirror of
https://github.com/mealie-recipes/mealie.git
synced 2026-02-13 11:23:12 -05:00
Refactor/conver to controllers (#923)
* add dependency injection for get_repositories * convert events api to controller * update generic typing * add abstract controllers * update test naming * migrate admin services to controllers * add additional admin route tests * remove print * add public shared dependencies * add types * fix typo * add static variables for recipe json keys * add coverage gutters config * update controller routers * add generic success response * add category/tag/tool tests * add token refresh test * add coverage utilities * covert comments to controller * add todo * add helper properties * delete old service * update test notes * add unit test for pretty_stats * remove dead code from post_webhooks * update group routes to use controllers * add additional group test coverage * abstract common permission checks * convert ingredient parser to controller * update recipe crud to use controller * remove dead-code * add class lifespan tracker for debugging * convert bulk export to controller * migrate tools router to controller * update recipe share to controller * move customer router to _base * ignore prints in flake8 * convert units and foods to new controllers * migrate user routes to controllers * centralize error handling * fix invalid ref * reorder fields * update routers to share common handling * update tests * remove prints * fix cookbooks delete * fix cookbook get * add controller for mealplanner * cover report routes to controller * remove __future__ imports * remove dead code * remove all base_http children and remove dead code
This commit is contained in:
@@ -1,33 +1,29 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
from mealie.core.root_logger import get_logger
|
||||
from mealie.repos.repository_factory import AllRepositories
|
||||
from mealie.schema.group.group_exports import GroupDataExport
|
||||
from mealie.schema.recipe import CategoryBase, Recipe
|
||||
from mealie.schema.recipe import CategoryBase
|
||||
from mealie.schema.recipe.recipe_category import TagBase
|
||||
from mealie.services._base_http_service.http_services import UserHttpService
|
||||
from mealie.services.events import create_recipe_event
|
||||
from mealie.schema.user.user import GroupInDB, PrivateUser
|
||||
from mealie.services._base_service import BaseService
|
||||
from mealie.services.exporter import Exporter, RecipeExporter
|
||||
|
||||
logger = get_logger(__name__)
|
||||
|
||||
|
||||
class RecipeBulkActions(UserHttpService[int, Recipe]):
|
||||
event_func = create_recipe_event
|
||||
_restrict_by_group = True
|
||||
|
||||
def populate_item(self, _: int) -> Recipe:
|
||||
return
|
||||
class RecipeBulkActionsService(BaseService):
|
||||
def __init__(self, repos: AllRepositories, user: PrivateUser, group: GroupInDB):
|
||||
self.repos = repos
|
||||
self.user = user
|
||||
self.group = group
|
||||
super().__init__()
|
||||
|
||||
def export_recipes(self, temp_path: Path, slugs: list[str]) -> None:
|
||||
recipe_exporter = RecipeExporter(self.db, self.group_id, slugs)
|
||||
exporter = Exporter(self.group_id, temp_path, [recipe_exporter])
|
||||
recipe_exporter = RecipeExporter(self.repos, self.group.id, slugs)
|
||||
exporter = Exporter(self.group.id, temp_path, [recipe_exporter])
|
||||
|
||||
exporter.run(self.db)
|
||||
exporter.run(self.repos)
|
||||
|
||||
def get_exports(self) -> list[GroupDataExport]:
|
||||
return self.db.group_exports.multi_query({"group_id": self.group_id})
|
||||
return self.repos.group_exports.multi_query({"group_id": self.group.id})
|
||||
|
||||
def purge_exports(self) -> int:
|
||||
all_exports = self.get_exports()
|
||||
@@ -36,13 +32,13 @@ class RecipeBulkActions(UserHttpService[int, Recipe]):
|
||||
for export in all_exports:
|
||||
try:
|
||||
Path(export.path).unlink(missing_ok=True)
|
||||
self.db.group_exports.delete(export.id)
|
||||
self.repos.group_exports.delete(export.id)
|
||||
exports_deleted += 1
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to delete export {export.id}")
|
||||
logger.error(e)
|
||||
self.logger.error(f"Failed to delete export {export.id}")
|
||||
self.logger.error(e)
|
||||
|
||||
group = self.db.groups.get_one(self.group_id)
|
||||
group = self.repos.groups.get_one(self.group.id)
|
||||
|
||||
for match in group.directory.glob("**/export/*zip"):
|
||||
if match.is_file():
|
||||
@@ -53,38 +49,38 @@ class RecipeBulkActions(UserHttpService[int, Recipe]):
|
||||
|
||||
def assign_tags(self, recipes: list[str], tags: list[TagBase]) -> None:
|
||||
for slug in recipes:
|
||||
recipe = self.db.recipes.get_one(slug)
|
||||
recipe = self.repos.recipes.get_one(slug)
|
||||
|
||||
if recipe is None:
|
||||
logger.error(f"Failed to tag recipe {slug}, no recipe found")
|
||||
self.logger.error(f"Failed to tag recipe {slug}, no recipe found")
|
||||
|
||||
recipe.tags += tags
|
||||
|
||||
try:
|
||||
self.db.recipes.update(slug, recipe)
|
||||
self.repos.recipes.update(slug, recipe)
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to tag recipe {slug}")
|
||||
logger.error(e)
|
||||
self.logger.error(f"Failed to tag recipe {slug}")
|
||||
self.logger.error(e)
|
||||
|
||||
def assign_categories(self, recipes: list[str], categories: list[CategoryBase]) -> None:
|
||||
for slug in recipes:
|
||||
recipe = self.db.recipes.get_one(slug)
|
||||
recipe = self.repos.recipes.get_one(slug)
|
||||
|
||||
if recipe is None:
|
||||
logger.error(f"Failed to categorize recipe {slug}, no recipe found")
|
||||
self.logger.error(f"Failed to categorize recipe {slug}, no recipe found")
|
||||
|
||||
recipe.recipe_category += categories
|
||||
|
||||
try:
|
||||
self.db.recipes.update(slug, recipe)
|
||||
self.repos.recipes.update(slug, recipe)
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to categorize recipe {slug}")
|
||||
logger.error(e)
|
||||
self.logger.error(f"Failed to categorize recipe {slug}")
|
||||
self.logger.error(e)
|
||||
|
||||
def delete_recipes(self, recipes: list[str]) -> None:
|
||||
for slug in recipes:
|
||||
try:
|
||||
self.db.recipes.delete(slug)
|
||||
self.repos.recipes.delete(slug)
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to delete recipe {slug}")
|
||||
logger.error(e)
|
||||
self.logger.error(f"Failed to delete recipe {slug}")
|
||||
self.logger.error(e)
|
||||
|
||||
Reference in New Issue
Block a user