Coverage for src\zapy\requests\models.py: 93%
58 statements
« prev ^ index » next coverage.py v7.3.4, created at 2023-12-20 14:17 -0500
« prev ^ index » next coverage.py v7.3.4, created at 2023-12-20 14:17 -0500
1from __future__ import annotations
2from pathlib import Path
4from pydantic import BaseModel, Field
6from zapy.__init__ import __version__
7from zapy.base import ZapyCell, Metadata
8from zapy.test import assert_test_result_dict, AssertTestResultMixin
10Code = list[str] | str
12class KeyValueItem(BaseModel):
13 key: str
14 value: str
15 active: bool = True
18class RequestMetadata(Metadata):
19 cell_type: str = 'zapy.ZapyRequest'
20 v: str = __version__
23class ZapyRequest(BaseModel, ZapyCell):
24 metadata: RequestMetadata = Field(default_factory=RequestMetadata)
25 endpoint: str
26 method: str
27 params: list[KeyValueItem] = Field(default_factory=list)
28 headers: list[KeyValueItem] = Field(default_factory=list)
29 variables: list[KeyValueItem] = Field(default_factory=list)
30 script: Code = ""
31 body_type: str = 'None'
32 body: Code | list[KeyValueItem] | None = None
34 @classmethod
35 def from_dict(cls, value: dict) -> ZapyRequest:
36 return cls.model_validate(value)
38 @classmethod
39 def from_path(cls, file_path: str | Path) -> ZapyRequest:
40 import json
41 with open(file_path) as f:
42 loaded_json = json.load(f)
43 return cls.from_dict(loaded_json)
45 async def send(self, *, raise_assert: AssertTestResultMixin | bool = True, **kwargs):
46 from .requester import send_request
48 request_wrapper = await send_request(self, **kwargs)
50 if request_wrapper.test_result:
51 if raise_assert is True: 51 ↛ 53line 51 didn't jump to line 53, because the condition on line 51 was never false
52 assert_test_result_dict(request_wrapper.test_result)
53 elif isinstance(raise_assert, AssertTestResultMixin):
54 raise_assert.assertZapyTestResults(request_wrapper.test_result)
56 return request_wrapper.response
59from httpx._client import *
60from typing_extensions import TypedDict
63class HttpxArguments(TypedDict):
64 method: str
65 url: URLTypes
66 content: typing.Optional[RequestContent]
67 data: typing.Optional[RequestData]
68 files: typing.Optional[RequestFiles]
69 json: typing.Optional[typing.Any]
70 params: typing.Optional[QueryParamTypes]
71 headers: typing.Optional[HeaderTypes]
72 cookies: typing.Optional[CookieTypes]
73 auth: typing.Union[AuthTypes, UseClientDefault, None]
74 follow_redirects: typing.Union[bool, UseClientDefault]
75 timeout: typing.Union[TimeoutTypes, UseClientDefault]
76 extensions: typing.Optional[RequestExtensions]