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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
98b823ad1037416480c6de2c5c29b3582f4a4ffc145c1ae29783df81e274e31f
|
|
| MD5 |
7bcd5266c3ccd8d182b2d6aa6721d612
|
|
| BLAKE2b-256 |
c5354edcd01f0bb358ece47b4e4319f21d7473e8f1e200cb8f3b809c84cea39d
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e2cebcba5c774cefcbbd6bd45f28efeb9ef6397d5b20927e7577336793b27bb7
|
|
| MD5 |
db180be14ea481e1ff28b73b5b812ee1
|
|
| BLAKE2b-256 |
61c51f4709b068f4eab1b8aae50e42c72ef7c907532321cd5eba65c949e131f5
|