mirror of
https://github.com/hay-kot/mealie.git
synced 2025-08-14 02:37:11 -07: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:
parent
8a98288248
commit
71d3db7aef
30 changed files with 183 additions and 215 deletions
|
@ -1,70 +1,107 @@
|
|||
from abc import ABC
|
||||
from functools import cached_property
|
||||
from logging import Logger
|
||||
|
||||
from fastapi import Depends
|
||||
from pydantic import UUID4
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from mealie.core.config import get_app_dirs, get_app_settings
|
||||
from mealie.core.dependencies.dependencies import get_admin_user, get_current_user
|
||||
from mealie.core.exceptions import mealie_registered_exceptions
|
||||
from mealie.core.root_logger import get_logger
|
||||
from mealie.core.settings.directories import AppDirectories
|
||||
from mealie.core.settings.settings import AppSettings
|
||||
from mealie.db.db_setup import generate_session
|
||||
from mealie.lang import local_provider
|
||||
from mealie.lang.providers import Translator
|
||||
from mealie.repos.all_repositories import AllRepositories
|
||||
from mealie.routes._base.checks import OperationChecks
|
||||
from mealie.routes._base.dependencies import SharedDependencies
|
||||
from mealie.schema.user.user import GroupInDB, PrivateUser
|
||||
|
||||
|
||||
class BasePublicController(ABC):
|
||||
class _BaseController(ABC):
|
||||
session: Session = Depends(generate_session)
|
||||
translator: Translator = Depends(local_provider)
|
||||
|
||||
_repos: AllRepositories | None
|
||||
_logger: Logger | None
|
||||
_settings: AppSettings | None
|
||||
_folders: AppDirectories | None
|
||||
|
||||
@property
|
||||
def t(self):
|
||||
return self.translator.t if self.translator else local_provider().t
|
||||
|
||||
@property
|
||||
def repos(self):
|
||||
if not self._repos:
|
||||
self._repos = AllRepositories(self.session)
|
||||
return self._repos
|
||||
|
||||
@property
|
||||
def logger(self) -> Logger:
|
||||
if not self._logger:
|
||||
self._logger = get_logger()
|
||||
return self._logger
|
||||
|
||||
@property
|
||||
def settings(self) -> AppSettings:
|
||||
if not self._settings:
|
||||
self._settings = get_app_settings()
|
||||
return self._settings
|
||||
|
||||
@property
|
||||
def folders(self) -> AppDirectories:
|
||||
if not self._folders:
|
||||
self._folders = get_app_dirs()
|
||||
return self._folders
|
||||
|
||||
class Config:
|
||||
arbitrary_types_allowed = True
|
||||
|
||||
|
||||
class BasePublicController(_BaseController):
|
||||
"""
|
||||
This is a public class for all User restricted controllers in the API.
|
||||
It includes the common SharedDependencies and some common methods used
|
||||
by all Admin controllers.
|
||||
"""
|
||||
|
||||
deps: SharedDependencies = Depends(SharedDependencies.public)
|
||||
translator: Translator = Depends(local_provider)
|
||||
|
||||
def __init__(self):
|
||||
self.t = self.translator.t if self.translator else local_provider().t
|
||||
...
|
||||
|
||||
|
||||
class BaseUserController(ABC):
|
||||
class BaseUserController(_BaseController):
|
||||
"""
|
||||
This is a base class for all User restricted controllers in the API.
|
||||
It includes the common SharedDependencies and some common methods used
|
||||
by all Admin controllers.
|
||||
"""
|
||||
|
||||
deps: SharedDependencies = Depends(SharedDependencies.user)
|
||||
user: PrivateUser = Depends(get_current_user)
|
||||
translator: Translator = Depends(local_provider)
|
||||
|
||||
def __init__(self):
|
||||
self.t = self.translator.t if self.translator else local_provider().t
|
||||
# Manual Cache
|
||||
_checks: OperationChecks
|
||||
|
||||
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.")
|
||||
|
||||
@cached_property
|
||||
def repos(self):
|
||||
return AllRepositories(self.deps.session)
|
||||
|
||||
@property
|
||||
def group_id(self) -> UUID4:
|
||||
return self.deps.acting_user.group_id
|
||||
|
||||
@property
|
||||
def user(self) -> PrivateUser:
|
||||
return self.deps.acting_user
|
||||
return self.user.group_id
|
||||
|
||||
@property
|
||||
def group(self) -> GroupInDB:
|
||||
return self.deps.repos.groups.get_one(self.group_id)
|
||||
return self.repos.groups.get_one(self.group_id)
|
||||
|
||||
@cached_property
|
||||
@property
|
||||
def checks(self) -> OperationChecks:
|
||||
return OperationChecks(self.deps.acting_user)
|
||||
if not self._checks:
|
||||
self._checks = OperationChecks(self.user)
|
||||
return self._checks
|
||||
|
||||
|
||||
class BaseAdminController(BaseUserController):
|
||||
|
@ -74,8 +111,4 @@ class BaseAdminController(BaseUserController):
|
|||
by all Admin controllers.
|
||||
"""
|
||||
|
||||
deps: SharedDependencies = Depends(SharedDependencies.admin)
|
||||
translator: Translator = Depends(local_provider)
|
||||
|
||||
def __init__(self):
|
||||
self.t = self.translator.t if self.translator else local_provider().t
|
||||
user: PrivateUser = Depends(get_admin_user)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue