From c7f8e5962d4b7175d2f4e51f45a434a969b91f4b Mon Sep 17 00:00:00 2001 From: Marcello Stanisci Date: Fri, 29 Nov 2019 22:23:25 +0100 Subject: finishing style migration --- talerbank/app/schemas.py | 130 ++++++++++++++++++++++------------------------- 1 file changed, 61 insertions(+), 69 deletions(-) (limited to 'talerbank/app/schemas.py') 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() -- cgit v1.2.3