refactor(types): PEP-604 union sweep + UP007/UP045 enforcement

ruff --select UP007,UP045 --fix converted ~1760 sites across the
backend: `Optional[T]` → `T | None`, `Union[X, Y]` → `X | Y`. The
remaining module-level alias targets that ruff conservatively skips
(BindableFloatInput, ColorList, DeviceConfig) were converted by hand
earlier in the pass. black -formatted the result so the wider unions
fit cleanly under the 100-char line budget.

pyproject.toml now sets [tool.ruff.lint] extend-select = ["UP007",
"UP045"] so future legacy imports fire CI on every push. The
pre-commit ruff hook was bumped from v0.8.0 -> v0.15.12 to recognise
UP045 (split off from UP007 in v0.13).
This commit is contained in:
2026-05-23 01:21:44 +03:00
parent ea7ee88490
commit 888f8fd16e
240 changed files with 2102 additions and 2215 deletions
@@ -9,7 +9,6 @@ from ledgrab.core.capture.edge_interpolation import (
fallback_edge_to_leds,
)
# ---------------------------------------------------------------------------
# average_edge_to_leds
# ---------------------------------------------------------------------------
@@ -17,7 +17,6 @@ from ledgrab.core.processing.effect_stream import (
_effect_renderer,
)
EXPECTED_EFFECTS = frozenset(
{
"fire",
@@ -21,7 +21,6 @@ from ledgrab.core.processing.metric_readers import (
get_spec,
)
EXPECTED_METRICS = {
"cpu_load",
"ram_usage",
-1
View File
@@ -13,7 +13,6 @@ import ledgrab.core.audio.filters # noqa: F401
from ledgrab.core.filters.filter_instance import FilterInstance
# ---------------------------------------------------------------------------
# Helpers
# ---------------------------------------------------------------------------
@@ -17,7 +17,6 @@ from ledgrab.storage.automation import (
)
from ledgrab.storage.automation_store import AutomationStore
# ---------------------------------------------------------------------------
# Fixtures
# ---------------------------------------------------------------------------
@@ -27,7 +27,6 @@ from ledgrab.storage.automation import (
WebhookRule,
)
EXPECTED_RULE_TYPES = {
StartupRule,
ApplicationRule,
-1
View File
@@ -4,7 +4,6 @@ import pytest
from ledgrab.core.game_integration.adapters.cs2_adapter import CS2Adapter
# ── Realistic CS2 GSI payload samples ────────────────────────────────────
-1
View File
@@ -14,7 +14,6 @@ from ledgrab.storage.color_strip_source import (
GameEventColorStripSource,
)
# ── Helpers ──────────────────────────────────────────────────────────
@@ -13,7 +13,6 @@ from ledgrab.storage.value_source import (
ValueSource,
)
# ---------------------------------------------------------------------------
# GameEventValueSource model tests (Task 5)
# ---------------------------------------------------------------------------
@@ -2,7 +2,7 @@
import asyncio
from dataclasses import dataclass
from typing import Any, Dict, List, Optional, Tuple
from typing import Any, Dict, List, Tuple
import numpy as np
import pytest
@@ -12,7 +12,6 @@ from ledgrab.core.processing.target_processor import TargetContext
from ledgrab.storage.bindable import BindableFloat
from ledgrab.storage.ha_light_output_target import HALightMapping
# ---------------------------------------------------------------------------
# Test doubles
# ---------------------------------------------------------------------------
@@ -115,9 +114,9 @@ class _FakeCSSManager:
def _make_ctx(
*,
ha_manager: Optional[_FakeHAManager] = None,
css_manager: Optional[_FakeCSSManager] = None,
vs_manager: Optional[_FakeVSManager] = None,
ha_manager: _FakeHAManager | None = None,
css_manager: _FakeCSSManager | None = None,
vs_manager: _FakeVSManager | None = None,
) -> TargetContext:
return TargetContext(
live_stream_manager=None, # type: ignore[arg-type]
@@ -11,7 +11,6 @@ from ledgrab.core.game_integration.mapping_adapter import (
validate_adapter_yaml,
)
# ── YAML validation tests ───────────────────────────────────────────────