Automatically convert Client.cookies and Client.headers on set (#274)

This commit is contained in:
toppk 2019-08-27 20:25:30 -04:00 committed by Seth Michael Larson
parent 1f4b8dd054
commit 9e420a5c34
4 changed files with 73 additions and 2 deletions

View File

@ -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])`

View File

@ -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

View File

@ -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.

View 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"