DT5215 firmware emulator
A DT5215 control API on localhost. It answers every endpoint of spec/dt5215-api.yaml with
plausible, consistent data, so the SDKs of all seven languages — and your own program — can be
tested with no instrument in the loop.
pip install dt5215-emulator
dt5215-emulator --port 8080
curl -s -X POST http://127.0.0.1:8080/api-v1.0/login \
-H 'Content-Type: application/json' -d '{"username":"user","password":"user"}'
from dt5215_emulator import Emulator
import dt5215
with Emulator() as emu: # a free port
with dt5215.connect(emu.url, username="user", password="user") as dev:
print(dev.info().hostname) # dt5215-emu
What it reproduces on purpose
Three behaviours of the real firmware that a client has to get right, and that a hand-written mock usually gets wrong:
- a refusal is HTTP 200 with
result: false, not a 4xx; /rebootand/restart_appanswer nothing and drop the connection;- a bearer token is required everywhere except
/loginand/alive, and/alivereports whether the token it was given is valid (so a client can tell "instrument down" from "token expired").
It is also stateful: switching HV off changes what the next /get_hv_status says, disabling
a chain empties it, writing a register reads back, an enumeration walks its phases (in about a
second, not minutes), and a board firmware upgrade progresses board by board.
Driving it from a test
Emulator(state=...) takes a prepared State, and every field of it can be changed while the
emulator runs:
from dt5215_emulator import Emulator, State
state = State()
state.chains[0].los = True # a chain with loss of signal
state.client["control"] = True # Janus attached: a board upgrade must be refused
with Emulator(state=state) as emu:
...
Options
| Option | Meaning |
|---|---|
--port N |
TCP port (default 8080; Emulator(port=0) takes a free one) |
--host H |
interface to bind (default 127.0.0.1) |
--no-auth |
answer everything without a token, like the instrument's /caen/config/nologin |
--hostname NAME |
the hostname the emulator reports |
-v |
log every request |
Default users: user/user and caen/caen.
What it is not
It does not pretend to be the instrument's data path: there is no event streaming, no FPGA, no real timing. It answers the control API, and that is all the SDK needs.
Metadata
Release files for dt5215-emulator 1.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| dt5215_emulator-1.0.1.tar.gz | 18.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dt5215_emulator-1.0.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 36.3 kB
Release files / dt5215_emulator-1.0.1.tar.gz
| Download URL | dt5215_emulator-1.0.1.tar.gz |
|---|---|
| Size | 18.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
34c2dc0d832bf471953ef0f40b0478a5ce46b4335ce2d776e31f51d76015bd64
|
|
BLAKE2b-256 checksum How to use checksums |
b4f184e67b492e40abd6481bb4ba4222d4c5ddacdb23509eaa43c0f714b30118
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.10.12
|
Release files / dt5215_emulator-1.0.1-py3-none-any.whl
| Download URL | dt5215_emulator-1.0.1-py3-none-any.whl |
|---|---|
| Size | 18.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
03feae4fb9d157949550883f5c30ce8dd97b1a3a559552f3ef1ec60ccbb79226
|
|
BLAKE2b-256 checksum How to use checksums |
a18ed844800d0c1dbd51ba2d18beaec1ab7952bd61ea0bdc10aaebf233aeca46
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.10.12
|