diff --git a/dev/scripts/app_routes_gen.py b/dev/scripts/app_routes_gen.py index 2e7e731db..437e2d825 100644 --- a/dev/scripts/app_routes_gen.py +++ b/dev/scripts/app_routes_gen.py @@ -8,10 +8,11 @@ from typing import Optional from fastapi import FastAPI from humps import camelize from jinja2 import Template -from mealie.app import app from pydantic import BaseModel, Field from slugify import slugify +from mealie.app import app + CWD = Path(__file__).parent OUT_DIR = CWD / "output" TEMPLATES_DIR = CWD / "templates" diff --git a/makefile b/makefile index afc7d924a..2c4e46589 100644 --- a/makefile +++ b/makefile @@ -44,14 +44,19 @@ clean-test: ## 🧹 Remove test and coverage artifacts rm -fr htmlcov/ rm -fr .pytest_cache -test-all: lint test ## 🧪 Check Lint Format and Testing +test-all: lint-test test ## 🧪 Check Lint Format and Testing test: ## 🧪 Run tests quickly with the default Python poetry run pytest -lint: ## 🧺 Format, Check and Flake8 - poetry run black . +lint-test: poetry run black . --check + poetry run isort . --check-only + poetry run flake8 mealie tests + +lint: ## 🧺 Format, Check and Flake8 + poetry run isort . + poetry run black . poetry run flake8 mealie tests diff --git a/mealie/core/security.py b/mealie/core/security.py index ea19c488b..48bcfc939 100644 --- a/mealie/core/security.py +++ b/mealie/core/security.py @@ -2,10 +2,11 @@ from datetime import datetime, timedelta from pathlib import Path from jose import jwt +from passlib.context import CryptContext + from mealie.core.config import settings from mealie.db.database import db from mealie.schema.user import UserInDB -from passlib.context import CryptContext pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto") ALGORITHM = "HS256" diff --git a/mealie/db/data_access_layer/_base_access_model.py b/mealie/db/data_access_layer/_base_access_model.py index 8ae531884..257cb41ff 100644 --- a/mealie/db/data_access_layer/_base_access_model.py +++ b/mealie/db/data_access_layer/_base_access_model.py @@ -1,10 +1,11 @@ from typing import Callable, Generic, TypeVar, Union -from mealie.core.root_logger import get_logger from sqlalchemy import func from sqlalchemy.orm import load_only from sqlalchemy.orm.session import Session +from mealie.core.root_logger import get_logger + logger = get_logger() T = TypeVar("T") diff --git a/mealie/db/data_access_layer/db_access.py b/mealie/db/data_access_layer/db_access.py index c219357a0..f03cbb5fa 100644 --- a/mealie/db/data_access_layer/db_access.py +++ b/mealie/db/data_access_layer/db_access.py @@ -1,5 +1,7 @@ from logging import getLogger +from sqlalchemy.orm.session import Session + from mealie.db.data_access_layer.group_access_model import GroupDataAccessModel from mealie.db.models.event import Event, EventNotification from mealie.db.models.group import Group @@ -26,7 +28,6 @@ from mealie.schema.recipe import ( RecipeTagResponse, ) from mealie.schema.user import GroupInDB, LongLiveTokenInDB, SignUpOut, UserInDB -from sqlalchemy.orm.session import Session from ._base_access_model import BaseAccessModel from .recipe_access_model import RecipeDataAccessModel diff --git a/mealie/db/data_access_layer/group_access_model.py b/mealie/db/data_access_layer/group_access_model.py index 5fe86a06a..57eaed69c 100644 --- a/mealie/db/data_access_layer/group_access_model.py +++ b/mealie/db/data_access_layer/group_access_model.py @@ -1,7 +1,8 @@ +from sqlalchemy.orm.session import Session + from mealie.db.models.group import Group from mealie.schema.meal_plan.meal import MealPlanOut from mealie.schema.user.user import GroupInDB -from sqlalchemy.orm.session import Session from ._base_access_model import BaseAccessModel diff --git a/mealie/db/data_access_layer/recipe_access_model.py b/mealie/db/data_access_layer/recipe_access_model.py index 0903b0a18..d571fecaa 100644 --- a/mealie/db/data_access_layer/recipe_access_model.py +++ b/mealie/db/data_access_layer/recipe_access_model.py @@ -1,9 +1,10 @@ from random import randint +from sqlalchemy.orm.session import Session + from mealie.db.models.recipe.recipe import RecipeModel from mealie.db.models.recipe.settings import RecipeSettings from mealie.schema.recipe import Recipe -from sqlalchemy.orm.session import Session from ._base_access_model import BaseAccessModel diff --git a/mealie/db/db_setup.py b/mealie/db/db_setup.py index 2eeccd613..7009f8553 100644 --- a/mealie/db/db_setup.py +++ b/mealie/db/db_setup.py @@ -1,8 +1,9 @@ import sqlalchemy as sa -from mealie.core.config import settings from sqlalchemy.orm import sessionmaker from sqlalchemy.orm.session import Session +from mealie.core.config import settings + def sql_global_init(db_url: str): connect_args = {} diff --git a/mealie/db/init_db.py b/mealie/db/init_db.py index 2b95ee76a..6b0c73ada 100644 --- a/mealie/db/init_db.py +++ b/mealie/db/init_db.py @@ -1,3 +1,5 @@ +from sqlalchemy.orm import Session + from mealie.core import root_logger from mealie.core.config import settings from mealie.core.security import get_password_hash @@ -7,7 +9,6 @@ from mealie.db.db_setup import create_session, engine from mealie.db.models._model_base import SqlAlchemyBase from mealie.schema.admin import SiteSettings from mealie.services.events import create_general_event -from sqlalchemy.orm import Session logger = root_logger.get_logger("init_db") diff --git a/mealie/db/models/event.py b/mealie/db/models/event.py index ad6fcdfd6..bf79bb412 100644 --- a/mealie/db/models/event.py +++ b/mealie/db/models/event.py @@ -1,6 +1,7 @@ -from mealie.db.models._model_base import BaseMixins, SqlAlchemyBase from sqlalchemy import Boolean, Column, DateTime, Integer, String +from mealie.db.models._model_base import BaseMixins, SqlAlchemyBase + class EventNotification(SqlAlchemyBase, BaseMixins): __tablename__ = "event_notifications" diff --git a/mealie/db/models/group.py b/mealie/db/models/group.py index ccd2b6de0..a0c943d81 100644 --- a/mealie/db/models/group.py +++ b/mealie/db/models/group.py @@ -1,9 +1,10 @@ import sqlalchemy as sa import sqlalchemy.orm as orm +from sqlalchemy.orm.session import Session + from mealie.core.config import settings from mealie.db.models._model_base import BaseMixins, SqlAlchemyBase from mealie.db.models.recipe.category import Category, group2categories -from sqlalchemy.orm.session import Session class WebhookURLModel(SqlAlchemyBase): diff --git a/mealie/db/models/mealplan.py b/mealie/db/models/mealplan.py index 20b2d46f5..d5c85c4cf 100644 --- a/mealie/db/models/mealplan.py +++ b/mealie/db/models/mealplan.py @@ -1,10 +1,11 @@ import sqlalchemy.orm as orm +from sqlalchemy import Column, Date, ForeignKey, Integer, String +from sqlalchemy.ext.orderinglist import ordering_list + from mealie.db.models._model_base import BaseMixins, SqlAlchemyBase from mealie.db.models.group import Group from mealie.db.models.recipe.recipe import RecipeModel from mealie.db.models.shopping_list import ShoppingList -from sqlalchemy import Column, Date, ForeignKey, Integer, String -from sqlalchemy.ext.orderinglist import ordering_list class Meal(SqlAlchemyBase): diff --git a/mealie/db/models/recipe/api_extras.py b/mealie/db/models/recipe/api_extras.py index c9038ba25..aa6752f38 100644 --- a/mealie/db/models/recipe/api_extras.py +++ b/mealie/db/models/recipe/api_extras.py @@ -1,4 +1,5 @@ import sqlalchemy as sa + from mealie.db.models._model_base import SqlAlchemyBase diff --git a/mealie/db/models/recipe/assets.py b/mealie/db/models/recipe/assets.py index 048dfdb64..196c65c93 100644 --- a/mealie/db/models/recipe/assets.py +++ b/mealie/db/models/recipe/assets.py @@ -1,4 +1,5 @@ import sqlalchemy as sa + from mealie.db.models._model_base import SqlAlchemyBase diff --git a/mealie/db/models/recipe/category.py b/mealie/db/models/recipe/category.py index bba5ecb95..6ccfd1797 100644 --- a/mealie/db/models/recipe/category.py +++ b/mealie/db/models/recipe/category.py @@ -1,10 +1,11 @@ import sqlalchemy as sa import sqlalchemy.orm as orm -from mealie.core import root_logger -from mealie.db.models._model_base import BaseMixins, SqlAlchemyBase from slugify import slugify from sqlalchemy.orm import validates +from mealie.core import root_logger +from mealie.db.models._model_base import BaseMixins, SqlAlchemyBase + logger = root_logger.get_logger() site_settings2categories = sa.Table( diff --git a/mealie/db/models/recipe/comment.py b/mealie/db/models/recipe/comment.py index 1905901df..f6b5530e9 100644 --- a/mealie/db/models/recipe/comment.py +++ b/mealie/db/models/recipe/comment.py @@ -1,10 +1,11 @@ from datetime import datetime from uuid import uuid4 +from sqlalchemy import Column, DateTime, ForeignKey, Integer, String, orm + from mealie.db.models._model_base import BaseMixins, SqlAlchemyBase from mealie.db.models.recipe.recipe import RecipeModel from mealie.db.models.users import User -from sqlalchemy import Column, DateTime, ForeignKey, Integer, String, orm def generate_uuid(): diff --git a/mealie/db/models/recipe/ingredient.py b/mealie/db/models/recipe/ingredient.py index 7229d18a0..c9e760c1e 100644 --- a/mealie/db/models/recipe/ingredient.py +++ b/mealie/db/models/recipe/ingredient.py @@ -1,6 +1,7 @@ -from mealie.db.models._model_base import BaseMixins, SqlAlchemyBase from sqlalchemy import Column, ForeignKey, Integer, String, orm +from mealie.db.models._model_base import BaseMixins, SqlAlchemyBase + from .._model_utils import auto_init diff --git a/mealie/db/models/recipe/instruction.py b/mealie/db/models/recipe/instruction.py index 5915a8a0c..f9e4eeaea 100644 --- a/mealie/db/models/recipe/instruction.py +++ b/mealie/db/models/recipe/instruction.py @@ -1,6 +1,7 @@ -from mealie.db.models._model_base import SqlAlchemyBase from sqlalchemy import Column, ForeignKey, Integer, String +from mealie.db.models._model_base import SqlAlchemyBase + class RecipeInstruction(SqlAlchemyBase): __tablename__ = "recipe_instructions" diff --git a/mealie/db/models/recipe/note.py b/mealie/db/models/recipe/note.py index 77422ddb3..3e2a5ce5b 100644 --- a/mealie/db/models/recipe/note.py +++ b/mealie/db/models/recipe/note.py @@ -1,4 +1,5 @@ import sqlalchemy as sa + from mealie.db.models._model_base import SqlAlchemyBase diff --git a/mealie/db/models/recipe/nutrition.py b/mealie/db/models/recipe/nutrition.py index 9f04ad041..cec6dcaba 100644 --- a/mealie/db/models/recipe/nutrition.py +++ b/mealie/db/models/recipe/nutrition.py @@ -1,4 +1,5 @@ import sqlalchemy as sa + from mealie.db.models._model_base import SqlAlchemyBase diff --git a/mealie/db/models/recipe/settings.py b/mealie/db/models/recipe/settings.py index 96437cfe7..b7f4ecdc7 100644 --- a/mealie/db/models/recipe/settings.py +++ b/mealie/db/models/recipe/settings.py @@ -1,4 +1,5 @@ import sqlalchemy as sa + from mealie.db.models._model_base import SqlAlchemyBase diff --git a/mealie/db/models/recipe/tag.py b/mealie/db/models/recipe/tag.py index 26328a4d7..0c7f054a5 100644 --- a/mealie/db/models/recipe/tag.py +++ b/mealie/db/models/recipe/tag.py @@ -1,10 +1,11 @@ import sqlalchemy as sa import sqlalchemy.orm as orm -from mealie.core import root_logger -from mealie.db.models._model_base import BaseMixins, SqlAlchemyBase from slugify import slugify from sqlalchemy.orm import validates +from mealie.core import root_logger +from mealie.db.models._model_base import BaseMixins, SqlAlchemyBase + logger = root_logger.get_logger() recipes2tags = sa.Table( diff --git a/mealie/db/models/recipe/tool.py b/mealie/db/models/recipe/tool.py index b24beee7c..19375af7f 100644 --- a/mealie/db/models/recipe/tool.py +++ b/mealie/db/models/recipe/tool.py @@ -1,4 +1,5 @@ import sqlalchemy as sa + from mealie.db.models._model_base import SqlAlchemyBase diff --git a/mealie/db/models/settings.py b/mealie/db/models/settings.py index fc34c907c..ca9e1c328 100644 --- a/mealie/db/models/settings.py +++ b/mealie/db/models/settings.py @@ -1,8 +1,9 @@ import sqlalchemy as sa import sqlalchemy.orm as orm +from sqlalchemy.orm import Session + from mealie.db.models._model_base import BaseMixins, SqlAlchemyBase from mealie.db.models.recipe.category import Category, custom_pages2categories, site_settings2categories -from sqlalchemy.orm import Session class SiteSettings(SqlAlchemyBase, BaseMixins): diff --git a/mealie/db/models/shopping_list.py b/mealie/db/models/shopping_list.py index fae4b1e3d..757f8cddc 100644 --- a/mealie/db/models/shopping_list.py +++ b/mealie/db/models/shopping_list.py @@ -1,10 +1,11 @@ import sqlalchemy.orm as orm -from mealie.db.models._model_base import BaseMixins, SqlAlchemyBase -from mealie.db.models.group import Group from requests import Session from sqlalchemy import Boolean, Column, ForeignKey, Integer, String from sqlalchemy.ext.orderinglist import ordering_list +from mealie.db.models._model_base import BaseMixins, SqlAlchemyBase +from mealie.db.models.group import Group + class ShoppingListItem(SqlAlchemyBase, BaseMixins): __tablename__ = "shopping_list_items" diff --git a/mealie/db/models/sign_up.py b/mealie/db/models/sign_up.py index 55fb17b29..6d220cff6 100644 --- a/mealie/db/models/sign_up.py +++ b/mealie/db/models/sign_up.py @@ -1,6 +1,7 @@ -from mealie.db.models._model_base import BaseMixins, SqlAlchemyBase from sqlalchemy import Boolean, Column, Integer, String +from mealie.db.models._model_base import BaseMixins, SqlAlchemyBase + class SignUp(SqlAlchemyBase, BaseMixins): __tablename__ = "sign_ups" diff --git a/mealie/db/models/users.py b/mealie/db/models/users.py index 2fab8d99b..40ae4e4f7 100644 --- a/mealie/db/models/users.py +++ b/mealie/db/models/users.py @@ -1,8 +1,9 @@ +from sqlalchemy import Boolean, Column, ForeignKey, Integer, String, orm + from mealie.core.config import settings from mealie.db.models._model_base import BaseMixins, SqlAlchemyBase from mealie.db.models.group import Group from mealie.db.models.recipe.recipe import RecipeModel -from sqlalchemy import Boolean, Column, ForeignKey, Integer, String, orm class LongLiveToken(SqlAlchemyBase, BaseMixins): diff --git a/mealie/routes/about/defaults.py b/mealie/routes/about/defaults.py index 10d9f3f3e..cb6e0feb5 100644 --- a/mealie/routes/about/defaults.py +++ b/mealie/routes/about/defaults.py @@ -1,4 +1,5 @@ from fastapi import APIRouter + from mealie.schema.recipe import RecipeSettings router = APIRouter(prefix="/recipes") diff --git a/mealie/routes/about/events.py b/mealie/routes/about/events.py index 0460d6691..054ce3010 100644 --- a/mealie/routes/about/events.py +++ b/mealie/routes/about/events.py @@ -1,10 +1,11 @@ from fastapi import Depends +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.routers import AdminAPIRouter from mealie.schema.events import EventsOut -from sqlalchemy.orm.session import Session router = AdminAPIRouter(prefix="/events") diff --git a/mealie/routes/about/notifications.py b/mealie/routes/about/notifications.py index 073853420..b2166e54e 100644 --- a/mealie/routes/about/notifications.py +++ b/mealie/routes/about/notifications.py @@ -1,13 +1,14 @@ from http.client import HTTPException from fastapi import Depends, status +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.routers import AdminAPIRouter from mealie.schema.events import EventNotificationIn, EventNotificationOut, TestEvent from mealie.services.events import test_notification -from sqlalchemy.orm.session import Session router = AdminAPIRouter() diff --git a/mealie/routes/auth/auth.py b/mealie/routes/auth/auth.py index 93a2521ba..7813ee154 100644 --- a/mealie/routes/auth/auth.py +++ b/mealie/routes/auth/auth.py @@ -1,6 +1,8 @@ from fastapi import APIRouter, BackgroundTasks, Depends, Request, status from fastapi.exceptions import HTTPException from fastapi.security import OAuth2PasswordRequestForm +from sqlalchemy.orm.session import Session + from mealie.core import security from mealie.core.security import authenticate_user from mealie.db.db_setup import generate_session @@ -8,7 +10,6 @@ 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 -from sqlalchemy.orm.session import Session public_router = APIRouter(tags=["Users: Authentication"]) user_router = UserAPIRouter(tags=["Users: Authentication"]) diff --git a/mealie/routes/backup_routes.py b/mealie/routes/backup_routes.py index 93934490b..bbcbed8d5 100644 --- a/mealie/routes/backup_routes.py +++ b/mealie/routes/backup_routes.py @@ -4,6 +4,8 @@ from pathlib import Path from pprint import pprint from fastapi import BackgroundTasks, Depends, File, HTTPException, UploadFile, status +from sqlalchemy.orm.session import Session + from mealie.core.config import app_dirs from mealie.core.root_logger import get_logger from mealie.core.security import create_file_token @@ -13,7 +15,6 @@ from mealie.schema.admin import BackupJob, ImportJob, Imports, LocalBackup from mealie.services.backups import imports from mealie.services.backups.exports import backup_all from mealie.services.events import create_backup_event -from sqlalchemy.orm.session import Session router = AdminAPIRouter(prefix="/api/backups", tags=["Backups"]) logger = get_logger() diff --git a/mealie/routes/categories/categories.py b/mealie/routes/categories/categories.py index fb33d339e..331135a5d 100644 --- a/mealie/routes/categories/categories.py +++ b/mealie/routes/categories/categories.py @@ -1,10 +1,11 @@ from fastapi import APIRouter, Depends, HTTPException, status +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.routes.routers import AdminAPIRouter, UserAPIRouter from mealie.schema.recipe import CategoryIn, RecipeCategoryResponse -from sqlalchemy.orm.session import Session public_router = APIRouter() user_router = UserAPIRouter() diff --git a/mealie/routes/debug_routes.py b/mealie/routes/debug_routes.py index e4a458c80..4766085cb 100644 --- a/mealie/routes/debug_routes.py +++ b/mealie/routes/debug_routes.py @@ -1,5 +1,7 @@ from fastapi import Depends from fastapi.routing import APIRouter +from sqlalchemy.orm.session import Session + from mealie.core.config import APP_VERSION, settings from mealie.core.root_logger import LOGGER_FILE from mealie.core.security import create_file_token @@ -7,7 +9,6 @@ from mealie.db.database import db from mealie.db.db_setup import generate_session from mealie.routes.routers import AdminAPIRouter from mealie.schema.admin import AppInfo, AppStatistics, DebugInfo -from sqlalchemy.orm.session import Session admin_router = AdminAPIRouter(prefix="/api/debug", tags=["Debug"]) public_router = APIRouter(prefix="/api/debug", tags=["Debug"]) diff --git a/mealie/routes/deps.py b/mealie/routes/deps.py index 1c0f6b63d..951140624 100644 --- a/mealie/routes/deps.py +++ b/mealie/routes/deps.py @@ -4,11 +4,12 @@ from typing import Optional from fastapi import Depends, HTTPException, status from fastapi.security import OAuth2PasswordBearer from jose import JWTError, jwt +from sqlalchemy.orm.session import Session + from mealie.core.config import app_dirs, settings from mealie.db.database import db from mealie.db.db_setup import generate_session from mealie.schema.user import LongLiveTokenInDB, TokenData, UserInDB -from sqlalchemy.orm.session import Session oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/api/auth/token") oauth2_scheme_soft_fail = OAuth2PasswordBearer(tokenUrl="/api/auth/token", auto_error=False) diff --git a/mealie/routes/groups/crud.py b/mealie/routes/groups/crud.py index 2e277a639..cf11a7a37 100644 --- a/mealie/routes/groups/crud.py +++ b/mealie/routes/groups/crud.py @@ -1,11 +1,12 @@ from fastapi import BackgroundTasks, Depends, HTTPException, status +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.routes.routers import AdminAPIRouter, UserAPIRouter from mealie.schema.user import GroupBase, GroupInDB, UpdateGroup, UserInDB from mealie.services.events import create_group_event -from sqlalchemy.orm.session import Session admin_router = AdminAPIRouter(prefix="/groups", tags=["Groups: CRUD"]) user_router = UserAPIRouter(prefix="/groups", tags=["Groups: CRUD"]) diff --git a/mealie/routes/mealplans/crud.py b/mealie/routes/mealplans/crud.py index fd0db142c..a26a1dc9a 100644 --- a/mealie/routes/mealplans/crud.py +++ b/mealie/routes/mealplans/crud.py @@ -1,4 +1,7 @@ from fastapi import APIRouter, BackgroundTasks, Depends, HTTPException, status +from sqlalchemy.orm.session import Session +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 @@ -8,8 +11,6 @@ from mealie.schema.user import GroupInDB, UserInDB from mealie.services.events import create_group_event from mealie.services.image import image from mealie.services.meal_services import get_todays_meal, set_mealplan_dates -from sqlalchemy.orm.session import Session -from starlette.responses import FileResponse router = UserAPIRouter(prefix="/api/meal-plans", tags=["Meal Plan"]) public_router = APIRouter(prefix="/api/meal-plans", tags=["Meal Plan"]) diff --git a/mealie/routes/mealplans/helpers.py b/mealie/routes/mealplans/helpers.py index 4dff462fd..c70c705ee 100644 --- a/mealie/routes/mealplans/helpers.py +++ b/mealie/routes/mealplans/helpers.py @@ -1,4 +1,6 @@ from fastapi import Depends +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 @@ -7,7 +9,6 @@ from mealie.routes.routers import UserAPIRouter from mealie.schema.meal_plan import ListItem, MealPlanOut, ShoppingListIn, ShoppingListOut from mealie.schema.recipe import Recipe from mealie.schema.user import UserInDB -from sqlalchemy.orm.session import Session logger = get_logger() diff --git a/mealie/routes/mealplans/mealplans.py b/mealie/routes/mealplans/mealplans.py index cadcccfbb..9c8d137d0 100644 --- a/mealie/routes/mealplans/mealplans.py +++ b/mealie/routes/mealplans/mealplans.py @@ -1,4 +1,5 @@ from fastapi import APIRouter + from mealie.routes.mealplans import crud, helpers router = APIRouter() diff --git a/mealie/routes/media/recipe.py b/mealie/routes/media/recipe.py index ad8ffac4e..6b0d86c2a 100644 --- a/mealie/routes/media/recipe.py +++ b/mealie/routes/media/recipe.py @@ -1,9 +1,10 @@ from enum import Enum from fastapi import APIRouter, HTTPException, status -from mealie.schema.recipe import Recipe from starlette.responses import FileResponse +from mealie.schema.recipe import Recipe + """ These routes are for development only! These assets are served by Caddy when not in development mode. If you make changes, be sure to test the production container. diff --git a/mealie/routes/migration_routes.py b/mealie/routes/migration_routes.py index e95ca32dc..65cdd6b51 100644 --- a/mealie/routes/migration_routes.py +++ b/mealie/routes/migration_routes.py @@ -3,12 +3,13 @@ import shutil from typing import List from fastapi import Depends, File, HTTPException, UploadFile, status +from sqlalchemy.orm.session import Session + from mealie.core.config import app_dirs from mealie.db.db_setup import generate_session from mealie.routes.routers import AdminAPIRouter from mealie.schema.admin import MigrationFile, Migrations from mealie.services.migrations import migration -from sqlalchemy.orm.session import Session router = AdminAPIRouter(prefix="/api/migrations", tags=["Migration"]) diff --git a/mealie/routes/recipe/__init__.py b/mealie/routes/recipe/__init__.py index 36d6b9155..d0b1fba07 100644 --- a/mealie/routes/recipe/__init__.py +++ b/mealie/routes/recipe/__init__.py @@ -1,4 +1,5 @@ from fastapi import APIRouter + from mealie.routes.recipe import all_recipe_routes, comments, image_and_assets, ingredient_parser, recipe_crud_routes prefix = "/recipes" diff --git a/mealie/routes/recipe/all_recipe_routes.py b/mealie/routes/recipe/all_recipe_routes.py index abb97bd88..6c2dce4b1 100644 --- a/mealie/routes/recipe/all_recipe_routes.py +++ b/mealie/routes/recipe/all_recipe_routes.py @@ -1,9 +1,10 @@ from fastapi import APIRouter, Depends +from sqlalchemy.orm.session import Session + from mealie.db.database import db from mealie.db.db_setup import generate_session from mealie.schema.recipe import RecipeSummary from mealie.services.recipe.all_recipes import AllRecipesService -from sqlalchemy.orm.session import Session router = APIRouter() diff --git a/mealie/routes/recipe/comments.py b/mealie/routes/recipe/comments.py index a6f47a442..1a38a0e7a 100644 --- a/mealie/routes/recipe/comments.py +++ b/mealie/routes/recipe/comments.py @@ -1,13 +1,14 @@ from http.client import HTTPException from fastapi import Depends, status +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.routes.routers import UserAPIRouter from mealie.schema.recipe import CommentOut, CreateComment, SaveComment from mealie.schema.user import UserInDB -from sqlalchemy.orm.session import Session router = UserAPIRouter() diff --git a/mealie/routes/recipe/image_and_assets.py b/mealie/routes/recipe/image_and_assets.py index 20785f295..f1945f65d 100644 --- a/mealie/routes/recipe/image_and_assets.py +++ b/mealie/routes/recipe/image_and_assets.py @@ -2,13 +2,14 @@ from shutil import copyfileobj from fastapi import Depends, File, Form, HTTPException, status from fastapi.datastructures import UploadFile +from slugify import slugify +from sqlalchemy.orm.session import Session + from mealie.db.database import db from mealie.db.db_setup import generate_session from mealie.routes.routers import UserAPIRouter from mealie.schema.recipe import CreateRecipeByURL, Recipe, RecipeAsset from mealie.services.image.image import scrape_image, write_image -from slugify import slugify -from sqlalchemy.orm.session import Session user_router = UserAPIRouter() diff --git a/mealie/routes/recipe/ingredient_parser.py b/mealie/routes/recipe/ingredient_parser.py index 376053953..b621c2c99 100644 --- a/mealie/routes/recipe/ingredient_parser.py +++ b/mealie/routes/recipe/ingredient_parser.py @@ -1,9 +1,10 @@ from fastapi import APIRouter +from pydantic import BaseModel + from mealie.services.scraper.ingredient_nlp.processor import ( convert_crf_models_to_ingredients, convert_list_to_crf_model, ) -from pydantic import BaseModel public_router = APIRouter() diff --git a/mealie/routes/recipe/recipe_crud_routes.py b/mealie/routes/recipe/recipe_crud_routes.py index 442c04293..4622845e7 100644 --- a/mealie/routes/recipe/recipe_crud_routes.py +++ b/mealie/routes/recipe/recipe_crud_routes.py @@ -4,6 +4,10 @@ from zipfile import ZipFile from fastapi import APIRouter, BackgroundTasks, Depends, File from fastapi.datastructures import UploadFile +from scrape_schema_recipe import scrape_url +from sqlalchemy.orm.session import Session +from starlette.responses import FileResponse + from mealie.core.config import settings from mealie.core.root_logger import get_logger from mealie.db.database import db @@ -18,9 +22,6 @@ from mealie.services.image.image import write_image from mealie.services.recipe.media import check_assets from mealie.services.recipe.recipe_service import RecipeService from mealie.services.scraper.scraper import create_from_url -from scrape_schema_recipe import scrape_url -from sqlalchemy.orm.session import Session -from starlette.responses import FileResponse user_router = UserAPIRouter() public_router = APIRouter() diff --git a/mealie/routes/routers.py b/mealie/routes/routers.py index ad802b280..607bec490 100644 --- a/mealie/routes/routers.py +++ b/mealie/routes/routers.py @@ -1,6 +1,7 @@ from typing import List, Optional from fastapi import APIRouter, Depends + from mealie.routes.deps import get_admin_user, get_current_user diff --git a/mealie/routes/shopping_lists/__init__.py b/mealie/routes/shopping_lists/__init__.py index dccbf92db..73c23ed08 100644 --- a/mealie/routes/shopping_lists/__init__.py +++ b/mealie/routes/shopping_lists/__init__.py @@ -1,11 +1,12 @@ from fastapi import Depends +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.routes.routers import UserAPIRouter from mealie.schema.meal_plan import ShoppingListIn, ShoppingListOut from mealie.schema.user import UserInDB -from sqlalchemy.orm.session import Session router = UserAPIRouter(prefix="/shopping-lists", tags=["Shopping Lists: CRUD"]) diff --git a/mealie/routes/site_settings/custom_pages.py b/mealie/routes/site_settings/custom_pages.py index a283c2b74..8d0f8d8cc 100644 --- a/mealie/routes/site_settings/custom_pages.py +++ b/mealie/routes/site_settings/custom_pages.py @@ -1,11 +1,12 @@ from typing import Union from fastapi import APIRouter, Depends +from sqlalchemy.orm.session import Session + from mealie.db.database import db from mealie.db.db_setup import generate_session from mealie.routes.routers import AdminAPIRouter from mealie.schema.admin import CustomPageBase, CustomPageOut -from sqlalchemy.orm.session import Session public_router = APIRouter(prefix="/api/site-settings/custom-pages", tags=["Settings"]) admin_router = AdminAPIRouter(prefix="/api/site-settings/custom-pages", tags=["Settings"]) diff --git a/mealie/routes/site_settings/site_settings.py b/mealie/routes/site_settings/site_settings.py index cb139f2c2..491827577 100644 --- a/mealie/routes/site_settings/site_settings.py +++ b/mealie/routes/site_settings/site_settings.py @@ -1,4 +1,6 @@ from fastapi import APIRouter, Depends, HTTPException, status +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 @@ -6,7 +8,6 @@ from mealie.routes.routers import AdminAPIRouter from mealie.schema.admin import SiteSettings from mealie.schema.user import GroupInDB, UserInDB from mealie.utils.post_webhooks import post_webhooks -from sqlalchemy.orm.session import Session public_router = APIRouter(prefix="/api/site-settings", tags=["Settings"]) admin_router = AdminAPIRouter(prefix="/api/site-settings", tags=["Settings"]) diff --git a/mealie/routes/tags/tags.py b/mealie/routes/tags/tags.py index 98db08151..6c1c66165 100644 --- a/mealie/routes/tags/tags.py +++ b/mealie/routes/tags/tags.py @@ -1,10 +1,11 @@ from fastapi import APIRouter, Depends, HTTPException, status +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.routes.routers import AdminAPIRouter, UserAPIRouter from mealie.schema.recipe import RecipeTagResponse, TagIn -from sqlalchemy.orm.session import Session public_router = APIRouter() user_router = UserAPIRouter() diff --git a/mealie/routes/unit_and_foods/food_routes.py b/mealie/routes/unit_and_foods/food_routes.py index 3331683b2..10e8e2536 100644 --- a/mealie/routes/unit_and_foods/food_routes.py +++ b/mealie/routes/unit_and_foods/food_routes.py @@ -1,4 +1,5 @@ from fastapi import Depends, status + from mealie.db.database import db from mealie.db.db_setup import Session, generate_session from mealie.routes.routers import UserAPIRouter diff --git a/mealie/routes/unit_and_foods/unit_routes.py b/mealie/routes/unit_and_foods/unit_routes.py index 69026a523..28f93a2f5 100644 --- a/mealie/routes/unit_and_foods/unit_routes.py +++ b/mealie/routes/unit_and_foods/unit_routes.py @@ -1,4 +1,5 @@ from fastapi import Depends, status + from mealie.db.database import db from mealie.db.db_setup import Session, generate_session from mealie.routes.routers import UserAPIRouter diff --git a/mealie/routes/users/_helpers.py b/mealie/routes/users/_helpers.py index 561d1acaf..da6a6da7c 100644 --- a/mealie/routes/users/_helpers.py +++ b/mealie/routes/users/_helpers.py @@ -1,4 +1,5 @@ from fastapi import HTTPException, status + from mealie.schema.user.user import UserInDB diff --git a/mealie/routes/users/api_tokens.py b/mealie/routes/users/api_tokens.py index 0684e9262..bb5285bee 100644 --- a/mealie/routes/users/api_tokens.py +++ b/mealie/routes/users/api_tokens.py @@ -2,13 +2,14 @@ from datetime import timedelta from fastapi import HTTPException, status from fastapi.param_functions import Depends +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.routes.routers import UserAPIRouter from mealie.schema.user import CreateToken, LoingLiveTokenIn, LongLiveTokenInDB, UserInDB -from sqlalchemy.orm.session import Session router = UserAPIRouter() diff --git a/mealie/routes/users/crud.py b/mealie/routes/users/crud.py index 82177f91d..4a7dc4acb 100644 --- a/mealie/routes/users/crud.py +++ b/mealie/routes/users/crud.py @@ -1,4 +1,6 @@ from fastapi import BackgroundTasks, Depends, HTTPException, status +from sqlalchemy.orm.session import Session + from mealie.core import security from mealie.core.security import get_password_hash from mealie.db.database import db @@ -8,7 +10,6 @@ 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 from mealie.services.events import create_user_event -from sqlalchemy.orm.session import Session user_router = UserAPIRouter(prefix="") admin_router = AdminAPIRouter(prefix="") diff --git a/mealie/routes/users/favorites.py b/mealie/routes/users/favorites.py index 62a0f143b..0e5457599 100644 --- a/mealie/routes/users/favorites.py +++ b/mealie/routes/users/favorites.py @@ -1,11 +1,12 @@ from fastapi import Depends +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.routes.routers import UserAPIRouter from mealie.routes.users._helpers import assert_user_change_allowed from mealie.schema.user import UserFavorites, UserInDB -from sqlalchemy.orm.session import Session user_router = UserAPIRouter() diff --git a/mealie/routes/users/images.py b/mealie/routes/users/images.py index a2e257ff5..48ab6d07a 100644 --- a/mealie/routes/users/images.py +++ b/mealie/routes/users/images.py @@ -3,6 +3,7 @@ import shutil from fastapi import Depends, File, HTTPException, UploadFile, status 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.routes.routers import UserAPIRouter diff --git a/mealie/routes/users/passwords.py b/mealie/routes/users/passwords.py index 85d91b5e9..c9902e266 100644 --- a/mealie/routes/users/passwords.py +++ b/mealie/routes/users/passwords.py @@ -1,4 +1,6 @@ from fastapi import Depends, HTTPException, status +from sqlalchemy.orm.session import Session + from mealie.core.config import settings from mealie.core.security import get_password_hash, verify_password from mealie.db.database import db @@ -7,7 +9,6 @@ from mealie.routes.deps 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 -from sqlalchemy.orm.session import Session user_router = UserAPIRouter(prefix="") diff --git a/mealie/routes/users/sign_up.py b/mealie/routes/users/sign_up.py index 957a6d877..559b30f6b 100644 --- a/mealie/routes/users/sign_up.py +++ b/mealie/routes/users/sign_up.py @@ -1,6 +1,8 @@ import uuid from fastapi import APIRouter, BackgroundTasks, Depends, HTTPException, status +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 @@ -8,7 +10,6 @@ from mealie.routes.deps 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 -from sqlalchemy.orm.session import Session public_router = APIRouter(prefix="/sign-ups") admin_router = AdminAPIRouter(prefix="/sign-ups") diff --git a/mealie/routes/utility_routes.py b/mealie/routes/utility_routes.py index a05076823..7ef1188c7 100644 --- a/mealie/routes/utility_routes.py +++ b/mealie/routes/utility_routes.py @@ -2,9 +2,10 @@ from pathlib import Path from typing import Optional from fastapi import APIRouter, Depends, HTTPException, status -from mealie.routes.deps import validate_file_token from starlette.responses import FileResponse +from mealie.routes.deps import validate_file_token + router = APIRouter(prefix="/api/utils", tags=["Utils"], include_in_schema=True) diff --git a/mealie/schema/meal_plan/meal.py b/mealie/schema/meal_plan/meal.py index b3db0f65e..ba8000a38 100644 --- a/mealie/schema/meal_plan/meal.py +++ b/mealie/schema/meal_plan/meal.py @@ -2,10 +2,11 @@ from datetime import date from typing import Optional from fastapi_camelcase import CamelModel -from mealie.db.models.mealplan import MealPlan from pydantic import validator from pydantic.utils import GetterDict +from mealie.db.models.mealplan import MealPlan + class MealIn(CamelModel): slug: Optional[str] diff --git a/mealie/schema/meal_plan/shopping_list.py b/mealie/schema/meal_plan/shopping_list.py index 14fa0631e..344786c0a 100644 --- a/mealie/schema/meal_plan/shopping_list.py +++ b/mealie/schema/meal_plan/shopping_list.py @@ -1,9 +1,10 @@ from typing import Optional from fastapi_camelcase import CamelModel -from mealie.db.models.shopping_list import ShoppingList from pydantic.utils import GetterDict +from mealie.db.models.shopping_list import ShoppingList + class ListItem(CamelModel): title: Optional[str] diff --git a/mealie/schema/recipe/recipe.py b/mealie/schema/recipe/recipe.py index ce1a3bb1c..cdd2640d3 100644 --- a/mealie/schema/recipe/recipe.py +++ b/mealie/schema/recipe/recipe.py @@ -3,12 +3,13 @@ from pathlib import Path from typing import Any, Optional from fastapi_camelcase import CamelModel -from mealie.core.config import app_dirs -from mealie.db.models.recipe.recipe import RecipeModel from pydantic import BaseModel, Field, validator from pydantic.utils import GetterDict from slugify import slugify +from mealie.core.config import app_dirs +from mealie.db.models.recipe.recipe import RecipeModel + from .recipe_asset import RecipeAsset from .recipe_comments import CommentOut from .recipe_ingredient import RecipeIngredient diff --git a/mealie/schema/recipe/recipe_settings.py b/mealie/schema/recipe/recipe_settings.py index 5f0cdfe2e..bebb51f22 100644 --- a/mealie/schema/recipe/recipe_settings.py +++ b/mealie/schema/recipe/recipe_settings.py @@ -1,4 +1,5 @@ from fastapi_camelcase import CamelModel + from mealie.core.config import settings diff --git a/mealie/schema/recipe_old/recipe.py b/mealie/schema/recipe_old/recipe.py index 3a55d774f..c327c4c9b 100644 --- a/mealie/schema/recipe_old/recipe.py +++ b/mealie/schema/recipe_old/recipe.py @@ -4,12 +4,13 @@ from pathlib import Path from typing import Any, Optional from fastapi_camelcase import CamelModel -from mealie.core.config import app_dirs, settings -from mealie.db.models.recipe.recipe import RecipeModel from pydantic import BaseModel, Field, validator from pydantic.utils import GetterDict from slugify import slugify +from mealie.core.config import app_dirs, settings +from mealie.db.models.recipe.recipe import RecipeModel + from .comments import CommentOut from .units_and_foods import IngredientFood, IngredientUnit diff --git a/mealie/schema/user/user.py b/mealie/schema/user/user.py index ac0f35dc0..e916e69ae 100644 --- a/mealie/schema/user/user.py +++ b/mealie/schema/user/user.py @@ -1,12 +1,13 @@ from typing import Optional from fastapi_camelcase import CamelModel +from pydantic.types import constr +from pydantic.utils import GetterDict + from mealie.core.config import settings from mealie.db.models.group import Group from mealie.db.models.users import User from mealie.schema.recipe import RecipeSummary -from pydantic.types import constr -from pydantic.utils import GetterDict from ..meal_plan import MealPlanOut, ShoppingListOut from ..recipe import CategoryBase diff --git a/mealie/services/backups/exports.py b/mealie/services/backups/exports.py index 59a0277b7..44d8fcf7d 100644 --- a/mealie/services/backups/exports.py +++ b/mealie/services/backups/exports.py @@ -5,13 +5,14 @@ from pathlib import Path from typing import Union from jinja2 import Template +from pathvalidate import sanitize_filename +from pydantic.main import BaseModel + from mealie.core import root_logger from mealie.core.config import app_dirs from mealie.db.database import db from mealie.db.db_setup import create_session from mealie.services.events import create_backup_event -from pathvalidate import sanitize_filename -from pydantic.main import BaseModel logger = root_logger.get_logger() diff --git a/mealie/services/backups/imports.py b/mealie/services/backups/imports.py index dd2b43acd..6eb8efb24 100644 --- a/mealie/services/backups/imports.py +++ b/mealie/services/backups/imports.py @@ -4,6 +4,9 @@ import zipfile from pathlib import Path from typing import Callable +from pydantic.main import BaseModel +from sqlalchemy.orm.session import Session + from mealie.core.config import app_dirs from mealie.db.database import db from mealie.schema.admin import ( @@ -21,8 +24,6 @@ from mealie.schema.events import EventNotificationIn from mealie.schema.recipe import CommentOut, Recipe from mealie.schema.user import UpdateGroup, UserInDB from mealie.services.image import minify -from pydantic.main import BaseModel -from sqlalchemy.orm.session import Session class ImportDatabase: diff --git a/mealie/services/events.py b/mealie/services/events.py index 28cb495d7..f777af6ed 100644 --- a/mealie/services/events.py +++ b/mealie/services/events.py @@ -1,8 +1,9 @@ import apprise +from sqlalchemy.orm.session import Session + from mealie.db.database import db from mealie.db.db_setup import create_session from mealie.schema.events import Event, EventCategory -from sqlalchemy.orm.session import Session def test_notification(notification_url, event=None) -> bool: diff --git a/mealie/services/image/image.py b/mealie/services/image/image.py index 57707b774..936a88e53 100644 --- a/mealie/services/image/image.py +++ b/mealie/services/image/image.py @@ -3,6 +3,7 @@ from dataclasses import dataclass from pathlib import Path import requests + from mealie.core import root_logger from mealie.schema.recipe import Recipe from mealie.services.image import minify diff --git a/mealie/services/image/minify.py b/mealie/services/image/minify.py index ebc865da6..8ae22c017 100644 --- a/mealie/services/image/minify.py +++ b/mealie/services/image/minify.py @@ -2,10 +2,11 @@ import shutil from dataclasses import dataclass from pathlib import Path +from PIL import Image + from mealie.core import root_logger from mealie.core.config import app_dirs from mealie.schema.recipe import Recipe -from PIL import Image logger = root_logger.get_logger() diff --git a/mealie/services/meal_services.py b/mealie/services/meal_services.py index 73b7a7a8d..c7e70e9dc 100644 --- a/mealie/services/meal_services.py +++ b/mealie/services/meal_services.py @@ -1,12 +1,13 @@ from datetime import date, timedelta from typing import Union +from sqlalchemy.orm.session import Session + from mealie.db.database import db from mealie.db.db_setup import create_session from mealie.schema.meal_plan import MealDayIn, MealPlanIn from mealie.schema.recipe import Recipe from mealie.schema.user import GroupInDB -from sqlalchemy.orm.session import Session def set_mealplan_dates(meal_plan_base: MealPlanIn) -> MealPlanIn: diff --git a/mealie/services/migrations/_migration_base.py b/mealie/services/migrations/_migration_base.py index 88bff31b1..e15a48992 100644 --- a/mealie/services/migrations/_migration_base.py +++ b/mealie/services/migrations/_migration_base.py @@ -4,6 +4,8 @@ from tempfile import TemporaryDirectory from typing import Any, Callable, Optional import yaml +from pydantic import BaseModel + from mealie.core import root_logger from mealie.db.database import db from mealie.schema.admin import MigrationImport @@ -11,7 +13,6 @@ from mealie.schema.recipe import Recipe from mealie.services.image import image from mealie.services.scraper import cleaner from mealie.utils.unzip import unpack_zip -from pydantic import BaseModel logger = root_logger.get_logger() diff --git a/mealie/services/migrations/chowdown.py b/mealie/services/migrations/chowdown.py index 9e0b9999c..c1ca6abcd 100644 --- a/mealie/services/migrations/chowdown.py +++ b/mealie/services/migrations/chowdown.py @@ -1,11 +1,12 @@ from pathlib import Path from typing import Optional +from sqlalchemy.orm.session import Session + from mealie.core.config import app_dirs from mealie.schema.admin import MigrationImport from mealie.services.migrations import helpers from mealie.services.migrations._migration_base import MigrationAlias, MigrationBase -from sqlalchemy.orm.session import Session class ChowdownMigration(MigrationBase): diff --git a/mealie/services/migrations/migration.py b/mealie/services/migrations/migration.py index b00013cd4..a169d5c22 100644 --- a/mealie/services/migrations/migration.py +++ b/mealie/services/migrations/migration.py @@ -1,10 +1,11 @@ from enum import Enum from pathlib import Path +from sqlalchemy.orm.session import Session + from mealie.core import root_logger from mealie.schema.admin import MigrationImport from mealie.services.migrations import chowdown, nextcloud -from sqlalchemy.orm.session import Session logger = root_logger.get_logger() diff --git a/mealie/services/migrations/nextcloud.py b/mealie/services/migrations/nextcloud.py index 7204a8c6e..e93c2ba82 100644 --- a/mealie/services/migrations/nextcloud.py +++ b/mealie/services/migrations/nextcloud.py @@ -2,11 +2,12 @@ from dataclasses import dataclass from pathlib import Path from typing import Optional +from slugify import slugify +from sqlalchemy.orm.session import Session + from mealie.schema.admin import MigrationImport from mealie.services.migrations import helpers from mealie.services.migrations._migration_base import MigrationAlias, MigrationBase -from slugify import slugify -from sqlalchemy.orm.session import Session @dataclass diff --git a/mealie/services/recipe/all_recipes.py b/mealie/services/recipe/all_recipes.py index 480101a55..281230c3c 100644 --- a/mealie/services/recipe/all_recipes.py +++ b/mealie/services/recipe/all_recipes.py @@ -3,12 +3,13 @@ from functools import lru_cache from fastapi import Depends, Response from fastapi.encoders import jsonable_encoder +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.schema.recipe import RecipeSummary -from sqlalchemy.orm.session import Session logger = get_logger() diff --git a/mealie/services/recipe/common_deps.py b/mealie/services/recipe/common_deps.py index c68896728..a5b31950b 100644 --- a/mealie/services/recipe/common_deps.py +++ b/mealie/services/recipe/common_deps.py @@ -1,11 +1,12 @@ from typing import Any from fastapi import BackgroundTasks, Depends -from mealie.db.db_setup import generate_session -from mealie.routes.deps import get_current_user, is_logged_in 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 + class CommonDeps(BaseModel): session: Session diff --git a/mealie/services/recipe/recipe_service.py b/mealie/services/recipe/recipe_service.py index 56337d686..67a93920b 100644 --- a/mealie/services/recipe/recipe_service.py +++ b/mealie/services/recipe/recipe_service.py @@ -1,4 +1,7 @@ from fastapi import BackgroundTasks, Depends, HTTPException, status +from sqlalchemy.exc import IntegrityError +from sqlalchemy.orm.session import Session + from mealie.core.config import get_settings from mealie.db.database import get_database from mealie.db.db_setup import SessionLocal @@ -6,8 +9,6 @@ from mealie.schema.recipe.recipe import CreateRecipe, Recipe from mealie.schema.user.user import UserInDB from mealie.services.events import create_recipe_event from mealie.services.recipe.media import delete_assets -from sqlalchemy.exc import IntegrityError -from sqlalchemy.orm.session import Session from .common_deps import CommonDeps, _read_deps, _write_deps diff --git a/mealie/services/scheduler/global_scheduler.py b/mealie/services/scheduler/global_scheduler.py index 660cdfc17..ec0341d55 100644 --- a/mealie/services/scheduler/global_scheduler.py +++ b/mealie/services/scheduler/global_scheduler.py @@ -1,5 +1,6 @@ from apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStore from apscheduler.schedulers.background import BackgroundScheduler + from mealie.core.config import app_dirs, settings app_dirs.DATA_DIR.joinpath("scheduler.db").unlink(missing_ok=True) diff --git a/mealie/services/scheduler/scheduled_jobs.py b/mealie/services/scheduler/scheduled_jobs.py index 3c5a5b557..26ce9fbf9 100644 --- a/mealie/services/scheduler/scheduled_jobs.py +++ b/mealie/services/scheduler/scheduled_jobs.py @@ -1,6 +1,7 @@ import datetime from apscheduler.schedulers.background import BackgroundScheduler + from mealie.core import root_logger from mealie.db.database import db from mealie.db.db_setup import create_session diff --git a/mealie/services/scraper/cleaner.py b/mealie/services/scraper/cleaner.py index 25607f9a9..daba9986a 100644 --- a/mealie/services/scraper/cleaner.py +++ b/mealie/services/scraper/cleaner.py @@ -4,9 +4,10 @@ import re from datetime import datetime, timedelta from typing import List -from mealie.core.root_logger import get_logger from slugify import slugify +from mealie.core.root_logger import get_logger + logger = get_logger() diff --git a/mealie/services/scraper/ingredient_nlp/processor.py b/mealie/services/scraper/ingredient_nlp/processor.py index b225bdde9..4dafe2c65 100644 --- a/mealie/services/scraper/ingredient_nlp/processor.py +++ b/mealie/services/scraper/ingredient_nlp/processor.py @@ -5,10 +5,11 @@ from fractions import Fraction from pathlib import Path from typing import Optional +from pydantic import BaseModel + from mealie.core.config import settings from mealie.schema.recipe import RecipeIngredient from mealie.schema.recipe.recipe_ingredient import CreateIngredientFood, CreateIngredientUnit -from pydantic import BaseModel from . import utils diff --git a/mealie/services/scraper/open_graph.py b/mealie/services/scraper/open_graph.py index 50b1be0de..529948dc6 100644 --- a/mealie/services/scraper/open_graph.py +++ b/mealie/services/scraper/open_graph.py @@ -1,10 +1,11 @@ from typing import Tuple import extruct -from mealie.core.config import app_dirs from slugify import slugify from w3lib.html import get_base_url +from mealie.core.config import app_dirs + LAST_JSON = app_dirs.DEBUG_DIR.joinpath("last_recipe.json") diff --git a/mealie/services/scraper/scraper.py b/mealie/services/scraper/scraper.py index 6b6a83d35..491e90090 100644 --- a/mealie/services/scraper/scraper.py +++ b/mealie/services/scraper/scraper.py @@ -5,13 +5,14 @@ from uuid import uuid4 import requests from fastapi import HTTPException, status +from recipe_scrapers import NoSchemaFoundInWildMode, SchemaScraperFactory, WebsiteNotImplementedError, scrape_me +from slugify import slugify + from mealie.core.config import app_dirs from mealie.core.root_logger import get_logger from mealie.schema.recipe import Recipe, RecipeStep from mealie.services.image.image import scrape_image from mealie.services.scraper import cleaner, open_graph -from recipe_scrapers import NoSchemaFoundInWildMode, SchemaScraperFactory, WebsiteNotImplementedError, scrape_me -from slugify import slugify LAST_JSON = app_dirs.DEBUG_DIR.joinpath("last_recipe.json") diff --git a/mealie/utils/post_webhooks.py b/mealie/utils/post_webhooks.py index 832f5c21c..873f0bada 100644 --- a/mealie/utils/post_webhooks.py +++ b/mealie/utils/post_webhooks.py @@ -1,12 +1,13 @@ import json import requests +from sqlalchemy.orm.session import Session + from mealie.db.database import db from mealie.db.db_setup import create_session from mealie.schema.user import GroupInDB from mealie.services.events import create_scheduled_event from mealie.services.meal_services import get_todays_meal -from sqlalchemy.orm.session import Session def post_webhooks(group: int, session: Session = None, force=True): diff --git a/poetry.lock b/poetry.lock index 2aec081ac..eb71cb340 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1321,7 +1321,7 @@ pgsql = ["psycopg2-binary"] [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "4aaa78bc2bbe0e21ad78acd6fa35339eea5cdc88e7055337a0b0244021d7cec6" +content-hash = "03d6e9fea568f4167c5cc6865d417c57575305f7ad6813dd503c6f40e85090d7" [metadata.files] aiofiles = [ diff --git a/pyproject.toml b/pyproject.toml index 2f6ef5ab7..fa44ec880 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -47,6 +47,7 @@ flake8 = "^3.9.0" coverage = "^5.5" pydantic-to-typescript = "^1.0.7" rich = "^10.7.0" +isort = "^5.9.3" [build-system] requires = ["poetry-core>=1.0.0"] @@ -54,6 +55,11 @@ build-backend = "poetry.core.masonry.api" [tool.black] line-length = 120 + +[tool.isort] +profile = "black" +line_length = 120 +multi_line_output = 3 [tool.pytest.ini_options] minversion = "6.0" diff --git a/tests/conftest.py b/tests/conftest.py index 5af3bac1c..25107a598 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -4,11 +4,11 @@ import json import requests from fastapi.testclient import TestClient +from pytest import fixture + from mealie.app import app from mealie.db.db_setup import SessionLocal, generate_session from mealie.db.init_db import main -from pytest import fixture - from tests.app_routes import AppRoutes from tests.test_config import TEST_DATA from tests.utils.recipe_data import get_raw_no_image, get_raw_recipe, get_recipe_test_cases diff --git a/tests/integration_tests/recipe_tests/test_recipe_crud.py b/tests/integration_tests/recipe_tests/test_recipe_crud.py index 5c1c8e767..6a6b3cea6 100644 --- a/tests/integration_tests/recipe_tests/test_recipe_crud.py +++ b/tests/integration_tests/recipe_tests/test_recipe_crud.py @@ -3,6 +3,7 @@ import json import pytest from fastapi.testclient import TestClient from slugify import slugify + from tests.app_routes import AppRoutes from tests.utils.recipe_data import RecipeSiteTestCase, get_recipe_test_cases diff --git a/tests/integration_tests/test_custom_page_routes.py b/tests/integration_tests/test_custom_page_routes.py index fc6c76a85..265ec0b19 100644 --- a/tests/integration_tests/test_custom_page_routes.py +++ b/tests/integration_tests/test_custom_page_routes.py @@ -2,6 +2,7 @@ import json import pytest from fastapi.testclient import TestClient + from tests.app_routes import AppRoutes diff --git a/tests/integration_tests/test_group_routes.py b/tests/integration_tests/test_group_routes.py index 3c01c65ad..2bb3d5b8a 100644 --- a/tests/integration_tests/test_group_routes.py +++ b/tests/integration_tests/test_group_routes.py @@ -2,6 +2,7 @@ import json import pytest from fastapi.testclient import TestClient + from tests.app_routes import AppRoutes diff --git a/tests/integration_tests/test_import_routes.py b/tests/integration_tests/test_import_routes.py index 87be42b35..643e90703 100644 --- a/tests/integration_tests/test_import_routes.py +++ b/tests/integration_tests/test_import_routes.py @@ -2,6 +2,7 @@ import json import pytest from fastapi.testclient import TestClient + from tests.app_routes import AppRoutes diff --git a/tests/integration_tests/test_long_live_tokens.py b/tests/integration_tests/test_long_live_tokens.py index 634f3d7ca..9a2b47b4d 100644 --- a/tests/integration_tests/test_long_live_tokens.py +++ b/tests/integration_tests/test_long_live_tokens.py @@ -2,6 +2,7 @@ import json from fastapi.testclient import TestClient from pytest import fixture + from tests.app_routes import AppRoutes diff --git a/tests/integration_tests/test_meal_routes.py b/tests/integration_tests/test_meal_routes.py index 7bbeea8c7..c1044ad38 100644 --- a/tests/integration_tests/test_meal_routes.py +++ b/tests/integration_tests/test_meal_routes.py @@ -2,6 +2,7 @@ import json import pytest from fastapi.testclient import TestClient + from tests.app_routes import AppRoutes from tests.utils.recipe_data import RecipeSiteTestCase diff --git a/tests/integration_tests/test_migration_routes.py b/tests/integration_tests/test_migration_routes.py index 21e4f9cfc..dd407fa66 100644 --- a/tests/integration_tests/test_migration_routes.py +++ b/tests/integration_tests/test_migration_routes.py @@ -4,6 +4,7 @@ from pathlib import Path import pytest from fastapi.testclient import TestClient + from mealie.core.config import app_dirs from tests.app_routes import AppRoutes from tests.test_config import TEST_CHOWDOWN_DIR, TEST_NEXTCLOUD_DIR diff --git a/tests/integration_tests/test_settings_routes.py b/tests/integration_tests/test_settings_routes.py index 173db8110..f245c8272 100644 --- a/tests/integration_tests/test_settings_routes.py +++ b/tests/integration_tests/test_settings_routes.py @@ -2,6 +2,7 @@ import json import pytest from fastapi.testclient import TestClient + from mealie.schema.admin import SiteSettings from tests.app_routes import AppRoutes diff --git a/tests/integration_tests/test_signup_routes.py b/tests/integration_tests/test_signup_routes.py index 9563ff6ca..7dc905eeb 100644 --- a/tests/integration_tests/test_signup_routes.py +++ b/tests/integration_tests/test_signup_routes.py @@ -2,6 +2,7 @@ import json import pytest from fastapi.testclient import TestClient + from mealie.schema.user import SignUpToken from tests.app_routes import AppRoutes diff --git a/tests/integration_tests/test_user_routes.py b/tests/integration_tests/test_user_routes.py index 3fe6561ce..c57091880 100644 --- a/tests/integration_tests/test_user_routes.py +++ b/tests/integration_tests/test_user_routes.py @@ -2,9 +2,10 @@ import json from pathlib import Path from fastapi.testclient import TestClient +from pytest import fixture + from mealie.core.config import app_dirs from mealie.schema.user import UserOut -from pytest import fixture from tests.app_routes import AppRoutes diff --git a/tests/unit_tests/test_cleaner.py b/tests/unit_tests/test_cleaner.py index f695c0077..69e73a1de 100644 --- a/tests/unit_tests/test_cleaner.py +++ b/tests/unit_tests/test_cleaner.py @@ -2,6 +2,7 @@ import json import re import pytest + from mealie.services.scraper import cleaner from mealie.services.scraper.scraper import open_graph from tests.test_config import TEST_RAW_HTML, TEST_RAW_RECIPES diff --git a/tests/unit_tests/test_recipe_parser.py b/tests/unit_tests/test_recipe_parser.py index a6438ecf9..5296a95b7 100644 --- a/tests/unit_tests/test_recipe_parser.py +++ b/tests/unit_tests/test_recipe_parser.py @@ -1,4 +1,5 @@ import pytest + from mealie.services.scraper import scraper from tests.utils.recipe_data import RecipeSiteTestCase, get_recipe_test_cases