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
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.1.0.tar.gz (57.8 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.1.0-py3-none-any.whl (112.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: sovd_server-1.1.0.tar.gz
  • Upload date:
  • Size: 57.8 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.1.0.tar.gz
Algorithm Hash digest
SHA256 47594ea2426413102cf14d0657c25797775f09be6255a7afcd9fd3b1c70caab4
MD5 bf2c820273908adb2e966d4f3b9988b8
BLAKE2b-256 eefa2e72e9d3c63ccc0d2e855673f3b43deb4dda0766cf2d1147f51ab414525f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: sovd_server-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 112.1 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.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6d1617704f494c9a57da89c4c24cd5128e270d8fb6c58b9a27769ca2a00dc9ab
MD5 fa38cee5ff910827cb2f83bd97bdccef
BLAKE2b-256 c9a31c0d0af71f6c576aa02855bff6073f7d083b38a36c4db7131b47b1c499be

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