graphql-python / graphql-python/gql

RequestsHTTPTransport does not set headers on session like AIOHTTPTransport does

Aperta Adatta ai principianti
#613 2 commenti 0 reazioni 0 assegnatari Vedi su GitHub
Lingua principale
Python
Stelle
1.7k
Fork
195
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Descrizione

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

Guida per i contributori

Apri la guida per i contributori

Direzione di ricerca

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.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
python
Ambito
api
Tipo di issue
Bug
Difficoltà
2/5
Tempo stimato
1-3 ore
Stato di attività
Attiva
Chiarezza
Specificata chiaramente
Idoneità per principianti
84/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.