Skip to main content

Python SDK for the UDB DataBroker gRPC API

Project description

UDB Python SDK

UDB logo

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

udb_client-0.3.5.tar.gz (422.5 kB view details)

Uploaded Source

Built Distribution

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

udb_client-0.3.5-py3-none-any.whl (602.9 kB view details)

Uploaded Python 3

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

Hashes for udb_client-0.3.5.tar.gz
Algorithm Hash digest
SHA256 d6dffd537059853c52d12cc4ccbe1b73da882597aa6e0eb24828727e6b61a28f
MD5 44946b2c9992cfa671a0d08afe3cec46
BLAKE2b-256 b53a4452c596a1c4213b1573b64a04233d8e5e39f40a7a986b22022f061ec04b

See more details on using hashes here.

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

Hashes for udb_client-0.3.5-py3-none-any.whl
Algorithm Hash digest
SHA256 0dbeb30b5b5fad66c5f61e7c7599d6b70aebd858b747c2f12c8fc3739a682063
MD5 4d3071054e75c6ef15f4c3d7f8fa5f0d
BLAKE2b-256 8be8b4445045e80a02cf83ddee20ddca15c64f22b32648393df1aea1096fd3d8

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