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

29 statements  

« prev     ^ index     » next       coverage.py v7.6.12, created at 2026-01-19 02:27 +0000

1import json 

2from typing import Any, ClassVar, Generic, Union 

3 

4from pydantic import BaseModel, Field, field_validator 

5from typing_extensions import TypedDict 

6 

7from integrify.utils import _ResponseT 

8 

9 

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

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

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

13 """ 

14 

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

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

17 

18 status_code: int 

19 """Cavab sorğusunun status kodu""" 

20 

21 headers: dict 

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

23 

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

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

26 

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

28 @classmethod 

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

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

31 return json.loads(v) 

32 

33 

34class DryResponse(TypedDict): 

35 """Dry-run sorğularının `return` tipi""" 

36 

37 url: str 

38 """Sorğu göndəriləcək url""" 

39 

40 verb: str 

41 """Sorğu metodu (GET, POST və s.)""" 

42 

43 headers: dict[str, str] 

44 """Sorğu header-ləri""" 

45 

46 data: dict[str, Any] 

47 """Sorğu data-sı (body-si)""" 

48 

49 request_args: dict[str, Any] 

50 """httpx.request funksiyasına ötürülən parametrlər""" 

51 

52 

53class PayloadBaseModel(BaseModel): 

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

55 

56 @classmethod 

57 def get_input_fields(cls) -> list[str]: 

58 """Modelin field-lərinin listini almaq""" 

59 return list(cls.model_fields.keys()) 

60 

61 @classmethod 

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

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

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

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

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

67 """ 

68 return cls.model_validate({**dict(zip(cls.get_input_fields(), args)), **kwds})