import argparse from dataclasses import dataclass from pathlib import Path @dataclass class Opts: presenter_path: Path headless: bool width: int height: int pr_engine_name: str pr_engine_device: int pr_deliver_name: str pr_deliver_device: int pr_object_loader_name: str pr_object_loader_file: str pr_anime_loader_name: str pr_anime_loader_file: str tr_deliver_name: str tr_deliver_device: int tr_load_name: str def parse() -> Opts: parser = argparse.ArgumentParser("BasaltTrainer") parser.add_argument('--presenter-path', type=Path, required=True, help='Path to Presenter executable') parser.add_argument('--headless', action='store_true', help='Run Presenter in headless mode') parser.add_argument('--width', type=int, required=True, default=600, help='Presenter window width') parser.add_argument('--height', type=int, required=True, default=600, help='Presenter window height') parser.add_argument('--pr-engine-name', type=str, required=True, help='Presenter render engine name') parser.add_argument('--pr-engine-device', type=int, required=True, help='Presenter render engine device ID') parser.add_argument('--pr-deliver-name', type=str, required=True, help='Presenter data deliver name') parser.add_argument('--pr-deliver-device', type=int, required=True, help='Presenter data deliver device ID') parser.add_argument('--pr-object-loader-name', type=str, required=True, help='Presenter object loader name') parser.add_argument('--pr-object-loader-file', type=str, required=True, help='Presenter object loader file path') parser.add_argument('--pr-anime-loader-name', type=str, required=True, help='Presenter anime loader name') parser.add_argument('--pr-anime-loader-file', type=str, required=True, help='Presenter anime file path') parser.add_argument('--tr-deliver-name', type=str, required=True, help='Trainer data deliver name') parser.add_argument('--tr-deliver-device', type=int, required=True, help='Trainer data deliver device ID') parser.add_argument('--tr-load-name', type=str, required=True, help='Trainer load name') args = parser.parse_args() return Opts( presenter_path=args.presenter_path, headless=args.headless, width=args.width, height=args.height, pr_engine_name=args.pr_engine_name, pr_engine_device=args.pr_engine_device, pr_deliver_name=args.pr_deliver_name, pr_deliver_device=args.pr_deliver_device, pr_object_loader_name=args.pr_object_loader_name, pr_object_loader_file=args.pr_object_loader_file, pr_anime_loader_name=args.pr_anime_loader_name, pr_anime_loader_file=args.pr_anime_loader_file, tr_deliver_name=args.tr_deliver_name, tr_deliver_device=args.tr_deliver_device, tr_load_name=args.tr_load_name )