import asyncio from dataclasses import dataclass from argparse import ArgumentParser from pathlib import Path from datetime import datetime from tracker import Tracker @dataclass class ArgumentInterface: drawing_id: str download_path: Path download_format: str download_delay: int parser = ArgumentParser() parser.add_argument('drawing_id', type=str) parser.add_argument('--download-path', type=Path, default=Path('downloads')) parser.add_argument('--download-format', type=str, default='{timestamp}__{drawing_id}.{extension}') parser.add_argument('--download-delay', type=int, default=60) args = ArgumentInterface(**vars(parser.parse_args())) async def main(): try: async with Tracker(headless=False) as tracker: await tracker.open_drawing(args.drawing_id) while args.download_delay > 0: print(f'downloading {len(tracker.pages)} drawing(s); delay={args.download_delay}') timestamp = datetime.now().strftime("%Y-%m-%d_%H-%M-%S") await asyncio.gather( asyncio.sleep(max(0, args.download_delay)), *[ tracker.download( drawing_id, args.download_path.joinpath( args.download_format.format(**{ 'timestamp': timestamp, 'drawing_id': drawing_id, 'extension': 'psd' # TODO: no hardcode >:( }) ) ) for drawing_id in tracker.pages.keys() ], return_exceptions=True ) except Exception as e: print(e) if __name__ == '__main__': asyncio.run(main())