Skip to main content

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.10+

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)

    # Results are scoped to a database via the required `X-Database-Id` header,
    # so pass the id of the database the query ran in.
    database_id = "your_database_id"

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

    # Streaming: yields a pyarrow.RecordBatchStreamReader without
    # materializing the full table in memory.
    with results.stream_result_arrow(result_id, database_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, database_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). A file larger than 8 MiB uploads via a streaming session — the SDK mints each part's URL just before its PUT, so a presigned URL can't expire mid-transfer on a slow upload. Storage PUTs go through a dedicated, header-isolated connection pool (auth and workspace headers never reach object storage, which would otherwise reject the upload) with a 30s connect timeout so a dead endpoint fails fast. Finalize is sent with retries disabled so the exactly-once call is never accidentally replayed.

Every failure is a subclass of hotdata.uploads.UploadError (also importable as from hotdata import UploadError), so a single except UploadError catches the whole flow: SessionCreateError (opening the session — check .status for a 501 PRESIGN_UNSUPPORTED), StorageError (storage returned a non-2xx; .exhausted is True if it outlived every retry round), StorageTransportError (the PUT failed before any response), MissingETagError, MintPartError (minting a part URL), FinalizeError, MalformedSessionError, SizeLimitError, and UploadCancelledError. The phase errors that wrap a control-plane call chain the underlying hotdata.exceptions.ApiException as __cause__ (and expose it as .api_exception / .status). A local file read error surfaces as OSError.

The progress callback receives a cumulative (bytes_done, total) — for a tqdm bar (whose update(n) wants a delta, and which isn't thread-safe under multipart) use the ready-made adapter:

from hotdata import tqdm_progress
from tqdm import tqdm

with tqdm(total=size, unit="B", unit_scale=True) as bar:
    uploads.upload_file("data.parquet", progress=tqdm_progress(bar))

Pass a threading.Event as cancel_event to abort an in-flight upload; tune the control-plane calls with request_timeout (storage-PUT timeouts are automatic and size-scaled).

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.

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.10.0.tar.gz (214.0 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.10.0-py3-none-any.whl (325.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: hotdata-0.10.0.tar.gz
  • Upload date:
  • Size: 214.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for hotdata-0.10.0.tar.gz
Algorithm Hash digest
SHA256 f290838f1bde87de9e523bf8e83b1d493e8996df22481664c4c91218cc8c6999
MD5 0af937b551c9dd2965927956578e8af6
BLAKE2b-256 bb822ad39efb4f5bcf68460c3bce13ae7568f28cd203acda1604f4fd8d3f4418

See more details on using hashes here.

Provenance

The following attestation bundles were made for hotdata-0.10.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.10.0-py3-none-any.whl.

File metadata

  • Download URL: hotdata-0.10.0-py3-none-any.whl
  • Upload date:
  • Size: 325.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for hotdata-0.10.0-py3-none-any.whl
Algorithm Hash digest
SHA256 deee5a7ce6551513084a10fed85cf37e468cfba8df85050e6c5b93b4714543f5
MD5 680aadbb3f9a8e7b1b7fa4a484db0040
BLAKE2b-256 09cd59e39938d7c3b083aabfabe85a33b5ce85bcc96d22415cc368f4799078ba

See more details on using hashes here.

Provenance

The following attestation bundles were made for hotdata-0.10.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.

Release history Release notifications | RSS feed

This release

0.10.0 This release

2 files

0.9.1

2 files

0.9.0

2 files

0.8.0

2 files

0.7.0

2 files

0.6.0

2 files

0.5.0

2 files

0.4.1

2 files

0.4.0

2 files

0.3.1

2 files

0.3.0

2 files

0.2.6

2 files

0.2.5

2 files

0.2.4

2 files

0.2.3

2 files

0.2.2

2 files

0.2.1

2 files

0.2.0

2 files

0.1.0

2 files

0.0.1

2 files

Supported by

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