diff --git a/src/pricehist/cli.py b/src/pricehist/cli.py index 9d9f127..4f200f9 100644 --- a/src/pricehist/cli.py +++ b/src/pricehist/cli.py @@ -87,6 +87,7 @@ def cmd_fetch(args): source = sources.by_id[args.source]() output = outputs.by_type[args.output]() start = args.start or source.start() + type = args.type or (source.types() + ["unknown"])[0] if start < source.start(): logging.warn( @@ -94,7 +95,7 @@ def cmd_fetch(args): f"source start date of {source.start()}." ) - prices = source.fetch(args.pair, args.type, start, args.end) + prices = source.fetch(args.pair, type, start, args.end) if args.renamebase or args.renamequote: prices = [ @@ -127,7 +128,7 @@ def cmd_fetch(args): decimal_places=if_not_none(args.quantize, default.decimal_places), ) - print(output.format(prices, fmt=fmt), end="") + print(output.format(prices, source, type, fmt=fmt), end="") def build_parser(): diff --git a/src/pricehist/outputs/beancount.py b/src/pricehist/outputs/beancount.py index 938c880..f8ee615 100644 --- a/src/pricehist/outputs/beancount.py +++ b/src/pricehist/outputs/beancount.py @@ -2,7 +2,7 @@ from pricehist.format import Format class Beancount: - def format(self, prices, fmt=Format()): + def format(self, prices, source=None, type=None, fmt=Format()): lines = [] for price in prices: diff --git a/src/pricehist/outputs/csv.py b/src/pricehist/outputs/csv.py index 99df4da..0a31354 100644 --- a/src/pricehist/outputs/csv.py +++ b/src/pricehist/outputs/csv.py @@ -2,13 +2,13 @@ from pricehist.format import Format class CSV: - def format(self, prices, fmt=Format()): - lines = ["date,base,quote,amount"] + def format(self, prices, source=None, type=None, fmt=Format()): + lines = ["date,base,quote,amount,source,type"] for price in prices: date = str(price.date).replace("-", fmt.datesep) amount_parts = f"{fmt.quantize(price.amount):,}".split(".") amount_parts[0] = amount_parts[0].replace(",", fmt.thousands) amount = fmt.decimal.join(amount_parts) - line = ",".join([date, price.base, price.quote, amount]) + line = ",".join([date, price.base, price.quote, amount, source.id(), type]) lines.append(line) return "\n".join(lines) + "\n" diff --git a/src/pricehist/outputs/gnucashsql.py b/src/pricehist/outputs/gnucashsql.py index 615c04b..4c0d5f9 100644 --- a/src/pricehist/outputs/gnucashsql.py +++ b/src/pricehist/outputs/gnucashsql.py @@ -7,9 +7,8 @@ from pricehist.format import Format class GnuCashSQL: - def format(self, prices, fmt=Format()): - source = "pricehist" - typ = "unknown" + def format(self, prices, source=None, type=None, fmt=Format()): + src = f"pricehist:{source.id()}" values_parts = [] for price in prices: @@ -17,9 +16,9 @@ class GnuCashSQL: amount = fmt.quantize(price.amount) m = hashlib.sha256() m.update( - "".join( - [date, price.base, price.quote, source, typ, str(amount)] - ).encode("utf-8") + "".join([date, price.base, price.quote, src, type, str(amount)]).encode( + "utf-8" + ) ) guid = m.hexdigest()[0:32] value_num = str(amount).replace(".", "") @@ -30,8 +29,8 @@ class GnuCashSQL: f"'{date}', " f"'{price.base}', " f"'{price.quote}', " - f"'{source}', " - f"'{typ}', " + f"'{src}', " + f"'{type}', " f"{value_num}, " f"{value_denom}" ")" diff --git a/src/pricehist/outputs/ledger.py b/src/pricehist/outputs/ledger.py index 0467c19..1e56218 100644 --- a/src/pricehist/outputs/ledger.py +++ b/src/pricehist/outputs/ledger.py @@ -2,7 +2,7 @@ from pricehist.format import Format class Ledger: - def format(self, prices, fmt=Format()): + def format(self, prices, source=None, type=None, fmt=Format()): lines = [] for price in prices: date = str(price.date).replace("-", fmt.datesep)