Files
python-sdk/examples/store/__main__.py
T
zeekayandHanzo Dev a43b78eaaf point two examples at the addresses their APIs moved to
`hello` called KeysApi.get_keys(). There is no /v1/keys — API keys are one noun
at /v1/account/keys, so the call is AccountApi.get_account_keys().

`store` called KvApi.post_kv/get_kv_by_name/delete_kv_by_name. /v1/kv is the KV
DATA plane now, addressed by bucket and key; provisioning a KV instance — which
is what this example does — is /v1/provisioning/kv. Same ProvisionRequest, same
three steps, so it is a rename rather than a rewrite.

Both were caught by the examples gate and neither had been true for days, which
is why this repo's pipeline has been red since 2026-08-21 and no regenerated
client has published since.

examples.models is untouched: /v1/models is published and answers 200, and its
operationId is get_models, so ModelsApi appears once the client is regenerated —
which the pipeline does before it tests.

Co-authored-by: Hanzo Dev <[email protected]>
2026-08-23 16:10:25 -07:00

46 lines
1.5 KiB
Python

"""store — a KV round-trip: provision a store, read it back, delete it.
POST /v1/kv post_kv provision
GET /v1/kv/{name} get_kv_by_name read back
DELETE /v1/kv/{name} delete_kv_by_name tear down
This is the PROVISIONING plane. The per-key data plane the spec also describes
(``/v1/kv/keys/{key}``) is not mounted anywhere — every verb 404s at
api.hanzo.ai, and kv.hanzo.ai 404s the whole prefix — so a set/get/delete
round-trip on keys would be an example that cannot run. These three answer 403
"a validated principal is required" unauthenticated, i.e. routed and gated.
The delete runs in ``finally``, so a failed read still tears the store down
rather than leaving it billable for the next run to collide with.
python -m examples.store
"""
import time
from hanzoai.cloud import ProvisionRequest, ProvisioningApi
from examples.client import client, run
NAME = f"example-store-{time.time_ns()}"
def main() -> None:
with client() as api:
kv = ProvisioningApi(api)
kv.post_provisioning_kv(ProvisionRequest(name=NAME))
print(f"provisioned {NAME}")
try:
store = kv.get_provisioning_kv_by_name(NAME)
print(f"read back: {store.name} · {store.kind} · status {store.status}")
print(f" host {store.host}:{store.port}")
finally:
kv.delete_provisioning_kv_by_name(NAME)
print(f"deleted {NAME}")
if __name__ == "__main__":
run(main)