diff --git a/src/pricehist/format.py b/src/pricehist/format.py index 64519f7..c16857f 100644 --- a/src/pricehist/format.py +++ b/src/pricehist/format.py @@ -9,6 +9,22 @@ class Format: symbol: str = "rightspace" datesep: str = "-" + def format_quote_amount(self, quote, amount): + formatted_amount = self.format_num(amount) + + if self.symbol == "left": + qa_parts = [quote, formatted_amount] + elif self.symbol == "leftspace": + qa_parts = [quote, " ", formatted_amount] + elif self.symbol == "right": + qa_parts = [formatted_amount, quote] + else: + qa_parts = [formatted_amount, " ", quote] + + quote_amount = "".join(qa_parts) + + return quote_amount + def format_num(self, num): parts = f"{num:,}".split(".") parts[0] = parts[0].replace(",", self.thousands) diff --git a/src/pricehist/outputs/beancount.py b/src/pricehist/outputs/beancount.py index 13b9980..ebe33ec 100644 --- a/src/pricehist/outputs/beancount.py +++ b/src/pricehist/outputs/beancount.py @@ -7,16 +7,9 @@ class Beancount(BaseOutput): def format(self, series, source=None, fmt=Format()): lines = [] for price in series.prices: - - amount = fmt.format_num(price.amount) - # TODO warn if fmt settings make an invalid number - - qa_parts = [amount] - if fmt.symbol == "right": - qa_parts = qa_parts + [series.quote] - else: - qa_parts = qa_parts + [" ", series.quote] - quote_amount = "".join(qa_parts) + quote_amount = fmt.format_quote_amount(series.quote, price.amount) + # TODO warn if fmt settings make an invalid number (not . for decimal) + # TODO warn if fmt settings make an invalid quote (not right/rightspace) date = str(price.date).replace("-", fmt.datesep) lines.append(f"{date} price {series.base} {quote_amount}") diff --git a/src/pricehist/outputs/ledger.py b/src/pricehist/outputs/ledger.py index dfe2d22..b514e71 100644 --- a/src/pricehist/outputs/ledger.py +++ b/src/pricehist/outputs/ledger.py @@ -8,20 +8,7 @@ class Ledger(BaseOutput): lines = [] for price in series.prices: date = str(price.date).replace("-", fmt.datesep) - - amount = fmt.format_num(price.amount) - - qa_parts = [amount] - if fmt.symbol == "left": - qa_parts = [series.quote] + qa_parts - elif fmt.symbol == "leftspace": - qa_parts = [series.quote, " "] + qa_parts - elif fmt.symbol == "right": - qa_parts = qa_parts + [series.quote] - else: - qa_parts = qa_parts + [" ", series.quote] - quote_amount = "".join(qa_parts) - + quote_amount = fmt.format_quote_amount(series.quote, price.amount) lines.append(f"P {date} {fmt.time} {series.base} {quote_amount}") return "\n".join(lines) + "\n"