diff --git a/dev/scripts/app_routes_gen.py b/dev/scripts/app_routes_gen.py index 2e7e731db2c4..437e2d8255e4 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 afc7d924a0fb..2c4e46589ce0 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 ea19c488ba57..48bcfc939b34 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 8ae531884255..257cb41ff544 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 c219357a0bc4..f03cbb5fa1f6 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 5fe86a06acbc..57eaed69c33e 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 0903b0a1893a..d571fecaaf4b 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 2eeccd613f19..7009f8553bc8 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 2b95ee76ad10..6b0c73ada9e9 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 ad6fcdfd61d7..bf79bb412097 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 ccd2b6de0846..a0c943d814f9 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 20b2d46f56a5..d5c85c4cf9c6 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 c9038ba25fa4..aa6752f38d91 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 048dfdb64db5..196c65c93d88 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 bba5ecb95c21..6ccfd1797f05 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 1905901df3c7..f6b5530e9117 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 7229d18a05c3..c9e760c1ef0b 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 5915a8a0ca33..f9e4eeaea3f4 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 77422ddb3cac..3e2a5ce5bc4b 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 9f04ad041acc..cec6dcaba87b 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 96437cfe705d..b7f4ecdc7e58 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 26328a4d7d18..0c7f054a5f56 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 b24beee7cee8..19375af7fb27 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 fc34c907c3d9..ca9e1c3282a9 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 fae4b1e3d670..757f8cddc83b 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 55fb17b29461..6d220cff6e32 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 2fab8d99b151..40ae4e4f71b8 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 10d9f3f3e580..cb6e0feb5fcc 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 0460d669180a..054ce30107e8 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 0738534200df..b2166e54edbe 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 93a2521bab5a..7813ee154f5b 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 93934490b6ad..bbcbed8d50a5 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 fb33d339ef99..331135a5d6ec 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 e4a458c80d63..4766085cbf3b 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 1c0f6b63d235..951140624baa 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 2e277a6399c5..cf11a7a37771 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 fd0db142c4ee..a26a1dc9a3c6 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 4dff462fd477..c70c705eeef3 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 cadcccfbbf72..9c8d137d0c91 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 ad8ffac4e417..6b0d86c2aa94 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 e95ca32dc947..65cdd6b515b0 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 36d6b91553e0..d0b1fba078c3 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 abb97bd88e81..6c2dce4b160b 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 a6f47a442341..1a38a0e7a3c1 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 20785f2954e5..f1945f65d199 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 376053953e18..b621c2c990be 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 442c042930ff..4622845e76d3 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 ad802b2806fa..607bec4909ec 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 dccbf92db8e7..73c23ed087a5 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 a283c2b74cd0..8d0f8d8cc09e 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 cb139f2c2905..491827577d35 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 98db08151796..6c1c6616561c 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 3331683b2a42..10e8e25362f0 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 69026a5235c1..28f93a2f5da3 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 561d1acafa0c..da6a6da7c531 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 0684e9262f96..bb5285bee22a 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 82177f91d5a9..4a7dc4acb883 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 62a0f143b325..0e5457599691 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 a2e257ff5f58..48ab6d07a785 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 85d91b5e93b4..c9902e266782 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 957a6d877789..559b30f6bc0d 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 a05076823987..7ef1188c7238 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 b3db0f65e468..ba8000a38166 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 14fa0631e2ec..344786c0ac43 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 ce1a3bb1cc19..cdd2640d3758 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 5f0cdfe2e2c4..bebb51f2250a 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 3a55d774f0a2..c327c4c9bdd6 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 ac0f35dc06ac..e916e69aed16 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 59a0277b74c2..44d8fcf7d677 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 dd2b43acdd87..6eb8efb24a98 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 28cb495d7221..f777af6ed169 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 57707b7744f7..936a88e5312e 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 ebc865da6ee4..8ae22c0170b2 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 73b7a7a8da8d..c7e70e9dc3d0 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 88bff31b1091..e15a489921ce 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 9e0b9999ce17..c1ca6abcd730 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 b00013cd4b2b..a169d5c221e9 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 7204a8c6eb11..e93c2ba82117 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 480101a55606..281230c3c092 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 c68896728ff2..a5b31950be91 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 56337d686011..67a93920b8f8 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 660cdfc1727e..ec0341d55d6f 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 3c5a5b557d90..26ce9fbf99f8 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 25607f9a9524..daba9986aab5 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 b225bdde9f10..4dafe2c65687 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 50b1be0deb29..529948dc6645 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 6b6a83d35fbf..491e90090c29 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 832f5c21c5dc..873f0bada88b 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 2aec081ac707..eb71cb3400b9 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 2f6ef5ab7e74..fa44ec880c43 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 5af3bac1c072..25107a59848c 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 5c1c8e767fd4..6a6b3cea6fa3 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 fc6c76a85e71..265ec0b190ff 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 3c01c65adb47..2bb3d5b8a0ab 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 87be42b359c0..643e90703718 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 634f3d7ca424..9a2b47b4d0e2 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 7bbeea8c743b..c1044ad383fb 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 21e4f9cfc446..dd407fa66386 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 173db8110ad4..f245c82729d5 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 9563ff6cafff..7dc905eebc20 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 3fe6561ce473..c57091880649 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 f695c0077271..69e73a1de9ab 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 a6438ecf9378..5296a95b7f1f 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