mirror of
https://github.com/mealie-recipes/mealie.git
synced 2026-02-04 15:03:10 -05:00
refactor: move dependencies to controllers (#1550)
* Moves dependencies directly to controllers * Reduces use of @cached_property - (I have a suspicion that this is a factor in memory usage) * reduce duplicate ways to access the same property on a controller.
This commit is contained in:
@@ -24,11 +24,11 @@ class GroupCookbookController(BaseUserController):
|
||||
|
||||
@cached_property
|
||||
def repo(self):
|
||||
return self.deps.repos.cookbooks.by_group(self.group_id)
|
||||
return self.repos.cookbooks.by_group(self.group_id)
|
||||
|
||||
def registered_exceptions(self, ex: type[Exception]) -> str:
|
||||
registered = {
|
||||
**mealie_registered_exceptions(self.deps.t),
|
||||
**mealie_registered_exceptions(self.translator),
|
||||
}
|
||||
return registered.get(ex, "An unexpected error occurred.")
|
||||
|
||||
@@ -36,7 +36,7 @@ class GroupCookbookController(BaseUserController):
|
||||
def mixins(self):
|
||||
return HttpRepo[CreateCookBook, ReadCookBook, UpdateCookBook](
|
||||
self.repo,
|
||||
self.deps.logger,
|
||||
self.logger,
|
||||
self.registered_exceptions,
|
||||
)
|
||||
|
||||
@@ -57,7 +57,7 @@ class GroupCookbookController(BaseUserController):
|
||||
|
||||
if val:
|
||||
self.event_bus.dispatch(
|
||||
self.deps.acting_user.group_id,
|
||||
self.user.group_id,
|
||||
EventTypes.cookbook_created,
|
||||
msg=self.t("notifications.generic-created", name=val.name),
|
||||
event_source=EventSource(event_type="create", item_type="cookbook", item_id=val.id, slug=val.slug),
|
||||
@@ -99,7 +99,7 @@ class GroupCookbookController(BaseUserController):
|
||||
val = self.mixins.update_one(data, item_id) # type: ignore
|
||||
if val:
|
||||
self.event_bus.dispatch(
|
||||
self.deps.acting_user.group_id,
|
||||
self.user.group_id,
|
||||
EventTypes.cookbook_updated,
|
||||
msg=self.t("notifications.generic-updated", name=val.name),
|
||||
event_source=EventSource(event_type="update", item_type="cookbook", item_id=val.id, slug=val.slug),
|
||||
@@ -112,7 +112,7 @@ class GroupCookbookController(BaseUserController):
|
||||
val = self.mixins.delete_one(item_id)
|
||||
if val:
|
||||
self.event_bus.dispatch(
|
||||
self.deps.acting_user.group_id,
|
||||
self.user.group_id,
|
||||
EventTypes.cookbook_deleted,
|
||||
msg=self.t("notifications.generic-deleted", name=val.name),
|
||||
event_source=EventSource(event_type="delete", item_type="cookbook", item_id=val.id, slug=val.slug),
|
||||
|
||||
@@ -30,17 +30,17 @@ class GroupEventsNotifierController(BaseUserController):
|
||||
|
||||
@cached_property
|
||||
def repo(self):
|
||||
if not self.deps.acting_user:
|
||||
if not self.user:
|
||||
raise Exception("No user is logged in.")
|
||||
|
||||
return self.deps.repos.group_event_notifier.by_group(self.deps.acting_user.group_id)
|
||||
return self.repos.group_event_notifier.by_group(self.user.group_id)
|
||||
|
||||
# =======================================================================
|
||||
# CRUD Operations
|
||||
|
||||
@property
|
||||
def mixins(self) -> HttpRepo:
|
||||
return HttpRepo(self.repo, self.deps.logger, self.registered_exceptions, "An unexpected error occurred.")
|
||||
return HttpRepo(self.repo, self.logger, self.registered_exceptions, "An unexpected error occurred.")
|
||||
|
||||
@router.get("", response_model=GroupEventPagination)
|
||||
def get_all(self, q: PaginationQuery = Depends(PaginationQuery)):
|
||||
@@ -54,7 +54,7 @@ class GroupEventsNotifierController(BaseUserController):
|
||||
|
||||
@router.post("", response_model=GroupEventNotifierOut, status_code=201)
|
||||
def create_one(self, data: GroupEventNotifierCreate):
|
||||
save_data = cast(data, GroupEventNotifierSave, group_id=self.deps.acting_user.group_id)
|
||||
save_data = cast(data, GroupEventNotifierSave, group_id=self.user.group_id)
|
||||
return self.mixins.create_one(save_data)
|
||||
|
||||
@router.get("/{item_id}", response_model=GroupEventNotifierOut)
|
||||
|
||||
@@ -17,18 +17,18 @@ router = APIRouter(prefix="/groups/reports", tags=["Groups: Reports"])
|
||||
class GroupReportsController(BaseUserController):
|
||||
@cached_property
|
||||
def repo(self):
|
||||
return self.deps.repos.group_reports.by_group(self.deps.acting_user.group_id)
|
||||
return self.repos.group_reports.by_group(self.user.group_id)
|
||||
|
||||
def registered_exceptions(self, ex: type[Exception]) -> str:
|
||||
return {
|
||||
**mealie_registered_exceptions(self.deps.t),
|
||||
**mealie_registered_exceptions(self.translator),
|
||||
}.get(ex, "An unexpected error occurred.")
|
||||
|
||||
@cached_property
|
||||
def mixins(self):
|
||||
return HttpRepo[ReportCreate, ReportOut, ReportCreate](
|
||||
self.repo,
|
||||
self.deps.logger,
|
||||
self.logger,
|
||||
self.registered_exceptions,
|
||||
)
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ class GroupInvitationsController(BaseUserController):
|
||||
|
||||
@router.post("", response_model=ReadInviteToken, status_code=status.HTTP_201_CREATED)
|
||||
def create_invite_token(self, uses: CreateInviteToken):
|
||||
if not self.deps.acting_user.can_invite:
|
||||
if not self.user.can_invite:
|
||||
raise HTTPException(status.HTTP_403_FORBIDDEN, detail="User is not allowed to create invite tokens")
|
||||
|
||||
token = SaveInviteToken(uses_left=uses.uses, group_id=self.group_id, token=url_safe_token())
|
||||
@@ -31,7 +31,7 @@ class GroupInvitationsController(BaseUserController):
|
||||
@router.post("/email", response_model=EmailInitationResponse)
|
||||
def email_invitation(self, invite: EmailInvitation):
|
||||
email_service = EmailService()
|
||||
url = f"{self.deps.settings.BASE_URL}/register?token={invite.token}"
|
||||
url = f"{self.settings.BASE_URL}/register?token={invite.token}"
|
||||
|
||||
success = False
|
||||
error = None
|
||||
|
||||
@@ -25,17 +25,17 @@ router = APIRouter(prefix="/groups/labels", tags=["Group: Multi Purpose Labels"]
|
||||
class MultiPurposeLabelsController(BaseUserController):
|
||||
@cached_property
|
||||
def repo(self):
|
||||
if not self.deps.acting_user:
|
||||
if not self.user:
|
||||
raise Exception("No user is logged in.")
|
||||
|
||||
return self.deps.repos.group_multi_purpose_labels.by_group(self.deps.acting_user.group_id)
|
||||
return self.repos.group_multi_purpose_labels.by_group(self.user.group_id)
|
||||
|
||||
# =======================================================================
|
||||
# CRUD Operations
|
||||
|
||||
@property
|
||||
def mixins(self) -> HttpRepo:
|
||||
return HttpRepo(self.repo, self.deps.logger, self.registered_exceptions, "An unexpected error occurred.")
|
||||
return HttpRepo(self.repo, self.logger, self.registered_exceptions, "An unexpected error occurred.")
|
||||
|
||||
@router.get("", response_model=MultiPurposeLabelPagination)
|
||||
def get_all(self, q: PaginationQuery = Depends(PaginationQuery)):
|
||||
@@ -49,7 +49,7 @@ class MultiPurposeLabelsController(BaseUserController):
|
||||
|
||||
@router.post("", response_model=MultiPurposeLabelOut)
|
||||
def create_one(self, data: MultiPurposeLabelCreate):
|
||||
save_data = cast(data, MultiPurposeLabelSave, group_id=self.deps.acting_user.group_id)
|
||||
save_data = cast(data, MultiPurposeLabelSave, group_id=self.user.group_id)
|
||||
return self.mixins.create_one(save_data)
|
||||
|
||||
@router.get("/{item_id}", response_model=MultiPurposeLabelOut)
|
||||
|
||||
@@ -27,7 +27,7 @@ class GroupMealplanController(BaseUserController):
|
||||
|
||||
def registered_exceptions(self, ex: type[Exception]) -> str:
|
||||
registered = {
|
||||
**mealie_registered_exceptions(self.deps.t),
|
||||
**mealie_registered_exceptions(self.translator),
|
||||
}
|
||||
return registered.get(ex, "An unexpected error occurred.")
|
||||
|
||||
@@ -35,7 +35,7 @@ class GroupMealplanController(BaseUserController):
|
||||
def mixins(self):
|
||||
return HttpRepo[CreatePlanEntry, ReadPlanEntry, UpdatePlanEntry](
|
||||
self.repo,
|
||||
self.deps.logger,
|
||||
self.logger,
|
||||
self.registered_exceptions,
|
||||
)
|
||||
|
||||
|
||||
@@ -12,15 +12,15 @@ router = UserAPIRouter(prefix="/groups/categories", tags=["Groups: Mealplan Cate
|
||||
class GroupMealplanConfigController(BaseUserController):
|
||||
@property
|
||||
def mixins(self):
|
||||
return HttpRepo[GroupInDB, GroupInDB, GroupInDB](self.repos.groups, self.deps.logger)
|
||||
return HttpRepo[GroupInDB, GroupInDB, GroupInDB](self.repos.groups, self.logger)
|
||||
|
||||
@router.get("", response_model=list[CategoryBase])
|
||||
def get_mealplan_categories(self):
|
||||
data = self.mixins.get_one(self.deps.acting_user.group_id)
|
||||
data = self.mixins.get_one(self.user.group_id)
|
||||
return data.categories
|
||||
|
||||
@router.put("", response_model=list[CategoryBase])
|
||||
def update_mealplan_categories(self, new_categories: list[CategoryBase]):
|
||||
data = self.mixins.get_one(self.deps.acting_user.group_id)
|
||||
data = self.mixins.get_one(self.user.group_id)
|
||||
data.categories = new_categories
|
||||
return self.mixins.update_one(data, data.id).categories
|
||||
|
||||
@@ -22,7 +22,7 @@ class GroupMealplanConfigController(BaseUserController):
|
||||
|
||||
@cached_property
|
||||
def mixins(self):
|
||||
return HttpRepo[PlanRulesCreate, PlanRulesOut, PlanRulesOut](self.repo, self.deps.logger)
|
||||
return HttpRepo[PlanRulesCreate, PlanRulesOut, PlanRulesOut](self.repo, self.logger)
|
||||
|
||||
@router.get("", response_model=PlanRulesPagination)
|
||||
def get_all(self, q: PaginationQuery = Depends(PaginationQuery)):
|
||||
|
||||
@@ -37,7 +37,7 @@ class GroupMigrationController(BaseUserController):
|
||||
args = {
|
||||
"archive": temp_path,
|
||||
"db": self.repos,
|
||||
"session": self.deps.session,
|
||||
"session": self.session,
|
||||
"user_id": self.user.id,
|
||||
"group_id": self.group_id,
|
||||
"add_migration_tag": add_migration_tag,
|
||||
|
||||
@@ -38,13 +38,13 @@ class ShoppingListItemController(BaseUserController):
|
||||
|
||||
@cached_property
|
||||
def repo(self):
|
||||
return self.deps.repos.group_shopping_list_item
|
||||
return self.repos.group_shopping_list_item
|
||||
|
||||
@cached_property
|
||||
def mixins(self):
|
||||
return HttpRepo[ShoppingListItemCreate, ShoppingListItemOut, ShoppingListItemCreate](
|
||||
self.repo,
|
||||
self.deps.logger,
|
||||
self.logger,
|
||||
)
|
||||
|
||||
@item_router.put("", response_model=list[ShoppingListItemOut])
|
||||
@@ -80,7 +80,7 @@ class ShoppingListItemController(BaseUserController):
|
||||
|
||||
if shopping_list_item:
|
||||
self.event_bus.dispatch(
|
||||
self.deps.acting_user.group_id,
|
||||
self.user.group_id,
|
||||
EventTypes.shopping_list_updated,
|
||||
msg=self.t(
|
||||
"notifications.generic-created",
|
||||
@@ -106,7 +106,7 @@ class ShoppingListItemController(BaseUserController):
|
||||
|
||||
if shopping_list_item:
|
||||
self.event_bus.dispatch(
|
||||
self.deps.acting_user.group_id,
|
||||
self.user.group_id,
|
||||
EventTypes.shopping_list_updated,
|
||||
msg=self.t(
|
||||
"notifications.generic-updated",
|
||||
@@ -128,7 +128,7 @@ class ShoppingListItemController(BaseUserController):
|
||||
|
||||
if shopping_list_item:
|
||||
self.event_bus.dispatch(
|
||||
self.deps.acting_user.group_id,
|
||||
self.user.group_id,
|
||||
EventTypes.shopping_list_updated,
|
||||
msg=self.t(
|
||||
"notifications.generic-deleted",
|
||||
@@ -158,14 +158,14 @@ class ShoppingListController(BaseUserController):
|
||||
|
||||
@cached_property
|
||||
def repo(self):
|
||||
return self.deps.repos.group_shopping_lists.by_group(self.deps.acting_user.group_id)
|
||||
return self.repos.group_shopping_lists.by_group(self.user.group_id)
|
||||
|
||||
# =======================================================================
|
||||
# CRUD Operations
|
||||
|
||||
@cached_property
|
||||
def mixins(self) -> HttpRepo[ShoppingListCreate, ShoppingListOut, ShoppingListSave]:
|
||||
return HttpRepo(self.repo, self.deps.logger, self.registered_exceptions, "An unexpected error occurred.")
|
||||
return HttpRepo(self.repo, self.logger, self.registered_exceptions, "An unexpected error occurred.")
|
||||
|
||||
@router.get("", response_model=ShoppingListPagination)
|
||||
def get_all(self, q: PaginationQuery = Depends(PaginationQuery)):
|
||||
@@ -179,12 +179,12 @@ class ShoppingListController(BaseUserController):
|
||||
|
||||
@router.post("", response_model=ShoppingListOut, status_code=201)
|
||||
def create_one(self, data: ShoppingListCreate):
|
||||
save_data = cast(data, ShoppingListSave, group_id=self.deps.acting_user.group_id)
|
||||
save_data = cast(data, ShoppingListSave, group_id=self.user.group_id)
|
||||
val = self.mixins.create_one(save_data)
|
||||
|
||||
if val:
|
||||
self.event_bus.dispatch(
|
||||
self.deps.acting_user.group_id,
|
||||
self.user.group_id,
|
||||
EventTypes.shopping_list_created,
|
||||
msg=self.t("notifications.generic-created", name=val.name),
|
||||
event_source=EventSource(
|
||||
@@ -205,7 +205,7 @@ class ShoppingListController(BaseUserController):
|
||||
data = self.mixins.update_one(data, item_id) # type: ignore
|
||||
if data:
|
||||
self.event_bus.dispatch(
|
||||
self.deps.acting_user.group_id,
|
||||
self.user.group_id,
|
||||
EventTypes.shopping_list_updated,
|
||||
msg=self.t("notifications.generic-updated", name=data.name),
|
||||
event_source=EventSource(
|
||||
@@ -221,7 +221,7 @@ class ShoppingListController(BaseUserController):
|
||||
data = self.mixins.delete_one(item_id) # type: ignore
|
||||
if data:
|
||||
self.event_bus.dispatch(
|
||||
self.deps.acting_user.group_id,
|
||||
self.user.group_id,
|
||||
EventTypes.shopping_list_deleted,
|
||||
msg=self.t("notifications.generic-deleted", name=data.name),
|
||||
event_source=EventSource(
|
||||
@@ -240,7 +240,7 @@ class ShoppingListController(BaseUserController):
|
||||
shopping_list = self.service.add_recipe_ingredients_to_list(item_id, recipe_id)
|
||||
if shopping_list:
|
||||
self.event_bus.dispatch(
|
||||
self.deps.acting_user.group_id,
|
||||
self.user.group_id,
|
||||
EventTypes.shopping_list_updated,
|
||||
msg=self.t(
|
||||
"notifications.generic-updated",
|
||||
@@ -260,7 +260,7 @@ class ShoppingListController(BaseUserController):
|
||||
shopping_list = self.service.remove_recipe_ingredients_from_list(item_id, recipe_id)
|
||||
if shopping_list:
|
||||
self.event_bus.dispatch(
|
||||
self.deps.acting_user.group_id,
|
||||
self.user.group_id,
|
||||
EventTypes.shopping_list_updated,
|
||||
msg=self.t(
|
||||
"notifications.generic-updated",
|
||||
|
||||
@@ -21,7 +21,7 @@ class ReadWebhookController(BaseUserController):
|
||||
|
||||
@property
|
||||
def mixins(self) -> HttpRepo:
|
||||
return HttpRepo[CreateWebhook, SaveWebhook, CreateWebhook](self.repo, self.deps.logger)
|
||||
return HttpRepo[CreateWebhook, SaveWebhook, CreateWebhook](self.repo, self.logger)
|
||||
|
||||
@router.get("", response_model=WebhookPagination)
|
||||
def get_all(self, q: PaginationQuery = Depends(PaginationQuery)):
|
||||
|
||||
Reference in New Issue
Block a user