Skip to content

Commit dcaa0cd

Browse files
style: apply ruff auto-fixes for pre-commit
1 parent b753268 commit dcaa0cd

File tree

2 files changed

+59
-27
lines changed

2 files changed

+59
-27
lines changed

fury/ui/event_recorder.py

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,11 @@
1717

1818
from __future__ import annotations
1919

20+
from dataclasses import asdict, dataclass, field
2021
import json
2122
import time
22-
from dataclasses import asdict, dataclass, field
2323
from typing import Any, Callable, Dict, List, Optional
2424

25-
2625
# ---------------------------------------------------------------------------
2726
# Rendercanvas event types that we observe by default (lowercase strings used
2827
# by rendercanvas._enums.EventType).
@@ -44,6 +43,7 @@
4443
# RecordedEvent
4544
# ---------------------------------------------------------------------------
4645

46+
4747
@dataclass(frozen=True)
4848
class RecordedEvent:
4949
"""Immutable snapshot of a single rendercanvas UI event.
@@ -131,16 +131,22 @@ def from_rendercanvas_event(cls, event: Any) -> "RecordedEvent":
131131
RecordedEvent
132132
"""
133133
if isinstance(event, dict):
134+
134135
def _get(key: str, default: Any = None) -> Any:
135136
return event.get(key, default)
137+
136138
raw = dict(event)
137139
else:
140+
138141
def _get(key: str, default: Any = None) -> Any: # type: ignore[misc]
139142
return getattr(event, key, default)
143+
140144
# Serialise object to a dict so raw is always JSON-safe.
141145
try:
142146
raw = {
143-
"event_type": getattr(event, "event_type", getattr(event, "type", "")),
147+
"event_type": getattr(
148+
event, "event_type", getattr(event, "type", "")
149+
),
144150
"x": float(getattr(event, "x", 0)),
145151
"y": float(getattr(event, "y", 0)),
146152
"button": int(getattr(event, "button", 0)),
@@ -149,7 +155,9 @@ def _get(key: str, default: Any = None) -> Any: # type: ignore[misc]
149155
"modifiers": list(getattr(event, "modifiers", [])),
150156
"dx": float(getattr(event, "dx", 0)),
151157
"dy": float(getattr(event, "dy", 0)),
152-
"time_stamp": float(getattr(event, "time_stamp", time.perf_counter())),
158+
"time_stamp": float(
159+
getattr(event, "time_stamp", time.perf_counter())
160+
),
153161
}
154162
except Exception:
155163
raw = {}
@@ -160,7 +168,9 @@ def _get(key: str, default: Any = None) -> Any: # type: ignore[misc]
160168

