lr-lumentest-sdk
Step-authoring SDK for LumenRadio LumenTest test sequences.
This package is for an embedded developer writing or updating test steps and
sequences for a LumenTest production station, who wants a .venv and an
editor with working imports, type hints and autocomplete for the step API —
without checking out or installing the station itself. It ships the exact
same lumentest_station source files the station runs, so a step written and
tested against this package behaves identically when the station loads it.
Installation
pip install lr-lumentest-sdk
This package and
lumentest-stationboth provide thelumentest_stationimport name and must never be installed into the same environment. A station developer already has the real package — installlr-lumentest-sdkonly in a separate.venvdedicated to authoring steps and sequences.
Public API
from lumentest_station import (
step_options, # decorator: attaches step metadata (type, timeout, limits section)
sequence_options, # decorator: attaches sequence metadata (name, serial handling)
run_tool, # run an external tool as a supervised subprocess
StepFailed, # raise to fail the step; optionally carrying the ToolResult that failed
ToolResult, # what run_tool() returns: exit_code, stdout, stderr, timed_out
Measurement, # a single limits-checked measurement to report
step_main, # run this step standalone from the command line
)
Running a single step
A step module can run itself directly, with no separate harness:
from lumentest_station import step_options, step_main
@step_options("PROGRAMMING", display_name="Flash Firmware")
def flash_firmware(test):
...
if __name__ == "__main__":
raise SystemExit(step_main(flash_firmware))
python my_step.py --limits limits.toml --manifest artifact-manifest.json
For a step file with no __main__ guard, use the lumentest-step console
script instead:
lumentest-step validate my_step.py
lumentest-step run my_step.py --limits limits.toml --manifest artifact-manifest.json --env NRF_TOOLS=/opt/nrf --results-dir ./results
validate is a static check only — it never imports the file, so it needs no
hardware and no environment. It enforces the two rules the station's loader
enforces: exactly one @step_options-decorated top-level function, and no
direct subprocess use (steps call run_tool instead). run performs the
same check, then imports and executes the step.
Options for run, and for step_main under a __main__ guard:
| Option | Purpose |
|---|---|
--limits PATH |
TOML file of measurement limits; repeatable, later files win. Needed by any step that returns measurements. |
--manifest PATH |
A package directory, or its artifact-manifest.json, so manifest.resolve(...) works against a real package |
--env NAME=VALUE |
Set an environment variable for the step's run, repeatable. Production steps read station configuration from the environment, so this stands in for the station's [env] config. |
--dut, --article, --revision, --station |
The identity fields the step sees on its test context |
--timeout SECONDS |
Override the step's own @step_options(timeout=...) |
--results-dir DIR |
Where captured stdout.txt, stderr.txt and traceback.txt land |
The exit status is 0 when the step passed, 1 when it failed (an explicit
StepFailed, or an out-of-limit measurement), and 2 on an error — an
unexpected exception, a timeout, or a file the loader rejects.
A station does far more than run one step: it uploads to QRM, validates serial
numbers, curates the PATH a tool is resolved against, and runs a whole
sequence in order. None of that is reproduced here. A green standalone run says
the step's own logic holds, not that the sequence will pass on a station.
Full authoring guide
For the complete authoring reference — sequence structure, limits files,
manifests, the step SDK's allowed third-party imports, and the full
lumentest-step command reference — see
doc/step-sdk.md
in the LumenTest repository.
Release files for lr-lumentest-sdk 0.7.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| lr_lumentest_sdk-0.7.0.tar.gz | 37.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| lr_lumentest_sdk-0.7.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 73.0 kB
Release files / lr_lumentest_sdk-0.7.0.tar.gz
| Download URL | lr_lumentest_sdk-0.7.0.tar.gz |
|---|---|
| Size | 37.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e28d5e361c763de86f66699279602b201079de82de9035f6b3001ee50041624c
|
|
BLAKE2b-256 checksum How to use checksums |
46ae7d0e40f28da50369e48a60f0b5d350e6b247caa3f39fb7af747489f993c0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.14
|
Release files / lr_lumentest_sdk-0.7.0-py3-none-any.whl
| Download URL | lr_lumentest_sdk-0.7.0-py3-none-any.whl |
|---|---|
| Size | 35.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f5f671c34133e1056f4384275fe53fd3516efbe9b100995ce0812bcc26436c37
|
|
BLAKE2b-256 checksum How to use checksums |
be0cfc20939671cb6c99b531d29c0e49efef66c6034b1051c0341cd5c8b44352
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.14
|