From 660b7d709c039eb00ef7f8c1246b3bb7b20df736 Mon Sep 17 00:00:00 2001 From: Chris Berkhout Date: Thu, 27 May 2021 13:06:58 +0200 Subject: [PATCH] Move invert and rename base/quote logic to Series. --- src/pricehist/cli.py | 25 ++++++------------------- src/pricehist/series.py | 16 +++++++++++++++- 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/src/pricehist/cli.py b/src/pricehist/cli.py index f5a25fe..c564ab9 100644 --- a/src/pricehist/cli.py +++ b/src/pricehist/cli.py @@ -1,5 +1,4 @@ import argparse -import dataclasses import logging import shutil from datetime import datetime, timedelta @@ -7,7 +6,6 @@ from textwrap import TextWrapper from pricehist import __version__, outputs, sources from pricehist.format import Format -from pricehist.price import Price from pricehist.series import Series @@ -102,27 +100,16 @@ def cmd_fetch(args): series = source.fetch(Series(base, quote, type, start, args.end)) if args.invert: - series = dataclasses.replace( - series, - base=series.quote, - quote=series.base, - prices=[Price(date=p.date, amount=(1 / p.amount)) for p in series.prices], - ) - - if args.renamebase or args.renamequote: - series = dataclasses.replace( - series, - base=(args.renamebase or base), - quote=(args.renamequote or quote), - ) + series = series.invert() + if args.renamebase: + series = series.rename_base(args.renamebase) + if args.renamequote: + series = series.rename_quote(args.renamequote) default = Format() def if_not_none(value, default): - if value is None: - return default - else: - return value + return default if value is None else value fmt = Format( time=if_not_none(args.renametime, default.time), diff --git a/src/pricehist/series.py b/src/pricehist/series.py index 20e8f67..acf9119 100644 --- a/src/pricehist/series.py +++ b/src/pricehist/series.py @@ -1,4 +1,4 @@ -from dataclasses import dataclass, field +from dataclasses import dataclass, field, replace from pricehist.price import Price @@ -11,3 +11,17 @@ class Series: start: str end: str prices: list[Price] = field(default_factory=list) + + def invert(self): + return replace( + self, + base=self.quote, + quote=self.base, + prices=[Price(date=p.date, amount=(1 / p.amount)) for p in self.prices], + ) + + def rename_base(self, new_base): + return replace(self, base=new_base) + + def rename_quote(self, new_quote): + return replace(self, quote=new_quote)