Python wrapper for api use in the cave_app
Project description
Cave Utilities
Python utilities for the CAVE App framework: API validation, data builders, and shared helpers.
Overview
cave_utils is a foundational library for building CAVE applications. It provides:
- API validation: validate
session_datadicts against the full CAVE API spec, with structured error and warning reporting - Data builders: helper classes for constructing hierarchical and date-based group structures
- Shared utilities: logging, geographic calculations, coordinate systems, and argument parsing
It is designed to be embedded in a CAVE API server, but can also be used standalone for testing and data development.
Features
- Validates all 10 top-level CAVE API keys (
settings,appBar,pages,panes,maps,mapFeatures,globalOutputs,groupedOutputs,draggables,extraKwargs) - Cross-field validation with structured error paths (e.g.
maps.data.myMap.currentProjection) - Time-series (
timeValues) and ordering (order) validation built in GroupsBuilderandDateGroupsBuilderfor constructing hierarchical group structures from flat dataGeoUtilsfor shortest-path calculations over geographic networksCustomCoordinateSystemfor converting Cartesian 2D/3D coordinates to lat/long- Runtime type enforcement via
type_enforced
Requirements
- Python ≥ 3.11
Installation
pip install cave_utils
Quick Start
Validating Session Data
from cave_utils import Validator
session_data = {
"settings": {
"iconUrl": "https://example.com/icon.png",
},
"appBar": {
"data": {
"btn_home": {
"icon": "md/MdHome",
"type": "button",
}
}
},
}
result = Validator(session_data=session_data)
# Inspect errors and warnings
for entry in result.log.log:
print(entry)
# Empty list means fully valid
Using GroupsBuilder
from cave_utils.builders.groups import GroupsBuilder
builder = GroupsBuilder(
data=[
{"id": "region_east", "name": "East", "parent": None},
{"id": "state_ny", "name": "New York", "parent": "region_east"},
{"id": "state_ma", "name": "Massachusetts", "parent": "region_east"},
],
id_field="id",
name_field="name",
parent_field="parent",
)
# Serialize to the CAVE API groupedOutputs format
groups_data = builder.serialize()
Public API
| Class | Import | Description |
|---|---|---|
Validator |
from cave_utils import Validator |
Validates a session_data dict against the full CAVE API spec |
LogObject |
from cave_utils import LogObject |
Structured log container for errors and warnings |
Socket |
from cave_utils import Socket |
No-op WebSocket stub for use in tests |
Arguments |
from cave_utils import Arguments |
Parses kwargs, flags, and positional args from raw argument lists |
GeoUtils |
from cave_utils import GeoUtils |
Geographic utilities including shortest-path via scgraph |
CustomCoordinateSystem |
from cave_utils import CustomCoordinateSystem |
Converts 2D/3D Cartesian coordinates to lat/long |
Full API reference: mit-cave.github.io/cave_utils
LLM Docs
cave_utils can generate plain text documentation for all its modules, suitable for use with AI assistants (Claude, Gemini, etc.).
From Python:
from cave_utils import generate_docs
generate_docs("path/to/output_dir")
From the command line:
cave-utils-docs path/to/output_dir
If no directory is specified, docs are written to ./cave_utils_docs/.
The output directory will contain one .txt file per module plus a README.txt index and a PROJECT_README.md with this project overview. You can point your AI assistant at this directory or reference individual files in a system prompt.
Development
All development tasks run inside Docker. Make sure Docker is installed and running.
| Command | Description |
|---|---|
./run.sh |
Drop into an interactive Docker shell |
./run.sh test |
Run all tests |
./run.sh prettify |
Format code with autoflake + black |
./run.sh docs |
Regenerate pdoc documentation |
./run.shrequires a TTY. Run it directly in your terminal, not from a non-interactive CI environment.
Running Tests
Tests live in test/. The main test file (test_validator.py) imports every example in test/api_examples/, runs it through Validator, and asserts no errors or warnings are produced. Unit tests exist for each module.
./run.sh test
Hot-Reload with a Cave App
To develop cave_utils against a running Cave App, mount the local source as a Docker volume:
cave run --docker-args "--volume {local_path_to_cave_utils}/cave_utils:/cave_utils"
Then in the Cave App's utils/run_server.sh, add pip install -e /cave_utils before the server starts. Changes to cave_utils source will be reflected on the next API call without rebuilding the container.
Set LIVE_API_VALIDATION_PRINT=True in the Cave App's .env to see validation output on every API command.
Release Process
- Ensure all tests pass (
./run.sh test) and code is formatted (./run.sh prettify) - Update
versionin bothpyproject.tomlandsetup.cfg - Update the version in
utils/docs.shand regenerate docs (./run.sh docs) - Build and publish:
python3 -m virtualenv venv source venv/bin/activate pip install -r requirements.txt
Project details
Release history Release notifications | RSS feed
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 cave_utils-3.5.2.tar.gz.
File metadata
- Download URL: cave_utils-3.5.2.tar.gz
- Upload date:
- Size: 64.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
21fe3df917cd187bde587fd318c4c9fd77cc340a0d4c9aa238fff1e6e723c75d
|
|
| MD5 |
e2552b0494cc20b88780bc1af9d4b757
|
|
| BLAKE2b-256 |
c003d1140bce575155be94c1fd58d382803c67261b6e5afc1e0b48db9080368f
|
File details
Details for the file cave_utils-3.5.2-py3-none-any.whl.
File metadata
- Download URL: cave_utils-3.5.2-py3-none-any.whl
- Upload date:
- Size: 70.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d4730a3408f4346701a4e05db8807a0d796296414b5c237c2a39ad828d83ec81
|
|
| MD5 |
ffaa153fad6432edfda791e469c91241
|
|
| BLAKE2b-256 |
23e22cb0a58e8cc13b3a0177b34bdf422b4aff8663e5af2044f8f336cd6bf264
|