Coverage for packages/postaguvercini/src/integrify/postaguvercini/client.py: 100%

25 statements  

« prev     ^ index     » next       coverage.py v7.16.0, created at 2026-10-19 02:39 +0000

1from collections.abc import Coroutine 

2from datetime import datetime 

3from typing import TYPE_CHECKING, Any, Generic, overload 

4 

5from integrify.api import APIClient, _Async, _Mode, _Sync 

6from integrify.postaguvercini import env 

7from integrify.postaguvercini.handlers import ( 

8 CreditBalancePayloadHandler, 

9 SendMultipleSMSPayloadHandler, 

10 SendSingleSMSPayloadHandler, 

11 StatusPayloadHandler, 

12) 

13from integrify.postaguvercini.schemas.enums import ChannelType 

14from integrify.postaguvercini.schemas.request import SMSMessage 

15from integrify.postaguvercini.schemas.response import ( 

16 CreditBalanceResponseSchema, 

17 SendSMSResponseSchema, 

18 StatusResponseSchema, 

19) 

20from integrify.schemas import APIResponse 

21from integrify.utils import UNSET as _UNSET 

22from integrify.utils import Unset as Unsettable 

23 

24 

25class PostaGuverciniClientClass(APIClient, Generic[_Mode]): 

26 """Posta Guvercini sorğular üçün baza class""" 

27 

28 def __init__( 

29 self, 

30 name='PostaGuvercini', 

31 base_url=env.API.BASE_URL, 

32 default_handler=None, 

33 sync=True, 

34 dry=False, 

35 ): 

36 super().__init__(name, base_url, default_handler, sync, dry) 

37 

38 self.add_url('send_single_sms', env.API.SEND_SINGLE_SMS, verb='POST') 

39 self.add_handler('send_single_sms', SendSingleSMSPayloadHandler) 

40 

41 self.add_url('send_multiple_sms', env.API.SEND_MULTIPLE_SMS, verb='POST') 

42 self.add_handler('send_multiple_sms', SendMultipleSMSPayloadHandler) 

43 

44 self.add_url('get_status', env.API.STATUS, verb='POST') 

45 self.add_handler('get_status', StatusPayloadHandler) 

46 

47 self.add_url('credit_balance', env.API.CREDIT_BALANCE, verb='POST') 

48 self.add_handler('credit_balance', CreditBalancePayloadHandler) 

49 

50 if TYPE_CHECKING: 

51 # pylint: disable=missing-function-docstring,unused-argument 

52 

53 @overload 

54 def send_single_sms( 

55 self: 'PostaGuverciniClientClass[_Sync]', 

56 message: str, 

57 receivers: list[str], 

58 send_date: Unsettable[str | datetime] = _UNSET, 

59 expire_date: Unsettable[str | datetime] = _UNSET, 

60 channel: ChannelType = ChannelType.OTP, 

61 originator: Unsettable[str] = _UNSET, 

62 username: str = env.POSTA_GUVERCINI_USERNAME, 

63 password: str = env.POSTA_GUVERCINI_PASSWORD, 

64 ) -> APIResponse[SendSMSResponseSchema]: 

65 """Tək SMS göndərilməsi 

66 

67 **Endpoint:** */api_json/v1/Sms/Send_1_N* 

68 

69 Example: 

70 ```python 

71 from integrify.postaguvercini import PostaGuverciniClient 

72 

73 PostaGuverciniClient.send_single_sms( 

74 message="Test SMS", 

75 receivers=["905320000000"], 

76 ) 

77 ``` 

78 

79 **Cavab formatı**: [`SendSMSResponseSchema`][integrify.postaguvercini.schemas.response.SendSMSResponseSchema] 

80 

81 Bu sorğunu göndərdikdə, cavab olaraq SMS göndərilməsi haqqında məlumat gəlir. 

82 

83 Args: 

84 message: SMS mətnini göstərir. Boş ola bilməz. 

85 receivers: SMS qəbul edənləri göstərir. Boş ola bilməz. 

86 send_date: SMS göndərilmə vaxtını göstərir. Boş olduqda dərhal sms göndəriləcək. Format: `yyyyMMdd HH:mm` 

87 expire_date: Sonuncu dəfə SMS göndərilməyə cəhd ediləcəyini göstərir. Boş olduqda, sistem tərəfindən müəyyən edilmiş vaxt etibarlı olacaq. Format: `yyyyMMdd HH:mm` 

88 channel: SMS-in göndərən ilə hansı platformada (OTP və ya BULK) göndəriləcəyini göstərir. Misal: OTP. 

89 originator: Bu, tək hesabla müxtəlif göndəricilər altında sms göndərmək istənildikdə istifadə ediləcək bir sahədir. Göndəriləcək məlumat müştəri xidmətləri nümayəndəsi tərəfindən veriləcək və 11 simvol dəyərindədir. 

90 username: Posta Guvercini hesabı adı. Mühit dəyişəni kimi təyin olunmayıbsa, burada parametr kimi ötürülməlidir. 

91 password: Posta Guvercini hesabı şifrəsi. Mühit dəyişəni kimi təyin olunmayıbsa, burada parametr kimi ötürülməlidir. 

92 """ # noqa: E501 

