graphql-python / graphql-python/gql

RequestsHTTPTransport does not set headers on session like AIOHTTPTransport does

オープン 初心者向け
#613 コメント 2 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
Python
スター
1.7k
フォーク
195
PR マージ指標
30日以内にマージされた PR はありません

説明

**Describe the bug**
When creating a `transport = RequestsHTTPTransport` with specific headers, `transport.session.headers` doesn't match what was given to the constructor (`and is in `transport.headers`)

This is at odd with the behaviour of `AIOHTTPTransport`, where we get `transport.session.headers == transport.headers`

**To Reproduce**
Steps to reproduce the behavior:

```
import pytest

from gql.transport.requests import RequestsHTTPTransport
from gql.transport.aiohttp import AIOHTTPTransport

@pytest.mark.asyncio
async def test_aio_http_transport_session():
transport = AIOHTTPTransport("url", headers={"test": "header"})
await transport.connect()
assert transport.headers == transport.session.headers

def test_requests_http_transport_session():
transport = RequestsHTTPTransport("url", headers={"test": "header"})
transport.connect()
assert transport.headers == transport.session.headers
```

```
$ uv run pytest -k test_gql -v 130 ↵ ✹ ✭ issue202/rest-client-headers
================================================= test session starts =================================================
platform linux -- Python 3.12.11, pytest-9.1.1, pluggy-1.6.0 -- /home/shtrom/work/simple-github/.venv/bin/python3
cachedir: .pytest_cache
rootdir: /home/shtrom/work/simple-github
configfile: pyproject.toml
plugins: anyio-4.14.2, responses-0.6.0, aioresponses-0.3.0, mock-3.15.1, asyncio-1.4.0
asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function
collected 34 items / 32 deselected / 2 selected

test/test_gql.py::test_aio_http_transport_session PASSED [ 50%]
test/test_gql.py::test_requests_http_transport_session FAILED [100%]

====================================================== FAILURES =======================================================
________________________________________ test_requests_http_transport_session _________________________________________

def test_requests_http_transport_session():
transport = RequestsHTTPTransport("url", headers={"test": "header"})
transport.connect()
> assert transport.headers == transport.session.headers
E AssertionError: assert {'test': 'header'} == {'User-Agent'... 'keep-alive'}
E
E Left contains 1 more item:
E {'test': 'header'}
E Right contains 4 more items:
E {'Accept': '*/*',
E 'Accept-Encoding': 'gzip, deflate, br, zstd',
E 'Connection': 'keep-alive',...
E
E ...Full output truncated (7 lines hidden), use '-vv' to show

test/test_gql.py:17: AssertionError
=============================================== short test summary info ===============================================
FAILED test/test_gql.py::test_requests_http_transport_session - AssertionError: assert {'test': 'header'} == {'User-Agent'... 'keep-alive'}
===================================== 1 failed, 1 passed, 32 deselected in 0.10s ======================================
```

**Expected behavior**
`transport.session.headers == transport.headers` for `RequestHTTPTransport`, same as `AIOHTTPTransport` already does.

**System info (please complete the following information):**
- OS: Linux x86_64, Ubuntu 26.04
- Python version: 3.14.4
- gql version: 4.0
- graphql-core version: 3.2.11

コントリビューションガイド

コントリビューションガイドを開く

調査の方向性

Start with gql.transport.requests.RequestsHTTPTransport and the reproduction in test/test_gql.py, comparing its session behavior with gql.transport.aiohttp.AIOHTTPTransport. Run the targeted test for the Requests transport and confirm that the session headers match the constructor headers while the existing transport tests continue to pass.

索引モデルが issue の本文から書いたものです。

評価

技術スタック
python
領域
api
issue の種類
バグ
難易度
2/5
見積もり時間
1〜3時間
活発さ
活発
明瞭さ
明確に書かれている
初心者へのやさしさ
84/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。