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.8.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.8.0.tar.gz | 37.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| lr_lumentest_sdk-0.8.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 73.5 kB
Release files / lr_lumentest_sdk-0.8.0.tar.gz
| Download URL | lr_lumentest_sdk-0.8.0.tar.gz |
|---|---|
| Size | 37.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
736e6227180af2e0d4389c08bf468d14d9c1a3a0a8a30754ed7a9a7da16d194e
|
|
BLAKE2b-256 checksum How to use checksums |
29cbe324f0579c1fb2f926e34edae8bc11584c79cde85b94f86df0dc82fdae2f
|
| 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.8.0-py3-none-any.whl
| Download URL | lr_lumentest_sdk-0.8.0-py3-none-any.whl |
|---|---|
| Size | 36.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3f327bf09529bb1c62313b802a12a0e0a2ec39e209900946324a19c70679a467
|
|
BLAKE2b-256 checksum How to use checksums |
29bf9d810872dea235ef083fda911008497cff437a404642b496856931f3e447
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.14
|