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.8.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.8.0
File Size Uploaded
lr_lumentest_sdk-0.8.0.tar.gz 37.6 kB Details

Built distribution (wheel)

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

Release history Release notifications | RSS feed

This release

0.8.0 This release

2 release files

0.7.0

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