Skip to main content

SOVD (Service-Oriented Vehicle Data) Server Implementation

Project description

SOVD Server

A Service-Oriented Vehicle Data (SOVD) server implementation based on ISO/DIS 17978-3:2025, with YAML-based configuration.

Features

  • YAML-driven configuration — Gateway, entities (areas, components, apps), and resources (data, operations, faults, modes, updates) defined in YAML under src/sovd_server/config/
  • RESTful SOVD API — Collections and single-resource endpoints for data, operations, faults, and modes; software-update listings per ISO/DIS 17978-3 §7.18
  • Optional multi-response (“round-robin”) behavior — For selected resources you can list multiple HTTP status/body pairs in YAML; the server cycles them per entity path and resource id on each GET/POST (data, operations, faults, modes)
  • No authentication — Simplified setup for development and testing
  • CORS enabled — Ready for web and tool clients

Requirements

Quick start

# Clone and enter the project
cd sovd_server

# Install dependencies (creates a virtual environment automatically)
poetry install
# or
make install

# Run the server
poetry run sovd-server
# or
make run-server

Server runs at http://127.0.0.1:8080 by default. Try:

  • Health: curl http://localhost:8080/health
  • Areas: curl http://localhost:8080/areas
  • Engine data: curl http://localhost:8080/engine/data

Project layout

sovd_server/
├── src/sovd_server/           # Main package (published wheel)
│   ├── config/                # YAML configuration (runtime default)
│   ├── config_loader.py       # YAML loader
│   ├── enhanced_server.py     # Flask app (REST + capabilities)
│   ├── resource_response.py   # Round-robin response helpers
│   └── run_enhanced_server.py # CLI entry point
├── generated/                 # OpenAPI-generated models (symlinked into package for builds)
├── tests/                     # pytest (unit + Flask client tests)
├── .github/workflows/         # CI, semantic release, PyPI publish on tags
├── docs/                      # Detailed guides
├── pyproject.toml             # Project metadata (Poetry)
├── Makefile                   # Convenience commands
└── README.md

Development

Command Description
make install Install dependencies (Poetry)
make run-server Start the SOVD server
make test Run tests
make run-tests Run tests with coverage
make lint Run flake8 and mypy
make format Format code with Black
make format-check Check formatting only
make security Run bandit and safety
make ci-local Lint, format-check, security, test
make version Show package version
make build Build wheel and sdist for distribution
make clean Remove build artifacts and caches

All commands run via Poetry (e.g. poetry run pytest). You can also run tools directly:

poetry run pytest tests/ -v
# Formatting: CI checks a subset of paths — use `make format-check` or match `.github/workflows/ci.yml`
poetry run flake8 src/ tests/

Configuration

  • Gateway: src/sovd_server/config/sovd_gateway.yaml — host, port, logging, entity index paths
  • Entities: src/sovd_server/config/entities/ — areas, components, applications
  • Resources: src/sovd_server/config/resources/ — data, operations, faults, modes, updates, etc.

See docs/CONFIGURATION.md for round-robin responses, updates, and examples.

API overview

Endpoint Description
GET /health Health check
GET /version-info Server version
GET /areas, /components, /apps List entities
GET /{entity} Entity capabilities
GET /{entity}/data Data resource collection
GET /{entity}/data/{id} Single data resource (optional YAML responses round-robin)
GET /{entity}/operations Operations collection
GET /{entity}/operations/{id} Operation metadata
POST /{entity}/operations/{id} Execute operation (optional responses round-robin)
GET /{entity}/faults Fault collection (optional query: severity, scope, status, mask)
GET /{entity}/faults/{fault_code} Single fault (optional responses round-robin)
GET /{entity}/modes Mode collection
GET /{entity}/modes/{mode_id} Single mode (optional responses round-robin)
GET /updates, GET /{entity}/updates Software update package lists (ISO §7.18)

Example:

# Engine software part number
curl http://localhost:8080/engine/data/SoftwarePartNumber

# Start camera calibration
curl -X POST http://localhost:8080/camera/front/operations/calibratecamera \
  -H "Content-Type: application/json" \
  -d '{"calibration_type": "automatic", "target_distance": 10.0}'

Installing the package

From PyPI (when published):

pip install sovd-server
sovd-server

From the project (editable):

poetry install
poetry run sovd-server

Documentation

License

MIT. See LICENSE if present.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sovd_server-1.2.0.tar.gz (61.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sovd_server-1.2.0-py3-none-any.whl (116.7 kB view details)

Uploaded Python 3

File details

Details for the file sovd_server-1.2.0.tar.gz.

File metadata

  • Download URL: sovd_server-1.2.0.tar.gz
  • Upload date:
  • Size: 61.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for sovd_server-1.2.0.tar.gz
Algorithm Hash digest
SHA256 16185e930426fe4fdd7b1e70c0a64ed9cf19ddf1e832386ccca02f2f69f92d31
MD5 88c02a71ae302c990cba3b8ca22a861b
BLAKE2b-256 6cf7fd94faadc2c9c5b5abcef9c22c3b0fa2908790a348ffbb8aa58bb237d96f

See more details on using hashes here.

File details

Details for the file sovd_server-1.2.0-py3-none-any.whl.

File metadata

  • Download URL: sovd_server-1.2.0-py3-none-any.whl
  • Upload date:
  • Size: 116.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for sovd_server-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 40849146704344eb1b100d98f3449bdbf37bb043ab56ea810adb23d083f424c5
MD5 4b1def1c1e0ed64ae79f4a41fb4c8d09
BLAKE2b-256 3a9f236beb634a2e90ca178475e36ad29fdc5483e37ad009e00aa5d7925c0d79

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page