feat(2-6): stateful Renderer, DisplayInterface, and pipeline smoke test
Implements story 2-6: Renderer class with per-aircraft trail history (deque capped at TRAIL_MAX_DOTS=5), NullDisplay with DEBUG logging, WaveshareDisplay stub, and end-to-end pipeline smoke test. All 96 tests pass; ruff check and format clean. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,7 +1,12 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import logging
|
||||
from typing import Protocol
|
||||
|
||||
from PIL import Image
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class DisplayInterface(Protocol):
|
||||
def show(self, image: Image.Image) -> None: ...
|
||||
@@ -9,4 +14,9 @@ class DisplayInterface(Protocol):
|
||||
|
||||
class NullDisplay:
|
||||
def show(self, image: Image.Image) -> None:
|
||||
pass
|
||||
log.debug("NullDisplay.show: %dx%d", image.width, image.height)
|
||||
|
||||
|
||||
class WaveshareDisplay:
|
||||
def show(self, image: Image.Image) -> None:
|
||||
raise NotImplementedError
|
||||
|
||||
Reference in New Issue
Block a user