96 lines
3.7 KiB
Python
96 lines
3.7 KiB
Python
import argparse
|
|
import logging
|
|
import pathlib
|
|
import sys
|
|
from typing import List
|
|
|
|
from .. import __version__
|
|
from ..service import SkyeWeave
|
|
from ..config import AtlasAPIConfig, LoggingConfig, PathConfig
|
|
from ..utils import rmdir, disable_tqdm
|
|
|
|
LOGGER = logging.getLogger(LoggingConfig.NAME)
|
|
|
|
# pylint: disable=too-few-public-methods
|
|
class CLIArguments(argparse.Namespace):
|
|
"""
|
|
Default Arguments when calling the CLI
|
|
"""
|
|
output: str
|
|
id: int
|
|
reset: bool
|
|
nocache: bool
|
|
filter: List[str]
|
|
timeout: int
|
|
quiet: bool
|
|
|
|
def parse_arguments(arguments):
|
|
"""
|
|
Create a parser and parse the arguments of sys.argv based on the Arguments Namespace
|
|
Returns arguments and extra arguments separately
|
|
"""
|
|
parser = argparse.ArgumentParser(
|
|
prog="skyeweave",
|
|
description="CLI tool to automatically generate expression sheets for servants",
|
|
epilog="If there are any issues during execution, it helps to clear the cache from time to time")
|
|
|
|
parser.add_argument("--version", action="version", version=f"skyeweave {__version__}")
|
|
parser.add_argument("--output", action="store", type=str, default=None, dest="output", help="Set the output location. This can be an absolute or relative path")
|
|
parser.add_argument("--id", action="store", type=int, default=None, dest="id", help="Set the servantId/charaId - Skips user prompt when provided")
|
|
parser.add_argument("--filter", action="extend", nargs="+", dest="filter", help='SSpecify which spritesheets will actually be used (one or more charaIds)')
|
|
parser.add_argument("--timeout", action="store", type=int, default=None, dest="timeout", help="Set the timeout for all requests towards AtlasAcademy (default: 10s)")
|
|
parser.add_argument("--no-cache", action="store_true", default=False, dest="nocache", help="Clear cache for this id, keeping all other files")
|
|
parser.add_argument("--reset", action="store_true", default=False, dest="reset", help="Delete any already downloaded assets")
|
|
parser.add_argument("--quiet", "-q", action="store_true", default=False, dest="quiet", help="Mute output and hide progress bars")
|
|
|
|
return parser.parse_known_args(arguments, namespace=CLIArguments)
|
|
|
|
def __welcome():
|
|
print("-------------------------------------------")
|
|
print(" Welcome to skyeweave, an expression sheet ")
|
|
print(" composer developed by Firq ")
|
|
print("-------------------------------------------")
|
|
|
|
def validate_id(input_id: None | str) -> int:
|
|
input_id = input_id or input("Enter servantId or charaId: ")
|
|
|
|
try:
|
|
if int(input_id) <= 0:
|
|
raise ValueError
|
|
except ValueError:
|
|
LOGGER.error("Servant ID has to be a valid integer above 0")
|
|
sys.exit(1)
|
|
|
|
return int(input_id)
|
|
|
|
def run():
|
|
args, _ = parse_arguments(sys.argv[1:])
|
|
if args.output:
|
|
PathConfig.OUTPUT = pathlib.Path(args.output)
|
|
if args.timeout and args.timeout >= 0:
|
|
AtlasAPIConfig.TIMEOUT = args.timeout
|
|
if args.quiet:
|
|
disable_tqdm()
|
|
LOGGER.disabled = True
|
|
else:
|
|
__welcome()
|
|
|
|
input_id = validate_id(args.id)
|
|
|
|
if args.nocache:
|
|
cachepath = PathConfig.IMAGES / str(input_id)
|
|
if input_id > 10000:
|
|
cachepath = PathConfig.IMAGES / "manual" / str(input_id)
|
|
if cachepath.exists():
|
|
rmdir(cachepath)
|
|
LOGGER.info("Successfully cleared cached assets")
|
|
else:
|
|
LOGGER.info("No cache to clear was found, continuing")
|
|
|
|
if args.reset and PathConfig.IMAGES.exists():
|
|
rmdir(PathConfig.IMAGES)
|
|
LOGGER.info("Successfully reset local storage")
|
|
|
|
weaver = SkyeWeave(input_id, args.filter)
|
|
weaver.download()
|
|
weaver.compose()
|