Helper package to build ASAM ODS EXD API grpc plugins.
Project description
ods-exd-api-box
A Python helper package to build ASAM ODS EXD-API gRPC plugins/services.
📖 Full documentation: totonga.github.io/ods-exd-api-box
What is ASAM ODS EXD-API?
The ASAM ODS standard defines how measurement and test data is stored and managed. The EXD-API (External Data API) is a gRPC interface that allows ODS servers to read data from external file formats (TDMS, CSV, HDF5, …) without importing the raw data.
Installation
# Core (ExdFileInterface only)
pip install ods-exd-api-box
# With pandas support (FileSimpleInterface)
pip install 'ods-exd-api-box[simple]'
Quick Start
Full-control interface
from ods_exd_api_box import ExdFileInterface, serve_plugin
class MyFileHandler(ExdFileInterface):
# Implement: create, close, fill_structure, get_values
...
if __name__ == "__main__":
serve_plugin("my-format", MyFileHandler.create, ["*.myext"])
Pandas-based simple interface
from ods_exd_api_box.simple import FileSimpleInterface, serve_plugin_simple
class MySimpleHandler(FileSimpleInterface):
# Implement: create, close, data (returns pd.DataFrame)
...
if __name__ == "__main__":
serve_plugin_simple("my-format", MySimpleHandler.create, ["*.myext"])
Architecture
sequenceDiagram
actor CLIENT as Client
participant PDTT as 🛠️Importer
participant PODS as 🗃️ASAM ODS server
participant PLUGIN as 📊EXD-API plugin
participant FILE as 🗂️File Storage
autonumber
opt Import phase
FILE ->>+ PDTT: New file shows up
PDTT ->>+ PLUGIN : Get Structure
PLUGIN -> FILE: Extract content information
PLUGIN ->> PLUGIN: Create Structure
PLUGIN ->>- PDTT: Return Structure
PDTT ->> PODS: Import ODS structure
Note right of PDTT: Create hierarchy<br/>AoTest,AoMeasurement,...
PDTT ->>- PODS: Add External Data info
Note right of PDTT: Attach AoFile ... for external data<br/>AoFile,AoSubmatrix,AoLocalColumn,...
end
Note over CLIENT, FILE: Now we can work with the imported files
loop Runtime phase
CLIENT ->> PODS: Establish ODS session
CLIENT ->> PODS: Work with meta data imported from structure
CLIENT ->> PODS: Access external channel in preview
PODS ->> PLUGIN: GetValues
PLUGIN ->> FILE: Get Channel values
PLUGIN ->> PODS: Return values of channels
PODS ->> CLIENT: Return values needed for plot
end
Documentation
| Topic | Link |
|---|---|
| Architecture & internals | Architecture |
| Choosing an interface | Comparison |
| ExdFileInterface guide | Full-control interface |
| FileSimpleInterface guide | Simple interface |
| Server options & TLS | Server Options |
| Docker deployment | Docker |
| Real-world plugins | Plugins |
Development
pip install -e ".[dev,simple]"
python -m unittest discover -s tests
mypy .
Contributing
- Use dev container or set up local dev environment
- Ensure type checking passes:
mypy . - Run tests:
python -m unittest discover -s tests - Follow code style (Ruff, mypy)
- Add tests for new features
License
MIT License - see LICENSE file for details.
References
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ods_exd_api_box-1.6.0.tar.gz.
File metadata
- Download URL: ods_exd_api_box-1.6.0.tar.gz
- Upload date:
- Size: 160.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d25191e8b363f0432fa9201906a4383fdd5b773660b7c97f4b468fd059b892fd
|
|
| MD5 |
18e0dce05c4efea3abf5caa51ec48394
|
|
| BLAKE2b-256 |
109c5cca15b530540925816003e44cd21ea3510cae96c351f17bb9d9f95d58a8
|
Provenance
The following attestation bundles were made for ods_exd_api_box-1.6.0.tar.gz:
Publisher:
build.yml on totonga/ods-exd-api-box
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ods_exd_api_box-1.6.0.tar.gz -
Subject digest:
d25191e8b363f0432fa9201906a4383fdd5b773660b7c97f4b468fd059b892fd - Sigstore transparency entry: 2083071023
- Sigstore integration time:
-
Permalink:
totonga/ods-exd-api-box@f9e0232ac6f8b418ace4ff5ebf0b9fdf2c8d5082 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/totonga
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yml@f9e0232ac6f8b418ace4ff5ebf0b9fdf2c8d5082 -
Trigger Event:
push
-
Statement type:
File details
Details for the file ods_exd_api_box-1.6.0-py3-none-any.whl.
File metadata
- Download URL: ods_exd_api_box-1.6.0-py3-none-any.whl
- Upload date:
- Size: 45.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9e6a7dee0db16aa79e58e0bfa41fd2094df41cbaea10723d3c32b8840c7f69a5
|
|
| MD5 |
fbadebefdb7522a1d31408abb71d35b6
|
|
| BLAKE2b-256 |
9f9c397c68b14030c3b46d57e83c85197886c7253a45ba7a5d27f5bc3aa43c0a
|
Provenance
The following attestation bundles were made for ods_exd_api_box-1.6.0-py3-none-any.whl:
Publisher:
build.yml on totonga/ods-exd-api-box
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ods_exd_api_box-1.6.0-py3-none-any.whl -
Subject digest:
9e6a7dee0db16aa79e58e0bfa41fd2094df41cbaea10723d3c32b8840c7f69a5 - Sigstore transparency entry: 2083071033
- Sigstore integration time:
-
Permalink:
totonga/ods-exd-api-box@f9e0232ac6f8b418ace4ff5ebf0b9fdf2c8d5082 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/totonga
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build.yml@f9e0232ac6f8b418ace4ff5ebf0b9fdf2c8d5082 -
Trigger Event:
push
-
Statement type: