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
« 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
4from pydantic import BaseModel, Field, field_validator
5from typing_extensions import TypedDict
7from integrify.utils import _ResponseT
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 """
15 ok: bool = Field(validation_alias='is_success')
16 """Cavab sorğusunun statusu 400dən kiçikdirsə"""
18 status_code: int
19 """Cavab sorğusunun status kodu"""
21 headers: dict
22 """Cavab sorğusunun header-i"""
24 body: _ResponseT = Field(validation_alias='content')
25 """Cavab sorğusunun body-si"""
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)
34class DryResponse(TypedDict):
35 """Dry-run sorğularının `return` tipi"""
37 url: str
38 """Sorğu göndəriləcək url"""
40 verb: str
41 """Sorğu metodu (GET, POST və s.)"""
43 headers: dict[str, str]
44 """Sorğu header-ləri"""
46 data: dict[str, Any]
47 """Sorğu data-sı (body-si)"""
49 request_args: dict[str, Any]
50 """httpx.request funksiyasına ötürülən parametrlər"""
53class PayloadBaseModel(BaseModel):
54 URL_PARAM_FIELDS: ClassVar[set[str]] = set()
56 @classmethod
57 def get_input_fields(cls) -> list[str]:
58 """Modelin field-lərinin listini almaq"""
59 return list(cls.model_fields.keys())
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})