summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcello Stanisci <stanisci.m@gmail.com>2017-12-11 15:27:39 +0100
committerMarcello Stanisci <stanisci.m@gmail.com>2017-12-11 15:27:39 +0100
commita7ec665872f45acd6821d0f24575f1cd9fb88736 (patch)
tree4f26a56f49e67f4d01679e4676e2b9fcacb4d549
parente3d5117f062107c3dbe7e8f9b4b183d4bc6bf152 (diff)
downloadbank-a7ec665872f45acd6821d0f24575f1cd9fb88736.tar.gz
bank-a7ec665872f45acd6821d0f24575f1cd9fb88736.tar.bz2
bank-a7ec665872f45acd6821d0f24575f1cd9fb88736.zip
tolerating fraction-less amount strings
-rwxr-xr-xsetup.py3
-rw-r--r--talerbank/app/amount.py4
-rw-r--r--talerbank/app/tests.py4
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: