Skip to content

Commit 39f29ad

Browse files
committed
convert events.TrailerReceived into a dataclass
1 parent e40bfe7 commit 39f29ad

File tree

3 files changed

+23
-21
lines changed

3 files changed

+23
-21
lines changed

src/h2/events.py

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
import binascii
1414
import sys
1515
from dataclasses import dataclass
16-
from typing import Any, TYPE_CHECKING
16+
from typing import TYPE_CHECKING, Any
1717

1818
from .settings import ChangedSetting, SettingCodes, Settings, _setting_code_from_int
1919

@@ -128,6 +128,7 @@ def __repr__(self) -> str:
128128
return f"<ResponseReceived stream_id:{self.stream_id}, headers:{self.headers}>"
129129

130130

131+
@dataclass(**kw_only)
131132
class TrailersReceived(Event):
132133
"""
133134
The TrailersReceived event is fired whenever trailers are received on a
@@ -145,25 +146,28 @@ class TrailersReceived(Event):
145146
Added ``stream_ended`` and ``priority_updated`` properties.
146147
"""
147148

148-
def __init__(self) -> None:
149-
#: The Stream ID for the stream on which these trailers were received.
150-
self.stream_id: int | None = None
149+
stream_id: int
150+
"""The Stream ID for the stream on which these trailers were received."""
151151

152-
#: The trailers themselves.
153-
self.headers: list[Header] | None = None
152+
headers: list[Header] = _LAZY_INIT
153+
"""The trailers themselves."""
154154

155-
#: Trailers always end streams. This property has the associated
156-
#: :class:`StreamEnded <h2.events.StreamEnded>` in it.
157-
#:
158-
#: .. versionadded:: 2.4.0
159-
self.stream_ended: StreamEnded | None = None
155+
stream_ended: StreamEnded | None = None
156+
"""
157+
Trailers always end streams. This property has the associated
158+
:class:`StreamEnded <h2.events.StreamEnded>` in it.
160159
161-
#: If the trailers also set associated priority information, the
162-
#: associated :class:`PriorityUpdated <h2.events.PriorityUpdated>`
163-
#: event will be available here.
164-
#:
165-
#: .. versionadded:: 2.4.0
166-
self.priority_updated: PriorityUpdated | None = None
160+
.. versionadded:: 2.4.0
161+
"""
162+
163+
priority_updated: PriorityUpdated | None = None
164+
"""
165+
If the trailers also set associated priority information, the
166+
associated :class:`PriorityUpdated <h2.events.PriorityUpdated>`
167+
event will be available here.
168+
169+
.. versionadded:: 2.4.0
170+
"""
167171

168172
def __repr__(self) -> str:
169173
return f"<TrailersReceived stream_id:{self.stream_id}, headers:{self.headers}>"

src/h2/stream.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ def response_received(self, previous_state: StreamState) -> list[Event]:
212212
else:
213213
assert not self.trailers_received
214214
self.trailers_received = True
215-
event = TrailersReceived()
215+
event = TrailersReceived(stream_id=self.stream_id)
216216

217217
event.stream_id = self.stream_id
218218
return [event]

tests/test_events.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -144,9 +144,7 @@ def test_trailersreceived_repr(self) -> None:
144144
"""
145145
TrailersReceived has a useful debug representation.
146146
"""
147-
e = h2.events.TrailersReceived()
148-
e.stream_id = 62
149-
e.headers = self.example_response_headers
147+
e = h2.events.TrailersReceived(stream_id=62, headers=self.example_response_headers)
150148

151149
assert repr(e) == (
152150
"<TrailersReceived stream_id:62, headers:["

0 commit comments

Comments
 (0)