mirror of
https://github.com/mealie-recipes/mealie.git
synced 2025-05-24 01:12:54 -04:00
* add basic pre-commit file * add flake8 * add isort * add pep585-upgrade (typing upgrades) * use namespace for import * add mypy * update ci for backend * flake8 scope * fix version format * update makefile * disable strict option (temporary) * fix mypy issues * upgrade type hints (pre-commit) * add vscode typing check * add types to dev deps * remote container draft * update setup script * update compose version * run setup on create * dev containers update * remove unused pages * update setup tips * expose ports * Update pre-commit to include flask8-print (#1053) * Add in flake8-print to pre-commit * pin version of flake8-print * formatting * update getting strated docs * add mypy to pre-commit * purge .mypy_cache on clean * drop mypy Co-authored-by: zackbcom <zackbcom@users.noreply.github.com>
36 lines
902 B
Python
36 lines
902 B
Python
from mealie.schema.recipe.recipe import Recipe
|
|
|
|
from .scraper_strategies import ABCScraperStrategy, RecipeScraperOpenGraph, RecipeScraperPackage
|
|
|
|
|
|
class RecipeScraper:
|
|
"""
|
|
Scrapes recipes from the web.
|
|
"""
|
|
|
|
# List of recipe scrapers. Note that order matters
|
|
scrapers: list[type[ABCScraperStrategy]]
|
|
|
|
def __init__(self, scrapers: list[type[ABCScraperStrategy]] = None) -> None:
|
|
if scrapers is None:
|
|
scrapers = [
|
|
RecipeScraperPackage,
|
|
RecipeScraperOpenGraph,
|
|
]
|
|
|
|
self.scrapers = scrapers
|
|
|
|
def scrape(self, url: str) -> Recipe | None:
|
|
"""
|
|
Scrapes a recipe from the web.
|
|
"""
|
|
|
|
for scraper_type in self.scrapers:
|
|
scraper = scraper_type(url)
|
|
recipe = scraper.parse()
|
|
|
|
if recipe is not None:
|
|
return recipe
|
|
|
|
return None
|