93 

94 @overload 

95 def send_single_sms( 

96 self: 'PostaGuverciniClientClass[_Async]', 

97 message: str, 

98 receivers: list[str], 

99 send_date: Unsettable[str | datetime] = _UNSET, 

100 expire_date: Unsettable[str | datetime] = _UNSET, 

101 channel: ChannelType = ChannelType.OTP, 

102 originator: Unsettable[str] = _UNSET, 

103 username: str = env.POSTA_GUVERCINI_USERNAME, 

104 password: str = env.POSTA_GUVERCINI_PASSWORD, 

105 ) -> Coroutine[Any, Any, APIResponse[SendSMSResponseSchema]]: ... 

106 def send_single_sms(self, *args: Any, **kwds: Any) -> Any: ... 

107 

108 @overload 

109 def send_multiple_sms( 

110 self: 'PostaGuverciniClientClass[_Sync]', 

111 messages: list[SMSMessage], 

112 send_date: Unsettable[str | datetime] = _UNSET, 

113 expire_date: Unsettable[str | datetime] = _UNSET, 

114 channel: ChannelType = ChannelType.OTP, 

115 originator: Unsettable[str] = _UNSET, 

116 username: str = env.POSTA_GUVERCINI_USERNAME, 

117 password: str = env.POSTA_GUVERCINI_PASSWORD, 

118 ) -> APIResponse[SendSMSResponseSchema]: 

119 """Çoxlu SMS göndərilməsi 

120 

121 **Endpoint:** /api_json/v1/Sms/Send_N_N 

122 

123 Example: 

124 ```python 

125 from integrify.postaguvercini import PostaGuverciniClient 

126 

127 PostaGuverciniClient.send_multiple_sms( 

128 messages=[ 

129 {"receiver": "905320000000", "message": "Test SMS 1"}, 

130 {"receiver": "905320000001", "message": "Test SMS 2"}, 

131 ], 

132 ) 

133 ``` 

134 

135 **Cavab formatı**: [`SendSMSResponseSchema`][integrify.postaguvercini.schemas.response.SendSMSResponseSchema] 

136 

137 Bu sorğunu göndərdikdə, cavab olaraq SMS göndərilməsi haqqında məlumat gəlir. 

138 

139 Args: 

140 messages: SMS mətnini və qəbul edəni göstərir. Boş ola bilməz. 

141 send_date: SMS göndərilmə vaxtını göstərir. Boş olduqda dərhal sms göndəriləcək. Format: `yyyyMMdd HH:mm` 

142 expire_date: Sonuncu dəfə SMS göndərilməyə cəhd ediləcəyini göstərir. Boş olduqda, sistem tərəfindən müəyyən edilmiş vaxt etibarlı olacaq. Format: `yyyyMMdd HH:mm` 

143 channel: SMS-in göndərən ilə hansı platformada (OTP və ya BULK) göndəriləcəyini göstərir. Misal: OTP. 

144 originator: Bu, tək hesabla müxtəlif göndəricilər altında sms göndərmək istən 

145 username: Posta Guvercini hesabı adı. Mühit dəyişəni kimi təyin olunmayıbsa, burada parametr kimi ötürülməlidir. 

146 password: Posta Guvercini hesabı şifrəsi. Mühit dəyişəni kimi təyin olunmayıbsa, burada parametr kimi ötürülməlidir. 

147 """ # noqa: E501 

148 

149 @overload 

