Add more pre-checkers, docstrings

- add SpwCardNotFound error to `send_transaction()`
- Add balance checker to `send_transactions()`
- Made working docstrings
- Correction errors in Parameters
This commit is contained in:
Teleport
2023-05-09 02:28:12 +03:00
parent fc1161f341
commit c1a172d4be
5 changed files with 205 additions and 51 deletions

View File

@@ -1,45 +1,83 @@
from pydantic import BaseModel, validator
import validators
from . import errors as err
class Payment(BaseModel):
"""
Класс параметров оплаты.
:param amount: Сумма которую должен оплатить пользователь.
:type amount: int
:param redirectUrl: Ссылка на которую перенаправит пользователя после успешной оплаты.
:type redirectUrl: str
:param webhookUrl: Ссылка вебхука, туда придет сообщение о успешной оплате.
:type webhookUrl: str
:param data: Полезные данные, которые вы хотите получить в будущем вместе с вебхуком.
:type data: str
:raises BigAmountError: Запрашиваемая сумма слишком большая *(макс. 1728)*
:raises LengthError: Строка data слишком длинная *(макс. 100)*
:raises IsNotURLError: Параметр не является URL
"""
amount: int
redirectUrl: str
webhookUrl: str
data: str
@validator('amount')
def max_amount(cls, value: int):
def _max_amount(cls, value: int):
if value > 1728:
raise ValueError('amount must be <= 1728')
raise err.BigAmountError()
return value
@validator('data')
def data_size(cls, value):
def _data_size(cls, value):
if len(value) > 100:
raise ValueError('data length must be <=100.')
raise err.LengthError(100)
return value
@validator('redirectUrl', 'webhookUrl')
def verify_url(cls, value: str):
def _verify_url(cls, value: str):
if validators.url(value):
return value
raise ValueError('is not url')
raise err.IsNotURLError()
class Transaction(BaseModel):
"""
Класс параметров транзакции.
:param receiver: Карта получателя транзакции.
:type receiver: str
:param amount: Сумма которую должен оплатить пользователь.
:type amount: int
:param comment: Комментарий к транзакции.
:type comment: str
:raises LengthError: Комментарий к транзакции comment слишком длинный *(макс. 32)*
:raises IsNotCardError: Неверно указана карта получателя
"""
receiver: str
amount: int
comment: str
@validator('comment')
def comment_size(cls, value: str):
def _comment_size(cls, value: str):
if len(value) > 32:
raise ValueError('comment length must be <=32.')
raise err.LengthError(32)
return value
@validator('receiver')
def receiver_type(cls, value: str):
def _receiver_type(cls, value: str):
if len(value) != 5 or not value.isnumeric():
raise ValueError(f'Receiver card (`{value}`) number not valid')
raise err.IsNotCardError(value)
return value