Coverage for src/integrify/lsim/bulk/schemas/response.py: 100%

44 statements  

« prev     ^ index     » next       coverage.py v7.9.2, created at 2025-09-01 02:22 +0000

1from typing import Optional, Union 

2 

3from pydantic import BaseModel, Field, model_validator 

4 

5from integrify.lsim.bulk.schemas.enums import Code, SMSStatus 

6 

7 

8class SendBulkSMSResponseSchema(BaseModel): 

9 response_code: Union[Code, int] 

10 """Sorğunun uğur(suz)luq kodu""" 

11 

12 task_id: Optional[int] = None 

13 """Sorğunun id-si. Bu id-ni report almaqda istifadə edə bilərsiniz""" 

14 

15 @model_validator(mode='before') 

16 @classmethod 

17 def dissect_data(cls, data: dict): 

18 """Sorğunun cavabının strukturunu parçalayan funksiya""" 

19 return { 

20 'response_code': data['response']['head']['responsecode'], 

21 'task_id': data['response'].get('body', {}).get('taskid'), 

22 } 

23 

24 

25class GetBulkSMSReportResponseSchema(BaseModel): 

26 response_code: Union[Code, int] 

27 """Sorğunun uğur(suz)luq kodu""" 

28 

29 expired: int = -1 

30 """Vaxtı keçmiş SMS sayı""" 

31 

32 removed: int = -1 

33 """Silinmiş SMS sayı""" 

34 

35 black_list: int = Field(-1, validation_alias='blackList') 

36 """Qara list-ə düşmüş SMS sayı""" 

37 

38 undelivered: int = -1 

39 """Göndərilməyən SMS sayı""" 

40 

41 delivered: int = -1 

42 """Göndərilmiş və çatmış SMS sayı""" 

43 

44 duplicate: int = -1 

45 """Təkrarlanan (duplikat) SMS sayı""" 

46 

47 error: int = -1 

48 """Xətalı SMS sayı""" 

49 

50 send: int = -1 

51 """Göndərilmiş SMS sayı""" 

52 

53 queue: int = -1 

54 """Göndərilmə sırasında olan SMS sayı""" 

55 

56 @model_validator(mode='before') 

57 @classmethod 

58 def dissect_data(cls, data: dict): 

59 """Sorğunun cavabının strukturunu parçalayan funksiya""" 

60 return { 

61 'response_code': data['response']['head']['responsecode'], 

62 **data['response'].get('body', {}), 

63 } 

64 

65 

66class SMSReportSchema(BaseModel): 

67 msisdn: int 

68 message: str 

69 status: SMSStatus 

70 date: Optional[str] = None 

71 

72 

73class GetBulkSMSDetailedReportResponseSchema(BaseModel): 

74 response_code: Union[Code, str] 

75 """Sorğunun uğur(suz)luq kodu""" 

76 

77 body: list[SMSReportSchema] 

78 

79 @model_validator(mode='before') 

80 @classmethod 

81 def dissect_data(cls, data: dict): 

82 """Sorğunun cavabının strukturunu parçalayan funksiya""" 

83 return { 

84 'response_code': int(data['response']['head']['responsecode']), 

85 'body': data['response'].get('body', []), 

86 } 

87 

88 

89class GetBalanceResponseSchema(BaseModel): 

90 response_code: Union[Code, str] 

91 """Sorğunun uğur(suz)luq kodu""" 

92 

93 units: int 

94 """Balans""" 

95 

96 @model_validator(mode='before') 

97 @classmethod 

98 def dissect_data(cls, data: dict): 

99 """Sorğunun cavabının strukturunu parçalayan funksiya""" 

100 return { 

101 'response_code': data['response']['head']['responsecode'], 

102 'units': data['response'].get('body', {}).get('units', -1), 

103 }