Automatically convert Client.cookies and Client.headers on set (#274)
This commit is contained in:
parent
1f4b8dd054
commit
9e420a5c34
@ -27,6 +27,8 @@
|
||||
```
|
||||
|
||||
* `def __init__([auth], [headers], [cookies], [verify], [cert], [timeout], [pool_limits], [max_redirects], [app], [dispatch])`
|
||||
* `.headers` - **Headers**
|
||||
* `.cookies` - **Cookies**
|
||||
* `def .get(url, [params], [headers], [cookies], [auth], [stream], [allow_redirects], [verify], [cert], [timeout])`
|
||||
* `def .options(url, [params], [headers], [cookies], [auth], [stream], [allow_redirects], [verify], [cert], [timeout])`
|
||||
* `def .head(url, [params], [headers], [cookies], [auth], [stream], [allow_redirects], [verify], [cert], [timeout])`
|
||||
|
||||
@ -102,13 +102,29 @@ class BaseClient:
|
||||
self.base_url = URL(base_url)
|
||||
|
||||
self.auth = auth
|
||||
self.headers = Headers(headers)
|
||||
self.cookies = Cookies(cookies)
|
||||
self._headers = Headers(headers)
|
||||
self._cookies = Cookies(cookies)
|
||||
self.max_redirects = max_redirects
|
||||
self.dispatch = async_dispatch
|
||||
self.concurrency_backend = backend
|
||||
self.trust_env = True if trust_env is None else trust_env
|
||||
|
||||
@property
|
||||
def headers(self) -> Headers:
|
||||
return self._headers
|
||||
|
||||
@headers.setter
|
||||
def headers(self, headers: HeaderTypes) -> None:
|
||||
self._headers = Headers(headers)
|
||||
|
||||
@property
|
||||
def cookies(self) -> Cookies:
|
||||
return self._cookies
|
||||
|
||||
@cookies.setter
|
||||
def cookies(self, cookies: CookieTypes) -> None:
|
||||
self._cookies = Cookies(cookies)
|
||||
|
||||
def check_concurrency_backend(self, backend: ConcurrencyBackend) -> None:
|
||||
pass # pragma: no cover
|
||||
|
||||
|
||||
@ -78,6 +78,42 @@ def test_set_cookie_with_cookiejar():
|
||||
assert response.json() == {"cookies": "example-name=example-value"}
|
||||
|
||||
|
||||
def test_setting_client_cookies_to_cookiejar():
|
||||
"""
|
||||
Send a request including a cookie, using a `CookieJar` instance.
|
||||
"""
|
||||
|
||||
url = "http://example.org/echo_cookies"
|
||||
cookies = CookieJar()
|
||||
cookie = Cookie(
|
||||
version=0,
|
||||
name="example-name",
|
||||
value="example-value",
|
||||
port=None,
|
||||
port_specified=False,
|
||||
domain="",
|
||||
domain_specified=False,
|
||||
domain_initial_dot=False,
|
||||
path="/",
|
||||
path_specified=True,
|
||||
secure=False,
|
||||
expires=None,
|
||||
discard=True,
|
||||
comment=None,
|
||||
comment_url=None,
|
||||
rest={"HttpOnly": None},
|
||||
rfc2109=False,
|
||||
)
|
||||
cookies.set_cookie(cookie)
|
||||
|
||||
with Client(dispatch=MockDispatch()) as client:
|
||||
client.cookies = cookies
|
||||
response = client.get(url)
|
||||
|
||||
assert response.status_code == 200
|
||||
assert response.json() == {"cookies": "example-name=example-value"}
|
||||
|
||||
|
||||
def test_set_cookie_with_cookies_model():
|
||||
"""
|
||||
Send a request including a cookie, using a `Cookies` instance.
|
||||
|
||||
17
tests/client/test_properties.py
Normal file
17
tests/client/test_properties.py
Normal file
@ -0,0 +1,17 @@
|
||||
from httpx import Client, Cookies, Headers
|
||||
|
||||
|
||||
def test_client_headers():
|
||||
client = Client()
|
||||
client.headers = {"a": "b"}
|
||||
assert isinstance(client.headers, Headers)
|
||||
assert client.headers["A"] == "b"
|
||||
|
||||
|
||||
def test_client_cookies():
|
||||
client = Client()
|
||||
client.cookies = {"a": "b"}
|
||||
assert isinstance(client.cookies, Cookies)
|
||||
mycookies = list(client.cookies.jar)
|
||||
assert len(mycookies) == 1
|
||||
assert mycookies[0].name == "a" and mycookies[0].value == "b"
|
||||
Loading…
Reference in New Issue
Block a user