A Python helper package to build ASAM ODS EXD-API gRPC plugins/services.
📖 Full documentation: totonga.github.io/ods-exd-api-box
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.
# Core (ExdFileInterface only)
pip install ods-exd-api-box
# With pandas support (FileSimpleInterface)
pip install 'ods-exd-api-box[simple]'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"])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"])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
| 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 |
pip install -e ".[dev,simple]"
python -m unittest discover -s tests
mypy .- 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 (Black, isort)
- Add tests for new features
MIT License - see LICENSE file for details.