Skip to main content

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-station both provide the lumentest_station import name and must never be installed into the same environment. A station developer already has the real package — install lr-lumentest-sdk only in a separate .venv dedicated 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)

Source distribution for lr-lumentest-sdk 0.7.0
File Size Uploaded
lr_lumentest_sdk-0.7.0.tar.gz 37.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for lr-lumentest-sdk 0.7.0
File Interpreter ABI Platform
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

Release history Release notifications | RSS feed

0.8.0

2 release files

This release

0.7.0 This release

2 release files

0.6.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page