Metadata-Version: 2.4
Name: datavo-sdk
Version: 0.22.0
Summary: Datavo client and shard runtime primitives
License-Expression: Apache-2.0
Project-URL: Documentation, https://altavo.github.io/datavo/
Project-URL: Homepage, https://altavo.github.io/datavo/
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: httpx>=0.27
Requires-Dist: numpy>=1.26
Requires-Dist: pydantic>=2.6
Requires-Dist: PyYAML>=6.0
Provides-Extra: entra
Requires-Dist: msal>=1.29; extra == "entra"
Provides-Extra: azure
Requires-Dist: azure-storage-blob>=12.19; extra == "azure"
Requires-Dist: azure-identity>=1.15; extra == "azure"
Provides-Extra: aws
Requires-Dist: boto3>=1.34; extra == "aws"
Provides-Extra: gcp
Requires-Dist: google-cloud-storage>=2.10; extra == "gcp"
Provides-Extra: all-clouds
Requires-Dist: azure-storage-blob>=12.19; extra == "all-clouds"
Requires-Dist: azure-identity>=1.15; extra == "all-clouds"
Requires-Dist: boto3>=1.34; extra == "all-clouds"
Requires-Dist: google-cloud-storage>=2.10; extra == "all-clouds"
Dynamic: license-file

# datavo-sdk

Python client and shard runtime for **[Datavo](https://altavo.github.io/datavo/)**,
the dataset store.

Import sources into **stores**, attach derived keys under **producers**, select
**worksets**, and freeze them into named, reproducible **datasets** you can split,
share, and stream.

## Install

```bash
pip install datavo-sdk                # core client
pip install 'datavo-sdk[entra]'       # + interactive Microsoft Entra sign-in
pip install 'datavo-sdk[azure]'       # + Azure Blob downloads ([aws], [gcp], [all-clouds] also exist)
```

## Quickstart

```python
from datavo_sdk import DatavoClient, SampleStream

# Defaults to https://prod.datavo.io and reuses the credential from `datavo auth login`.
with DatavoClient() as client:
    ds = SampleStream.from_dataset(
        "my_dataset",
        keys=["audio.wav", "transcript.txt"],
        client=client,
    )
    for sample in ds:
        audio = sample["audio.wav"]        # bytes
        text = sample["transcript.txt"]    # decoded
        ...
```

Authentication is discovered from the server's `/config` (tenant, client id,
audience), so constructing the client is the whole of sign-in. Headless (device
code) and CI (`auth_token=`) variants are in the guide.

## Documentation

Full guide, reference, and runnable examples: **https://altavo.github.io/datavo/**
