summaryrefslogtreecommitdiff
path: root/talerbank
diff options
context:
space:
mode:
authorMS <ms@taler.net>2020-11-17 16:27:17 +0100
committerMS <ms@taler.net>2020-11-17 16:27:17 +0100
commitc27a9c16820a21711d397ec7348ad5e398631f87 (patch)
treee92b563da8ff64e4646eacbadcfe9d9fe8a12d2d /talerbank
parent354f6f6608eb14e8fd27669f08d8eabacd35098f (diff)
downloadbank-c27a9c16820a21711d397ec7348ad5e398631f87.tar.gz
bank-c27a9c16820a21711d397ec7348ad5e398631f87.tar.bz2
bank-c27a9c16820a21711d397ec7348ad5e398631f87.zip
Improve wire_transfer_payto CLI tool.
Diffstat (limited to 'talerbank')
-rw-r--r--talerbank/app/management/commands/wire_transfer_payto.py25
-rw-r--r--talerbank/app/tests.py8
-rw-r--r--talerbank/app/views.py6
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