File diff 992c91fc90de → 55f5833aa071
oxrlib/commands/historical.py
Show inline comments
...
 
@@ -55,14 +55,16 @@ class Formatter:
 

	
 

	
 
class LedgerFormatter(Formatter):
 
    RATE_PREC = 5
 
    def __init__(self, rate, signed_currencies=(), base_fmt='#,##0.###',
 
                 rate_precision=5, denomination=None):
 
        super().__init__(rate, signed_currencies, base_fmt)
 
        self.rate_prec = rate_precision
 
        self.denomination = denomination
 

	
 
    def normalize_rate(self, rate, prec=None):
 
        # Return prec nonzero digits of precision, if available.
 
        if prec is None:
 
            prec = self.RATE_PREC
 
    def normalize_rate(self, rate):
 
        _, digits, exponent = rate.normalize().as_tuple()
 
        prec -= min(0, exponent + len(digits))
 
        # Return ``self.rate_prec`` nonzero digits of precision, if available.
 
        prec = self.rate_prec - min(0, exponent + len(digits))
 
        quant_to = '1.{}'.format('0' * prec)
 
        try:
 
            qrate = rate.quantize(decimal.Decimal(quant_to))
...
 
@@ -71,11 +73,11 @@ class LedgerFormatter(Formatter):
 
            qrate = rate
 
        return qrate.normalize()
 

	
 
    def format_rate(self, rate, prec=None):
 
        return str(self.normalize_rate(rate, prec))
 
    def format_rate(self, rate):
 
        return str(self.normalize_rate(rate))
 

	
 
    def format_ledger_rate(self, rate, curr, prec=None):
 
        nrate = self.normalize_rate(rate, prec)
 
    def format_ledger_rate(self, rate, curr):
 
        nrate = self.normalize_rate(rate)
 
        rate_s = self.format_currency(nrate, curr, currency_digits=False)
 
        return "{{={0}}} @ {0}".format(rate_s)
 

	
...
 
@@ -85,13 +87,28 @@ class LedgerFormatter(Formatter):
 
        return "{} {} {}".format(
 
            from_amt, from_curr, self.format_ledger_rate(to_amt, to_curr))
 

	
 
    def _denomination_for(self, currency, default):
 
        if self.denomination is None:
 
            return default
 
        elif self.denomination == currency:
 
            return None
 
        else:
 
            return self.denomination
 

	
 
    def format_denominated_rate(self, amount, currency, default_denomination):
 
        denomination = self._denomination_for(currency, default_denomination)
 
        amt_s = self.format_currency(amount, currency)
 
        if denomination is None:
 
            return amt_s
 
        else:
 
            rate = self.rate.convert(1, currency, denomination)
 
            return "{} {}".format(amt_s, self.format_ledger_rate(rate, denomination))
 

	
 
    def format_conversion(self, from_amt, from_curr, to_curr):
 
        to_rate = self.rate.convert(1, from_curr, to_curr)
 
        to_amt = self.rate.convert(from_amt, from_curr, to_curr)
 
        return "{} {}\n{}".format(
 
            self.format_currency(from_amt, from_curr),
 
            self.format_ledger_rate(to_rate, to_curr),
 
            self.format_currency(to_amt, to_curr),
 
        return "{}\n{}".format(
 
            self.format_denominated_rate(from_amt, from_curr, to_curr),
 
            self.format_denominated_rate(to_amt, to_curr, None),
 
        )
 

	
 

	
...
 
@@ -102,7 +119,8 @@ def run(config, stdout, stderr):
 
    if loaders.should_cache():
 
        config.cache.save_rate(rate)
 
    if config.args.ledger:
 
        formatter = LedgerFormatter(rate, config.args.signed_currencies)
 
        formatter = LedgerFormatter(rate, config.args.signed_currencies,
 
                                    denomination=config.args.denomination)
 
    else:
 
        formatter = Formatter(rate)
 
    if not config.args.from_currency: