You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Part of the 5-example tutorial sequence (#388). Step 5: the introspectable (dynamic) device — the ladder's second backend, deliberately not the temperature sim.
Introspection earns its complexity only when a device's parameters aren't knowable at author time (a detector, not a fixed-command temp controller), so a separate Eiger REST backend gives the technique authentic motivation, exercises an HTTP-client backend the temp examples never touch, and matches real downstream drivers (fastcs-eiger, fastcs-secop, PandABlocks). The backend switch is the lesson: small & known → declare; large & self-describing → introspect.
Scope
Add src/fastcs/demo/simulation/eiger.py: a FastAPI fake REST sim with a few hardcoded, Eiger-shaped endpoints, introspectable (a /keys + per-key GET pattern). No new dependency needed — fastapi is already a core fastcs dependency and httpx is already a dev dependency (use FastAPI + httpx/TestClient in tests); do NOT run uv add (the nightly sandbox is offline).
Add src/fastcs/demo/eiger.py: the FastCS side type-hints half the endpoints (checked) and fills the other half by introspection.
Baseline now (deliberately messy): current introspection mechanism (HintedAttribute).
Part of the 5-example tutorial sequence (#388). Step 5: the introspectable (dynamic) device — the ladder's second backend, deliberately not the temperature sim.
Introspection earns its complexity only when a device's parameters aren't knowable at author time (a detector, not a fixed-command temp controller), so a separate Eiger REST backend gives the technique authentic motivation, exercises an HTTP-client backend the temp examples never touch, and matches real downstream drivers (
fastcs-eiger,fastcs-secop, PandABlocks). The backend switch is the lesson: small & known → declare; large & self-describing → introspect.Scope
src/fastcs/demo/simulation/eiger.py: a FastAPI fake REST sim with a few hardcoded, Eiger-shaped endpoints, introspectable (a/keys+ per-key GET pattern). No new dependency needed —fastapiis already a core fastcs dependency andhttpxis already a dev dependency (use FastAPI +httpx/TestClientin tests); do NOT runuv add(the nightly sandbox is offline).src/fastcs/demo/eiger.py: the FastCS side type-hints half the endpoints (checked) and fills the other half by introspection.HintedAttribute).ControllerFiller— migrated by ControllerFiller — declarative/procedural split #394.Acceptance
uv run --locked tox -e pre-commit,type-checking,testsgreen.ADR: 0013
Priority: build this baseline before the framework issues.
Parent: #388
Blocked by: none