I'm currently building a command line interface in Python 3 with the argparse
module.
I have a situation where I need to define choices (e.g. "today", "yesterday", "week"
, ...) for an optional argparse
argument -s
of a subparser, but also allow a date string, but only if it can be successfully parsed as datetime.datetime
with a predefined format (e.g. "%Y-%m-%d"), otherwise an exception would be raise
d.
parser.add_argument(
"-s",
"--start-date",
type=str,
default="today",
choices=["today", "yesterday", "week", <date>], # date should be accepted only if datetime.strptime(date, "%Y-%m-%d") is successful
help="start date help",
)
Is this somehow possible?
From my previous question, I believe this will suffice you, the custom function that validates your input. If it is the base case with today, yesterday, week, you return the strung, otherwise you try to parse the date object.
You can change it however you see fit, but this illustrates your need.
import argparse
def parse_date(s):
if s.lower() in ["today", "yesterday", "week"]:
return s
return datetime.datetime.strptime(s, "%Y-%m-%d")
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument(
"-s",
"--start-date",
type=lambda s: parse_date(s),
default="today",
help="start date help",
)