gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-bank] branch master updated: finishing style migration


From: gnunet
Subject: [taler-bank] branch master updated: finishing style migration
Date: Fri, 29 Nov 2019 22:24:48 +0100

This is an automated email from the git hooks/post-receive script.

marcello pushed a commit to branch master
in repository bank.

The following commit(s) were added to refs/heads/master by this push:
     new c7f8e59  finishing style migration
c7f8e59 is described below

commit c7f8e5962d4b7175d2f4e51f45a434a969b91f4b
Author: Marcello Stanisci <address@hidden>
AuthorDate: Fri Nov 29 22:23:25 2019 +0100

    finishing style migration
---
 talerbank/app/middleware.py |   2 +
 talerbank/app/schemas.py    | 130 +++++++++++++++++++++-----------------------
 talerbank/app/tests.py      |   4 +-
 talerbank/app/views.py      |  55 +++++++++----------
 4 files changed, 91 insertions(+), 100 deletions(-)

diff --git a/talerbank/app/middleware.py b/talerbank/app/middleware.py
index 08c85aa..cff5006 100644
--- a/talerbank/app/middleware.py
+++ b/talerbank/app/middleware.py
@@ -1,3 +1,4 @@
+import traceback
 import logging
 import zlib
 from . import urls
@@ -101,6 +102,7 @@ class ExceptionMiddleware:
         LOGGER.error(repr(exception))
 
         if not hasattr(exception, "taler_error_code"):
+            traceback.print_exc()
             exception = UnhandledException()
 
         render_to = self.render.get(request.path)
diff --git a/talerbank/app/schemas.py b/talerbank/app/schemas.py
index ed3eb83..6b529b3 100644
--- a/talerbank/app/schemas.py
+++ b/talerbank/app/schemas.py
@@ -54,6 +54,11 @@ class InvalidSession(ValueError):
         self.http_status_code = http_status_code
         super().__init__()
 
+class InternalServerError(Exception):
+    def __init__(self, hint):
+        self.hint = hint
+        self.http_status_code = 500
+        self.taler_error_code = 1011 # TALER_EC_INTERNAL_LOGIC_ERROR
 
 ##
 # Exception class to be raised when a JSON
@@ -119,28 +124,35 @@ class AuthField(forms.Field):
             raise ValidationError(json.dumps(af.errors.as_json()))
 
 
-class RejectData(forms.Form):
-    auth = AuthField()
-    # FIXME: adjust min/max values.
-    row_id = forms.IntegerField()
-    account_number = forms.IntegerField()
+class BankValidator():
+    def __init__(self, validator, data):
+        self.validation_result = validator(data)
+        if not self.validation_result.is_valid():
+            raise JSONFieldException(self.validation_result.errors, 400)
 
+    def get(self, name, default=None):
+        ret = self.validation_result.cleaned_data.get(name) 
+        if not ret:
+            return default
+        return ret
 
-class AddIncomingData():
 
+class RejectData(BankValidator):
     def __init__(self, data):
-        self.inner_form = self.InnerForm(data)
-        if not self.inner_form.is_valid():
-            JSONFieldException(data.errors, 400)
+        super(RejectData, self).__init__(self.InnerValidator, data)
 
-    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 InnerValidator(forms.Form):
+        auth = AuthField()
+        # FIXME: adjust min/max values.
+        row_id = forms.IntegerField()
+        account_number = forms.IntegerField()
 
