udb 0.2.0

Universal Data Broker — a Rust gRPC broker over multiple databases (Postgres, MySQL, SQLite, MongoDB, ClickHouse, Cassandra, MSSQL, Redis, Qdrant, S3, Neo4j, …) with per-tenant RLS, 2PC, sagas, and CDC.
Documentation
from __future__ import annotations

from udb_client.models import MetadataModel, SelectQuery, UpsertCommand


def test_pydantic_metadata_model_builds_sdk_metadata() -> None:
    metadata = MetadataModel(
        tenant_id="tenant-1",
        purpose="billing.test",
        correlation_id="corr-1",
        scopes=("udb:read",),
    ).to_metadata()

    assert metadata.tenant_id == "tenant-1"
    assert dict(metadata.to_grpc_metadata())["x-scopes"] == "udb:read"


def test_pydantic_request_models_build_proto_messages() -> None:
    metadata = MetadataModel(
        tenant_id="tenant-1",
        purpose="billing.test",
        correlation_id="corr-1",
    ).to_metadata()

    select = SelectQuery(
        message_type="acme.billing.v1.Customer",
        filter={"customer_id": "cus_1"},
        limit=1,
    ).to_proto(metadata)
    upsert = UpsertCommand(
        message_type="acme.billing.v1.Customer",
        record={"customer_id": "cus_1", "tenant_id": "tenant-1"},
        conflict_fields=("customer_id",),
    ).to_proto(metadata)

    assert select.context.tenant_id == "tenant-1"
    assert select.filter.fields["customer_id"].string_value == "cus_1"
    assert upsert.record_json == b'{"customer_id":"cus_1","tenant_id":"tenant-1"}'