Skip to content

totonga/ods-exd-api-box

Repository files navigation

ods-exd-api-box

Python 3.12+ License: MIT Code style: black Type checking: mypy

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
Loading

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

  1. Use dev container or set up local dev environment
  2. Ensure type checking passes: mypy .
  3. Run tests: python -m unittest discover -s tests
  4. Follow code style (Black, isort)
  5. Add tests for new features

License

MIT License - see LICENSE file for details.

References

About

Helper package to build ASAM ODS EXD API grpc plugins.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors