Python SDK for the UDB DataBroker gRPC API
Project description
UDB Python SDK
UDB :: Universal Data Broker
gRPC data plane | native control plane | tenant/project scope guard
crate v0.3.5 | protocol v1.0.0
udb-client is the Python client for UDB. It gives you sync and async clients,
metadata handling, common CRUD helpers, optional Pydantic models, raw access to
every broker RPC, and a version-matched udb CLI launcher.
Install
pip install udb-client==0.3.5
Optional validated command models:
pip install "udb-client[pydantic]==0.3.5"
Runtime: Python 3.10+
Export UDB Protos For Your App
After installation, the udb command is available. Use it from your app project
to copy UDB's annotation and broker protos into your own proto tree:
udb proto export --fmt
Then your project schemas can import:
import "udb/core/common/v1/db.proto";
Run udb proto export again whenever you upgrade the SDK/CLI. It keeps the UDB
annotation protos and your installed CLI version together.
Run udb proto fmt after export or schema edits to keep long UDB field
annotations on one line for easier review.
Basic CRUD
from udb_client import Metadata, UdbClient, decode_records
meta = Metadata(
tenant_id="acme",
user_id="user-1",
purpose="billing.api",
correlation_id="request-001",
scopes=("udb:read", "udb:write"),
service_identity="billing-service",
project_id="billing",
)
with UdbClient("127.0.0.1:50051", meta) as udb:
udb.upsert(
message_type="acme.billing.v1.Customer",
record={
"customer_id": "cus_001",
"tenant_id": "acme",
"name": "Ada Lovelace",
"email": "ada@example.com",
},
conflict_fields=("customer_id",),
return_record=True,
)
rows = udb.select(
message_type="acme.billing.v1.Customer",
filter={"customer_id": "cus_001"},
limit=1,
)
print(decode_records(rows))
Async
from udb_client import Metadata, UdbAsyncClient
meta = Metadata(
tenant_id="acme",
purpose="billing.worker",
correlation_id="job-42",
scopes=("udb:read", "udb:write"),
service_identity="billing-worker",
project_id="billing",
)
async with UdbAsyncClient("127.0.0.1:50051", meta) as udb:
await udb.upsert(
message_type="acme.billing.v1.Customer",
record={"customer_id": "cus_002", "tenant_id": "acme"},
conflict_fields=("customer_id",),
)
Authz Check
from udb_client.auth import UdbAuthClient
from udb.core.authz.services.v1 import core_pb2 as authz
with UdbAuthClient("127.0.0.1:50051", meta) as auth:
allowed, decision = auth.can(
authz.ResourceRef(message_type="acme.billing.v1.Customer"),
"read",
)
Full API Access
For broker APIs without a convenience method, use client.call("RpcName", request) for unary RPCs with metadata/error handling, or client.stub for raw
streaming and advanced calls.
The generated protobuf modules are included for request/response types:
from udb.entity.v1 import types_pb2
from udb.services.v1 import data_broker_pb2_grpc
Local SDK Development
Consumers do not need this. Use it only when editing the SDK itself:
cd sdk/python
python -m pip install -e ".[dev]"
python scripts/generate_protos.py
pytest
pyrefly check
Project details
Release history Release notifications | RSS feed
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 udb_client-0.3.5.tar.gz.
File metadata
- Download URL: udb_client-0.3.5.tar.gz
- Upload date:
- Size: 422.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d6dffd537059853c52d12cc4ccbe1b73da882597aa6e0eb24828727e6b61a28f
|
|
| MD5 |
44946b2c9992cfa671a0d08afe3cec46
|
|
| BLAKE2b-256 |
b53a4452c596a1c4213b1573b64a04233d8e5e39f40a7a986b22022f061ec04b
|
File details
Details for the file udb_client-0.3.5-py3-none-any.whl.
File metadata
- Download URL: udb_client-0.3.5-py3-none-any.whl
- Upload date:
- Size: 602.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0dbeb30b5b5fad66c5f61e7c7599d6b70aebd858b747c2f12c8fc3739a682063
|
|
| MD5 |
4d3071054e75c6ef15f4c3d7f8fa5f0d
|
|
| BLAKE2b-256 |
8be8b4445045e80a02cf83ddee20ddca15c64f22b32648393df1aea1096fd3d8
|