refactor(backend): ♻️ move router dependencies to mealie.core.dependencies module

This commit is contained in:
hay-kot 2021-08-28 15:36:46 -08:00
parent e1fb306a92
commit 985ad8017d
25 changed files with 81 additions and 31 deletions

View File

@ -0,0 +1,2 @@
from .dependencies import *
from .grouped import *

View File

@ -0,0 +1,48 @@
from fastapi import BackgroundTasks, Depends
from sqlalchemy.orm.session import Session
from .dependencies import generate_session, get_current_user, is_logged_in
class ReadDeps:
"""
ReadDeps contains the common dependencies for all read operations through the API.
Note: The user object is used to definer what assets the user has access to.
Args:
background_tasks: BackgroundTasks
session: Session
user: bool
"""
def __init__(
self,
background_tasks: BackgroundTasks,
session: Session = Depends(generate_session),
user=Depends(is_logged_in),
):
self.session = session
self.background_tasks = background_tasks
self.user = user
class WriteDeps:
"""
WriteDeps contains the common dependencies for all read operations through the API.
Note: The user must be logged in or the route will return a 401 error.
Args:
background_tasks: BackgroundTasks
session: Session
user: bool
"""
def __init__(
self,
background_tasks: BackgroundTasks,
session: Session = Depends(generate_session),
user=Depends(get_current_user),
):
self.session = session
self.background_tasks = background_tasks
self.user = user

View File

@ -4,9 +4,9 @@ from fastapi.security import OAuth2PasswordRequestForm
from sqlalchemy.orm.session import Session
from mealie.core import security
from mealie.core.dependencies import get_current_user
from mealie.core.security import authenticate_user
from mealie.db.db_setup import generate_session
from mealie.routes.deps import get_current_user
from mealie.routes.routers import UserAPIRouter
from mealie.schema.user import UserInDB
from mealie.services.events import create_user_event

View File

@ -3,7 +3,7 @@ from sqlalchemy.orm.session import Session
from mealie.db.database import db
from mealie.db.db_setup import generate_session
from mealie.routes.deps import is_logged_in
from mealie.core.dependencies import is_logged_in
from mealie.routes.routers import AdminAPIRouter, UserAPIRouter
from mealie.schema.recipe import CategoryIn, RecipeCategoryResponse

View File

@ -3,7 +3,7 @@ from sqlalchemy.orm.session import Session
from mealie.db.database import db
from mealie.db.db_setup import generate_session
from mealie.routes.deps import get_current_user
from mealie.core.dependencies import get_current_user
from mealie.routes.routers import AdminAPIRouter, UserAPIRouter
from mealie.schema.user import GroupBase, GroupInDB, UpdateGroup, UserInDB
from mealie.services.events import create_group_event

View File

@ -4,7 +4,7 @@ from starlette.responses import FileResponse
from mealie.db.database import db
from mealie.db.db_setup import generate_session
from mealie.routes.deps import get_current_user
from mealie.core.dependencies import get_current_user
from mealie.routes.routers import UserAPIRouter
from mealie.schema.meal_plan import MealPlanIn, MealPlanOut
from mealie.schema.user import GroupInDB, UserInDB

View File

@ -4,7 +4,7 @@ from sqlalchemy.orm.session import Session
from mealie.core.root_logger import get_logger
from mealie.db.database import db
from mealie.db.db_setup import generate_session
from mealie.routes.deps import get_current_user
from mealie.core.dependencies import get_current_user
from mealie.routes.routers import UserAPIRouter
from mealie.schema.meal_plan import ListItem, MealPlanOut, ShoppingListIn, ShoppingListOut
from mealie.schema.recipe import Recipe

View File

@ -5,7 +5,7 @@ from sqlalchemy.orm.session import Session
from mealie.db.database import db
from mealie.db.db_setup import generate_session
from mealie.routes.deps import get_current_user
from mealie.core.dependencies import get_current_user
from mealie.routes.routers import UserAPIRouter
from mealie.schema.recipe import CommentOut, CreateComment, SaveComment
from mealie.schema.user import UserInDB

View File

@ -12,7 +12,7 @@ from mealie.core.config import settings
from mealie.core.root_logger import get_logger
from mealie.db.database import db
from mealie.db.db_setup import generate_session
from mealie.routes.deps import get_current_user, temporary_zip_path
from mealie.core.dependencies import get_current_user, temporary_zip_path
from mealie.routes.routers import UserAPIRouter
from mealie.schema.recipe import CreateRecipeByURL, Recipe, RecipeImageTypes
from mealie.schema.recipe.recipe import CreateRecipe

