From f5e6e01298bca47f41df22243364d7e64c7ba6f1 Mon Sep 17 00:00:00 2001 From: Chris Berkhout Date: Sun, 25 Apr 2021 13:15:31 +0200 Subject: [PATCH] --rename-base, --rename-quote and --rename-time options. --- src/pricehist/cli.py | 38 +++++++++++++++++++++++++++-- src/pricehist/outputs/beancount.py | 2 +- src/pricehist/outputs/csv.py | 2 +- src/pricehist/outputs/gnucashsql.py | 4 +-- src/pricehist/outputs/ledger.py | 4 +-- 5 files changed, 42 insertions(+), 8 deletions(-) diff --git a/src/pricehist/cli.py b/src/pricehist/cli.py index 7922868..2de05e4 100644 --- a/src/pricehist/cli.py +++ b/src/pricehist/cli.py @@ -44,8 +44,20 @@ def cmd_source(args): def cmd_fetch(args): source = sources.by_id[args.source]() output = outputs.by_type[args.output]() + prices = source.fetch(args.pair, args.start, args.end) - print(output.format(prices), end="") + + if args.renamebase or args.renamequote: + prices = [ + p._replace( + base=(args.renamebase or p.base), + quote=(args.renamequote or p.quote), + ) + for p in prices + ] + + time = args.renametime or "00:00:00" + print(output.format(prices, time=time), end="") def build_parser(): @@ -94,7 +106,8 @@ def build_parser(): help="fetch prices", usage=( "pricehist fetch SOURCE PAIR " - "[-h] (-s DATE | -sx DATE) [-e DATE] [-o FMT]" + "[-h] (-s DATE | -sx DATE) [-e DATE] [-o FMT] " + "[--rename-base SYM] [--rename-quote SYM] [--rename-time TIME]" ), ) fetch_parser.add_argument( @@ -146,5 +159,26 @@ def build_parser(): default=outputs.default, help=f"output format (default: {outputs.default})", ) + fetch_parser.add_argument( + "--rename-base", + dest="renamebase", + metavar="SYM", + type=str, + help="rename base symbol", + ) + fetch_parser.add_argument( + "--rename-quote", + dest="renamequote", + metavar="SYM", + type=str, + help="rename quote symbol", + ) + fetch_parser.add_argument( + "--rename-time", + dest="renametime", + metavar="TIME", + type=str, + help="set a particular time of day, e.g. 23:59:59", + ) return parser diff --git a/src/pricehist/outputs/beancount.py b/src/pricehist/outputs/beancount.py index ae924de..3ba535e 100644 --- a/src/pricehist/outputs/beancount.py +++ b/src/pricehist/outputs/beancount.py @@ -1,5 +1,5 @@ class Beancount: - def format(self, prices): + def format(self, prices, time=None): lines = [] for price in prices: lines.append( diff --git a/src/pricehist/outputs/csv.py b/src/pricehist/outputs/csv.py index 14b6d82..ef2856c 100644 --- a/src/pricehist/outputs/csv.py +++ b/src/pricehist/outputs/csv.py @@ -1,5 +1,5 @@ class CSV: - def format(self, prices): + def format(self, prices, time=None): lines = ["date,base,quote,amount"] for price in prices: line = ",".join([price.date, price.base, price.quote, str(price.amount)]) diff --git a/src/pricehist/outputs/gnucashsql.py b/src/pricehist/outputs/gnucashsql.py index fddbf44..0118566 100644 --- a/src/pricehist/outputs/gnucashsql.py +++ b/src/pricehist/outputs/gnucashsql.py @@ -6,13 +6,13 @@ from pricehist import __version__ class GnuCashSQL: - def format(self, prices): + def format(self, prices, time=None): source = "pricehist" typ = "unknown" values_parts = [] for price in prices: - date = f"{price.date} 00:00:00" + date = f"{price.date} {time}" m = hashlib.sha256() m.update( "".join( diff --git a/src/pricehist/outputs/ledger.py b/src/pricehist/outputs/ledger.py index 98e5f53..869c4fa 100644 --- a/src/pricehist/outputs/ledger.py +++ b/src/pricehist/outputs/ledger.py @@ -1,9 +1,9 @@ class Ledger: - def format(self, prices): + def format(self, prices, time=None): lines = [] for price in prices: date = str(price.date).translate(str.maketrans("-", "/")) - lines.append(f"P {date} 00:00:00 {price.base} {price.amount} {price.quote}") + lines.append(f"P {date} {time} {price.base} {price.amount} {price.quote}") return "\n".join(lines) + "\n" # TODO support additional details of the format: