David Kruger 4ee91edc61 Start of 5etools utilities and library
Copying over the bestiary from dnd_monster_stats and working on a
similar SpellList object and Spell DB.
2025-05-20 20:33:55 -07:00

37 lines
990 B
Python

import argparse
import os
import re
import pathlib
def build_argument_parser(description: str) -> argparse.ArgumentParser:
parser = argparse.ArgumentParser(description=description)
parser.add_argument(
"--data-dir",
"-d",
type=valid_directory,
required=True,
help="Data directory from 5etools",
)
parser.add_argument(
"--source-code",
"-s",
action="append",
metavar="CODE",
type=valid_source_code,
help="Filter data to just the given sources, may be provided multiple times",
)
return parser
def valid_directory(path: str) -> pathlib.Path:
if os.path.isdir(path):
return pathlib.Path(os.path.realpath(path))
raise argparse.ArgumentTypeError(f"{path} is not a directory")
def valid_source_code(code: str) -> str:
if re.match(r"^[A-Z]+$", code) is None:
raise argparse.ArgumentTypeError(f"{code} is not a valid data source code")
return code