""" download files with URLs from DB """ from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter from platformdirs import PlatformDirs from pathlib import Path import yaml from sqlalchemy import create_engine, select from sqlalchemy.orm import sessionmaker from schema import Base, KontorDB, MediaFile from config import get_logger parser = ArgumentParser(formatter_class=ArgumentDefaultsHelpFormatter) parser.add_argument('--verbose', '-v', action='count', default=0) parser.add_argument('--config', '-c', default='kontor-docker') parser.add_argument('--dir', '-d', default='/data/media') parser.add_argument('--tool', '-t', default='yt-dlp') parser.add_argument('--dry-run', '-m', action='store_true') parser.add_argument('--rename', '-r', action='store_true') args = parser.parse_args() if __name__ == '__main__': log = get_logger(args.verbose, args.config) log.info('kontor.download started') dirs = PlatformDirs(args.config) database_config = Path(dirs.user_config_dir, 'database-config.yaml') with open(database_config, 'rt') as f: db_config = yaml.safe_load(f.read()) print(db_config) connect_string = ('mariadb+mariadbconnector://{}:{}@{}:{}/{}'.format( db_config['mariadb']['user'], db_config['mariadb']['password'], db_config['mariadb']['host'], db_config['mariadb']['port'], db_config['mariadb']['database'] )) engine = create_engine(connect_string) Base.metadata.create_all(bind=engine, checkfirst=True) __session__ = sessionmaker(bind=engine) _filter = {'should_download': 1} with __session__() as session: files = session.query(MediaFile).filter_by(**_filter).all() log.info("found %d entries", len(files)) files2 = session.query(MediaFile).filter(MediaFile.should_download == 1).all() log.info("found %d entries", len(files2)) for mediafile in files2: mediafile.download_file(download_dir=args.dir, dl_tool="yt-dlp") log.info("Datei {} erfolgreich heruntergeladen".format(mediafile.file_name)) if args.rename: current_file = Path(mediafile.file_name) new_file_path = current_file.with_name(f"{mediafile.id}{current_file.suffix}") current_file.rename(Path(new_file_path)) mediafile.cloud_link = new_file_path session.add(mediafile) session.commit() log.info('kontor.download finished')