Coverage for src/integrify/schemas.py: 100%

22 statements  

« prev     ^ index     » next       coverage.py v7.6.10, created at 2025-02-10 00:57 +0000

1import json 

2from enum import Enum 

3from typing import ClassVar, Generic, TypeVar, Union 

4 

5from pydantic import BaseModel, Field, field_validator 

6 

7_ResponseT = TypeVar('_ResponseT', bound=Union[BaseModel, dict]) 

8 

9 

10class Environment(str, Enum): 

11 TEST = 'test' 

12 PROD = 'prod' 

13 

14 

15class APIResponse(BaseModel, Generic[_ResponseT]): 

16 """Cavab sorğu base payload tipi. Generic tip-i qeyd etmıəklə 

17 sorğu cavabını validate edə bilərsiniz. 

18 """ 

19 

20 ok: bool = Field(validation_alias='is_success') 

21 """Cavab sorğusunun statusu 400dən kiçikdirsə""" 

22 

23 status_code: int 

24 """Cavab sorğusunun status kodu""" 

25 

26 headers: dict 

27 """Cavab sorğusunun header-i""" 

28 

29 body: _ResponseT = Field(validation_alias='content') 

30 """Cavab sorğusunun body-si""" 

31 

32 @field_validator('body', mode='before') 

33 @classmethod 

34 def convert_to_dict(cls, v: Union[str, bytes]): 

35 """Binary content-i dict-ə çevirərək, validation-a hazır vəziyyətə gətirir.""" 

36 return json.loads(v) 

37 

38 

39class PayloadBaseModel(BaseModel): 

40 URL_PARAM_FIELDS: ClassVar[set[str]] = set() 

41 

42 @classmethod 

43 def from_args(cls, *args, **kwds): 

44 """Verilən `*args` və `**kwds` (və ya `**kwargs`) parametrlərini birləşdirərək 

45 Pydantic validasiyası edən funksiya. Positional arqumentlər üçün (`*args`) Pydantic 

46 modelindəki field-lərin ardıcıllığı və çağırılan funksiyada parametrlərinin ardıcıllığı 

47 EYNİ OLMALIDIR, əks halda, bu method yararsızdır. 

48 """ 

49 return cls.model_validate({**dict(zip(cls.model_fields.keys(), args)), **kwds})