From f0366ab1cb11e86a1bf4de267f038fa7ea2fdcbe Mon Sep 17 00:00:00 2001 From: Leszek Hanusz Date: Sat, 30 May 2026 23:19:18 +0200 Subject: [PATCH] fix: support standard http.cookiejar.CookieJar in RequestsHTTPTransport cookies typing --- gql/transport/requests.py | 4 ++-- tests/test_requests.py | 43 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/gql/transport/requests.py b/gql/transport/requests.py index 8311c036..4e4e6ffb 100644 --- a/gql/transport/requests.py +++ b/gql/transport/requests.py @@ -1,6 +1,7 @@ import io import json import logging +from http.cookiejar import CookieJar from typing import ( Any, Callable, @@ -18,7 +19,6 @@ from graphql import ExecutionResult from requests.adapters import HTTPAdapter, Retry from requests.auth import AuthBase -from requests.cookies import RequestsCookieJar from requests.structures import CaseInsensitiveDict from requests_toolbelt.multipart.encoder import MultipartEncoder @@ -52,7 +52,7 @@ def __init__( self, url: str, headers: Optional[Dict[str, Any]] = None, - cookies: Optional[Union[Dict[str, Any], RequestsCookieJar]] = None, + cookies: Optional[Union[Dict[str, Any], CookieJar]] = None, auth: Optional[AuthBase] = None, use_json: bool = True, timeout: Optional[int] = None, diff --git a/tests/test_requests.py b/tests/test_requests.py index 31399f70..7de4a12a 100644 --- a/tests/test_requests.py +++ b/tests/test_requests.py @@ -269,6 +269,49 @@ def test_code(): await run_sync_test(server, test_code) +@pytest.mark.aiohttp +@pytest.mark.asyncio +async def test_requests_cookies_cookiejar(aiohttp_server, run_sync_test): + import http.cookiejar + + from aiohttp import web + from requests.cookies import cookiejar_from_dict + + from gql.transport.requests import RequestsHTTPTransport + + async def handler(request): + assert "COOKIE" in request.headers + assert "cookie1=val1" == request.headers["COOKIE"] + + return web.Response(text=query1_server_answer, content_type="application/json") + + app = web.Application() + app.router.add_route("POST", "/", handler) + server = await aiohttp_server(app) + + url = server.make_url("/") + + def test_code(): + cookie_jar = cookiejar_from_dict({"cookie1": "val1"}) + assert isinstance(cookie_jar, http.cookiejar.CookieJar) + transport = RequestsHTTPTransport(url=url, cookies=cookie_jar) + + with Client(transport=transport) as session: + + query = gql(query1_str) + + # Execute query synchronously + result = session.execute(query) + + continents = result["continents"] + + africa = continents[0] + + assert africa["code"] == "AF" + + await run_sync_test(server, test_code) + + @pytest.mark.aiohttp @pytest.mark.asyncio async def test_requests_error_code_401(aiohttp_server, run_sync_test):