Skip to main content

Python client library for StreamCI

Project description

PyStreamCI

Python client library for StreamCI — a connector-style API in the spirit of database drivers.

Installation

pip install pystreamci
# or editable install for development
pip install -e clients/python/

Quick Start

import pystreamci

# Secret-key auth (recommended) — use as context manager
with pystreamci.connect("https://api.streamci.org",
                        target="my_sensors",
                        secret_key="...") as client:

    # Insert a document
    client.insert({"time": {"$date": "2025-08-04T10:00:00Z"}, "val": 42})

    # Insert many documents (auto-batched)
    client.insert_many(records, batch_size=1000)

    # Upload an NDJSON/CSV file
    client.insert_file("data.ndjson")

    # Query (returns list of dicts)
    docs = client.query({"val": {"$gte": 10}}, sort={"time": 1}, limit=50)

    # Stream large results with an iterator
    for doc in client.query_iter({"val": {"$gte": 0}}):
        process(doc)

    # Download a blob field
    blob = client.query_blob(document_id="67abc...", field="image1")

    # Download blob fields from multiple documents
    blobs = client.query_blobs_by_field(["67abc...", "89def..."], field="image1")

    # Download all blob fields from a single document
    all_blobs = client.query_blobs_by_doc(document_id="67abc...")

    # Insert with blob attachment
    with open("photo.jpg", "rb") as f:
        client.insert({"name": "doc"}, blobs={"photo": ("photo.jpg", f, "image/jpeg")})

    # Update and delete
    client.update({"val": 42}, {"val": 43})
    client.delete({"val": 43})

# Password auth
client = pystreamci.connect("https://api.streamci.org",
                            target="my_sensors",
                            username="user1", password="pass123")

API Reference

pystreamci.connect(host, target, *, secret_key=None, username=None, password=None, max_retries=3, timeout=30.0, log_level="WARNING", log_file=None)

Returns a StreamCIClient. Auth type is inferred from the provided credentials.

StreamCIClient

Method Description
insert(data, blobs=None) Insert a single document (with optional blob attachments)
insert_many(data, datatype, batch_size) Batch insert (auto-splits at batch_size)
insert_file(file_path, datatype) Upload NDJSON/CSV file
update(filter, data, blobs=None) Update matching documents
delete(filter) Delete matching documents
query(query, *, project, sort, limit) Query and return list
query_iter(query, *, project, sort, limit) Query with streaming iterator
query_blob(document_id, field) Download blob field as bytes
query_blobs_by_field(document_ids, field) Download blob field from multiple documents
query_blobs_by_doc(document_id, *, ignore_errors) Download all blob fields from a document (including nested blob fields); returns dot-notation keys

pystreamci.make_date(dt)

Convert a datetime or ISO-8601 string to a StreamCI {"$date": "..."} object.

pystreamci.make_date("2025-08-04T10:00:00Z")
pystreamci.make_date(datetime(2025, 8, 4, 10, 0, tzinfo=timezone.utc))

Exceptions

Exception When raised
StreamCIConnectionError Connection failed after retries
StreamCIAuthError Authentication/authorization error
StreamCIRequestError Server returned status=0
StreamCIParseError Response parsing failed
StreamCITimeoutError Request timed out
StreamCIValidationError Invalid client-side input

query() vs query_iter()

Method Returns Use when
query(...) list[Document] Result fits in memory; need random access
query_iter(...) Iterator[Document] Large result sets; process one doc at a time

query_iter() uses HTTP streaming (stream=True) and parses NDJSON line-by-line, keeping memory usage constant regardless of result size.

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

pystreamci-0.3.1.tar.gz (12.8 kB view details)

Uploaded Source

Built Distribution

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

pystreamci-0.3.1-py3-none-any.whl (15.6 kB view details)

Uploaded Python 3

File details

Details for the file pystreamci-0.3.1.tar.gz.

File metadata

  • Download URL: pystreamci-0.3.1.tar.gz
  • Upload date:
  • Size: 12.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for pystreamci-0.3.1.tar.gz
Algorithm Hash digest
SHA256 98b823ad1037416480c6de2c5c29b3582f4a4ffc145c1ae29783df81e274e31f
MD5 7bcd5266c3ccd8d182b2d6aa6721d612
BLAKE2b-256 c5354edcd01f0bb358ece47b4e4319f21d7473e8f1e200cb8f3b809c84cea39d

See more details on using hashes here.

File details

Details for the file pystreamci-0.3.1-py3-none-any.whl.

File metadata

  • Download URL: pystreamci-0.3.1-py3-none-any.whl
  • Upload date:
  • Size: 15.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for pystreamci-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 e2cebcba5c774cefcbbd6bd45f28efeb9ef6397d5b20927e7577336793b27bb7
MD5 db180be14ea481e1ff28b73b5b812ee1
BLAKE2b-256 61c51f4709b068f4eab1b8aae50e42c72ef7c907532321cd5eba65c949e131f5

See more details on using hashes here.

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