diff options
-rw-r--r-- | talerbank/app/management/commands/wire_transfer_payto.py | 25 | ||||
-rw-r--r-- | talerbank/app/tests.py | 8 | ||||
-rw-r--r-- | talerbank/app/views.py | 6 |
3 files changed, 24 insertions, 15 deletions
diff --git a/talerbank/app/management/commands/wire_transfer_payto.py b/talerbank/app/management/commands/wire_transfer_payto.py index 9eab068..460235c 100644 --- a/talerbank/app/management/commands/wire_transfer_payto.py +++ b/talerbank/app/management/commands/wire_transfer_payto.py @@ -17,15 +17,15 @@ # <http://www.gnu.org/licenses/> # # @author Marcello Stanisci -# @brief CLI utility that issues a wire transfer. +# @brief CLI utility to make wire transfers. import sys import logging import json from django.core.management.base import BaseCommand from django.contrib.auth import authenticate -from taler.util.amount import Amount -from ...views import wire_transfer, User, PaytoParse +from taler.util.amount import Amount, AmountFormatError +from ...views import wire_transfer, User, PaytoParse, PaytoFormatError from ...models import BankAccount, BankTransaction LOGGER = logging.getLogger(__name__) @@ -79,22 +79,25 @@ class Command(BaseCommand): sys.exit(1) try: amount = Amount.parse(options["amount"]) - except BadFormatAmount: - LOGGER.error("Amount's format is wrong: respect C:X.Y.") + except AmountFormatError: + print("Amount format is wrong: respect C:X.Y.") sys.exit(1) try: parsed_payto = PaytoParse(options["payto-credit-account-with-subject"]) - credit_account_user = User.objects.get(username=parsed_payto.account) + credit_account_user = User.objects.get(username=parsed_payto.target) credit_account = credit_account_user.bankaccount - except BankAccount.DoesNotExist: - LOGGER.error("Credit account does not exist.") + except User.DoesNotExist: + print("Credit account does not exist.") sys.exit(1) - if not parsed_payto.subject: - print("Please provide 'subject' parameter along the payto URI") + except PaytoFormatError as e: + print(e) + sys.exit(1) + if not parsed_payto.message: + print("Please provide 'message' parameter along the payto URI") sys.exit(1) try: transaction = wire_transfer( - amount, user.bankaccount, credit_account, parsed_payto.subject + amount, user.bankaccount, credit_account, parsed_payto.message ) print("Transaction id: " + str(transaction.id)) except Exception as exc: diff --git a/talerbank/app/tests.py b/talerbank/app/tests.py index 86e5998..a3df49d 100644 --- a/talerbank/app/tests.py +++ b/talerbank/app/tests.py @@ -34,7 +34,7 @@ from django.contrib.auth.models import User from mock import patch, MagicMock from .models import BankAccount, BankTransaction, TalerWithdrawOperation from . import urls -from .views import wire_transfer, get_reserve_pub, PaytoParse +from .views import wire_transfer, get_reserve_pub, PaytoParse, PaytoFormatError from taler.util.amount import ( Amount, SignedAmount, @@ -337,12 +337,14 @@ class ReservePubExtractionTestCase(TestCase): class PaytoParseTestCase(TestCase): def test_payto_wrong_protocol(self): - self.assertRaises(Exception, PaytoParse, "http://foo/bar") + self.assertRaises(PaytoFormatError, PaytoParse, "http://foo/bar") def test_payto_with_port_number(self): parsed = PaytoParse("payto://iban/localhost:1234/account") self.assertEqual(parsed.bank, "localhost:1234") + def test_minimal(self): + parsed = PaytoParse("payto://x-taler-bank/bank-hostname/Taler") def test_payto_malformed(self): - self.assertRaises(Exception, PaytoParse, "payto:foo/bar") + self.assertRaises(PaytoFormatError, PaytoParse, "payto:foo/bar") def test_payto_noamount(self): parsed = PaytoParse( "payto://x-taler-bank/bank.int.taler.net/Exchange?message=0T096A11M57GWGG0P6ZM9Z8G5829BFJFH2AN9R5T80FJ931DX7GG" diff --git a/talerbank/app/views.py b/talerbank/app/views.py index 1ac0c99..7177d7f 100644 --- a/talerbank/app/views.py +++ b/talerbank/app/views.py @@ -99,6 +99,10 @@ def allow_origin_star(view_func): return wraps(view_func)(_decorator) +class PaytoFormatError(Exception): + def __init__(self, msg): + super(PaytoFormatError, self).__init__(msg) + self.msg = msg class PaytoParse: def __init__(self, payto_uri): @@ -108,7 +112,7 @@ class PaytoParse: len(path) != 3 or \ not obj.netloc or \ not re.match("^payto://", payto_uri): - raise Exception(f"Bad Payto URI: {payto_uri}") + raise PaytoFormatError(f"Bad Payto URI: {payto_uri}") self.target = path.pop() self.bank = path.pop() self.authority = obj.netloc |