fix flake8 problems

This commit is contained in:
hay-kot 2021-03-29 11:48:15 -08:00
commit feef5857e5
27 changed files with 50 additions and 87 deletions

View file

@ -21,7 +21,7 @@ app = FastAPI(
def start_scheduler(): def start_scheduler():
import mealie.services.scheduler.scheduled_jobs import mealie.services.scheduler.scheduled_jobs # noqa: F401
def api_routers(): def api_routers():

View file

@ -16,7 +16,7 @@ def ensure_dirs():
# Register ENV # Register ENV
ENV = CWD.joinpath(".env") #! I'm Broken Fix Me! ENV = CWD.joinpath(".env") # ! I'm Broken Fix Me!
dotenv.load_dotenv(ENV) dotenv.load_dotenv(ENV)
PRODUCTION = os.environ.get("ENV") PRODUCTION = os.environ.get("ENV")

View file

@ -118,6 +118,7 @@ class _SignUps(BaseDocument):
self.orm_mode = True self.orm_mode = True
self.schema = SignUpOut self.schema = SignUpOut
class _CustomPages(BaseDocument): class _CustomPages(BaseDocument):
def __init__(self) -> None: def __init__(self) -> None:
self.primary_key = "id" self.primary_key = "id"

View file

@ -40,12 +40,7 @@ class BaseDocument:
Returns: Returns:
list[SqlAlchemyBase]: Returns a list of ORM objects list[SqlAlchemyBase]: Returns a list of ORM objects
""" """
return ( return session.query(self.sql_model).options(load_only(*fields)).limit(limit).all()
session.query(self.sql_model)
.options(load_only(*fields))
.limit(limit)
.all()
)
def get_all_primary_keys(self, session: Session) -> List[str]: def get_all_primary_keys(self, session: Session) -> List[str]:
"""Queries the database of the selected model and returns a list """Queries the database of the selected model and returns a list
@ -75,11 +70,7 @@ class BaseDocument:
if match_key is None: if match_key is None:
match_key = self.primary_key match_key = self.primary_key
return ( return session.query(self.sql_model).filter_by(**{match_key: match_value}).one()
session.query(self.sql_model)
.filter_by(**{match_key: match_value})
.one()
)
def get(self, session: Session, match_value: str, match_key: str = None, limit=1) -> BaseModel or List[BaseModel]: def get(self, session: Session, match_value: str, match_key: str = None, limit=1) -> BaseModel or List[BaseModel]:
"""Retrieves an entry from the database by matching a key/value pair. If no """Retrieves an entry from the database by matching a key/value pair. If no

View file

@ -6,7 +6,6 @@ from mealie.db.db_setup import create_session, sql_exists
from mealie.schema.settings import SiteSettings from mealie.schema.settings import SiteSettings
from mealie.schema.theme import SiteTheme from mealie.schema.theme import SiteTheme
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
from sqlalchemy.orm.session import Session
def init_db(db: Session = None) -> None: def init_db(db: Session = None) -> None:
@ -24,14 +23,8 @@ def init_db(db: Session = None) -> None:
def default_theme_init(session: Session): def default_theme_init(session: Session):
db.themes.create(session, SiteTheme().dict()) db.themes.create(session, SiteTheme().dict())
try:
logger.info("Generating default theme...")
except:
logger.info("Default Theme Exists.. skipping generation")
def default_settings_init(session: Session): def default_settings_init(session: Session):
data = {"language": "en", "home_page_settings": {"categories": []}}
document = db.settings.create(session, SiteSettings().dict()) document = db.settings.create(session, SiteSettings().dict())
logger.info(f"Created Site Settings: \n {document}") logger.info(f"Created Site Settings: \n {document}")

View file

@ -18,7 +18,7 @@ def sql_global_init(db_file: Path, check_thread=False):
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
import mealie.db.models._all_models import mealie.db.models._all_models # noqa: F401
SqlAlchemyBase.metadata.create_all(engine) SqlAlchemyBase.metadata.create_all(engine)

View file

@ -64,14 +64,10 @@ class Group(SqlAlchemyBase, BaseMixins):
@staticmethod @staticmethod
def create_if_not_exist(session, name: str = DEFAULT_GROUP): def create_if_not_exist(session, name: str = DEFAULT_GROUP):
try: result = session.query(Group).filter(Group.name == name).one_or_none()
result = session.query(Group).filter(Group.name == name).one() if result:
if result: logger.info("Group exists, associating recipe")
logger.info("Category exists, associating recipe") return result
return result else:
else: logger.info("Group doesn't exists, creating tag")
logger.info("Category doesn't exists, creating tag")
return Group(name=name)
except:
logger.info("Category doesn't exists, creating category")
return Group(name=name) return Group(name=name)

View file

@ -26,7 +26,7 @@ class Meal(SqlAlchemyBase):
class MealPlanModel(SqlAlchemyBase, BaseMixins): class MealPlanModel(SqlAlchemyBase, BaseMixins):
__tablename__ = "mealplan" __tablename__ = "mealplan"
uid = sa.Column(sa.Integer, primary_key=True, unique=True) #! Probably Bad? uid = sa.Column(sa.Integer, primary_key=True, unique=True) # ! Probably Bad?
startDate = sa.Column(sa.Date) startDate = sa.Column(sa.Date)
endDate = sa.Column(sa.Date) endDate = sa.Column(sa.Date)
meals: List[Meal] = orm.relationship(Meal, cascade="all, delete, delete-orphan") meals: List[Meal] = orm.relationship(Meal, cascade="all, delete, delete-orphan")

View file

@ -1,5 +1,3 @@
from datetime import date
import sqlalchemy as sa import sqlalchemy as sa
from mealie.db.models.model_base import SqlAlchemyBase from mealie.db.models.model_base import SqlAlchemyBase

View file

@ -57,14 +57,10 @@ class Category(SqlAlchemyBase):
@staticmethod @staticmethod
def create_if_not_exist(session, name: str = None): def create_if_not_exist(session, name: str = None):
test_slug = slugify(name) test_slug = slugify(name)
try: result = session.query(Category).filter(Category.slug == test_slug).one_or_none()
result = session.query(Category).filter(Category.slug == test_slug).one() if result:
if result: logger.info("Category exists, associating recipe")
logger.info("Category exists, associating recipe") return result
return result else:
else: logger.info("Category doesn't exists, creating tag")
logger.info("Category doesn't exists, creating tag")
return Category(name=name)
except:
logger.info("Category doesn't exists, creating category")
return Category(name=name) return Category(name=name)

View file

@ -22,7 +22,7 @@ class Tag(SqlAlchemyBase):
@validates("name") @validates("name")
def validate_name(self, key, name): def validate_name(self, key, name):
assert not name == "" assert name != ""
return name return name
def __init__(self, name) -> None: def __init__(self, name) -> None:
@ -32,16 +32,11 @@ class Tag(SqlAlchemyBase):
@staticmethod @staticmethod
def create_if_not_exist(session, name: str = None): def create_if_not_exist(session, name: str = None):
test_slug = slugify(name) test_slug = slugify(name)
try: result = session.query(Tag).filter(Tag.slug == test_slug).one_or_none()
result = session.query(Tag).filter(Tag.slug == test_slug).first()
if result: if result:
logger.info("Tag exists, associating recipe") logger.info("Tag exists, associating recipe")
return result
return result else:
else:
logger.info("Tag doesn't exists, creating tag")
return Tag(name=name)
except:
logger.info("Tag doesn't exists, creating tag") logger.info("Tag doesn't exists, creating tag")
return Tag(name=name) return Tag(name=name)

View file

@ -3,8 +3,8 @@ from fastapi.security import OAuth2PasswordBearer
from jose import JWTError, jwt from jose import JWTError, jwt
from mealie.core.config import SECRET from mealie.core.config import SECRET
from mealie.db.database import db from mealie.db.database import db
from mealie.db.db_setup import create_session, generate_session from mealie.db.db_setup import generate_session
from mealie.schema.auth import Token, TokenData from mealie.schema.auth import TokenData
from mealie.schema.user import UserInDB from mealie.schema.user import UserInDB
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/api/auth/token") oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/api/auth/token")
@ -29,6 +29,3 @@ async def get_current_user(token: str = Depends(oauth2_scheme), session=Depends(
if user is None: if user is None:
raise credentials_exception raise credentials_exception
return user return user

View file

@ -3,7 +3,7 @@ from mealie.db.database import db
from mealie.db.db_setup import generate_session from mealie.db.db_setup import generate_session
from mealie.routes.deps import get_current_user from mealie.routes.deps import get_current_user
from mealie.schema.snackbar import SnackResponse from mealie.schema.snackbar import SnackResponse
from mealie.schema.user import GroupBase, GroupInDB, UpdateGroup, UserIn, UserInDB from mealie.schema.user import GroupBase, GroupInDB, UpdateGroup, UserInDB
from sqlalchemy.orm.session import Session from sqlalchemy.orm.session import Session
router = APIRouter(prefix="/api/groups", tags=["Groups"]) router = APIRouter(prefix="/api/groups", tags=["Groups"])
@ -21,7 +21,7 @@ async def get_all_groups(
@router.get("/self", response_model=GroupInDB) @router.get("/self", response_model=GroupInDB)
async def get_current_user_group( async def get_current_user_group(
current_user: UserInDB =Depends(get_current_user), current_user: UserInDB = Depends(get_current_user),
session: Session = Depends(generate_session), session: Session = Depends(generate_session),
): ):
""" Returns the Group Data for the Current User """ """ Returns the Group Data for the Current User """

View file

@ -1,5 +1,3 @@
import datetime
from fastapi import APIRouter, Depends from fastapi import APIRouter, Depends
from mealie.db.database import db from mealie.db.database import db
from mealie.db.db_setup import generate_session from mealie.db.db_setup import generate_session

View file

@ -16,7 +16,7 @@ def get_shopping_list(
current_user=Depends(get_current_user), current_user=Depends(get_current_user),
): ):
#! Refactor into Single Database Call # ! Refactor into Single Database Call
mealplan = db.meals.get(session, id) mealplan = db.meals.get(session, id)
mealplan: MealPlanInDB mealplan: MealPlanInDB
slugs = [x.slug for x in mealplan.meals] slugs = [x.slug for x in mealplan.meals]

View file

@ -2,7 +2,7 @@ import operator
import shutil import shutil
from typing import List from typing import List
from fastapi import APIRouter, Depends, File, HTTPException, UploadFile from fastapi import APIRouter, Depends, File, UploadFile
from mealie.core.config import MIGRATION_DIR from mealie.core.config import MIGRATION_DIR
from mealie.db.db_setup import generate_session from mealie.db.db_setup import generate_session
from mealie.routes.deps import get_current_user from mealie.routes.deps import get_current_user

View file

@ -73,7 +73,7 @@ def get_all_recipes_post(body: AllRecipeRequest, session: Session = Depends(gene
@router.post("/api/recipes/category") @router.post("/api/recipes/category")
def filter_by_category(categories: list, session: Session = Depends(generate_session)): def filter_by_category(categories: list, session: Session = Depends(generate_session)):
""" pass a list of categories and get a list of recipes associated with those categories """ """ pass a list of categories and get a list of recipes associated with those categories """
#! This should be refactored into a single database call, but I couldn't figure it out # ! This should be refactored into a single database call, but I couldn't figure it out
in_category = [db.categories.get(session, slugify(cat), limit=1) for cat in categories] in_category = [db.categories.get(session, slugify(cat), limit=1) for cat in categories]
in_category = [cat.get("recipes") for cat in in_category if cat] in_category = [cat.get("recipes") for cat in in_category if cat]
in_category = [item for sublist in in_category for item in sublist] in_category = [item for sublist in in_category for item in sublist]
@ -83,7 +83,7 @@ def filter_by_category(categories: list, session: Session = Depends(generate_ses
@router.post("/api/recipes/tag") @router.post("/api/recipes/tag")
async def filter_by_tags(tags: list, session: Session = Depends(generate_session)): async def filter_by_tags(tags: list, session: Session = Depends(generate_session)):
""" pass a list of tags and get a list of recipes associated with those tags""" """ pass a list of tags and get a list of recipes associated with those tags"""
#! This should be refactored into a single database call, but I couldn't figure it out # ! This should be refactored into a single database call, but I couldn't figure it out
in_tags = [db.tags.get(session, slugify(tag), limit=1) for tag in tags] in_tags = [db.tags.get(session, slugify(tag), limit=1) for tag in tags]
in_tags = [tag.get("recipes") for tag in in_tags] in_tags = [tag.get("recipes") for tag in in_tags]
in_tags = [item for sublist in in_tags for item in sublist] in_tags = [item for sublist in in_tags for item in sublist]

View file

@ -1,12 +1,10 @@
from mealie.routes.deps import get_current_user from fastapi import APIRouter, Depends
from mealie.db.database import db from mealie.db.database import db
from mealie.db.db_setup import generate_session from mealie.db.db_setup import generate_session
from fastapi import APIRouter, Depends from mealie.routes.deps import get_current_user
from mealie.schema.category import RecipeCategoryResponse from mealie.schema.category import RecipeCategoryResponse
from mealie.schema.snackbar import SnackResponse
from sqlalchemy.orm.session import Session from sqlalchemy.orm.session import Session
from mealie.schema.snackbar import SnackResponse
from mealie.schema.snackbar import SnackResponse
router = APIRouter( router = APIRouter(
prefix="/api/categories", prefix="/api/categories",
@ -27,7 +25,9 @@ def get_all_recipes_by_category(category: str, session: Session = Depends(genera
@router.delete("/{category}") @router.delete("/{category}")
async def delete_recipe_category(category: str, session: Session = Depends(generate_session), current_user=Depends(get_current_user)): async def delete_recipe_category(
category: str, session: Session = Depends(generate_session), current_user=Depends(get_current_user)
):
"""Removes a recipe category from the database. Deleting a """Removes a recipe category from the database. Deleting a
category does not impact a recipe. The category will be removed category does not impact a recipe. The category will be removed
from any recipes that contain it""" from any recipes that contain it"""

View file

@ -1,5 +1,4 @@
from fastapi import APIRouter, Depends, File, Form, HTTPException from fastapi import APIRouter, Depends, File, Form, HTTPException
from fastapi.logger import logger
from fastapi.responses import FileResponse from fastapi.responses import FileResponse
from mealie.db.database import db from mealie.db.database import db
from mealie.db.db_setup import generate_session from mealie.db.db_setup import generate_session

View file

@ -4,7 +4,7 @@ from fastapi import APIRouter, Depends, status
from fastapi.exceptions import HTTPException from fastapi.exceptions import HTTPException
from fastapi.security import OAuth2PasswordRequestForm from fastapi.security import OAuth2PasswordRequestForm
from mealie.core import security from mealie.core import security
from mealie.core.security import authenticate_user, verify_password from mealie.core.security import authenticate_user
from mealie.db.db_setup import generate_session from mealie.db.db_setup import generate_session
from mealie.routes.deps import get_current_user from mealie.routes.deps import get_current_user
from mealie.schema.snackbar import SnackResponse from mealie.schema.snackbar import SnackResponse

View file

@ -160,4 +160,4 @@ async def delete_user(
if current_user.id == id or current_user.admin: if current_user.id == id or current_user.admin:
db.users.delete(session, id) db.users.delete(session, id)
return SnackResponse.error(f"User Deleted") return SnackResponse.error("User Deleted")

View file

@ -1,6 +1,7 @@
from pydantic import BaseModel from pydantic import BaseModel
from typing import Optional from typing import Optional
class Token(BaseModel): class Token(BaseModel):
access_token: str access_token: str
token_type: str token_type: str

View file

@ -131,7 +131,7 @@ class ImportDatabase:
return theme_imports return theme_imports
def import_settings(self): #! Broken def import_settings(self): # ! Broken
settings_file = self.import_dir.joinpath("settings", "settings.json") settings_file = self.import_dir.joinpath("settings", "settings.json")
settings = ImportDatabase.read_models_file(settings_file, SiteSettings) settings = ImportDatabase.read_models_file(settings_file, SiteSettings)
settings = settings[0] settings = settings[0]

View file

@ -1,13 +1,11 @@
from datetime import date, timedelta, timezone from datetime import date, timedelta
from typing import Union from typing import Union
import pytz
from mealie.db.database import db from mealie.db.database import db
from mealie.db.db_setup import create_session from mealie.db.db_setup import create_session
from mealie.schema.meal import MealIn, MealOut, MealPlanIn, MealPlanInDB, MealPlanProcessed from mealie.schema.meal import MealIn, MealOut, MealPlanIn, MealPlanInDB, MealPlanProcessed
from mealie.schema.recipe import Recipe from mealie.schema.recipe import Recipe
from mealie.schema.user import GroupInDB from mealie.schema.user import GroupInDB
from pydantic.tools import T
from sqlalchemy.orm.session import Session from sqlalchemy.orm.session import Session

View file

@ -7,7 +7,6 @@ from pathlib import Path
from mealie.core.config import IMG_DIR, MIGRATION_DIR, TEMP_DIR from mealie.core.config import IMG_DIR, MIGRATION_DIR, TEMP_DIR
from mealie.schema.recipe import Recipe from mealie.schema.recipe import Recipe
from mealie.services.scraper.cleaner import Cleaner from mealie.services.scraper.cleaner import Cleaner
from mealie.core.config import IMG_DIR, TEMP_DIR
from mealie.db.database import db from mealie.db.database import db

View file

@ -77,7 +77,7 @@ class Cleaner:
return [{"text": Cleaner._instruction(line)} for line in instructions.splitlines() if line] return [{"text": Cleaner._instruction(line)} for line in instructions.splitlines() if line]
# Plain strings in a list # Plain strings in a list
elif isinstance(instructions, list) and isinstance(instructions[0], list): elif isinstance(instructions, list) and isinstance(instructions[0], str):
return [{"text": Cleaner._instruction(step)} for step in instructions] return [{"text": Cleaner._instruction(step)} for step in instructions]
# Dictionaries (let's assume it's a HowToStep) in a list # Dictionaries (let's assume it's a HowToStep) in a list
@ -106,6 +106,7 @@ class Cleaner:
if step["@type"] == "HowToStep" if step["@type"] == "HowToStep"
] ]
except Exception as e: except Exception as e:
print(e)
# Not "@type", try "type" # Not "@type", try "type"
try: try:
return [ return [
@ -121,11 +122,11 @@ class Cleaner:
@staticmethod @staticmethod
def _instruction(line) -> str: def _instruction(line) -> str:
l = Cleaner.html(line.strip()) clean_line = Cleaner.html(line.strip())
# Some sites erroneously escape their strings on multiple levels # Some sites erroneously escape their strings on multiple levels
while not l == (l := html.unescape(l)): while not clean_line == (clean_line := html.unescape(clean_line)):
pass pass
return l return clean_line
@staticmethod @staticmethod
def ingredient(ingredients: list) -> str: def ingredient(ingredients: list) -> str:

View file

@ -39,7 +39,7 @@ def extract_recipe_from_html(html: str, url: str) -> dict:
if not scraped_recipes: if not scraped_recipes:
scraped_recipes: List[dict] = scrape_schema_recipe.scrape_url(url, python_objects=True) scraped_recipes: List[dict] = scrape_schema_recipe.scrape_url(url, python_objects=True)
except Exception as e: except Exception as e:
# trying without python_objects print(e)
scraped_recipes: List[dict] = scrape_schema_recipe.loads(html) scraped_recipes: List[dict] = scrape_schema_recipe.loads(html)
dump_last_json(scraped_recipes) dump_last_json(scraped_recipes)