]> git.ipfire.org Git - thirdparty/httpx.git/commitdiff
Automatically convert Client.cookies and Client.headers on set (#274)
authortoppk <toppk@bllue.org>
Wed, 28 Aug 2019 00:25:30 +0000 (20:25 -0400)
committerSeth Michael Larson <sethmichaellarson@gmail.com>
Wed, 28 Aug 2019 00:25:30 +0000 (19:25 -0500)
docs/api.md
httpx/client.py
tests/client/test_cookies.py
tests/client/test_properties.py [new file with mode: 0644]

index 125c687e16f3d65045431016642a95c36bf0bf90..ba26e204f0e348571bc1408a4356b0305b0e7b1d 100644 (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])`
index 37e824f256c140265e2060a62b1cb77a6847e66f..8460461a64a0413bce0d3a92c5d08bb8605b40cc 100644 (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
 
index 280f44bc2b1176f3b6171f7e08ec38ebbb4de16b..f6a7e20789fb299ff03df9853a975c67762aeea7 100644 (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.
diff --git a/tests/client/test_properties.py b/tests/client/test_properties.py
new file mode 100644 (file)
index 0000000..f0ce671
--- /dev/null
@@ -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"