Pull validation helpers out of build_parser() for easier testing.
This commit is contained in:
parent
784770d9f3
commit
66e95c1ac4
1 changed files with 44 additions and 38 deletions
|
@ -69,15 +69,15 @@ def cli(argv=sys.argv, output_file=sys.stdout):
|
||||||
logging.debug(f"Ended pricehist run at {datetime.now()}.")
|
logging.debug(f"Ended pricehist run at {datetime.now()}.")
|
||||||
|
|
||||||
|
|
||||||
def build_parser():
|
def valid_pair(s):
|
||||||
def valid_pair(s):
|
|
||||||
base, quote = (s + "/").split("/")[0:2]
|
base, quote = (s + "/").split("/")[0:2]
|
||||||
if base == "":
|
if base == "":
|
||||||
msg = f"No base found in the requested pair '{s}'."
|
msg = f"No base found in the requested pair '{s}'."
|
||||||
raise argparse.ArgumentTypeError(msg)
|
raise argparse.ArgumentTypeError(msg)
|
||||||
return (base, quote)
|
return (base, quote)
|
||||||
|
|
||||||
def valid_date(s):
|
|
||||||
|
def valid_date(s):
|
||||||
if s == "today":
|
if s == "today":
|
||||||
return today()
|
return today()
|
||||||
try:
|
try:
|
||||||
|
@ -86,26 +86,32 @@ def build_parser():
|
||||||
msg = f"Not a valid YYYY-MM-DD date: '{s}'."
|
msg = f"Not a valid YYYY-MM-DD date: '{s}'."
|
||||||
raise argparse.ArgumentTypeError(msg)
|
raise argparse.ArgumentTypeError(msg)
|
||||||
|
|
||||||
def previous_valid_date(s):
|
|
||||||
|
def valid_date_before(s):
|
||||||
return (
|
return (
|
||||||
datetime.strptime(valid_date(s), "%Y-%m-%d").date() - timedelta(days=1)
|
datetime.strptime(valid_date(s), "%Y-%m-%d").date() - timedelta(days=1)
|
||||||
).isoformat()
|
).isoformat()
|
||||||
|
|
||||||
def following_valid_date(s):
|
|
||||||
|
def valid_date_after(s):
|
||||||
return (
|
return (
|
||||||
datetime.strptime(valid_date(s), "%Y-%m-%d").date() + timedelta(days=1)
|
datetime.strptime(valid_date(s), "%Y-%m-%d").date() + timedelta(days=1)
|
||||||
).isoformat()
|
).isoformat()
|
||||||
|
|
||||||
def today():
|
|
||||||
return datetime.now().date().isoformat()
|
|
||||||
|
|
||||||
def valid_char(s):
|
def valid_char(s):
|
||||||
if len(s) == 1:
|
if len(s) == 1:
|
||||||
return s
|
return s
|
||||||
else:
|
else:
|
||||||
msg = f"Not a single character: '{s}'."
|
msg = f"Not a single character: '{s}'."
|
||||||
raise argparse.ArgumentTypeError(msg)
|
raise argparse.ArgumentTypeError(msg)
|
||||||
|
|
||||||
|
|
||||||
|
def today():
|
||||||
|
return datetime.now().date().isoformat()
|
||||||
|
|
||||||
|
|
||||||
|
def build_parser():
|
||||||
def formatter(prog):
|
def formatter(prog):
|
||||||
return argparse.HelpFormatter(prog, max_help_position=50)
|
return argparse.HelpFormatter(prog, max_help_position=50)
|
||||||
|
|
||||||
|
@ -245,7 +251,7 @@ def build_parser():
|
||||||
"--startx",
|
"--startx",
|
||||||
dest="start",
|
dest="start",
|
||||||
metavar="DATE",
|
metavar="DATE",
|
||||||
type=following_valid_date,
|
type=valid_date_after,
|
||||||
help="start date, exclusive",
|
help="start date, exclusive",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -264,7 +270,7 @@ def build_parser():
|
||||||
"--endx",
|
"--endx",
|
||||||
dest="end",
|
dest="end",
|
||||||
metavar="DATE",
|
metavar="DATE",
|
||||||
type=previous_valid_date,
|
type=valid_date_before,
|
||||||
help="end date, exclusive",
|
help="end date, exclusive",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue