diff --git a/httpcore/_async/http2.py b/httpcore/_async/http2.py index c6434a04..dbd0beeb 100644 --- a/httpcore/_async/http2.py +++ b/httpcore/_async/http2.py @@ -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 @@ -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() @@ -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")) @@ -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) @@ -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 ) diff --git a/httpcore/_sync/http2.py b/httpcore/_sync/http2.py index ca4dd724..ddcc1890 100644 --- a/httpcore/_sync/http2.py +++ b/httpcore/_sync/http2.py @@ -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 @@ -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() @@ -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")) @@ -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) @@ -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 ) diff --git a/requirements.txt b/requirements.txt index ba947170..880330c6 100644 --- a/requirements.txt +++ b/requirements.txt @@ -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 diff --git a/scripts/lint b/scripts/lint index e40524f5..fc02e475 100755 --- a/scripts/lint +++ b/scripts/lint @@ -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.