Python
OpenPlait’s Python package lives in python/
and mirrors the TypeScript workspace under typescript/.
| Python module | TypeScript package |
|---|---|
openplait.core | @openplait/core |
openplait.adapter_sdk | @openplait/adapter-sdk |
openplait.runtime | @openplait/runtime |
openplait.adapters.clickhouse | @openplait/adapter-clickhouse (scaffold) |
Status: alpha. Query parse/validate and runtime registration work today. Full ClickHouse/Tempo/Loki/Prometheus/Jaeger execute ports track the Node reference adapters.
Install
pip install openplait
From the repo:
cd python
poetry install
poetry run pytest
cd typescript
npm install
npm run check
Or from npm:
npm install @openplait/core @openplait/adapter-sdk \
@openplait/runtime @openplait/adapter-clickhouse
Register + validate a query
Never put passwords or tokens in query documents — only in server-side config.
from openplait import OPENPLAIT_API_VERSION
from openplait.adapters import ClickHouseAdapter, ClickHouseConfig
from openplait.core import parse_query, validate_query
from openplait.runtime import DatasourceRegistry, OpenPlaitRuntime
from openplait.runtime.registry import RuntimeDatasourceRegistration
config = ClickHouseConfig(
url="http://localhost:8123",
username="default",
password="OPENLIT",
database="openlit",
)
registry = DatasourceRegistry().register(
RuntimeDatasourceRegistration(
name="primary",
kind="ClickHouseDatasource",
adapter=ClickHouseAdapter(config),
config=config,
)
)
runtime = OpenPlaitRuntime(registry)
query = parse_query(
{
"apiVersion": OPENPLAIT_API_VERSION,
"kind": "Query",
"metadata": {"name": "spans-sample"},
"spec": {
"mode": "semantic",
"datasource": {"kind": "ClickHouseDatasource", "name": "primary"},
"input": {"signal": "traces", "entity": "otel.spans"},
"select": [{"field": "service.name"}],
"limit": 25,
},
}
)
assert validate_query(query).valid
import { ClickHouseAdapter } from "@openplait/adapter-clickhouse";
import {
OPENPLAIT_API_VERSION,
type SemanticQuery,
} from "@openplait/core";
import { DatasourceRegistry, OpenPlaitRuntime } from "@openplait/runtime";
const config = {
url: "http://localhost:8123",
username: "default",
password: "OPENLIT",
database: "openlit",
};
const registry = new DatasourceRegistry().register({
name: "primary",
kind: "ClickHouseDatasource",
scope: "workspace",
config,
adapter: new ClickHouseAdapter(config),
});
const runtime = new OpenPlaitRuntime(registry);
const query: SemanticQuery = {
apiVersion: OPENPLAIT_API_VERSION,
kind: "Query",
metadata: { name: "spans-sample" },
spec: {
mode: "semantic",
datasource: { kind: "ClickHouseDatasource", name: "primary" },
input: { signal: "traces", entity: "otel.spans" },
select: [{ field: "service.name" }],
limit: 25,
},
};
Release
cd python
poetry version 0.1.0a0 # bump as needed
git tag py-0.1.0a0
git push origin py-0.1.0a0
cd typescript
VERSION=$(node -p "require('./packages/core/package.json').version")
git tag "ts-"
git push origin "ts-"
See PUBLISHING.md.
Roadmap
- Complete ClickHouse compile/execute parity with
@openplait/adapter-clickhouse - Port Tempo, Loki, Prometheus, and Jaeger adapters
- Frame transforms and alert evaluation parity with
@openplait/runtime - Keep
apiVersionand JSON Schemas shared with TypeScript
Related
- Getting started (tabs for both languages)
- TypeScript
- Agent Skills