View File

@ -2,7 +2,7 @@ from typing import List, Optional
from fastapi import APIRouter, Depends
from mealie.routes.deps import get_admin_user, get_current_user
from mealie.core.dependencies import get_admin_user, get_current_user
class AdminAPIRouter(APIRouter):

View File

@ -3,7 +3,7 @@ from sqlalchemy.orm.session import Session
from mealie.db.database import db
from mealie.db.db_setup import generate_session
from mealie.routes.deps import get_current_user
from mealie.core.dependencies import get_current_user
from mealie.routes.routers import UserAPIRouter
from mealie.schema.meal_plan import ShoppingListIn, ShoppingListOut
from mealie.schema.user import UserInDB

View File

@ -3,7 +3,7 @@ from sqlalchemy.orm.session import Session
from mealie.db.database import db
from mealie.db.db_setup import generate_session
from mealie.routes.deps import get_current_user
from mealie.core.dependencies import get_current_user
from mealie.routes.routers import AdminAPIRouter
from mealie.schema.admin import SiteSettings
from mealie.schema.user import GroupInDB, UserInDB

View File

@ -3,7 +3,7 @@ from sqlalchemy.orm.session import Session
from mealie.db.database import db
from mealie.db.db_setup import generate_session
from mealie.routes.deps import is_logged_in
from mealie.core.dependencies import is_logged_in
from mealie.routes.routers import AdminAPIRouter, UserAPIRouter
from mealie.schema.recipe import RecipeTagResponse, TagIn

View File

@ -7,7 +7,7 @@ from sqlalchemy.orm.session import Session
from mealie.core.security import create_access_token
from mealie.db.database import db
from mealie.db.db_setup import generate_session
from mealie.routes.deps import get_current_user
from mealie.core.dependencies import get_current_user
from mealie.routes.routers import UserAPIRouter
from mealie.schema.user import CreateToken, LoingLiveTokenIn, LongLiveTokenInDB, UserInDB

View File

@ -5,7 +5,7 @@ from mealie.core import security
from mealie.core.security import get_password_hash
from mealie.db.database import db
from mealie.db.db_setup import generate_session
from mealie.routes.deps import get_current_user
from mealie.core.dependencies import get_current_user
from mealie.routes.routers import AdminAPIRouter, UserAPIRouter
from mealie.routes.users._helpers import assert_user_change_allowed
from mealie.schema.user import UserBase, UserIn, UserInDB, UserOut

View File

@ -3,7 +3,7 @@ from sqlalchemy.orm.session import Session
from mealie.db.database import db
from mealie.db.db_setup import generate_session
from mealie.routes.deps import get_current_user
from mealie.core.dependencies import get_current_user
from mealie.routes.routers import UserAPIRouter
from mealie.routes.users._helpers import assert_user_change_allowed
from mealie.schema.user import UserFavorites, UserInDB

View File

@ -5,7 +5,7 @@ from fastapi.responses import FileResponse
from fastapi.routing import APIRouter
from mealie.core.config import app_dirs
from mealie.routes.deps import get_current_user
from mealie.core.dependencies import get_current_user
from mealie.routes.routers import UserAPIRouter
from mealie.routes.users._helpers import assert_user_change_allowed
from mealie.schema.user import UserInDB

View File

@ -5,7 +5,7 @@ from mealie.core.config import settings
from mealie.core.security import get_password_hash, verify_password
from mealie.db.database import db
from mealie.db.db_setup import generate_session
from mealie.routes.deps import get_current_user
from mealie.core.dependencies import get_current_user
from mealie.routes.routers import UserAPIRouter
from mealie.routes.users._helpers import assert_user_change_allowed
from mealie.schema.user import ChangePassword, UserInDB

View File

@ -6,7 +6,7 @@ from sqlalchemy.orm.session import Session
from mealie.core.security import get_password_hash
from mealie.db.database import db
from mealie.db.db_setup import generate_session
from mealie.routes.deps import get_admin_user
from mealie.core.dependencies import get_admin_user
from mealie.routes.routers import AdminAPIRouter
from mealie.schema.user import SignUpIn, SignUpOut, SignUpToken, UserIn, UserInDB
from mealie.services.events import create_user_event

View File

