From d9e5a153d6f3614b476e965f1147888f7c4f5fc6 Mon Sep 17 00:00:00 2001 From: Gerrit Date: Fri, 6 Feb 2026 14:41:58 +0100 Subject: [PATCH] Update connectrpc python to v0.8.1. --- examples/python/ip-list.py | 14 +++-- generate/python_client.tpl | 21 +++---- proto/buf.gen.yaml | 2 +- python/metalstack/client/client.py | 93 +++++++++++++++--------------- 4 files changed, 69 insertions(+), 61 deletions(-) diff --git a/examples/python/ip-list.py b/examples/python/ip-list.py index 06e82924..0e312f6c 100755 --- a/examples/python/ip-list.py +++ b/examples/python/ip-list.py @@ -13,12 +13,16 @@ baseurl = os.environ['METAL_APISERVER_URL'] token = os.environ['API_TOKEN'] project = os.environ['PROJECT_ID'] +headers = dict(Authorization="Bearer " + token) -client = apiclient.Client(baseurl=baseurl, token=token, timeout=timeout_s) +client = apiclient.Client(baseurl=baseurl, timeout=timeout_s) try: - resp = client.apiv2().ip().list(request=ip_pb2.IPServiceListRequest( - project=project)) + resp = client.apiv2().ip().list( + headers=headers, + request=ip_pb2.IPServiceListRequest( + project=project), + ) except ConnectError as e: print(e.code, e.message, e.to_dict()) sys.exit(1) @@ -28,7 +32,9 @@ print(ip.ip, ip.name, ip.project, ip.network) resp = client.adminv2().network().list( - request=network_pb2.NetworkServiceListRequest()) + headers=headers, + request=network_pb2.NetworkServiceListRequest(), +) for nw in resp.networks: print(nw.id, nw.name, nw.project) diff --git a/generate/python_client.tpl b/generate/python_client.tpl index 82c8c344..bdb7108a 100644 --- a/generate/python_client.tpl +++ b/generate/python_client.tpl @@ -1,6 +1,6 @@ # Code generated by generate.go. DO NOT EDIT. -import httpx +import pyqwest {{ range $name, $api := . -}} {{ range $svc := $api.Services -}} @@ -9,28 +9,29 @@ import metalstack.{{ $name | trimSuffix "v2" }}.v2.{{ $svc | trimSuffix "Service {{ end }} class Client: - def __init__(self, baseurl: str, token: str, timeout: int = 10): + def __init__(self, baseurl: str, timeout: float = 10): self._baseurl = baseurl - headers = {} - if token: - headers["Authorization"] = "Bearer " + token + transport = pyqwest.SyncHTTPTransport( + http_version=pyqwest.HTTPVersion.HTTP2, + timeout=timeout, + ) - self._session = httpx.Client(headers=headers, timeout=timeout) + self._client = pyqwest.SyncClient(transport=transport) {{ range $name, $api := . }} def {{ $name | lower }}(self): - return self._{{ $name | title }}(baseurl=self._baseurl, session=self._session) + return self._{{ $name | title }}(baseurl=self._baseurl, client=self._client) {{ end }} {{ range $name, $api := . }} class _{{ $name | title }}: - def __init__(self, baseurl: str, session=None): + def __init__(self, baseurl: str, client: pyqwest.SyncClient = None): self._baseurl = baseurl - self._session = session + self._client = client {{ range $svc := $api.Services }} def {{ $svc | trimSuffix "Service" | lower }}(self): - return {{ $name | trimSuffix "v2" }}_{{ $svc | trimSuffix "Service" | lower }}_connect.{{ $svc }}ClientSync(address=self._baseurl, session=self._session) + return {{ $name | trimSuffix "v2" }}_{{ $svc | trimSuffix "Service" | lower }}_connect.{{ $svc }}ClientSync(address=self._baseurl, http_client=self._client) {{ end }} {{ end }} diff --git a/proto/buf.gen.yaml b/proto/buf.gen.yaml index ff518010..2b8d31db 100644 --- a/proto/buf.gen.yaml +++ b/proto/buf.gen.yaml @@ -24,7 +24,7 @@ plugins: out: ../python - remote: buf.build/protocolbuffers/pyi:v33.5 out: ../python - - remote: buf.build/connectrpc/python:v0.7.1 + - remote: buf.build/connectrpc/python:v0.8.1 out: ../python # js - remote: buf.build/bufbuild/es:v2.11.0 diff --git a/python/metalstack/client/client.py b/python/metalstack/client/client.py index 8d598562..b88fd1f6 100755 --- a/python/metalstack/client/client.py +++ b/python/metalstack/client/client.py @@ -1,6 +1,6 @@ # Code generated by generate.go. DO NOT EDIT. -import httpx +import pyqwest import metalstack.admin.v2.filesystem_connect as admin_filesystem_connect import metalstack.admin.v2.image_connect as admin_image_connect @@ -39,138 +39,139 @@ class Client: - def __init__(self, baseurl: str, token: str, timeout: int = 10): + def __init__(self, baseurl: str, timeout: float = 10): self._baseurl = baseurl - headers = {} - if token: - headers["Authorization"] = "Bearer " + token + transport = pyqwest.SyncHTTPTransport( + http_version=pyqwest.HTTPVersion.HTTP2, + timeout=timeout, + ) - self._session = httpx.Client(headers=headers, timeout=timeout) + self._client = pyqwest.SyncClient(transport=transport) def adminv2(self): - return self._Adminv2(baseurl=self._baseurl, session=self._session) + return self._Adminv2(baseurl=self._baseurl, client=self._client) def apiv2(self): - return self._Apiv2(baseurl=self._baseurl, session=self._session) + return self._Apiv2(baseurl=self._baseurl, client=self._client) def infrav2(self): - return self._Infrav2(baseurl=self._baseurl, session=self._session) + return self._Infrav2(baseurl=self._baseurl, client=self._client) class _Adminv2: - def __init__(self, baseurl: str, session=None): + def __init__(self, baseurl: str, client: pyqwest.SyncClient = None): self._baseurl = baseurl - self._session = session + self._client = client def filesystem(self): - return admin_filesystem_connect.FilesystemServiceClientSync(address=self._baseurl, session=self._session) + return admin_filesystem_connect.FilesystemServiceClientSync(address=self._baseurl, http_client=self._client) def image(self): - return admin_image_connect.ImageServiceClientSync(address=self._baseurl, session=self._session) + return admin_image_connect.ImageServiceClientSync(address=self._baseurl, http_client=self._client) def ip(self): - return admin_ip_connect.IPServiceClientSync(address=self._baseurl, session=self._session) + return admin_ip_connect.IPServiceClientSync(address=self._baseurl, http_client=self._client) def machine(self): - return admin_machine_connect.MachineServiceClientSync(address=self._baseurl, session=self._session) + return admin_machine_connect.MachineServiceClientSync(address=self._baseurl, http_client=self._client) def network(self): - return admin_network_connect.NetworkServiceClientSync(address=self._baseurl, session=self._session) + return admin_network_connect.NetworkServiceClientSync(address=self._baseurl, http_client=self._client) def partition(self): - return admin_partition_connect.PartitionServiceClientSync(address=self._baseurl, session=self._session) + return admin_partition_connect.PartitionServiceClientSync(address=self._baseurl, http_client=self._client) def project(self): - return admin_project_connect.ProjectServiceClientSync(address=self._baseurl, session=self._session) + return admin_project_connect.ProjectServiceClientSync(address=self._baseurl, http_client=self._client) def size(self): - return admin_size_connect.SizeServiceClientSync(address=self._baseurl, session=self._session) + return admin_size_connect.SizeServiceClientSync(address=self._baseurl, http_client=self._client) def switch(self): - return admin_switch_connect.SwitchServiceClientSync(address=self._baseurl, session=self._session) + return admin_switch_connect.SwitchServiceClientSync(address=self._baseurl, http_client=self._client) def task(self): - return admin_task_connect.TaskServiceClientSync(address=self._baseurl, session=self._session) + return admin_task_connect.TaskServiceClientSync(address=self._baseurl, http_client=self._client) def tenant(self): - return admin_tenant_connect.TenantServiceClientSync(address=self._baseurl, session=self._session) + return admin_tenant_connect.TenantServiceClientSync(address=self._baseurl, http_client=self._client) def token(self): - return admin_token_connect.TokenServiceClientSync(address=self._baseurl, session=self._session) + return admin_token_connect.TokenServiceClientSync(address=self._baseurl, http_client=self._client) def vpn(self): - return admin_vpn_connect.VPNServiceClientSync(address=self._baseurl, session=self._session) + return admin_vpn_connect.VPNServiceClientSync(address=self._baseurl, http_client=self._client) class _Apiv2: - def __init__(self, baseurl: str, session=None): + def __init__(self, baseurl: str, client: pyqwest.SyncClient = None): self._baseurl = baseurl - self._session = session + self._client = client def filesystem(self): - return api_filesystem_connect.FilesystemServiceClientSync(address=self._baseurl, session=self._session) + return api_filesystem_connect.FilesystemServiceClientSync(address=self._baseurl, http_client=self._client) def health(self): - return api_health_connect.HealthServiceClientSync(address=self._baseurl, session=self._session) + return api_health_connect.HealthServiceClientSync(address=self._baseurl, http_client=self._client) def image(self): - return api_image_connect.ImageServiceClientSync(address=self._baseurl, session=self._session) + return api_image_connect.ImageServiceClientSync(address=self._baseurl, http_client=self._client) def ip(self): - return api_ip_connect.IPServiceClientSync(address=self._baseurl, session=self._session) + return api_ip_connect.IPServiceClientSync(address=self._baseurl, http_client=self._client) def machine(self): - return api_machine_connect.MachineServiceClientSync(address=self._baseurl, session=self._session) + return api_machine_connect.MachineServiceClientSync(address=self._baseurl, http_client=self._client) def method(self): - return api_method_connect.MethodServiceClientSync(address=self._baseurl, session=self._session) + return api_method_connect.MethodServiceClientSync(address=self._baseurl, http_client=self._client) def network(self): - return api_network_connect.NetworkServiceClientSync(address=self._baseurl, session=self._session) + return api_network_connect.NetworkServiceClientSync(address=self._baseurl, http_client=self._client) def partition(self): - return api_partition_connect.PartitionServiceClientSync(address=self._baseurl, session=self._session) + return api_partition_connect.PartitionServiceClientSync(address=self._baseurl, http_client=self._client) def project(self): - return api_project_connect.ProjectServiceClientSync(address=self._baseurl, session=self._session) + return api_project_connect.ProjectServiceClientSync(address=self._baseurl, http_client=self._client) def size(self): - return api_size_connect.SizeServiceClientSync(address=self._baseurl, session=self._session) + return api_size_connect.SizeServiceClientSync(address=self._baseurl, http_client=self._client) def tenant(self): - return api_tenant_connect.TenantServiceClientSync(address=self._baseurl, session=self._session) + return api_tenant_connect.TenantServiceClientSync(address=self._baseurl, http_client=self._client) def token(self): - return api_token_connect.TokenServiceClientSync(address=self._baseurl, session=self._session) + return api_token_connect.TokenServiceClientSync(address=self._baseurl, http_client=self._client) def user(self): - return api_user_connect.UserServiceClientSync(address=self._baseurl, session=self._session) + return api_user_connect.UserServiceClientSync(address=self._baseurl, http_client=self._client) def version(self): - return api_version_connect.VersionServiceClientSync(address=self._baseurl, session=self._session) + return api_version_connect.VersionServiceClientSync(address=self._baseurl, http_client=self._client) class _Infrav2: - def __init__(self, baseurl: str, session=None): + def __init__(self, baseurl: str, client: pyqwest.SyncClient = None): self._baseurl = baseurl - self._session = session + self._client = client def bmc(self): - return infra_bmc_connect.BMCServiceClientSync(address=self._baseurl, session=self._session) + return infra_bmc_connect.BMCServiceClientSync(address=self._baseurl, http_client=self._client) def boot(self): - return infra_boot_connect.BootServiceClientSync(address=self._baseurl, session=self._session) + return infra_boot_connect.BootServiceClientSync(address=self._baseurl, http_client=self._client) def event(self): - return infra_event_connect.EventServiceClientSync(address=self._baseurl, session=self._session) + return infra_event_connect.EventServiceClientSync(address=self._baseurl, http_client=self._client) def switch(self): - return infra_switch_connect.SwitchServiceClientSync(address=self._baseurl, session=self._session) + return infra_switch_connect.SwitchServiceClientSync(address=self._baseurl, http_client=self._client)