diff options
author | Marcello Stanisci <stanisci.m@gmail.com> | 2017-12-11 15:27:39 +0100 |
---|---|---|
committer | Marcello Stanisci <stanisci.m@gmail.com> | 2017-12-11 15:27:39 +0100 |
commit | a7ec665872f45acd6821d0f24575f1cd9fb88736 (patch) | |
tree | 4f26a56f49e67f4d01679e4676e2b9fcacb4d549 | |
parent | e3d5117f062107c3dbe7e8f9b4b183d4bc6bf152 (diff) | |
download | bank-a7ec665872f45acd6821d0f24575f1cd9fb88736.tar.gz bank-a7ec665872f45acd6821d0f24575f1cd9fb88736.tar.bz2 bank-a7ec665872f45acd6821d0f24575f1cd9fb88736.zip |
tolerating fraction-less amount strings
-rwxr-xr-x | setup.py | 3 | ||||
-rw-r--r-- | talerbank/app/amount.py | 4 | ||||
-rw-r--r-- | talerbank/app/tests.py | 4 |
3 files changed, 8 insertions, 3 deletions
@@ -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: |