From 2e6265e3211969182c8b39421661bb546dae6878 Mon Sep 17 00:00:00 2001 From: Chris Berkhout Date: Sun, 11 Apr 2021 17:51:15 +0200 Subject: [PATCH] Basic sources and source commands. --- src/pricehist/cli.py | 48 +++++++++++++++++++------- src/pricehist/location.py | 7 ---- src/pricehist/sources/CoinMarketCap.py | 9 +++++ src/pricehist/sources/ECB.py | 10 ++++++ src/pricehist/sources/__init__.py | 7 ++++ 5 files changed, 62 insertions(+), 19 deletions(-) delete mode 100644 src/pricehist/location.py create mode 100644 src/pricehist/sources/CoinMarketCap.py create mode 100644 src/pricehist/sources/ECB.py create mode 100644 src/pricehist/sources/__init__.py diff --git a/src/pricehist/cli.py b/src/pricehist/cli.py index 0ca59cd..407ab14 100644 --- a/src/pricehist/cli.py +++ b/src/pricehist/cli.py @@ -2,12 +2,30 @@ import argparse import sys from datetime import datetime -from pricehist.location import greet +from pricehist import sources def cli(args=None): parser = build_parser() args = parser.parse_args() + if (args.command == 'sources'): + cmd_sources(args) + elif (args.command == 'source'): + cmd_source(args) + else: + parser.print_help() + +def cmd_sources(args): + width = max([len(identifier) for identifier in sources.by_id.keys()]) + for identifier, source in sources.by_id.items(): + print(f'{identifier.ljust(width)} {source.name()}') + +def cmd_source(args): + source = sources.by_id[args.identifier] + print(f'ID : {source.id()}') + print(f'Name : {source.name()}') + pass + def build_parser(): def valid_date(s): if s == 'today': @@ -22,21 +40,27 @@ def build_parser(): def today(): return str(datetime.now().date()) - parser = argparse.ArgumentParser(description='Fetch historical price data from CoinMarketCap.com.') + parser = argparse.ArgumentParser(description='Fetch historical price data') - parser.add_argument('identifier', metavar='ID', type=str, - help='currency or coin identifier from URL (example: bitcoin-cash)') + subparsers = parser.add_subparsers(title='commands', dest='command') - parser.add_argument('--start', dest='start', type=valid_date, - default='2009-01-03', - help='start date (default: 2009-01-03)') + sources_parser = subparsers.add_parser('sources', help='list sources') - parser.add_argument('--end', dest='end', type=valid_date, - default=today(), - help='end date (default: today)') + source_parser = subparsers.add_parser('source', help='show source details') + source_parser.add_argument('identifier', metavar='ID', type=str, + choices=sources.by_id.keys(), + help='the source identifier') - parser.add_argument('--csv', dest='csv', action='store_true', - help='print full data as csv (instead of Ledger pricedb format)') + # 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/src/pricehist/location.py b/src/pricehist/location.py deleted file mode 100644 index d48ee12..0000000 --- a/src/pricehist/location.py +++ /dev/null @@ -1,7 +0,0 @@ -"""Send greetings.""" - -def greet(tz): - """Greet a location.""" - friendly_time = "now" - location = tz.split("/")[-1].replace("_"," ") - return f"Hello, {location}! The time is {friendly_time}." diff --git a/src/pricehist/sources/CoinMarketCap.py b/src/pricehist/sources/CoinMarketCap.py new file mode 100644 index 0000000..ab9c666 --- /dev/null +++ b/src/pricehist/sources/CoinMarketCap.py @@ -0,0 +1,9 @@ +class CoinMarketCap(): + + @staticmethod + def id(): + return 'coinmarketcap' + + @staticmethod + def name(): + return 'CoinMarketCap.com' diff --git a/src/pricehist/sources/ECB.py b/src/pricehist/sources/ECB.py new file mode 100644 index 0000000..f989e6b --- /dev/null +++ b/src/pricehist/sources/ECB.py @@ -0,0 +1,10 @@ +class ECB(): + + @staticmethod + def id(): + return 'ecb' + + @staticmethod + def name(): + return 'European Central Bank' + diff --git a/src/pricehist/sources/__init__.py b/src/pricehist/sources/__init__.py new file mode 100644 index 0000000..06db3f6 --- /dev/null +++ b/src/pricehist/sources/__init__.py @@ -0,0 +1,7 @@ +from .CoinMarketCap import CoinMarketCap +from .ECB import ECB + +by_id = { + CoinMarketCap.id(): CoinMarketCap, + ECB.id(): ECB +}