Skip to main content

Hotdata API

Project description

hotdata

Official Python client for the Hotdata HTTP API: workspaces, connections, datasets, SQL queries, results, secrets, uploads, indexes, jobs, embedding providers, and workspace context.

Requirements

Python 3.9+

Install

pip install hotdata

For an unreleased revision:

pip install "git+https://github.com/hotdata-dev/sdk-python.git"

From a local checkout (editable):

pip install -e .

Authentication

The API uses an API key sent as Authorization: Bearer <key>, plus an X-Workspace-Id header on requests scoped to a workspace.

import hotdata

configuration = hotdata.Configuration(
    api_key="YOUR_API_KEY",
    workspace_id="YOUR_WORKSPACE_ID",
)

host defaults to https://api.hotdata.dev. Override it if you target another environment.

Usage

import hotdata
from hotdata.rest import ApiException

configuration = hotdata.Configuration(
    api_key="YOUR_API_KEY",
    workspace_id="YOUR_WORKSPACE_ID",
)

with hotdata.ApiClient(configuration) as api_client:
    workspaces = hotdata.WorkspacesApi(api_client)
    try:
        response = workspaces.list_workspaces()
    except ApiException as e:
        print(f"API error: {e.status} {e.reason}\n{e.body}")

Each Api class groups endpoints by resource. Construct the client, then call the typed methods you need.

Arrow results

Query results can be fetched as an Apache Arrow IPC stream instead of JSON, which is faster and far more memory-efficient for large result sets. Install the optional extra:

pip install 'hotdata[arrow]'

Use hotdata.arrow.ResultsApi (a drop-in subclass of ResultsApi that adds Arrow methods):

from hotdata import ApiClient, Configuration
from hotdata.arrow import ResultsApi

with ApiClient(Configuration(api_key="...", workspace_id="...")) as client:
    results = ResultsApi(client)

    # Buffered: returns a pyarrow.Table.
    table = results.get_result_arrow(result_id)

    # Streaming: yields a pyarrow.RecordBatchStreamReader without
    # materializing the full table in memory.
    with results.stream_result_arrow(result_id) as reader:
        for batch in reader:
            ...

Both methods accept offset and limit for pagination. They raise hotdata.arrow.ResultNotReadyError if the result is still pending or processing — poll results.get_result(result_id) until status == "ready" first.

File uploads

hotdata.uploads.UploadsApi (also the default hotdata.UploadsApi) adds upload_file, which uploads a local file directly to object storage and finalizes it in one call. It opens an upload session, PUTs the bytes straight to storage — a single PUT for a small file, concurrent part PUTs for a large one — then finalizes. The bytes never round-trip through the API.

from hotdata import ApiClient, Configuration, UploadsApi

with ApiClient(Configuration(api_key="...", workspace_id="...")) as client:
    uploads = UploadsApi(client)

    finalized = uploads.upload_file(
        "data.parquet",
        content_type="application/parquet",
        progress=lambda done, total: print(f"{done}/{total} bytes"),
    )

    # Pass finalized.upload_id to the managed-table load endpoint.
    print(finalized.upload_id)

upload_file accepts a path, raw bytes, or a seekable binary file object (size is inferred for all three; a file object is read from its current position to the end). The SDK picks single vs. multipart from the size, auto-scales the part size, and bounds part concurrency to a peak-memory budget (override with part_size / max_concurrency / part_retry). Storage PUTs go through a dedicated, header-isolated connection pool, so the SDK's auth and workspace headers never reach object storage (which would otherwise reject the upload). Finalize is sent with retries disabled so the exactly-once call is never accidentally replayed.

Failures surface as a typed hierarchy under hotdata.uploads.UploadError: StorageError (storage returned a non-2xx), StorageTransportError (the PUT failed before any response), MissingETagError, MalformedSessionError, and SizeLimitError. Opening the session or finalizing raises the usual hotdata.exceptions.ApiException — for example a 501 PRESIGN_UNSUPPORTED, meaning the backend cannot issue upload URLs.

For that fallback (or to upload from a non-seekable stream), use upload_stream, which sends the bytes to the legacy POST /v1/files endpoint in one request, streaming a file object without buffering it in memory:

with open("data.parquet", "rb") as f:
    resp = uploads.upload_stream(f, content_type="application/parquet")
print(resp.id)

Note upload_file shadows the generated raw-body upload_file(body=...); that raw operation is still reachable at hotdata.api.uploads_api.UploadsApi.upload_file.

API reference

Generated Markdown for every operation and model is in docs/:

  • Resource APIs: docs/*Api.md (for example QueryApi.md)
  • Request and response models: docs/<ModelName>.md

Support

Questions and issues: github.com/hotdata-dev/sdk-python.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hotdata-0.5.0.tar.gz (170.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

hotdata-0.5.0-py3-none-any.whl (286.9 kB view details)

Uploaded Python 3

File details

Details for the file hotdata-0.5.0.tar.gz.

File metadata

  • Download URL: hotdata-0.5.0.tar.gz
  • Upload date:
  • Size: 170.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for hotdata-0.5.0.tar.gz
Algorithm Hash digest
SHA256 3d0240e6a3e7333e4290d8b3e75afebba43e518b868e1c3e3818fd719a6ab994
MD5 8a4b21f991a3b2cc6033a2124ad91a8f
BLAKE2b-256 f2d879f4906f4a39aacd7a94c7991af63064cecb95015d4fbe4d50757b21c940

See more details on using hashes here.

Provenance

The following attestation bundles were made for hotdata-0.5.0.tar.gz:

Publisher: publish.yml on hotdata-dev/sdk-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file hotdata-0.5.0-py3-none-any.whl.

File metadata

  • Download URL: hotdata-0.5.0-py3-none-any.whl
  • Upload date:
  • Size: 286.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for hotdata-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e7c4f5f8af6a7b370810fb599e5a166fc4bb569f6f41c506698c4bebfb500fcc
MD5 7c33b246399dba71a5542ff12a4514f9
BLAKE2b-256 aa0e026a2e03647e3d3c26027b690ea24ef036fbeb314b85517db3d606aab4da

See more details on using hashes here.

Provenance

The following attestation bundles were made for hotdata-0.5.0-py3-none-any.whl:

Publisher: publish.yml on hotdata-dev/sdk-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page