standcloud-integration
Русская версия: README.ru.md
standcloud-integration — a Python SDK for exporting specialized test reports
from the StandCloud service via its public API.
An optional command-line interface ships alongside the SDK.
License
Requirements
- Python 3.11+
- A StandCloud API key — generate one in the portal at https://standcloud.everypin.io → Settings → API Keys.
Installation
Install the SDK from PyPI:
pip install standcloud-integration
This gives you the library itself — the StandCloudClient client, the typed
models, and helpers for building reports — with a minimal set of dependencies and
no CLI framework.
If you also need the standcloud-integration command-line tool, install it
together with the cli extra:
pip install 'standcloud-integration[cli]'
Authentication
SDK. The client is authenticated only by the key you give it:
client = StandCloudClient(api_key) # sent as Authorization: Bearer <key>
It does not read the environment or prompt for anything: deciding where to get
the key is your application's job. An empty key raises ValueError immediately.
CLI. The standcloud-integration command finds the key itself, in this order:
- the
--api-key <KEY>option; - the
STANDCLOUD_API_KEYenvironment variable (recommended); - an interactive secure prompt if the first two are not set.
export STANDCLOUD_API_KEY="ak_..."
Prefer passing the key via the environment variable rather than
--api-key: command-line arguments can leak into your shell history and the process list.
Using the SDK
A report is a transformation of StandCloud API data into typed report records.
TestRun is one of the API's models; a given report works with the models it
needs.
from standcloud_integration import StandCloudClient
from standcloud_integration.reports.devices_with_last_stage import (
DEVICES_WITH_LAST_STAGE_REPORT,
DevicesWithLastStageRecord,
)
sc_client = StandCloudClient(api_key)
runs = sc_client.get_test_runs(part_number="ACME-CTRL-001 Rev A")
records: list[DevicesWithLastStageRecord] = DEVICES_WITH_LAST_STAGE_REPORT.build(runs)
# records is typed data — plot it, load it into pandas, write your own CSV, …
Each bundled report is a Report pairing a builder with its record type (the full
list is standcloud_integration.reports.REPORTS). Writing files is not the
SDK's job — it only returns the built report. A complete, runnable example (with a
plain-csv writer) is in examples/custom_report.py;
to create your own report, see docs/en/writing-reports.md.
The SDK logs through the standard logging module under the
standcloud_integration logger and installs no handlers of its own. To surface
request traces and warnings, attach your own handler — one logging.basicConfig()
call is enough; see writing-reports.md.
Command-line interface (optional)
If the cli extra is installed, the package adds the standcloud-integration
command (short alias sci):
standcloud-integration [GLOBAL OPTIONS] <report> [REPORT OPTIONS]
Global options come before the report name:
| Option | Env variable | Default | Description |
|---|---|---|---|
--api-key |
STANDCLOUD_API_KEY |
— (prompted) | API key. If omitted, taken from the env variable or a secure prompt. |
--timeout |
— | 30.0 |
HTTP request timeout in seconds. |
-v, --verbose |
— | off | Print DEBUG logs (request traces) to stderr. |
-h, --help |
— | — | Show help. |
--version |
— | — | Show the package version. |
List reports and options with --help:
standcloud-integration --help
A report's own options come after its name.
Report help:
standcloud-integration devices-with-last-stage --help
Example query:
standcloud-integration \
devices-with-last-stage \
--part-number "ACME-CTRL-001 Rev A" \
-o devices.csv
Reports
For now the package ships a single example report, devices-with-last-stage.
Its options and output format are described in docs/en/reports.md.
If you need your own report type, see the development docs.
Development
This project uses the uv package manager.
Linux, macOS:
curl -LsSf https://astral.sh/uv/install.sh | sh
macOS:
brew install uv
Windows
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
The installer places
uvin%USERPROFILE%\.local\binand adds that directory toPATH, but your current PowerShell session does not know about it yet. Close and reopen the PowerShell window — after that theuvcommand becomes available. Verify with:uv --version.If
uvis still not found after reopening, add the directory toPATHmanually:$env:Path = "$env:USERPROFILE\.local\bin;$env:Path"The command above only affects the current session. To make it permanent:
[Environment]::SetEnvironmentVariable("Path", "$env:USERPROFILE\.local\bin;" + [Environment]::GetEnvironmentVariable("Path", "User"), "User")
Set up the environment and run the tooling:
uv venv .venv # create the virtual environment
source .venv/bin/activate # activate it
uv sync --group dev # install the package (with the cli extra) + dev tools
uv run standcloud-integration --help # run the CLI from the source checkout
uv run pytest # run the tests
uv run ruff check # lint
uv run ruff format # format
uv run ty check ./src # type-check
pre-commit install # enable the git hooks (optional)
Metadata
Release files for standcloud-integration 0.1.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 | Provenance | |
|---|---|---|---|---|
| standcloud_integration-0.1.0.tar.gz | 59.1 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| standcloud_integration-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 79.9 kB
Release files / standcloud_integration-0.1.0.tar.gz
| Download URL | standcloud_integration-0.1.0.tar.gz |
|---|---|
| Size | 59.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f11a9a555255df38dccd9a0ee2bcff2414df8f34c0e678cfb15a6830b1cdaf50
|
|
BLAKE2b-256 checksum How to use checksums |
a55116838df155fa056f442e152b55c6c1bfd63485559dbb420485bed0980252
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 9, 2026.
Transparency logRelease files / standcloud_integration-0.1.0-py3-none-any.whl
| Download URL | standcloud_integration-0.1.0-py3-none-any.whl |
|---|---|
| Size | 20.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c6ea9a39aa7cee1a91f2372184a34f44bc832adcbcb3f936e625b6ca771e2860
|
|
BLAKE2b-256 checksum How to use checksums |
35278828b6088654a86d19a8610094c7b55464017f7453a92ead7d7f619289ee
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 9, 2026.
Transparency logSecurity for standcloud-integration 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for standcloud_integration-0.1.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 9, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.