mirror of
https://github.com/hanzoai/python-sdk.git
synced 2026-10-23 20:23:00 +00:00
`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]>
46 lines
1.5 KiB
Python
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)
|