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
« 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
5from pydantic import BaseModel, Field, field_validator
7_ResponseT = TypeVar('_ResponseT', bound=Union[BaseModel, dict])
10class Environment(str, Enum):
11 TEST = 'test'
12 PROD = 'prod'
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 """
20 ok: bool = Field(validation_alias='is_success')
21 """Cavab sorğusunun statusu 400dən kiçikdirsə"""
23 status_code: int
24 """Cavab sorğusunun status kodu"""
26 headers: dict
27 """Cavab sorğusunun header-i"""
29 body: _ResponseT = Field(validation_alias='content')
30 """Cavab sorğusunun body-si"""
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)
39class PayloadBaseModel(BaseModel):
40 URL_PARAM_FIELDS: ClassVar[set[str]] = set()
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})