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 settingsmapping in the Datusagent.ymldatasources:vocabulary. File discovery and loading belong to the Rust CLI/server; the Python binding never reads or writes a connections file. executewithoutconnectionruns on the runtime connections mapping'sdefault: trueprofile when one exists, else on local DuckDB (db_path=file, or in-memory).- Timeouts abandon, they do not cancel: on
timeout_secsexpiry the call raisesExecuteError(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)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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
|