150 def send_multiple_sms( 

151 self: 'PostaGuverciniClientClass[_Async]', 

152 messages: list[SMSMessage], 

153 send_date: Unsettable[str | datetime] = _UNSET, 

154 expire_date: Unsettable[str | datetime] = _UNSET, 

155 channel: ChannelType = ChannelType.OTP, 

156 originator: Unsettable[str] = _UNSET, 

157 username: str = env.POSTA_GUVERCINI_USERNAME, 

158 password: str = env.POSTA_GUVERCINI_PASSWORD, 

159 ) -> Coroutine[Any, Any, APIResponse[SendSMSResponseSchema]]: ... 

160 def send_multiple_sms(self, *args: Any, **kwds: Any) -> Any: ... 

161 

162 @overload 

163 def get_status( 

164 self: 'PostaGuverciniClientClass[_Sync]', 

165 message_ids: list[str], 

166 username: str = env.POSTA_GUVERCINI_USERNAME, 

167 password: str = env.POSTA_GUVERCINI_PASSWORD, 

168 ) -> APIResponse[StatusResponseSchema]: 

169 """SMS status sorğusu 

170 

171 **Endpoint:** /api_json/v1/Sms/Status 

172 

173 Example: 

174 ```python 

175 from integrify.postaguvercini import PostaGuverciniClient 

176 

177 PostaGuverciniClient.get_status(message_ids=["123456"]) 

178 ``` 

179 

180 **Cavab formatı**: [`StatusResponseSchema`][integrify.postaguvercini.schemas.response.StatusResponseSchema] 

181 

182 Bu sorğunu göndərdikdə, cavab olaraq SMS statusu haqqında məlumat gəlir. 

183 

184 Args: 

185 message_ids: SMS mesajlarının ID-ləri. Boş ola bilməz. 

186 username: Posta Guvercini hesabı adı. Mühit dəyişəni kimi təyin olunmayıbsa, burada parametr kimi ötürülməlidir. 

187 password: Posta Guvercini hesabı şifrəsi. Mühit dəyişəni kimi təyin olunmayıbsa, burada parametr kimi ötürülməlidir. 

188 """ # noqa: E501 

189 

190 @overload 

191 def get_status( 

192 self: 'PostaGuverciniClientClass[_Async]', 

193 message_ids: list[str], 

194 username: str = env.POSTA_GUVERCINI_USERNAME, 

195 password: str = env.POSTA_GUVERCINI_PASSWORD, 

196 ) -> Coroutine[Any, Any, APIResponse[StatusResponseSchema]]: ... 

197 def get_status(self, *args: Any, **kwds: Any) -> Any: ... 

198 

199 @overload 

200 def credit_balance( 

201 self: 'PostaGuverciniClientClass[_Sync]', 

202 username: str = env.POSTA_GUVERCINI_USERNAME, 

203 password: str = env.POSTA_GUVERCINI_PASSWORD, 

204 ) -> APIResponse[CreditBalanceResponseSchema]: 

205 """Kredit balans sorğusu 

206 

207 **Endpoint:** /api_json/v1/Sms/CreditBalance 

208 

209 Example: 

210 ```python 

211 from integrify.postaguvercini import PostaGuverciniClient 

212 

213 PostaGuverciniClient.credit_balance() 

214 ``` 

215 

216 **Cavab formatı**: [`CreditBalanceResponseSchema`][integrify.postaguvercini.schemas.response.CreditBalanceResponseSchema] 

217 

218 Bu sorğunu göndərdikdə, cavab olaraq kredit balans məlumatı gəlir. 

219 

220 Args: 

221 username: Posta Guvercini hesabı adı. Mühit dəyişəni kimi təyin olunmayıbsa, burada parametr kimi ötürülməlidir. 

222 password: Posta Guvercini hesabı şifrəsi. Mühit dəyişəni kimi təyin olunmayıbsa, burada parametr kimi ötürülməlidir. 

223 """ # noqa: E501 

224 

225 @overload 

226 def credit_balance( 

227 self: 'PostaGuverciniClientClass[_Async]', 

228 username: str = env.POSTA_GUVERCINI_USERNAME, 

229 password: str = env.POSTA_GUVERCINI_PASSWORD, 

230 ) -> Coroutine[Any, Any, APIResponse[CreditBalanceResponseSchema]]: ... 

231 def credit_balance(self, *args: Any, **kwds: Any) -> Any: ... 

232 

233 

234PostaGuverciniClient: 'PostaGuverciniClientClass[_Sync]' = PostaGuverciniClientClass(sync=True) 

235PostaGuverciniAsyncClient: 'PostaGuverciniClientClass[_Async]' = PostaGuverciniClientClass( 

236 sync=False 

237)