From a7ec665872f45acd6821d0f24575f1cd9fb88736 Mon Sep 17 00:00:00 2001 From: Marcello Stanisci Date: Mon, 11 Dec 2017 15:27:39 +0100 Subject: tolerating fraction-less amount strings --- setup.py | 3 ++- talerbank/app/amount.py | 4 ++-- talerbank/app/tests.py | 4 ++++ 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/setup.py b/setup.py index 4bfdc5c..b2f2988 100755 --- a/setup.py +++ b/setup.py @@ -12,7 +12,8 @@ setup(name='talerbank', "psycopg2", "requests", "uWSGI", - "validictory" + "validictory", + "mock" ], package_data={ diff --git a/talerbank/app/amount.py b/talerbank/app/amount.py index c3e2b93..5e1f68c 100644 --- a/talerbank/app/amount.py +++ b/talerbank/app/amount.py @@ -63,14 +63,14 @@ class Amount: # instantiating an amount object. @classmethod def parse(cls, amount_str: str): - exp = r'^\s*([-_*A-Za-z0-9]+):([0-9]+)\.([0-9]+)\s*$' + exp = r'^\s*([-_*A-Za-z0-9]+):([0-9]+)\.?([0-9]+)?\s*$' import re parsed = re.search(exp, amount_str) if not parsed: raise BadFormatAmount(amount_str) value = int(parsed.group(2)) fraction = 0 - for i, digit in enumerate(parsed.group(3)): + for i, digit in enumerate(parsed.group(3) or "0"): fraction += int(int(digit) * (Amount._fraction() / 10 ** (i+1))) return cls(parsed.group(1), value, fraction) diff --git a/talerbank/app/tests.py b/talerbank/app/tests.py index 35374c6..5f9e67b 100644 --- a/talerbank/app/tests.py +++ b/talerbank/app/tests.py @@ -476,6 +476,10 @@ class ParseAmountTestCase(TestCase): self.assertJSONEqual('{"value": 4, "fraction": 0, "currency": "KUDOS"}', ret.dump()) ret = Amount.parse("KUDOS:4.3") self.assertJSONEqual('{"value": 4, "fraction": 30000000, "currency": "KUDOS"}', ret.dump()) + ret = Amount.parse("KUDOS:4") + self.assertJSONEqual('{"value": 4, "fraction": 0, "currency": "KUDOS"}', ret.dump()) + ret = Amount.parse("KUDOS:4.") # forbid? + self.assertJSONEqual('{"value": 4, "fraction": 0, "currency": "KUDOS"}', ret.dump()) try: Amount.parse("Buggy") except BadFormatAmount: -- cgit v1.2.3