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/bodypairs in YAML; the server cycles them per entity path and resource id on eachGET/POST(data, operations, faults, modes) - No authentication — Simplified setup for development and testing
- CORS enabled — Ready for web and tool clients
Requirements
- Python 3.9+
- Poetry — Install Poetry if you don’t have it
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
- docs/INDEX.md — Documentation index
- docs/CONFIGURATION.md — YAML layout, round-robin
responses, updates - docs/CONTRIBUTING.md — How to contribute (including conventional commits for releases)
- docs/DEPLOYMENT.md — Deployment, Docker, CI/CD, PyPI
- docs/TESTING.md — Running tests and matching CI locally
- docs/VERSIONING.md — Semantic versioning, python-semantic-release on
main, tags and PyPI
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
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 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
16185e930426fe4fdd7b1e70c0a64ed9cf19ddf1e832386ccca02f2f69f92d31
|
|
| MD5 |
88c02a71ae302c990cba3b8ca22a861b
|
|
| BLAKE2b-256 |
6cf7fd94faadc2c9c5b5abcef9c22c3b0fa2908790a348ffbb8aa58bb237d96f
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
40849146704344eb1b100d98f3449bdbf37bb043ab56ea810adb23d083f424c5
|
|
| MD5 |
4b1def1c1e0ed64ae79f4a41fb4c8d09
|
|
| BLAKE2b-256 |
3a9f236beb634a2e90ca178475e36ad29fdc5483e37ad009e00aa5d7925c0d79
|