From a1118db739b289cf347472e72d8e1042dd656886 Mon Sep 17 00:00:00 2001 From: Chris Berkhout Date: Sun, 28 Feb 2021 22:21:01 +0100 Subject: [PATCH] argparse stuff --- src/pricehist/cli.py | 42 ++++++++++++++++++++++++++++++++----- tests/pricehist/__init__.py | 0 2 files changed, 37 insertions(+), 5 deletions(-) create mode 100644 tests/pricehist/__init__.py diff --git a/src/pricehist/cli.py b/src/pricehist/cli.py index 8dc4775..0ca59cd 100644 --- a/src/pricehist/cli.py +++ b/src/pricehist/cli.py @@ -1,10 +1,42 @@ +import argparse import sys +from datetime import datetime from pricehist.location import greet def cli(args=None): - """Process command line arguments.""" - if not args: - args = sys.argv[1:] - tz = args[0] - print(greet(tz)) + parser = build_parser() + args = parser.parse_args() + +def build_parser(): + def valid_date(s): + if s == 'today': + return today() + try: + datetime.strptime(s, "%Y-%m-%d") + return s + except ValueError: + msg = "Not a valid date: '{0}'.".format(s) + raise argparse.ArgumentTypeError(msg) + + def today(): + return str(datetime.now().date()) + + parser = argparse.ArgumentParser(description='Fetch historical price data from CoinMarketCap.com.') + + parser.add_argument('identifier', metavar='ID', type=str, + help='currency or coin identifier from URL (example: bitcoin-cash)') + + parser.add_argument('--start', dest='start', type=valid_date, + default='2009-01-03', + help='start date (default: 2009-01-03)') + + parser.add_argument('--end', dest='end', type=valid_date, + default=today(), + help='end date (default: today)') + + parser.add_argument('--csv', dest='csv', action='store_true', + help='print full data as csv (instead of Ledger pricedb format)') + + return parser + diff --git a/tests/pricehist/__init__.py b/tests/pricehist/__init__.py new file mode 100644 index 0000000..e69de29