Coverage for packages/azericard/src/integrify/azericard/schemas/request/transfer.py: 100%
40 statements
« prev ^ index » next coverage.py v7.16.0, created at 2026-10-19 02:39 +0000
« prev ^ index » next coverage.py v7.16.0, created at 2026-10-19 02:39 +0000
1from decimal import Decimal
2from hashlib import md5
3from typing import ClassVar
5from integrify.azericard import env
6from integrify.azericard.utils import TimeStampOut
7from integrify.schemas import PayloadBaseModel
8from pydantic import AliasGenerator, ConfigDict, Field, computed_field
9from pydantic.alias_generators import to_pascal
12class BaseTransferRequestSchema(PayloadBaseModel):
13 SIGNATURE_FIELDS: ClassVar[list[str]]
14 """Signature hesablanılması üçün lazım olan field adları"""
16 model_config = ConfigDict(alias_generator=AliasGenerator(serialization_alias=to_pascal))
18 merchant: str = Field(min_length=1, max_length=16)
19 """Şirkət adı"""
21 srn: str = Field(min_length=1, max_length=12, serialization_alias='SRN')
22 """Tərəfinizdən unikal əməliyyat nömrəsi"""
24 amount: Decimal
25 """Ödəniş məbləği"""
27 cur: str = Field(min_length=3, max_length=3)
28 """Ödəniş valyutasının 3 rəqəmli kodu (AZN - 944)"""
30 @computed_field
31 @property
32 def signature(self) -> str:
33 """Yaradılmış data üçün signature generasiyası"""
34 assert self.SIGNATURE_FIELDS
36 with open(env.AZERICARD_KEY_FILE_PATH, encoding='utf-8') as key_file:
37 key = key_file.read().replace('\n', '')
39 source = ''
40 for field in self.SIGNATURE_FIELDS:
41 source += str(getattr(self, field))
43 source += key
45 return md5(source.encode('utf-8'), usedforsecurity=False).hexdigest()
48class TransferStartRequestSchema(BaseTransferRequestSchema):
49 SIGNATURE_FIELDS: ClassVar[list[str]] = [
50 'merchant',
51 'srn',
52 'amount',
53 'cur',
54 'receiver_credentials',
55 'redirect_link',
56 ]
58 receiver_credentials: str = Field(max_length=151)
59 """İstifadəçinin tam adı"""
61 redirect_link: str = Field(max_length=12)
62 """Əməliyyatın sonunda müştərini yönləndirmək istədiyiniz keçid"""
65class TransferConfirmDeclineRequestSchema(BaseTransferRequestSchema):
66 SIGNATURE_FIELDS: ClassVar[list[str]] = ['merchant', 'srn', 'amount', 'cur', 'timestamp']
68 timestamp: TimeStampOut