Python SDK for Kimberlite database
Project description
Kimberlite Python SDK
Status: 🚧 In Progress (Phase 11.2)
Pythonic client library for Kimberlite database.
Installation
pip install kimberlite
Quick Start
Stream Operations
from kimberlite import Client, DataClass
# Connect with context manager
with Client.connect(
addresses=["localhost:5432"],
tenant_id=1,
auth_token="secret"
) as client:
# Create stream
stream_id = client.create_stream("events", DataClass.PHI)
# Append events
events = [b"event1", b"event2", b"event3"]
offset = client.append(stream_id, events)
# Read events
results = client.read(stream_id, from_offset=0, max_bytes=1024)
for event in results:
print(f"Offset {event.offset}: {event.data}")
SQL Queries
from kimberlite import Client, Value
with Client.connect(addresses=["localhost:5432"], tenant_id=1) as client:
# Create table
client.execute("""
CREATE TABLE users (
id BIGINT PRIMARY KEY,
name TEXT,
email TEXT,
active BOOLEAN,
created_at TIMESTAMP
)
""")
# Insert data with parameterized queries
client.execute(
"INSERT INTO users (id, name, email, active, created_at) VALUES ($1, $2, $3, $4, $5)",
[
Value.bigint(1),
Value.text("Alice"),
Value.text("alice@example.com"),
Value.boolean(True),
Value.timestamp(1609459200_000_000_000) # 2021-01-01 UTC
]
)
# Query data
result = client.query(
"SELECT * FROM users WHERE active = $1",
[Value.boolean(True)]
)
for row in result.rows:
id_val = row[result.columns.index('id')]
name_val = row[result.columns.index('name')]
print(f"User {id_val.data}: {name_val.data}")
# Point-in-time query (compliance audit)
from kimberlite.types import Offset
historical_offset = Offset(1000)
historical_result = client.query_at(
"SELECT COUNT(*) FROM users",
[],
historical_offset
)
Features
Stream Operations
- Create and manage event streams
- Append events with automatic batching
- Read events with offset-based pagination
- Type hints for IDE autocomplete
SQL Query Engine
- Core SQL: SELECT (aggregates, GROUP BY/HAVING, UNION, INNER/LEFT JOIN, CTEs, subqueries, window functions), INSERT, UPDATE, DELETE, DDL
- Parameterized queries with type-safe Value objects
- Point-in-time queries (
AT OFFSET) for compliance audits;AS OF TIMESTAMPplanned v0.6 - All SQL types: NULL, BIGINT, TEXT, BOOLEAN, TIMESTAMP
Python Integration
- Context managers for automatic resource cleanup
- Type hints and mypy strict mode support
- Rich exception hierarchy for error handling
- Pythonic API design
Compliance Features
- Query historical state at any log position
- Immutable audit trail
- Data classification (PHI, Non-PHI, De-identified)
Usage Examples
Working with Value Types
from kimberlite import Value
from datetime import datetime
# Create values
null_val = Value.null()
int_val = Value.bigint(42)
text_val = Value.text("Hello, 世界!")
bool_val = Value.boolean(True)
ts_val = Value.timestamp(1609459200_000_000_000)
# From Python datetime
dt = datetime(2024, 1, 1, 12, 0, 0)
ts_from_dt = Value.from_datetime(dt)
# Convert timestamp back to datetime
dt_back = ts_val.to_datetime()
print(dt_back.isoformat()) # "2021-01-01T00:00:00"
CRUD Operations
# CREATE
client.execute("""
CREATE TABLE products (
id BIGINT PRIMARY KEY,
name TEXT,
price BIGINT,
in_stock BOOLEAN
)
""")
# INSERT
client.execute(
"INSERT INTO products (id, name, price, in_stock) VALUES ($1, $2, $3, $4)",
[Value.bigint(1), Value.text("Widget"), Value.bigint(1999), Value.boolean(True)]
)
# UPDATE
client.execute(
"UPDATE products SET price = $1 WHERE id = $2",
[Value.bigint(2499), Value.bigint(1)]
)
# DELETE
client.execute(
"DELETE FROM products WHERE id = $1",
[Value.bigint(1)]
)
# SELECT
result = client.query("SELECT * FROM products WHERE in_stock = $1", [Value.boolean(True)])
for row in result.rows:
print(row)
Compliance Audit Example
from kimberlite.types import Offset
# Record initial state
checkpoint_offset = Offset(client.log_position()) # Hypothetical API
# Make changes
client.execute("UPDATE users SET email = $1 WHERE id = $2", [
Value.text("newemail@example.com"),
Value.bigint(1)
])
# Later: Audit what the state was at checkpoint
historical_result = client.query_at(
"SELECT email FROM users WHERE id = $1",
[Value.bigint(1)],
checkpoint_offset
)
# Returns the old email, proving what the state was at that point in time
Documentation
- API Reference (coming soon)
- Protocol Specification
- SDK Architecture
- Query Examples
Installation (Development)
# Build FFI library
cd ../../
cargo build -p kimberlite-ffi
# Install Python SDK in development mode
cd sdks/python
pip install -e .
Development Status
SDK Implementation:
- ctypes-based FFI wrapper
- Stream operations (create, append, read)
- SQL query engine (SELECT, INSERT, UPDATE, DELETE, DDL)
- Parameterized queries with Value types
- Point-in-time queries (query_at)
- Type hints and mypy strict mode
- Comprehensive unit tests (48+ tests for values, 5+ for queries)
- Integration tests
- Wheel distribution with bundled binaries
- PyPI publishing
Value Type System:
- NULL, BIGINT, TEXT, BOOLEAN, TIMESTAMP
- DateTime conversion helpers
- Equality and hashing support
- Type-safe constructors
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
No source distribution files available for this release.See tutorial on generating distribution archives.
Built Distributions
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 kimberlite-0.6.2-py3-none-win_amd64.whl.
File metadata
- Download URL: kimberlite-0.6.2-py3-none-win_amd64.whl
- Upload date:
- Size: 373.7 kB
- Tags: Python 3, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e8d17abde3bf4bce6027557c816facfd49282850f82052e35e453752e8787e03
|
|
| MD5 |
e7ad7120096d89d9a459ac7ba4a03c41
|
|
| BLAKE2b-256 |
0f2571e7cba6fca488d5e279cade143c8cb15319dcfa9d657d873894f3de6ddf
|
File details
Details for the file kimberlite-0.6.2-py3-none-manylinux_2_17_x86_64.whl.
File metadata
- Download URL: kimberlite-0.6.2-py3-none-manylinux_2_17_x86_64.whl
- Upload date:
- Size: 515.1 kB
- Tags: Python 3, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1eee3c96ced6fa5d86b849d23eb230af2e7f43bf5e312e3aa103d6c98a2b8e62
|
|
| MD5 |
84458acc9a53a91b292c7927f401c599
|
|
| BLAKE2b-256 |
03b8ba544785f23acdc8cdfdba7b0d0ff62cb8feb99b9837c677db852e61b5e0
|
File details
Details for the file kimberlite-0.6.2-py3-none-macosx_11_0_arm64.whl.
File metadata
- Download URL: kimberlite-0.6.2-py3-none-macosx_11_0_arm64.whl
- Upload date:
- Size: 467.5 kB
- Tags: Python 3, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7ba51d3b019803741029f474b6b92451ff784281b90cb51babaaa7d22c7263c7
|
|
| MD5 |
bd04480172321e8da177b3deb52888f0
|
|
| BLAKE2b-256 |
010d7f9da4822123db7f43a90a9197835e4ba47fd14bfe8e315414984f0ce68c
|