diff --git a/h2/connection.py b/h2/connection.py index 9974942b9..b79a30421 100644 --- a/h2/connection.py +++ b/h2/connection.py @@ -1402,6 +1402,7 @@ def _receive_headers_frame(self, frame): if 'PRIORITY' in frame.flags: p_frames, p_events = self._receive_priority_frame(frame) + stream_events[0].priority_updated = p_events[0] stream_events.extend(p_events) assert not p_frames diff --git a/h2/events.py b/h2/events.py index e749101b2..21e57c5be 100644 --- a/h2/events.py +++ b/h2/events.py @@ -23,6 +23,9 @@ class RequestReceived(object): .. versionchanged:: 2.3.0 Changed the type of ``headers`` to :class:`HeaderTuple `. This has no effect on current users. + + .. versionchanged:: 2.4.0 + Added ``stream_ended`` and ``priority_updated`` properties. """ def __init__(self): #: The Stream ID for the stream this request was made on. @@ -31,6 +34,20 @@ def __init__(self): #: The request headers. self.headers = None + #: If this request also ended the stream, the associated + #: :class:`StreamEnded ` event will be available + #: here. + #: + #: .. versionadded:: 2.4.0 + self.stream_ended = None + + #: If this request also had associated priority information, the + #: associated :class:`PriorityUpdated ` + #: event will be available here. + #: + #: .. versionadded:: 2.4.0 + self.priority_updated = None + def __repr__(self): return "" % ( self.stream_id, self.headers @@ -46,6 +63,9 @@ class ResponseReceived(object): .. versionchanged:: 2.3.0 Changed the type of ``headers`` to :class:`HeaderTuple `. This has no effect on current users. + + .. versionchanged:: 2.4.0 + Added ``stream_ended`` and ``priority_updated`` properties. """ def __init__(self): #: The Stream ID for the stream this response was made on. @@ -54,6 +74,20 @@ def __init__(self): #: The response headers. self.headers = None + #: If this response also ended the stream, the associated + #: :class:`StreamEnded ` event will be available + #: here. + #: + #: .. versionadded:: 2.4.0 + self.stream_ended = None + + #: If this response also had associated priority information, the + #: associated :class:`PriorityUpdated ` + #: event will be available here. + #: + #: .. versionadded:: 2.4.0 + self.priority_updated = None + def __repr__(self): return "" % ( self.stream_id, self.headers @@ -72,6 +106,9 @@ class TrailersReceived(object): .. versionchanged:: 2.3.0 Changed the type of ``headers`` to :class:`HeaderTuple `. This has no effect on current users. + + .. versionchanged:: 2.4.0 + Added ``stream_ended`` and ``priority_updated`` properties. """ def __init__(self): #: The Stream ID for the stream on which these trailers were received. @@ -80,6 +117,19 @@ def __init__(self): #: The trailers themselves. self.headers = None + #: Trailers always end streams. This property has the associated + #: :class:`StreamEnded ` in it. + #: + #: .. versionadded:: 2.4.0 + self.stream_ended = None + + #: If the trailers also set associated priority information, the + #: associated :class:`PriorityUpdated ` + #: event will be available here. + #: + #: .. versionadded:: 2.4.0 + self.priority_updated = None + def __repr__(self): return "" % ( self.stream_id, self.headers @@ -104,6 +154,9 @@ class InformationalResponseReceived(object): .. versionchanged:: 2.3.0 Changed the type of ``headers`` to :class:`HeaderTuple `. This has no effect on current users. + + .. versionchanged:: 2.4.0 + Added ``priority_updated`` property. """ def __init__(self): #: The Stream ID for the stream this informational response was made @@ -113,6 +166,13 @@ def __init__(self): #: The headers for this informational response. self.headers = None + #: If this response also had associated priority information, the + #: associated :class:`PriorityUpdated ` + #: event will be available here. + #: + #: .. versionadded:: 2.4.0 + self.priority_updated = None + def __repr__(self): return "" % ( self.stream_id, self.headers @@ -138,6 +198,13 @@ def __init__(self): #: than ``len(data)``. self.flow_controlled_length = None + #: If this data chunk also completed the stream, the associated + #: :class:`StreamEnded ` event will be available + #: here. + #: + #: .. versionadded:: 2.4.0 + self.stream_ended = None + def __repr__(self): return ( "