Pull validation helpers out of build_parser() for easier testing.

This commit is contained in:
Chris Berkhout 2021-08-02 16:42:12 +02:00
parent 784770d9f3
commit 66e95c1ac4

View file

@ -69,7 +69,6 @@ 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 == "":
@ -77,6 +76,7 @@ def build_parser():
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()
@ -86,18 +86,18 @@ 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:
@ -106,6 +106,12 @@ def build_parser():
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",
) )