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:
Hayden
2022-08-11 20:13:22 -08:00
committed by GitHub
parent 8a98288248
commit 71d3db7aef
30 changed files with 183 additions and 215 deletions

View File

@@ -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),

View File

@@ -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)

View File

@@ -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,
)

View File

@@ -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

View File

@@ -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)

View File

@@ -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,
)

View File

@@ -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

View File

@@ -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)):

View File

@@ -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,

View File

@@ -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",

View File

@@ -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)):