Skip to content

Commit a26a057

Browse files
fix(scripts): Improve code sample selection logic (generated)
algolia/api-clients-automation#6018 Co-authored-by: Mario-Alexandru Dan <marioalexandrudan@gmail.com>
1 parent a66c69b commit a26a057

2 files changed

Lines changed: 101 additions & 6 deletions

File tree

algoliasearch/http/transporter_sync.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -66,12 +66,14 @@ def request(
6666
url = self.build_url(host, path)
6767
proxies = self.get_proxies(url)
6868

69-
req = Request(
70-
method=verb,
71-
url=url,
72-
headers=request_options.headers,
73-
data=request_options.data,
74-
).prepare()
69+
req = self._session.prepare_request(
70+
Request(
71+
method=verb,
72+
url=url,
73+
headers=request_options.headers,
74+
data=request_options.data,
75+
)
76+
)
7577

7678
try:
7779
connect_timeout = (
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
from typing import Any, Dict, Optional, Union
2+
3+
from requests import PreparedRequest, Request, Response, Session
4+
from requests.structures import CaseInsensitiveDict
5+
6+
from algoliasearch.http.base_config import BaseConfig
7+
from algoliasearch.http.hosts import CallType, Host, HostsCollection
8+
from algoliasearch.http.request_options import RequestOptions
9+
from algoliasearch.http.transporter_sync import TransporterSync
10+
from algoliasearch.http.verb import Verb
11+
12+
13+
class FakeResponse(Response):
14+
def __init__(self, body_text: str) -> None:
15+
super().__init__()
16+
self.status_code = 200
17+
self.headers = CaseInsensitiveDict()
18+
self.reason = "OK"
19+
self._body_text = body_text
20+
21+
@property
22+
def text(self) -> str:
23+
return self._body_text
24+
25+
26+
class FakeSession(Session):
27+
def __init__(self, response: FakeResponse) -> None:
28+
super().__init__()
29+
self._response = response
30+
self.prepare_request_calls = 0
31+
self.prepared_input: Optional[Request] = None
32+
self.prepared_request = PreparedRequest()
33+
self.send_input: Optional[PreparedRequest] = None
34+
35+
def prepare_request(self, request: Request) -> PreparedRequest:
36+
self.prepare_request_calls += 1
37+
self.prepared_input = request
38+
self.prepared_request = super().prepare_request(request)
39+
return self.prepared_request
40+
41+
def send(
42+
self,
43+
request: PreparedRequest,
44+
verify: Union[bool, str] = True,
45+
stream: bool = False,
46+
cert: Optional[Union[str, tuple]] = None,
47+
proxies: Optional[Dict[str, str]] = None,
48+
timeout: Optional[Union[float, tuple]] = None,
49+
allow_redirects: bool = True,
50+
**kwargs: Any,
51+
) -> Response:
52+
_ = stream
53+
_ = timeout
54+
_ = verify
55+
_ = cert
56+
_ = proxies
57+
_ = allow_redirects
58+
_ = kwargs
59+
self.send_input = request
60+
return self._response
61+
62+
63+
def create_config() -> BaseConfig:
64+
config = BaseConfig("test-app", "test-key")
65+
config.hosts = HostsCollection(
66+
[Host("localhost", accept=CallType.READ | CallType.WRITE)]
67+
)
68+
return config
69+
70+
71+
def test_sync_transporter_uses_session_prepare_request_and_sends_gzip() -> None:
72+
config = create_config()
73+
transporter = TransporterSync(config)
74+
fake_response = FakeResponse('{"ok":true}')
75+
fake_session = FakeSession(fake_response)
76+
transporter._session = fake_session
77+
78+
response = transporter.request(
79+
verb=Verb.GET,
80+
path="/test",
81+
request_options=RequestOptions(config).merge(),
82+
use_read_transporter=True,
83+
)
84+
85+
assert fake_session.prepare_request_calls == 1
86+
assert isinstance(fake_session.prepared_input, Request)
87+
assert fake_session.prepared_input.method in (Verb.GET, "GET")
88+
assert fake_session.send_input is fake_session.prepared_request
89+
assert fake_session.send_input is not None
90+
accept_encoding = fake_session.send_input.headers.get("Accept-Encoding")
91+
assert accept_encoding is not None
92+
assert "gzip" in accept_encoding.lower()
93+
assert response.status_code == 200

0 commit comments

Comments
 (0)