Skip to content

Commit 8d64bfc

Browse files
committed
convert events.StreamReset into a dataclass
1 parent 11a01a3 commit 8d64bfc

File tree

3 files changed

+34
-28
lines changed

3 files changed

+34
-28
lines changed

src/h2/events.py

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -431,6 +431,7 @@ def __repr__(self) -> str:
431431
return f"<StreamEnded stream_id:{self.stream_id}>"
432432

433433

434+
@dataclass(**kw_only)
434435
class StreamReset(Event):
435436
"""
436437
The StreamReset event is fired in two situations. The first is when the
@@ -442,16 +443,20 @@ class StreamReset(Event):
442443
This event is now fired when h2 automatically resets a stream.
443444
"""
444445

445-
def __init__(self) -> None:
446-
#: The Stream ID of the stream that was reset.
447-
self.stream_id: int | None = None
446+
stream_id: int
447+
"""
448+
The Stream ID of the stream that was reset.
449+
"""
448450

449-
#: The error code given. Either one of :class:`ErrorCodes
450-
#: <h2.errors.ErrorCodes>` or ``int``
451-
self.error_code: ErrorCodes | int | None = None
451+
error_code: ErrorCodes | int = _LAZY_INIT
452+
"""
453+
The error code given.
454+
"""
452455

453-
#: Whether the remote peer sent a RST_STREAM or we did.
454-
self.remote_reset = True
456+
remote_reset: bool = True
457+
"""
458+
Whether the remote peer sent a RST_STREAM or we did.
459+
"""
455460

456461
def __repr__(self) -> str:
457462
return f"<StreamReset stream_id:{self.stream_id}, error_code:{self.error_code!s}, remote_reset:{self.remote_reset}>"

src/h2/stream.py

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -257,9 +257,7 @@ def stream_reset(self, previous_state: StreamState) -> list[Event]:
257257
Fired when a stream is forcefully reset.
258258
"""
259259
self.stream_closed_by = StreamClosedBy.RECV_RST_STREAM
260-
event = StreamReset()
261-
event.stream_id = self.stream_id
262-
return [event]
260+
return [StreamReset(stream_id=self.stream_id)]
263261

264262
def send_new_pushed_stream(self, previous_state: StreamState) -> list[Event]:
265263
"""
@@ -342,12 +340,13 @@ def reset_stream_on_error(self, previous_state: StreamState) -> list[Event]:
342340
self.stream_closed_by = StreamClosedBy.SEND_RST_STREAM
343341

344342
error = StreamClosedError(self.stream_id)
345-
346-
event = StreamReset()
347-
event.stream_id = self.stream_id
348-
event.error_code = ErrorCodes.STREAM_CLOSED
349-
event.remote_reset = False
350-
error._events = [event]
343+
error._events = [
344+
StreamReset(
345+
stream_id=self.stream_id,
346+
error_code=ErrorCodes.STREAM_CLOSED,
347+
remote_reset=False,
348+
),
349+
]
351350
raise error
352351

353352
def recv_on_closed_stream(self, previous_state: StreamState) -> list[Event]:
@@ -1160,13 +1159,14 @@ def receive_window_update(self, increment: int) -> tuple[list[Frame], list[Event
11601159
except FlowControlError:
11611160
# Ok, this is bad. We're going to need to perform a local
11621161
# reset.
1163-
event = StreamReset()
1164-
event.stream_id = self.stream_id
1165-
event.error_code = ErrorCodes.FLOW_CONTROL_ERROR
1166-
event.remote_reset = False
1167-
1168-
events = [event]
1169-
frames = self.reset_stream(event.error_code)
1162+
events = [
1163+
StreamReset(
1164+
stream_id=self.stream_id,
1165+
error_code=ErrorCodes.FLOW_CONTROL_ERROR,
1166+
remote_reset=False,
1167+
),
1168+
]
1169+
frames = self.reset_stream(ErrorCodes.FLOW_CONTROL_ERROR)
11701170

11711171
return frames, events
11721172

tests/test_events.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -246,10 +246,11 @@ def test_streamreset_repr(self) -> None:
246246
"""
247247
StreamEnded has a useful debug representation.
248248
"""
249-
e = h2.events.StreamReset()
250-
e.stream_id = 919
251-
e.error_code = h2.errors.ErrorCodes.ENHANCE_YOUR_CALM
252-
e.remote_reset = False
249+
e = h2.events.StreamReset(
250+
stream_id=919,
251+
error_code=h2.errors.ErrorCodes.ENHANCE_YOUR_CALM,
252+
remote_reset=False,
253+
)
253254

254255
if sys.version_info >= (3, 11):
255256
assert repr(e) == (

0 commit comments

Comments
 (0)