Skip to content

Commit ac9ed3a

Browse files
add cookies and headers parameters to ApiClient.__init__() (#110)
Co-authored-by: Guillaume Pujol <guillaume.pujol@axa.com>
1 parent 5644676 commit ac9ed3a

File tree

2 files changed

+39
-2
lines changed

2 files changed

+39
-2
lines changed

requests_oauth2client/api_client.py

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,11 @@ class ApiClient:
7777
automatically discarded from the request
7878
- boolean values in `data` or `params` fields can be serialized to values that are suitable
7979
for the target API, like `"true"` or `"false"`, or `"1"` / `"0"`, instead of the default
80-
values `"True"` or `"False"`.
80+
values `"True"` or `"False"`,
81+
- you may pass `cookies` and `headers`, which will be added to the session cookie handler or
82+
request headers respectively.
83+
- you may use the `user_agent` parameter to change the `User-Agent` header easily. Set it to
84+
`None` to remove that header.
8185
8286
`base_url` will serve as root for relative urls passed to
8387
[ApiClient.request()][requests_oauth2client.api_client.ApiClient.request],
@@ -125,7 +129,9 @@ class ApiClient:
125129
a boolean value (`True` or `False`) will be serialized to the corresponding value.
126130
This can be useful since some APIs expect a `'true'` or `'false'` value as boolean,
127131
and `requests` serializes `True` to `'True'` and `False` to `'False'`.
128-
Set it to `None` to restore default requests behaviour.
132+
Set it to `None` to restore default requests behavior.
133+
cookies: a mapping of cookies to set in the underlying `requests.Session`.
134+
headers: a mapping of headers to set in the underlying `requests.Session`.
129135
session: a preconfigured `requests.Session` to use with this `ApiClient`.
130136
**session_kwargs: additional kwargs to configure the underlying `requests.Session`.
131137
@@ -151,10 +157,27 @@ def __init__(
151157
raise_for_status: bool = True,
152158
none_fields: Literal["include", "exclude", "empty"] = "exclude",
153159
bool_fields: tuple[Any, Any] | None = ("true", "false"),
160+
cookies: Mapping[str, Any] | None = None,
161+
headers: Mapping[str, Any] | None = None,
162+
user_agent: str | None = requests.utils.default_user_agent(),
154163
session: requests.Session | None = None,
155164
**session_kwargs: Any,
156165
) -> None:
157166
session = session or requests.Session()
167+
168+
if cookies:
169+
for key, val in cookies.items():
170+
session.cookies[key] = str(val)
171+
172+
if headers:
173+
for key, val in headers.items():
174+
session.headers[key] = str(val)
175+
176+
if user_agent is None:
177+
session.headers.pop("User-Agent", None)
178+
else:
179+
session.headers["User-Agent"] = str(user_agent)
180+
158181
for key, val in session_kwargs.items():
159182
setattr(session, key, val)
160183

tests/unit_tests/test_api_client.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -336,3 +336,17 @@ def test_contextmanager(requests_mock: RequestsMocker, target_api: str) -> None:
336336
api.post()
337337

338338
assert requests_mock.last_request is not None
339+
340+
341+
def test_cookies_and_headers(target_api: str) -> None:
342+
cookies = {"cookie1": "value1", "cookie2": "value2"}
343+
headers = {"header1": "value1", "header2": "value2"}
344+
user_agent = "My User Agent"
345+
api = ApiClient(target_api, cookies=cookies, headers=headers, user_agent=user_agent)
346+
assert api.session.cookies == cookies
347+
for key, value in headers.items():
348+
assert api.session.headers[key] == value
349+
assert api.session.headers["User-Agent"] == user_agent
350+
351+
api_without_useragent = ApiClient(target_api, user_agent=None)
352+
assert "User-Agent" not in api_without_useragent.session.headers

0 commit comments

Comments
 (0)