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:
Hayden
2022-04-10 14:07:35 -08:00
committed by GitHub
parent db095656e1
commit 7866f0f46e
71 changed files with 4736 additions and 3642 deletions

View File

@@ -1,4 +1,4 @@
from .abc_controller import *
from .base_controllers import *
from .controller import *
from .dependencies import *
from .mixins import *

View File

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

View File

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

View File

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

View File

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