Skip to main content

dosi-engine

Python bindings for osi-engine: load an OSI semantic model once, then list metrics/dimensions, compile metric queries to dialect SQL, and execute them against a warehouse — all in-process.

from dosi_engine import Engine, QueryError

engine = Engine(
    model_path="model.yaml",
    connections={"warehouse": {"type": "snowflake", "account": "...", "password": "..."}},
)

engine.metrics()                     # [{"name", "kind", "datasets", ...}]
engine.compile({"metrics": ["order_count"],
                "group_by": [{"field": "orders.status"}]},
               dialect="snowflake")  # {"dialect": "snowflake", "sql": "..."}
engine.execute({"metrics": ["order_count"]},
               connection="warehouse", timeout_secs=60)
#   {"dialect", "sql", "columns", "rows": [{col: val}], "row_count"}

The list/compile/execute payloads are the same machine contract as osi --format json and the REST API; errors raise ModelError / QueryError / ExecuteError (see dosi_engine.errors) carrying the same structured fields (code, candidates, hint) as the CLI/REST JSON error contract. QueryError.candidates lists valid alternatives for unknown/ambiguous names, so agentic callers can retry without parsing prose.

Semantics worth knowing

  • One Engine = one compiled model. Construction runs load → validate → compile and fails fast with ModelError. Engines are thread-safe; compile and execute release the GIL.
  • Connections are an in-memory name -> datasource settings mapping in the Datus agent.yml datasources: vocabulary. File discovery and loading belong to the Rust CLI/server; the Python binding never reads or writes a connections file.
  • execute without connection runs on the runtime connections mapping's default: true profile when one exists, else on local DuckDB (db_path= file, or in-memory).
  • Timeouts abandon, they do not cancel: on timeout_secs expiry the call raises ExecuteError(code="timeout") but the warehouse request keeps running on its thread; its pool slot frees when it finishes (same limitation as dosi-server).
  • DuckDB runs in process and ships inside the wheel — nothing to install for local execution. Warehouse drivers are compiled in too (exec-all), so no client libraries either.

Building

Requires a Python ≥ 3.12 interpreter discoverable by pyo3; on hosts whose default python3 is older, set PYO3_PYTHON:

cd crates/dosi-py
PYO3_PYTHON=$(command -v python3.12) uvx maturin build --release -o ../../target/wheels

Development loop against a venv: uvx maturin develop (with the venv active). Rust-side tests: cargo test -p dosi-py; Python smoke tests (after maturin develop): pytest tests/python/.

Metadata

Release files for dosi-engine 0.1.11

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

Built distributions (wheels)

Table of built distributions (wheels) for dosi-engine 0.1.11
File Interpreter ABI Platform
dosi_engine-0.1.11-cp312-abi3-manylinux_2_28_x86_64.whl CPython 3.12 abi3 Linux glibc 2.28+ x86-64 Details
dosi_engine-0.1.11-cp312-abi3-manylinux_2_28_aarch64.whl CPython 3.12 abi3 Linux glibc 2.28+ ARM64 Details
dosi_engine-0.1.11-cp312-abi3-macosx_11_0_arm64.whl CPython 3.12 abi3 macOS 11.0+ ARM64 Details

Total release size: 148.5 MB

Release files / dosi_engine-0.1.11-cp312-abi3-manylinux_2_28_x86_64.whl

Download URL dosi_engine-0.1.11-cp312-abi3-manylinux_2_28_x86_64.whl
Size 47.3 MB
Tags CPython 3.12 Linux glibc 2.28+ x86-64 abi3
SHA-256 checksum
How to use checksums
845e05534638eef75a1f10903274baa9bbd023e865806489a229d9b4bd6f62db
BLAKE2b-256 checksum
How to use checksums
ddbde32962c78c3bc2768d34b313116f386db81af009f1c5696aedf42892db47
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / dosi_engine-0.1.11-cp312-abi3-manylinux_2_28_aarch64.whl

Download URL dosi_engine-0.1.11-cp312-abi3-manylinux_2_28_aarch64.whl
Size 45.8 MB
Tags CPython 3.12 Linux glibc 2.28+ ARM64 abi3
SHA-256 checksum
How to use checksums
2cf0deb4e7e6fbbd99f91b22da47c0ca2589225a411e95f0acceb83b2e1acfa5
BLAKE2b-256 checksum
How to use checksums
1c7e3061fd135e1cefbe38c130c87f649173f4730596bcb0f4e147e91e653f33
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / dosi_engine-0.1.11-cp312-abi3-macosx_11_0_arm64.whl

Download URL dosi_engine-0.1.11-cp312-abi3-macosx_11_0_arm64.whl
Size 55.4 MB
Tags CPython 3.12 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
5e0ca0178d7e0e13ab22bc21e0255d7beb91c5b9cb3ad53154fd90a4784f5b57
BLAKE2b-256 checksum
How to use checksums
f2f750bf5cc3f42d6b96b79738f89ff97d717d30684ffcba78ea35ebb1336fba
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

0.1.13

5 release files

0.1.12

3 release files

This release

0.1.11 This release

3 release files

0.1.10

3 release files

0.1.9

3 release files

0.1.7

3 release files

0.1.6

2 release files

0.1.5

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