From 258613121ae37015f007b285a5b82af4f09e0db2 Mon Sep 17 00:00:00 2001 From: Marcello Stanisci Date: Fri, 29 Nov 2019 16:55:20 +0100 Subject: abstracting exceptions raising --- talerbank/app/schemas.py | 38 ++++++++++++++++++++++++++------------ talerbank/app/views.py | 8 +++----- 2 files changed, 29 insertions(+), 17 deletions(-) diff --git a/talerbank/app/schemas.py b/talerbank/app/schemas.py index c3524fa..ed3eb83 100644 --- a/talerbank/app/schemas.py +++ b/talerbank/app/schemas.py @@ -126,18 +126,32 @@ class RejectData(forms.Form): account_number = forms.IntegerField() -class AddIncomingData(forms.Form): - auth = AuthField() - amount = forms.CharField( - validators=[ - RegexValidator( - AMOUNT_REGEX, message="Format CURRENCY:X[.Y] not respected" - ) - ] - ) - subject = forms.CharField() - credit_account = forms.IntegerField(min_value=1) - exchange_url = forms.URLField() +class AddIncomingData(): + + def __init__(self, data): + self.inner_form = self.InnerForm(data) + if not self.inner_form.is_valid(): + JSONFieldException(data.errors, 400) + + def get(self, name): + ret = self.inner_form.cleaned_data.get(name) + # rare / impossible + if not ret: + raise JSONFieldException(data.errors, 400) + return ret + + class InnerForm(forms.Form): + auth = AuthField() + amount = forms.CharField( + validators=[ + RegexValidator( + AMOUNT_REGEX, message="Format CURRENCY:X[.Y] not respected" + ) + ] + ) + subject = forms.CharField() + credit_account = forms.IntegerField(min_value=1) + exchange_url = forms.URLField() ## diff --git a/talerbank/app/views.py b/talerbank/app/views.py index 9186837..c97d86b 100644 --- a/talerbank/app/views.py +++ b/talerbank/app/views.py @@ -878,19 +878,17 @@ def reject(request, user_account): def add_incoming(request, user_account): data = AddIncomingData(json.loads(decode_body(request))) - if not data.is_valid(): - raise JSONFieldException(data.errors, 400) subject = "%s %s" % ( - data.cleaned_data["subject"], data.cleaned_data["exchange_url"] + data.get("subject"), data.get("exchange_url") ) credit_account = BankAccount.objects.get( - account_no=data.cleaned_data["credit_account"] + account_no=data.get("credit_account") ) wtrans = wire_transfer( - Amount.parse(data.cleaned_data["amount"]), user_account.bankaccount, + Amount.parse(data.get("amount")), user_account.bankaccount, credit_account, subject ) -- cgit v1.2.3