47 lines
1.2 KiB
Python
47 lines
1.2 KiB
Python
from pydoc import apropos
|
|
from sqlalchemy.orm import sessionmaker
|
|
from recipe_graph import db
|
|
import json
|
|
import argparse
|
|
import logging
|
|
import sys
|
|
|
|
|
|
def load_file(f_name: str):
|
|
with open(f_name) as f:
|
|
sites = json.load(f)
|
|
return sites
|
|
|
|
|
|
def setup_argparser(args) -> argparse.Namespace:
|
|
parser = argparse.ArgumentParser(description="Import recipes into database")
|
|
parser.add_argument("file", type=str, help="JSON file with recipe site information")
|
|
parser.add_argument("-v", "--verbose", action="store_true")
|
|
|
|
return parser.parse_args(args)
|
|
|
|
|
|
def setup_logging(args: argparse.Namespace) -> logging.Logger:
|
|
logger = logging.Logger("insert_sites", logging.WARNING)
|
|
if args.verbose:
|
|
logger.setLevel(logging.INFO)
|
|
logging.getLogger("sqlalchemy.engine").setLevel(logging.INFO)
|
|
return logger
|
|
|
|
|
|
def main(): # pragma: no cover
|
|
args = setup_argparser(sys.argv[1:])
|
|
logger = setup_logging(args)
|
|
|
|
S = db.get_session()
|
|
sites = load_file(args.file)
|
|
|
|
with S.begin() as session:
|
|
for site in sites:
|
|
logger.info(f"Adding {site}")
|
|
session.add(db.RecipeSite(**site))
|
|
|
|
|
|
if __name__ == "__main__": # pragma: no cover
|
|
main()
|