VNTools/vnrecode/config.py

48 lines
2.2 KiB
Python

from argparse import Namespace, ArgumentParser
from dataclasses import dataclass
from sysconfig import get_path
from typing import Any
import tomllib
import os
@dataclass
class Config:
config: dict[str, Any]
args: Namespace
@classmethod
def setup_config(cls):
default_config = os.path.join(get_path('purelib'), "vnrecode", "vnrecode.toml")
parser = ArgumentParser(prog="vnrecode",
description="Python utility to compress Visual Novel Resources"
)
parser.add_argument("source", help="SourceDir")
parser.add_argument("-c", "--config", default=default_config, help="ConfigFile")
parser.add_argument("-u", action="store_true", help="CopyUnprocessed")
parser.add_argument("-f", "--force", action="store_true", help="ForceCompress")
parser.add_argument("-m", "--mimic", action="store_true", help="MimicMode")
parser.add_argument("-s", "--silent", action="store_true", help="HideErrors")
parser.add_argument("--webprgba", action="store_true", help="WebpRGBA")
parser.add_argument("-j", "--jobs", type=int, help="Workers")
parser.add_argument("-ae", "--aext", help="Audio Extension")
parser.add_argument("-ab", "--abit", help="Audio Bitrate")
parser.add_argument("-id", "--idown", type=int, help="Image Downscale")
parser.add_argument("-ie", "--iext", help="Image Extension")
parser.add_argument("-ife", "--ifallext", help="Image Fallback Extension")
parser.add_argument("-il", "--ilossless", action="store_true", help="Image Lossless")
parser.add_argument("-iq", "--iquality", help="Image Quality")
parser.add_argument("--vcrf", help="Video CRF")
parser.add_argument("-vs", "--vskip", help="Video Skip")
parser.add_argument("-ve", "--vext", help="Video Extension")
parser.add_argument("-vc", "--vcodec", help="Video Codec")
args = parser.parse_args()
if os.path.isfile(args.config):
with open(args.config, "rb") as cfile:
config = tomllib.load(cfile)
else:
print("Failed to find config. Check `vnrecode -h` to more info")
exit(255)
return cls(config=config, args=args)