46
46
from .windows import WindowManager
47
47
48
48
if TYPE_CHECKING : # pragma: no cover
49
- from collections .abc import Generator , Iterable
49
+ from collections .abc import Callable , Generator , Iterable
50
50
51
51
from hpack .hpack import Encoder
52
52
from hpack .struct import Header , HeaderWeaklyTyped
@@ -131,7 +131,7 @@ def __init__(self, stream_id: int) -> None:
131
131
# How the stream was closed. One of StreamClosedBy.
132
132
self .stream_closed_by : StreamClosedBy | None = None
133
133
134
- def process_input (self , input_ : StreamInputs ) -> Any :
134
+ def process_input (self , input_ : StreamInputs ) -> list [ Event ] :
135
135
"""
136
136
Process a specific input in the state machine.
137
137
"""
@@ -315,21 +315,23 @@ def recv_push_promise(self, previous_state: StreamState) -> list[Event]:
315
315
event .parent_stream_id = self .stream_id
316
316
return [event ]
317
317
318
- def send_end_stream (self , previous_state : StreamState ) -> None :
318
+ def send_end_stream (self , previous_state : StreamState ) -> list [ Event ] :
319
319
"""
320
320
Called when an attempt is made to send END_STREAM in the
321
321
HALF_CLOSED_REMOTE state.
322
322
"""
323
323
self .stream_closed_by = StreamClosedBy .SEND_END_STREAM
324
+ return []
324
325
325
- def send_reset_stream (self , previous_state : StreamState ) -> None :
326
+ def send_reset_stream (self , previous_state : StreamState ) -> list [ Event ] :
326
327
"""
327
328
Called when an attempt is made to send RST_STREAM in a non-closed
328
329
stream state.
329
330
"""
330
331
self .stream_closed_by = StreamClosedBy .SEND_RST_STREAM
332
+ return []
331
333
332
- def reset_stream_on_error (self , previous_state : StreamState ) -> None :
334
+ def reset_stream_on_error (self , previous_state : StreamState ) -> list [ Event ] :
333
335
"""
334
336
Called when we need to forcefully emit another RST_STREAM frame on
335
337
behalf of the state machine.
@@ -350,7 +352,7 @@ def reset_stream_on_error(self, previous_state: StreamState) -> None:
350
352
error ._events = [event ]
351
353
raise error
352
354
353
- def recv_on_closed_stream (self , previous_state : StreamState ) -> None :
355
+ def recv_on_closed_stream (self , previous_state : StreamState ) -> list [ Event ] :
354
356
"""
355
357
Called when an unexpected frame is received on an already-closed
356
358
stream.
@@ -362,7 +364,7 @@ def recv_on_closed_stream(self, previous_state: StreamState) -> None:
362
364
"""
363
365
raise StreamClosedError (self .stream_id )
364
366
365
- def send_on_closed_stream (self , previous_state : StreamState ) -> None :
367
+ def send_on_closed_stream (self , previous_state : StreamState ) -> list [ Event ] :
366
368
"""
367
369
Called when an attempt is made to send data on an already-closed
368
370
stream.
@@ -374,7 +376,7 @@ def send_on_closed_stream(self, previous_state: StreamState) -> None:
374
376
"""
375
377
raise StreamClosedError (self .stream_id )
376
378
377
- def recv_push_on_closed_stream (self , previous_state : StreamState ) -> None :
379
+ def recv_push_on_closed_stream (self , previous_state : StreamState ) -> list [ Event ] :
378
380
"""
379
381
Called when a PUSH_PROMISE frame is received on a full stop
380
382
stream.
@@ -393,7 +395,7 @@ def recv_push_on_closed_stream(self, previous_state: StreamState) -> None:
393
395
msg = "Attempted to push on closed stream."
394
396
raise ProtocolError (msg )
395
397
396
- def send_push_on_closed_stream (self , previous_state : StreamState ) -> None :
398
+ def send_push_on_closed_stream (self , previous_state : StreamState ) -> list [ Event ] :
397
399
"""
398
400
Called when an attempt is made to push on an already-closed stream.
399
401
@@ -473,7 +475,7 @@ def recv_alt_svc(self, previous_state: StreamState) -> list[Event]:
473
475
# the event and let it get populated.
474
476
return [AlternativeServiceAvailable ()]
475
477
476
- def send_alt_svc (self , previous_state : StreamState ) -> None :
478
+ def send_alt_svc (self , previous_state : StreamState ) -> list [ Event ] :
477
479
"""
478
480
Called when sending an ALTSVC frame on this stream.
479
481
@@ -489,6 +491,7 @@ def send_alt_svc(self, previous_state: StreamState) -> None:
489
491
if self .headers_sent :
490
492
msg = "Cannot send ALTSVC after sending response headers."
491
493
raise ProtocolError (msg )
494
+ return []
492
495
493
496
494
497
@@ -561,7 +564,10 @@ def send_alt_svc(self, previous_state: StreamState) -> None:
561
564
# (state, input) to tuples of (side_effect_function, end_state). This
562
565
# map contains all allowed transitions: anything not in this map is
563
566
# invalid and immediately causes a transition to ``closed``.
564
- _transitions = {
567
+ _transitions : dict [
568
+ tuple [StreamState , StreamInputs ],
569
+ tuple [Callable [[H2StreamStateMachine , StreamState ], list [Event ]] | None , StreamState ],
570
+ ] = {
565
571
# State: idle
566
572
(StreamState .IDLE , StreamInputs .SEND_HEADERS ):
567
573
(H2StreamStateMachine .request_sent , StreamState .OPEN ),
0 commit comments