Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

Cave Utilities

PyPI version License: MIT

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_data dicts 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
  • GroupsBuilder and DateGroupsBuilder for constructing hierarchical group structures from flat data
  • GeoUtils for shortest-path calculations over geographic networks
  • CustomCoordinateSystem for 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

Dev dependencies are declared in [project.optional-dependencies] dev in pyproject.toml. Install them with uv sync --extra dev.

Command Description
uv run pytest Run all tests
uv run pytest -v Run tests with verbose output
uv run nox Run tests across Python 3.11, 3.12, 3.13, 3.14
uv run nox -s tests-3.14 Run tests on a single Python version
uv run python utils/prettify.py Format code with autoflake + black
uv run python utils/docs.py Regenerate pdoc documentation

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.

uv run pytest

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

  1. Ensure all tests pass and code is formatted:
    uv run nox
    uv run python utils/prettify.py
    
  2. Update version in both pyproject.toml and setup.cfg
  3. Run tests across all supported Python versions: uv run nox
  4. Update VERSION in utils/docs.py and regenerate docs:
    uv run python utils/docs.py
    

Metadata

Release files for cave-utils 3.7.0b2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for cave-utils 3.7.0b2
File Size Uploaded
cave_utils-3.7.0b2.tar.gz 67.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for cave-utils 3.7.0b2
File Interpreter ABI Platform
cave_utils-3.7.0b2-py3-none-any.whl Python 3 none any Details

Total release size: 142.0 kB

Release files / cave_utils-3.7.0b2.tar.gz

Download URL cave_utils-3.7.0b2.tar.gz
Size 67.6 kB
Tags Source
SHA-256 checksum
How to use checksums
f8b87835ebd03f3869fcb3d9ee434a973884b2c78e1e56347b9abde7acc9c74b
BLAKE2b-256 checksum
How to use checksums
c6124e2ebddc1c01b9f1e80021017f5713d614b49ca10a2676456926b64e3d36
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.5

Release files / cave_utils-3.7.0b2-py3-none-any.whl

Download URL cave_utils-3.7.0b2-py3-none-any.whl
Size 74.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
dec4db68d70e9e0a8c74330003e2b9edb983ca02c0f02794a8e7434286149fe5
BLAKE2b-256 checksum
How to use checksums
077e088216306ac67dd77142febd149ac48bd5da25a6f0bd676049ec15a3ea45
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.5

Release history Release notifications | RSS feed

This release

3.7.0b2 This release

2 release files

3.6.0

2 release files

3.5.7

2 release files

3.5.6

2 release files

3.5.5

2 release files

3.5.4

2 release files

3.5.3

2 release files

3.5.2

2 release files

3.5.1

2 release files

3.5.0

2 release files

3.4.4

2 release files

3.4.3

2 release files

3.4.2

2 release files

3.4.1

2 release files

3.4.0

2 release files

3.3.0

2 release files

3.2.0

2 release files

3.1.0

2 release files

3.0.0

2 release files

2.3.0

2 release files

2.2.1

2 release files

2.2.0

2 release files

2.1.2

2 release files

2.1.1

2 release files

2.1.0

2 release files

2.0.5

2 release files

2.0.4

2 release files

2.0.3

2 release files

2.0.2

2 release files

2.0.1

2 release files

2.0.0

2 release files

1.6.1

1 release file

1.6.0

1 release file

1.5.3

1 release file

1.5.2

1 release file

1.5.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page