mirror of
https://github.com/mealie-recipes/mealie.git
synced 2026-02-11 02:13:12 -05:00
Feature/improve localization (#1147)
* use locale to set language header * rewrite i18n provider and drop dependency * rename file * rename CrudMixin to HttpRepo * refactor: code-cleanup * add crowdin source * remove unused translations * grab translations from dev branch * add translation support for foods, units, and labels * remove rich import
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
from .abc_controller import *
|
||||
from .base_controllers import *
|
||||
from .controller import *
|
||||
from .dependencies import *
|
||||
from .mixins import *
|
||||
|
||||
@@ -11,29 +11,26 @@ class OperationChecks:
|
||||
|
||||
user: PrivateUser
|
||||
|
||||
ForbiddenException = HTTPException(status.HTTP_403_FORBIDDEN)
|
||||
UnauthorizedException = HTTPException(status.HTTP_401_UNAUTHORIZED)
|
||||
|
||||
def __init__(self, user: PrivateUser) -> None:
|
||||
self.user = user
|
||||
|
||||
def _raise_unauthorized(self) -> None:
|
||||
raise HTTPException(status.HTTP_401_UNAUTHORIZED)
|
||||
|
||||
def _raise_forbidden(self) -> None:
|
||||
raise HTTPException(status.HTTP_403_FORBIDDEN)
|
||||
|
||||
# =========================================
|
||||
# User Permission Checks
|
||||
|
||||
def can_manage(self) -> bool:
|
||||
if not self.user.can_manage:
|
||||
self._raise_forbidden()
|
||||
raise self.ForbiddenException
|
||||
return True
|
||||
|
||||
def can_invite(self) -> bool:
|
||||
if not self.user.can_invite:
|
||||
self._raise_forbidden()
|
||||
raise self.ForbiddenException
|
||||
return True
|
||||
|
||||
def can_organize(self) -> bool:
|
||||
if not self.user.can_organize:
|
||||
self._raise_forbidden()
|
||||
raise self.ForbiddenException
|
||||
return True
|
||||
|
||||
@@ -151,8 +151,8 @@ def _allocate_routes_by_method_name(router: APIRouter, url: str, function_member
|
||||
responses = None
|
||||
kwargs = {}
|
||||
status_code = 200
|
||||
return_types_func = getattr(func, RETURN_TYPES_FUNC_KEY, None)
|
||||
if return_types_func:
|
||||
|
||||
if return_types_func := getattr(func, RETURN_TYPES_FUNC_KEY, None):
|
||||
response_model, status_code, responses, kwargs = return_types_func()
|
||||
|
||||
api_resource = router.api_route(
|
||||
|
||||
@@ -10,40 +10,46 @@ 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 AbstractLocaleProvider, get_locale_provider
|
||||
from mealie.lang import Translator, local_provider
|
||||
from mealie.repos import AllRepositories
|
||||
from mealie.schema.user.user import PrivateUser
|
||||
|
||||
|
||||
class SharedDependencies:
|
||||
session: Session
|
||||
t: AbstractLocaleProvider
|
||||
t: Translator
|
||||
acting_user: PrivateUser | None
|
||||
|
||||
def __init__(self, session: Session, acting_user: PrivateUser | None) -> None:
|
||||
self.t = get_locale_provider()
|
||||
def __init__(self, session: Session, acting_user: PrivateUser | None, provider: Translator | None = None) -> None:
|
||||
self.t = provider or local_provider()
|
||||
self.session = session
|
||||
self.acting_user = acting_user
|
||||
|
||||
@classmethod
|
||||
def public(cls, session: Session = Depends(generate_session)) -> "SharedDependencies":
|
||||
return cls(session, None)
|
||||
def public(
|
||||
cls,
|
||||
session: Session = Depends(generate_session),
|
||||
translator: Translator = Depends(local_provider),
|
||||
) -> "SharedDependencies":
|
||||
return cls(session, None, translator)
|
||||
|
||||
@classmethod
|
||||
def user(
|
||||
cls,
|
||||
session: Session = Depends(generate_session),
|
||||
user: PrivateUser = Depends(get_current_user),
|
||||
translator: Translator = Depends(local_provider),
|
||||
) -> "SharedDependencies":
|
||||
return cls(session, user)
|
||||
return cls(session, user, translator)
|
||||
|
||||
@classmethod
|
||||
def admin(
|
||||
cls,
|
||||
session: Session = Depends(generate_session),
|
||||
admin: PrivateUser = Depends(get_admin_user),
|
||||
translator: Translator = Depends(local_provider),
|
||||
) -> "SharedDependencies":
|
||||
return cls(session, admin)
|
||||
return cls(session, admin, translator)
|
||||
|
||||
@cached_property
|
||||
def logger(self) -> Logger:
|
||||
|
||||
@@ -13,15 +13,15 @@ R = TypeVar("R", bound=BaseModel)
|
||||
U = TypeVar("U", bound=BaseModel)
|
||||
|
||||
|
||||
class CrudMixins(Generic[C, R, U]):
|
||||
class HttpRepo(Generic[C, R, U]):
|
||||
"""
|
||||
The CrudMixins[C, R, U] class is a mixin class that provides a common set of methods for CRUD operations.
|
||||
The HttpRepo[C, R, U] class is a mixin class that provides a common set of methods for CRUD operations.
|
||||
This class is inteded to be used in a composition pattern where a class has a mixin property. For example:
|
||||
|
||||
```
|
||||
class MyClass:
|
||||
def __init(self repo, logger):
|
||||
self.mixins = CrudMixins(repo, logger)
|
||||
def __init__(self, repo, logger):
|
||||
self.mixins = HttpRepo(repo, logger)
|
||||
```
|
||||
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user