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 propagate cancellation to cooperative executors. Athena uses
a bounded cleanup window and reports confirmation in
execution_info. Other drivers may keep running after the caller's deadline. Successful Athena results and execution errors retain one diagnostic entry per query. - 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.2.0
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 | Actions Reset |
|---|---|---|---|---|
| dosi_engine-0.2.0-cp312-abi3-manylinux_2_28_x86_64.whl | CPython 3.12 | abi3 | Linux glibc 2.28+ x86-64 | Details for dosi_engine-0.2.0-cp312-abi3-manylinux_2_28_x86_64.whl |
| dosi_engine-0.2.0-cp312-abi3-manylinux_2_28_aarch64.whl | CPython 3.12 | abi3 | Linux glibc 2.28+ ARM64 | Details for dosi_engine-0.2.0-cp312-abi3-manylinux_2_28_aarch64.whl |
| dosi_engine-0.2.0-cp312-abi3-macosx_11_0_arm64.whl | CPython 3.12 | abi3 | macOS 11.0+ ARM64 | Details for dosi_engine-0.2.0-cp312-abi3-macosx_11_0_arm64.whl |
Total release size: 198.8 MB
Release files / dosi_engine-0.2.0-cp312-abi3-manylinux_2_28_x86_64.whl
| Download URL | dosi_engine-0.2.0-cp312-abi3-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 64.4 MB |
| Tags | CPython 3.12 Linux glibc 2.28+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
e69d8465e0493230e20d4f6b8bb3167f21f2168f7ede2b86e45d8521339bafc9
|
|
BLAKE2b-256 checksum How to use checksums |
3a9256f922e40202b4e80b1f7c523303555bab0fbd94e485f4d6e9e9c267ba65
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / dosi_engine-0.2.0-cp312-abi3-manylinux_2_28_aarch64.whl
| Download URL | dosi_engine-0.2.0-cp312-abi3-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 63.8 MB |
| Tags | CPython 3.12 Linux glibc 2.28+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
183420fad671541e00842ff59c9604922b684a5d6ac8d0e7917858c937dba208
|
|
BLAKE2b-256 checksum How to use checksums |
e962f53d107e31a6b33429e6d466d7161fd2732198dcf773a203238804339ca8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / dosi_engine-0.2.0-cp312-abi3-macosx_11_0_arm64.whl
| Download URL | dosi_engine-0.2.0-cp312-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 70.6 MB |
| Tags | CPython 3.12 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
018d449ad1ad7252e31b30ead5eb6e45357131a46b569f55b0a5f792ad1c72d7
|
|
BLAKE2b-256 checksum How to use checksums |
9caf38c29f33f348bf00198c35126275ca31b8d5e6ed46989cebe0f18b40cfea
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Security for dosi-engine 0.2.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.