@ -4,7 +4,7 @@ from typing import Optional
from fastapi import APIRouter, Depends, HTTPException, status
from starlette.responses import FileResponse
from mealie.routes.deps import validate_file_token
from mealie.core.dependencies import validate_file_token
router = APIRouter(prefix="/api/utils", tags=["Utils"], include_in_schema=True)

View File

@ -8,7 +8,7 @@ from sqlalchemy.orm.session import Session
from mealie.core.root_logger import get_logger
from mealie.db.database import db
from mealie.db.db_setup import SessionLocal, generate_session
from mealie.routes.deps import is_logged_in
from mealie.core.dependencies import is_logged_in
from mealie.schema.recipe import RecipeSummary
logger = get_logger()

View File

@ -5,7 +5,7 @@ from pydantic import BaseModel
from sqlalchemy.orm.session import Session
from mealie.db.db_setup import generate_session
from mealie.routes.deps import get_current_user, is_logged_in
from mealie.core.dependencies import get_current_user, is_logged_in
class CommonDeps(BaseModel):
@ -17,7 +17,7 @@ class CommonDeps(BaseModel):
arbitrary_types_allowed = True
def _read_deps(
def read_deps(
background_tasks: BackgroundTasks,
session: Session = Depends(generate_session),
current_user=Depends(is_logged_in),
@ -29,7 +29,7 @@ def _read_deps(
)
def _write_deps(
def write_deps(
background_tasks: BackgroundTasks,
session: Session = Depends(generate_session),
current_user=Depends(get_current_user),

View File

@ -3,6 +3,8 @@ from sqlalchemy.exc import IntegrityError
from sqlalchemy.orm.session import Session
from mealie.core.config import get_settings
from mealie.core.dependencies import ReadDeps
from mealie.core.dependencies.grouped import WriteDeps
from mealie.db.database import get_database
from mealie.db.db_setup import SessionLocal
from mealie.schema.recipe.recipe import CreateRecipe, Recipe
@ -10,8 +12,6 @@ from mealie.schema.user.user import UserInDB
from mealie.services.events import create_recipe_event
from mealie.services.recipe.media import delete_assets
from .common_deps import CommonDeps, _read_deps, _write_deps
class RecipeService:
recipe: Recipe
@ -27,7 +27,7 @@ class RecipeService:
self.settings = get_settings()
@classmethod
def read_existing(cls, slug: str, local_deps: CommonDeps = Depends(_read_deps)):
def read_existing(cls, slug: str, deps: ReadDeps = Depends()):
"""
Used for dependency injection for routes that require an existing recipe. If the recipe doesn't exist
or the user doens't not have the required permissions, the proper HTTP Status code will be raised.
@ -44,12 +44,12 @@ class RecipeService:
Returns:
RecipeService: The Recipe Service class with a populated recipe attribute
"""
new_class = cls(local_deps.session, local_deps.user, local_deps.background_tasks)
new_class = cls(deps.session, deps.user, deps.background_tasks)
new_class.assert_existing(slug)
return new_class
@classmethod
def write_existing(cls, slug: str, local_deps: CommonDeps = Depends(_write_deps)):
def write_existing(cls, slug: str, deps: WriteDeps = Depends()):
"""
Used for dependency injection for routes that require an existing recipe. The only difference between
read_existing and write_existing is that the user is required to be logged in on write_existing method.
@ -66,19 +66,19 @@ class RecipeService:
Returns:
RecipeService: The Recipe Service class with a populated recipe attribute
"""
new_class = cls(local_deps.session, local_deps.user, local_deps.background_tasks)
new_class = cls(deps.session, deps.user, deps.background_tasks)
new_class.assert_existing(slug)
return new_class
@classmethod
def base(cls, local_deps: CommonDeps = Depends(_write_deps)) -> Recipe:
def base(cls, deps: WriteDeps = Depends()) -> Recipe:
"""A Base instance to be used as a router dependency
Raises:
HTTPException: 400 Bad Request
"""
return cls(local_deps.session, local_deps.user, local_deps.background_tasks)
return cls(deps.session, deps.user, deps.background_tasks)
def pupulate_recipe(self, slug: str) -> Recipe:
"""Populates the recipe attribute with the recipe from the database.

View File

@ -1,7 +1,7 @@
from pathlib import Path
from mealie.core import security
from mealie.routes.deps import validate_file_token
from mealie.core.dependencies import validate_file_token
def test_create_file_token():