Skip to content

Commit

Permalink
convert ping events into a dataclasses
Browse files Browse the repository at this point in the history
  • Loading branch information
mhils committed Feb 7, 2025
1 parent 51d64fd commit c472671
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 13 deletions.
5 changes: 2 additions & 3 deletions src/h2/connection.py
Original file line number Diff line number Diff line change
Expand Up @@ -1823,17 +1823,16 @@ def _receive_ping_frame(self, frame: PingFrame) -> tuple[list[Frame], list[Event

evt: PingReceived | PingAckReceived
if "ACK" in frame.flags:
evt = PingAckReceived()
evt = PingAckReceived(ping_data=frame.opaque_data)
else:
evt = PingReceived()
evt = PingReceived(ping_data=frame.opaque_data)

# automatically ACK the PING with the same 'opaque data'
f = PingFrame(0)
f.flags.add("ACK")
f.opaque_data = frame.opaque_data
frames.append(f)

evt.ping_data = frame.opaque_data
events.append(evt)

return frames, events
Expand Down
12 changes: 6 additions & 6 deletions src/h2/events.py
Original file line number Diff line number Diff line change
Expand Up @@ -403,6 +403,7 @@ def __repr__(self) -> str:
)


@dataclass(**kw_only)
class PingReceived(Event):
"""
The PingReceived event is fired whenever a PING is received. It contains
Expand All @@ -412,14 +413,14 @@ class PingReceived(Event):
.. versionadded:: 3.1.0
"""

def __init__(self) -> None:
#: The data included on the ping.
self.ping_data: bytes | None = None
ping_data: bytes
"""The data included on the ping."""

def __repr__(self) -> str:
return f"<PingReceived ping_data:{_bytes_representation(self.ping_data)}>"


@dataclass(**kw_only)
class PingAckReceived(Event):
"""
The PingAckReceived event is fired whenever a PING acknowledgment is
Expand All @@ -432,9 +433,8 @@ class PingAckReceived(Event):
Removed deprecated but equivalent ``PingAcknowledged``.
"""

def __init__(self) -> None:
#: The data included on the ping.
self.ping_data: bytes | None = None
ping_data: bytes
"""The data included on the ping."""

def __repr__(self) -> str:
return f"<PingAckReceived ping_data:{_bytes_representation(self.ping_data)}>"
Expand Down
6 changes: 2 additions & 4 deletions tests/test_events.py
Original file line number Diff line number Diff line change
Expand Up @@ -222,17 +222,15 @@ def test_pingreceived_repr(self) -> None:
"""
PingReceived has a useful debug representation.
"""
e = h2.events.PingReceived()
e.ping_data = b"abcdefgh"
e = h2.events.PingReceived(ping_data=b"abcdefgh")

assert repr(e) == "<PingReceived ping_data:6162636465666768>"

def test_pingackreceived_repr(self) -> None:
"""
PingAckReceived has a useful debug representation.
"""
e = h2.events.PingAckReceived()
e.ping_data = b"abcdefgh"
e = h2.events.PingAckReceived(ping_data=b"abcdefgh")

assert repr(e) == "<PingAckReceived ping_data:6162636465666768>"

Expand Down

0 comments on commit c472671

Please sign in to comment.