161169
return cls(
162170
event_type=str(et),
163-
timestamp=float(ts if (ts := _get("time_stamp")) is not None else time.perf_counter()),
171+
timestamp=float(
172+
ts if (ts := _get("time_stamp")) is not None else time.perf_counter()
173+
),
164174
x=float(_get("x") or 0),
165175
y=float(_get("y") or 0),
166176
button=int(_get("button") or 0),
@@ -205,6 +215,7 @@ def to_rendercanvas_event(self) -> Dict[str, Any]:
205215
# EventRecorder
206216
# ---------------------------------------------------------------------------
207217

218+
208219
class EventRecorder:
209220
"""Records UI events from a FURY v2 ShowManager.
210221
@@ -380,6 +391,7 @@ def _resolve_renderer(show_manager: Any) -> Any:
380391
# EventCounter
381392
# ---------------------------------------------------------------------------
382393

394+
383395
class EventCounter(EventRecorder):
384396
"""Records events *and* maintains per-type counts.
385397
@@ -432,8 +444,12 @@ def clear(self) -> None:
432444
# ------------------------------------------------------------------
433445

434446
def _on_event(self, event: Any) -> None:
435-
et = event.get("event_type", "unknown") if isinstance(event, dict) else (
436-
getattr(event, "event_type", None) or getattr(event, "type", "unknown")
447+
et = (
448+
event.get("event_type", "unknown")
449+
if isinstance(event, dict)
450+
else (
451+
getattr(event, "event_type", None) or getattr(event, "type", "unknown")
452+
)
437453
)
438454
self._counts[et] = self._counts.get(et, 0) + 1
439455
super()._on_event(event)
@@ -443,6 +459,7 @@ def _on_event(self, event: Any) -> None:
443459
# EventPlayer
444460
# ---------------------------------------------------------------------------
445461

462+
446463
class EventPlayer:
447464
"""Replays a sequence of :class:`RecordedEvent` objects into a ShowManager.
448465
@@ -524,14 +541,14 @@ def play(self, show_manager: Any) -> None:
524541
# 3. renderer.dispatch_event — last resort (expects Event object, not dict)
525542
if hasattr(renderer, "emit"):
526543
_dispatch = renderer.emit
527-
elif hasattr(show_manager, "window") and hasattr(show_manager.window, "_events"):
544+
elif hasattr(show_manager, "window") and hasattr(
545+
show_manager.window, "_events"
546+
):
528547
_dispatch = show_manager.window._events.emit
529548
elif hasattr(renderer, "dispatch_event"):
530549
_dispatch = renderer.dispatch_event
531550
else:
532-
raise AttributeError(
533-
"Cannot find a dict-compatible event dispatch path."
534-
)
551+
raise AttributeError("Cannot find a dict-compatible event dispatch path.")
535552

536553
prev_ts: Optional[float] = None
537554
for idx, evt in enumerate(events):

fury/ui/tests/test_event_recorder.py

Lines changed: 31 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import json
1313
import os
1414
import time
15-
from unittest.mock import MagicMock, patch
15+
from unittest.mock import MagicMock
1616

1717
import pytest
1818

@@ -24,11 +24,11 @@
2424
RecordedEvent,
2525
)
2626

27-
2827
# ---------------------------------------------------------------------------
2928
# Helpers — fake rendercanvas Renderer
3029
# ---------------------------------------------------------------------------
3130

31+
3232
def _make_renderer() -> MagicMock:
3333
"""Minimal rendercanvas Renderer mock.
3434
@@ -93,8 +93,10 @@ def _key(et="key_down", key="a", modifiers=None, ts=None):
9393
def _wheel(x=0.0, y=0.0, dx=0.0, dy=-3.0, ts=None):
9494
return {
9595
"event_type": "wheel",
96-
"x": x, "y": y,
97-
"dx": dx, "dy": dy,
96+
"x": x,
97+
"y": y,
98+
"dx": dx,
99+
"dy": dy,
98100
"modifiers": [],
99101
"time_stamp": ts if ts is not None else time.perf_counter(),
100102
}
@@ -104,8 +106,8 @@ def _wheel(x=0.0, y=0.0, dx=0.0, dy=-3.0, ts=None):
104106
# RecordedEvent tests
105107
# ---------------------------------------------------------------------------
106108

107-
class TestRecordedEvent:
108109

110+
class TestRecordedEvent:
109111
def test_defaults(self):
110112
e = RecordedEvent(event_type="pointer_down")
111113
assert e.event_type == "pointer_down"
@@ -203,8 +205,8 @@ def test_modifiers_preserved_as_tuple(self):
203205
# EventRecorder tests
204206
# ---------------------------------------------------------------------------
205207

206-
class TestEventRecorder:
207208

209+
class TestEventRecorder:
208210
def test_attach_registers_handler(self):
209211
renderer = _make_renderer()
210212
sm = _make_show_manager(renderer)
@@ -380,8 +382,8 @@ def test_resolve_renderer_raises_for_unknown(self):
380382
# EventCounter tests
381383
# ---------------------------------------------------------------------------
382384

383-
class TestEventCounter:
384385

386+
class TestEventCounter:
385387
def test_counts_by_type(self):
386388
renderer = _make_renderer()
387389
sm = _make_show_manager(renderer)
@@ -442,13 +444,15 @@ def test_is_subclass_of_recorder(self):
442444
# EventPlayer tests
443445
# ---------------------------------------------------------------------------
444446

445-
class TestEventPlayer:
446447

448+
class TestEventPlayer:
447449
def _recorded(self, n=3, base_ts=1000.0):
448450
return [
449451
RecordedEvent.from_rendercanvas_event(
450-
{**_ptr("pointer_down", x=float(i * 10), y=float(i * 10)),
451-
"time_stamp": base_ts + i * 0.1}
452+
{
453+
**_ptr("pointer_down", x=float(i * 10), y=float(i * 10)),
454+
"time_stamp": base_ts + i * 0.1,
455+
}
452456
)
453457
for i in range(n)
454458
]
@@ -480,7 +484,9 @@ def test_play_correct_event_types(self):
480484
assert dispatched == ["pointer_down", "key_up"]
481485

482486
def test_play_correct_coordinates(self):
483-
events = [RecordedEvent.from_rendercanvas_event(_ptr("pointer_move", x=55, y=77))]
487+
events = [
488+
RecordedEvent.from_rendercanvas_event(_ptr("pointer_move", x=55, y=77))
489+
]
484490
player = EventPlayer(recorder=self._recorder_with(events), speed_factor=0.0)
485491
dispatched = []
486492
renderer = _make_renderer()
@@ -527,7 +533,9 @@ def test_load_then_play(self, tmp_path):
527533
def test_speed_factor_zero_no_sleep(self, monkeypatch):
528534
slept = []
529535
monkeypatch.setattr(time, "sleep", lambda s: slept.append(s))
530-
player = EventPlayer(recorder=self._recorder_with(self._recorded(3)), speed_factor=0.0)
536+
player = EventPlayer(
537+
recorder=self._recorder_with(self._recorded(3)), speed_factor=0.0
538+
)
531539
player.play(_make_show_manager())
532540
assert slept == []
533541

@@ -552,10 +560,16 @@ def test_falls_back_to_dispatch_event(self):
552560
events = self._recorded(2)
553561
player = EventPlayer(recorder=self._recorder_with(events), speed_factor=0.0)
554562

555-
renderer = MagicMock(spec=["add_event_handler", "remove_handler", "dispatch_event"])
563+
renderer = MagicMock(
564+
spec=["add_event_handler", "remove_handler", "dispatch_event"]
565+
)
556566
dispatched = []
557-
renderer.dispatch_event.side_effect = lambda e: dispatched.append(e["event_type"])
558-
sm = MagicMock(spec=["renderer"]) # no 'window' attr → forces dispatch_event fallback
567+
renderer.dispatch_event.side_effect = lambda e: dispatched.append(
568+
e["event_type"]
569+
)
570+
sm = MagicMock(
571+
spec=["renderer"]
572+
) # no 'window' attr → forces dispatch_event fallback
559573
sm.renderer = renderer
560574
player.play(sm)
561575
assert len(dispatched) == 2
@@ -565,8 +579,8 @@ def test_falls_back_to_dispatch_event(self):
565579
# Integration tests
566580
# ---------------------------------------------------------------------------
567581

568-
class TestIntegration:
569582

583+
class TestIntegration:
570584
def test_record_save_load_replay(self, tmp_path):
571585
"""Full round-trip: record → save JSON → load → replay."""
572586
renderer_src = _make_renderer()
@@ -639,6 +653,7 @@ def test_wheel_round_trip(self, tmp_path):
639653

640654
def test_multiple_sessions_independent(self, tmp_path):
641655
"""Loading a second session replaces the first."""
656+
642657
def _make_session(fname, event_type, n):
643658
rec = EventRecorder()
644659
rec._events = [

0 commit comments

Comments
 (0)