Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 17 additions & 8 deletions httpcore/_async/http2.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,10 +67,12 @@ def __init__(
# Mapping from stream ID to response stream events.
self._events: dict[
int,
h2.events.ResponseReceived
| h2.events.DataReceived
| h2.events.StreamEnded
| h2.events.StreamReset,
list[
h2.events.ResponseReceived
| h2.events.DataReceived
| h2.events.StreamEnded
| h2.events.StreamReset,
],
] = {}

# Connection terminated events are stored as state since
Expand Down Expand Up @@ -102,9 +104,11 @@ async def handle_async_request(self, request: Request) -> Response:
async with self._init_lock:
if not self._sent_connection_init:
try:
kwargs = {"request": request}
async with Trace("send_connection_init", logger, request, kwargs):
await self._send_connection_init(**kwargs)
sci_kwargs = {"request": request}
async with Trace(
"send_connection_init", logger, request, sci_kwargs
):
await self._send_connection_init(**sci_kwargs)
except BaseException as exc:
with AsyncShieldCancellation():
await self.aclose()
Expand Down Expand Up @@ -293,6 +297,7 @@ async def _receive_response(

status_code = 200
headers = []
assert event.headers is not None
for k, v in event.headers:
if k == b":status":
status_code = int(v.decode("ascii", errors="ignore"))
Expand All @@ -310,6 +315,8 @@ async def _receive_response_body(
while True:
event = await self._receive_stream_event(request, stream_id)
if isinstance(event, h2.events.DataReceived):
assert event.flow_controlled_length is not None
assert event.data is not None
amount = event.flow_controlled_length
self._h2_state.acknowledge_received_data(amount, stream_id)
await self._write_outgoing_data(request)
Expand Down Expand Up @@ -380,7 +387,9 @@ async def _receive_events(

await self._write_outgoing_data(request)

async def _receive_remote_settings_change(self, event: h2.events.Event) -> None:
async def _receive_remote_settings_change(
self, event: h2.events.RemoteSettingsChanged
) -> None:
max_concurrent_streams = event.changed_settings.get(
h2.settings.SettingCodes.MAX_CONCURRENT_STREAMS
)
Expand Down
25 changes: 17 additions & 8 deletions httpcore/_sync/http2.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,10 +67,12 @@ def __init__(
# Mapping from stream ID to response stream events.
self._events: dict[
int,
h2.events.ResponseReceived
| h2.events.DataReceived
| h2.events.StreamEnded
| h2.events.StreamReset,
list[
h2.events.ResponseReceived
| h2.events.DataReceived
| h2.events.StreamEnded
| h2.events.StreamReset,
],
] = {}

# Connection terminated events are stored as state since
Expand Down Expand Up @@ -102,9 +104,11 @@ def handle_request(self, request: Request) -> Response:
with self._init_lock:
if not self._sent_connection_init:
try:
kwargs = {"request": request}
with Trace("send_connection_init", logger, request, kwargs):
self._send_connection_init(**kwargs)
sci_kwargs = {"request": request}
with Trace(
"send_connection_init", logger, request, sci_kwargs
):
self._send_connection_init(**sci_kwargs)
except BaseException as exc:
with ShieldCancellation():
self.close()
Expand Down Expand Up @@ -293,6 +297,7 @@ def _receive_response(

status_code = 200
headers = []
assert event.headers is not None
for k, v in event.headers:
if k == b":status":
status_code = int(v.decode("ascii", errors="ignore"))
Expand All @@ -310,6 +315,8 @@ def _receive_response_body(
while True:
event = self._receive_stream_event(request, stream_id)
if isinstance(event, h2.events.DataReceived):
assert event.flow_controlled_length is not None
assert event.data is not None
amount = event.flow_controlled_length
self._h2_state.acknowledge_received_data(amount, stream_id)
self._write_outgoing_data(request)
Expand Down Expand Up @@ -380,7 +387,9 @@ def _receive_events(

self._write_outgoing_data(request)

def _receive_remote_settings_change(self, event: h2.events.Event) -> None:
def _receive_remote_settings_change(
self, event: h2.events.RemoteSettingsChanged
) -> None:
max_concurrent_streams = event.changed_settings.get(
h2.settings.SettingCodes.MAX_CONCURRENT_STREAMS
)
Expand Down
4 changes: 2 additions & 2 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ mkdocstrings[python-legacy]==0.25.1
jinja2==3.1.4

# Packaging
build==1.2.1
twine==5.1.1
build==1.2.2.post1
twine==6.1.0

# Tests & Linting
coverage[toml]==7.5.4
Expand Down
2 changes: 1 addition & 1 deletion scripts/lint
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ export SOURCE_FILES="httpcore tests"

set -x

${PREFIX}ruff --fix $SOURCE_FILES
${PREFIX}ruff check --fix $SOURCE_FILES
${PREFIX}ruff format $SOURCE_FILES

# Run unasync last because its `--check` mode is not aware of code formatters.
Expand Down