-    class InnerForm(forms.Form):
+
+class AddIncomingData(BankValidator):
+    def __init__(self, data):
+        super(AddIncomingData, self).__init__(self.InnerValidator, data)
+
+    class InnerValidator(forms.Form):
         auth = AuthField()
         amount = forms.CharField(
             validators=[
@@ -155,8 +167,7 @@ class AddIncomingData():
 
 
 ##
-# Form specification that validates GET parameters from a
-# /history request.
+# Subset of /history and /history-range input.
 class HistoryParamsBase(forms.Form):
     auth = forms.CharField(
         validators=[
@@ -198,23 +209,25 @@ class HistoryParamsBase(forms.Form):
     account_number = forms.IntegerField(required=False)
 
 
-class HistoryParams(HistoryParamsBase):
-    def clean_start(self):
-        delta = self.cleaned_data.get("delta")
-        start = self.cleaned_data.get("start")
-        if None == start:
-            return 0 if 0 <= delta else UINT64_MAX
-        return start
+class HistoryParams(BankValidator):
+    def __init__(self, data):
+        super(HistoryParams, self).__init__(self.InnerValidator, data)
+ 
+    class InnerValidator(HistoryParamsBase):
+        # FIXME: adjust min/max values.
+        delta = forms.IntegerField()
+        start = forms.IntegerField(required=False)
 
-    # FIXME: adjust min/max values.
-    delta = forms.IntegerField()
-    start = forms.IntegerField(required=False)
 
+class HistoryRangeParams(BankValidator):
 
-class HistoryRangeParams(HistoryParamsBase):
-    # FIXME: adjust min/max values.
-    end = forms.IntegerField()
-    start = forms.IntegerField()
+    def __init__(self, data):
+        super(HistoryRangeParams, self).__init__(self.InnerValidator, data)
+
+    class InnerValidator(HistoryParamsBase):
+        # FIXME: adjust min/max values.
+        end = forms.IntegerField()
+        start = forms.IntegerField()
 
 
 class PaytoField(forms.Field):
@@ -237,17 +250,22 @@ class PaytoField(forms.Field):
             raise ValidationError("URL is not 'payto'")
 
 
-class WithdrawHeadless(forms.Form):
-    auth = AuthField()
-    amount = forms.CharField(
-        validators=[
-            RegexValidator(
-                AMOUNT_REGEX, message="Format CURRENCY:X[.Y] not respected"
-            )
-        ]
-    )
-    reserve_pub = forms.CharField()
-    exchange_wire_details = PaytoField(required=False)
+class WithdrawHeadless(BankValidator):
+
+    def __init__(self, data):
+        super(WithdrawHeadless, self).__init__(self.InnerValidator, data)
+
+    class InnerValidator(forms.Form):
+        auth = AuthField()
+        amount = forms.CharField(
+            validators=[
+                RegexValidator(
+                    AMOUNT_REGEX, message="Format CURRENCY:X[.Y] not respected"
+                )
+            ]
+        )
+        reserve_pub = forms.CharField(required=True)
+        exchange_wire_details = PaytoField(required=False)
 
 class WithdrawHeadlessUri(forms.Form):
     amount = forms.CharField(
@@ -259,19 +277,6 @@ class WithdrawHeadlessUri(forms.Form):
     )
 
 
-class PinTanParams(forms.Form):
-    amount_currency = forms.CharField(
-        validators=[
-            RegexValidator("^[A-Z]+$", message="Currency is all upper case")
-        ]
-    )
-    amount_value = forms.IntegerField(min_value=0)
-    amount_fraction = forms.IntegerField(min_value=0)
-    exchange = forms.URLField()
-    reserve_pub = forms.CharField()
-    exchange_wire_details = PaytoField()
-
-
 class SenderWireDetails(forms.Form):
     # FIXME: must be changed to 'payto' format.
     type = forms.CharField()
@@ -287,16 +292,3 @@ class SenderWireDetailsField(forms.Field):
         swd = SenderWireDetails(value)
         if not swd.is_valid():
             raise ValidationError(json.dumps(swd.errors.as_json()))
-
-
-class WithdrawSessionData(forms.Form):
-    amount = forms.CharField(
-        validators=[
-            RegexValidator(
-                AMOUNT_REGEX, message="Could not find valid amount in state.."
-            )
-        ]
-    )
-    reserve_pub = forms.CharField()
-    exchange_account_number = forms.IntegerField(min_value=1)
-    sender_wiredetails = SenderWireDetailsField()
diff --git a/talerbank/app/tests.py b/talerbank/app/tests.py
index 4181c8c..aba7158 100644
--- a/talerbank/app/tests.py
+++ b/talerbank/app/tests.py
@@ -777,8 +777,8 @@ class DBCustomColumnTestCase(TestCase):
         self.assertTrue(isinstance(user_bankaccount.amount, Amount))
 
 
-# This tests whether a bank account goes debit and then goes >=0
-# again
+## This tests whether a bank account goes debit and then goes >=0
+## again
 class DebitTestCase(TestCase):
     def setUp(self):
         BankAccount(user=User.objects.create_user(username='U')).save()
diff --git a/talerbank/app/views.py b/talerbank/app/views.py
index c97d86b..d41f659 100644
--- a/talerbank/app/views.py
+++ b/talerbank/app/views.py
@@ -50,8 +50,8 @@ import qrcode.image.svg
 import lxml
 from .schemas import (
     HistoryParams, HistoryRangeParams, URLParamValidationError, RejectData,
-    AddIncomingData, JSONFieldException, PinTanParams, InvalidSession,
-    WithdrawSessionData, WithdrawHeadless, WithdrawHeadlessUri
+    AddIncomingData, JSONFieldException, InvalidSession, WithdrawHeadless,
+    WithdrawHeadlessUri
 )
 
 LOGGER = logging.getLogger(__name__)
@@ -738,20 +738,21 @@ def build_history_response(qs, cancelled, user_account):
 @login_via_headers
 def serve_history_range(request, user_account):
 
-    get_params = HistoryRangeParams(request.GET.dict())
-    if not get_params.is_valid():
-        raise URLParamValidationError(get_params.errors, 400)
+    args = HistoryRangeParams(request.GET.dict())
 
-    start_td = datetime.fromtimestamp(get_params.cleaned_data.get("start"))
-    end_td = datetime.fromtimestamp(get_params.cleaned_data.get("end"))
+    start_td = datetime.fromtimestamp(args.get("start"))
+    end_td = datetime.fromtimestamp(args.get("end"))
 
     qs = query_history_range(
-        user_account.bankaccount, request.GET.get("direction"), start_td,
-        end_td, get_params.cleaned_data.get("ordering")
+        user_account.bankaccount,
+        args.get("direction", "both"),
+        start_td,
+        end_td,
+        args.get("ordering")
     )
 
     history = build_history_response(
-        qs, get_params.cleaned_data.get("cancelled"), user_account
+        qs, args.get("cancelled", "show"), user_account
     )
 
     if not history:
@@ -768,19 +769,18 @@ def serve_history_range(request, user_account):
 @require_GET
 @login_via_headers
 def serve_history(request, user_account):
-    get_params = HistoryParams(request.GET.dict())
-    if not get_params.is_valid():
-        raise URLParamValidationError(get_params.errors, 400)
+    args = HistoryParams(request.GET.dict())
 
     qs = query_history(
-        user_account.bankaccount, get_params.cleaned_data.get("direction"),
-        get_params.cleaned_data.get("delta"),
-        get_params.cleaned_data.get("start"),
-        get_params.cleaned_data.get("ordering")
+        user_account.bankaccount,
+        args.get("direction"),
+        args.get("delta"),
+        args.get("start", UINT64_MAX),
+        args.get("ordering", "descending")
     )
 
     history = build_history_response(
-        qs, get_params.cleaned_data.get("cancelled"), user_account
+        qs, args.get("cancelled", "show"), user_account
     )
 
     if not history:
@@ -824,10 +824,8 @@ def auth_and_login(request):
 def reject(request, user_account):
 
     data = RejectData(json.loads(decode_body(request)))
-    if not data.is_valid():
-        raise JSONFieldException(data.errors, 400)
 
-    trans = BankTransaction.objects.get(id=data.cleaned_data.get("row_id"))
+    trans = BankTransaction.objects.get(id=data.get("row_id"))
     if trans.credit_account.account_no != \
             user_account.bankaccount.account_no:
         raise RejectNoRightsException()
@@ -931,25 +929,24 @@ def withdraw_headless(request, user):
         (request.get_host(), user.bankaccount.account_no)
     ret_obj = ({"sender_wire_details": sender_payto})
 
-    if not data.is_valid():
-        raise JSONFieldException(data.errors, 400)
-
-    # Pick default exchange.
-    if None == data.cleaned_data["exchange_wire_details"]:
+    exchange_payto = data.get("exchange_wire_details")
+    if not exchange_payto:
         exchange_accno = get_acct_from_payto(
             settings.TALER_SUGGESTED_EXCHANGE_PAYTO
         )
         ret_obj.update(exchange_url=settings.TALER_SUGGESTED_EXCHANGE)
     else:
         exchange_accno = get_acct_from_payto(
-            data.cleaned_data["exchange_wire_details"]
+            exchange_payto
         )
 
     exchange_bankaccount = BankAccount.objects.get(account_no=exchange_accno)
 
     wire_transfer(
-        Amount.parse(data.cleaned_data["amount"]), user.bankaccount,
-        exchange_bankaccount, data.cleaned_data["reserve_pub"]
+        Amount.parse(data.get("amount")),
+        user.bankaccount,
+        exchange_bankaccount,
+        data.get("reserve_pub")
     )
 
     return JsonResponse(ret_obj)

-- 
To stop receiving notification emails like this one, please contact
address@hidden.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]