mirror of
https://github.com/hay-kot/mealie.git
synced 2025-08-22 14:33:33 -07:00
fix flake8 problems
This commit is contained in:
parent
54f8fe32fa
commit
feef5857e5
27 changed files with 50 additions and 87 deletions
|
@ -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():
|
||||||
|
|
|
@ -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")
|
||||||
|
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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}")
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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")
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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 """
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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]
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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]
|
||||||
|
|
|
@ -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"""
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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")
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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]
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue