diff --git a/otdf-python-proto/buf.gen.yaml b/otdf-python-proto/buf.gen.yaml index 75c7b67..2bb62b1 100644 --- a/otdf-python-proto/buf.gen.yaml +++ b/otdf-python-proto/buf.gen.yaml @@ -18,7 +18,7 @@ plugins: out: src/otdf_python_proto # Connect Python client generation (preferred) - - local: ../.venv/bin/protoc-gen-connect_python + - local: ../.venv/bin/protoc-gen-connect-python out: src/otdf_python_proto opt: - paths=source_relative diff --git a/otdf-python-proto/generated/__init__.py b/otdf-python-proto/generated/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/otdf-python-proto/scripts/generate_connect_proto.py b/otdf-python-proto/scripts/generate_connect_proto.py index 9ac1e39..76b2c04 100644 --- a/otdf-python-proto/scripts/generate_connect_proto.py +++ b/otdf-python-proto/scripts/generate_connect_proto.py @@ -37,7 +37,7 @@ def check_dependencies() -> bool: print(" # macOS: brew install bufbuild/buf/buf") print(" # Or: go install github.com/bufbuild/buf/cmd/buf@latest") elif dep == "connect-python": - print(" uv add connect-python[compiler]") + print(" uv add connect-python protoc-gen-connect-python") return False return True @@ -141,9 +141,9 @@ def run_buf_generate(proto_gen_dir: Path) -> bool: print("Generating protobuf and Connect RPC files...") try: - # First, get the path to protoc-gen-connect_python + # First, get the path to protoc-gen-connect-python result = subprocess.run( - ["uv", "run", "which", "protoc-gen-connect_python"], + ["uv", "run", "which", "protoc-gen-connect-python"], cwd=proto_gen_dir, capture_output=True, text=True, @@ -159,7 +159,7 @@ def run_buf_generate(proto_gen_dir: Path) -> bool: # Replace the local plugin path updated_content = content.replace( - "- local: protoc-gen-connect_python", f"- local: {connect_plugin_path}" + "- local: protoc-gen-connect-python", f"- local: {connect_plugin_path}" ) with buf_gen_path.open("w") as f: diff --git a/otdf-python-proto/src/otdf_python_proto/__init__.py b/otdf-python-proto/src/otdf_python_proto/__init__.py index 7e24e49..cd84219 100644 --- a/otdf-python-proto/src/otdf_python_proto/__init__.py +++ b/otdf-python-proto/src/otdf_python_proto/__init__.py @@ -13,25 +13,21 @@ __version__ = "0.0.0" # Import submodules to make them available -from . import authorization +# Note: authorization, entityresolution, wellknownconfiguration and policy subdirectories +# are imported lazily to avoid import errors from generated protobuf files from . import common from . import entity -from . import entityresolution from . import kas from . import legacy_grpc from . import logger from . import policy -from . import wellknownconfiguration # Export main module categories __all__ = [ - "authorization", "common", "entity", - "entityresolution", "kas", "legacy_grpc", "logger", "policy", - "wellknownconfiguration", ] diff --git a/otdf-python-proto/src/otdf_python_proto/authorization/__init__.py b/otdf-python-proto/src/otdf_python_proto/authorization/__init__.py index 025b306..0facad8 100644 --- a/otdf-python-proto/src/otdf_python_proto/authorization/__init__.py +++ b/otdf-python-proto/src/otdf_python_proto/authorization/__init__.py @@ -1 +1,11 @@ """authorization protobuf definitions.""" + +from .authorization_connect import ( + AuthorizationServiceClient, + AuthorizationServiceClientSync, +) + +__all__ = [ + "AuthorizationServiceClient", + "AuthorizationServiceClientSync", +] diff --git a/otdf-python-proto/src/otdf_python_proto/authorization/authorization_connect.py b/otdf-python-proto/src/otdf_python_proto/authorization/authorization_connect.py new file mode 100644 index 0000000..41c7cae --- /dev/null +++ b/otdf-python-proto/src/otdf_python_proto/authorization/authorization_connect.py @@ -0,0 +1,250 @@ +# -*- coding: utf-8 -*- +# Generated by https://github.com/connectrpc/connect-python. DO NOT EDIT! +# source: authorization/authorization.proto + +from collections.abc import AsyncGenerator, AsyncIterator, Iterable, Iterator, Mapping +from typing import Protocol + +from connectrpc.client import ConnectClient, ConnectClientSync +from connectrpc.code import Code +from connectrpc.errors import ConnectError +from connectrpc.interceptor import Interceptor, InterceptorSync +from connectrpc.method import IdempotencyLevel, MethodInfo +from connectrpc.request import Headers, RequestContext +from connectrpc.server import ConnectASGIApplication, ConnectWSGIApplication, Endpoint, EndpointSync +from . import authorization_pb2 as authorization_dot_authorization__pb2 + + +class AuthorizationService(Protocol): + async def get_decisions(self, request: authorization_dot_authorization__pb2.GetDecisionsRequest, ctx: RequestContext) -> authorization_dot_authorization__pb2.GetDecisionsResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def get_decisions_by_token(self, request: authorization_dot_authorization__pb2.GetDecisionsByTokenRequest, ctx: RequestContext) -> authorization_dot_authorization__pb2.GetDecisionsByTokenResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def get_entitlements(self, request: authorization_dot_authorization__pb2.GetEntitlementsRequest, ctx: RequestContext) -> authorization_dot_authorization__pb2.GetEntitlementsResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + +class AuthorizationServiceASGIApplication(ConnectASGIApplication[AuthorizationService]): + def __init__(self, service: AuthorizationService | AsyncGenerator[AuthorizationService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None) -> None: + super().__init__( + service=service, + endpoints=lambda svc: { + "/authorization.AuthorizationService/GetDecisions": Endpoint.unary( + method=MethodInfo( + name="GetDecisions", + service_name="authorization.AuthorizationService", + input=authorization_dot_authorization__pb2.GetDecisionsRequest, + output=authorization_dot_authorization__pb2.GetDecisionsResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.get_decisions, + ), + "/authorization.AuthorizationService/GetDecisionsByToken": Endpoint.unary( + method=MethodInfo( + name="GetDecisionsByToken", + service_name="authorization.AuthorizationService", + input=authorization_dot_authorization__pb2.GetDecisionsByTokenRequest, + output=authorization_dot_authorization__pb2.GetDecisionsByTokenResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.get_decisions_by_token, + ), + "/authorization.AuthorizationService/GetEntitlements": Endpoint.unary( + method=MethodInfo( + name="GetEntitlements", + service_name="authorization.AuthorizationService", + input=authorization_dot_authorization__pb2.GetEntitlementsRequest, + output=authorization_dot_authorization__pb2.GetEntitlementsResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.get_entitlements, + ), + }, + interceptors=interceptors, + read_max_bytes=read_max_bytes, + ) + + @property + def path(self) -> str: + """Returns the URL path to mount the application to when serving multiple applications.""" + return "/authorization.AuthorizationService" + + +class AuthorizationServiceClient(ConnectClient): + async def get_decisions( + self, + request: authorization_dot_authorization__pb2.GetDecisionsRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> authorization_dot_authorization__pb2.GetDecisionsResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="GetDecisions", + service_name="authorization.AuthorizationService", + input=authorization_dot_authorization__pb2.GetDecisionsRequest, + output=authorization_dot_authorization__pb2.GetDecisionsResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def get_decisions_by_token( + self, + request: authorization_dot_authorization__pb2.GetDecisionsByTokenRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> authorization_dot_authorization__pb2.GetDecisionsByTokenResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="GetDecisionsByToken", + service_name="authorization.AuthorizationService", + input=authorization_dot_authorization__pb2.GetDecisionsByTokenRequest, + output=authorization_dot_authorization__pb2.GetDecisionsByTokenResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def get_entitlements( + self, + request: authorization_dot_authorization__pb2.GetEntitlementsRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> authorization_dot_authorization__pb2.GetEntitlementsResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="GetEntitlements", + service_name="authorization.AuthorizationService", + input=authorization_dot_authorization__pb2.GetEntitlementsRequest, + output=authorization_dot_authorization__pb2.GetEntitlementsResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + +class AuthorizationServiceSync(Protocol): + def get_decisions(self, request: authorization_dot_authorization__pb2.GetDecisionsRequest, ctx: RequestContext) -> authorization_dot_authorization__pb2.GetDecisionsResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def get_decisions_by_token(self, request: authorization_dot_authorization__pb2.GetDecisionsByTokenRequest, ctx: RequestContext) -> authorization_dot_authorization__pb2.GetDecisionsByTokenResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def get_entitlements(self, request: authorization_dot_authorization__pb2.GetEntitlementsRequest, ctx: RequestContext) -> authorization_dot_authorization__pb2.GetEntitlementsResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + +class AuthorizationServiceWSGIApplication(ConnectWSGIApplication): + def __init__(self, service: AuthorizationServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None) -> None: + super().__init__( + endpoints={ + "/authorization.AuthorizationService/GetDecisions": EndpointSync.unary( + method=MethodInfo( + name="GetDecisions", + service_name="authorization.AuthorizationService", + input=authorization_dot_authorization__pb2.GetDecisionsRequest, + output=authorization_dot_authorization__pb2.GetDecisionsResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.get_decisions, + ), + "/authorization.AuthorizationService/GetDecisionsByToken": EndpointSync.unary( + method=MethodInfo( + name="GetDecisionsByToken", + service_name="authorization.AuthorizationService", + input=authorization_dot_authorization__pb2.GetDecisionsByTokenRequest, + output=authorization_dot_authorization__pb2.GetDecisionsByTokenResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.get_decisions_by_token, + ), + "/authorization.AuthorizationService/GetEntitlements": EndpointSync.unary( + method=MethodInfo( + name="GetEntitlements", + service_name="authorization.AuthorizationService", + input=authorization_dot_authorization__pb2.GetEntitlementsRequest, + output=authorization_dot_authorization__pb2.GetEntitlementsResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.get_entitlements, + ), + }, + interceptors=interceptors, + read_max_bytes=read_max_bytes, + ) + + @property + def path(self) -> str: + """Returns the URL path to mount the application to when serving multiple applications.""" + return "/authorization.AuthorizationService" + + +class AuthorizationServiceClientSync(ConnectClientSync): + def get_decisions( + self, + request: authorization_dot_authorization__pb2.GetDecisionsRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> authorization_dot_authorization__pb2.GetDecisionsResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="GetDecisions", + service_name="authorization.AuthorizationService", + input=authorization_dot_authorization__pb2.GetDecisionsRequest, + output=authorization_dot_authorization__pb2.GetDecisionsResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def get_decisions_by_token( + self, + request: authorization_dot_authorization__pb2.GetDecisionsByTokenRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> authorization_dot_authorization__pb2.GetDecisionsByTokenResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="GetDecisionsByToken", + service_name="authorization.AuthorizationService", + input=authorization_dot_authorization__pb2.GetDecisionsByTokenRequest, + output=authorization_dot_authorization__pb2.GetDecisionsByTokenResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def get_entitlements( + self, + request: authorization_dot_authorization__pb2.GetEntitlementsRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> authorization_dot_authorization__pb2.GetEntitlementsResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="GetEntitlements", + service_name="authorization.AuthorizationService", + input=authorization_dot_authorization__pb2.GetEntitlementsRequest, + output=authorization_dot_authorization__pb2.GetEntitlementsResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) diff --git a/otdf-python-proto/src/otdf_python_proto/authorization/authorization_pb2_connect.py b/otdf-python-proto/src/otdf_python_proto/authorization/authorization_pb2_connect.py deleted file mode 100644 index a338f78..0000000 --- a/otdf-python-proto/src/otdf_python_proto/authorization/authorization_pb2_connect.py +++ /dev/null @@ -1,191 +0,0 @@ -# Generated Connect client code - -from __future__ import annotations -from collections.abc import AsyncIterator -from collections.abc import Iterator -from collections.abc import Iterable -import aiohttp -import urllib3 -import typing -import sys - -from connectrpc.client_async import AsyncConnectClient -from connectrpc.client_sync import ConnectClient -from connectrpc.client_protocol import ConnectProtocol -from connectrpc.client_connect import ConnectProtocolError -from connectrpc.headers import HeaderInput -from connectrpc.server import ClientRequest -from connectrpc.server import ClientStream -from connectrpc.server import ServerResponse -from connectrpc.server import ServerStream -from connectrpc.server_sync import ConnectWSGI -from connectrpc.streams import StreamInput -from connectrpc.streams import AsyncStreamOutput -from connectrpc.streams import StreamOutput -from connectrpc.unary import UnaryOutput -from connectrpc.unary import ClientStreamingOutput - -if typing.TYPE_CHECKING: - # wsgiref.types was added in Python 3.11. - if sys.version_info >= (3, 11): - from wsgiref.types import WSGIApplication - else: - from _typeshed.wsgi import WSGIApplication - -import authorization.authorization_pb2 - -class AuthorizationServiceClient: - def __init__( - self, - base_url: str, - http_client: urllib3.PoolManager | None = None, - protocol: ConnectProtocol = ConnectProtocol.CONNECT_PROTOBUF, - ): - self.base_url = base_url - self._connect_client = ConnectClient(http_client, protocol) - def call_get_decisions( - self, req: authorization.authorization_pb2.GetDecisionsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[authorization.authorization_pb2.GetDecisionsResponse]: - """Low-level method to call GetDecisions, granting access to errors and metadata""" - url = self.base_url + "/authorization.AuthorizationService/GetDecisions" - return self._connect_client.call_unary(url, req, authorization.authorization_pb2.GetDecisionsResponse,extra_headers, timeout_seconds) - - - def get_decisions( - self, req: authorization.authorization_pb2.GetDecisionsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> authorization.authorization_pb2.GetDecisionsResponse: - response = self.call_get_decisions(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_get_decisions_by_token( - self, req: authorization.authorization_pb2.GetDecisionsByTokenRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[authorization.authorization_pb2.GetDecisionsByTokenResponse]: - """Low-level method to call GetDecisionsByToken, granting access to errors and metadata""" - url = self.base_url + "/authorization.AuthorizationService/GetDecisionsByToken" - return self._connect_client.call_unary(url, req, authorization.authorization_pb2.GetDecisionsByTokenResponse,extra_headers, timeout_seconds) - - - def get_decisions_by_token( - self, req: authorization.authorization_pb2.GetDecisionsByTokenRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> authorization.authorization_pb2.GetDecisionsByTokenResponse: - response = self.call_get_decisions_by_token(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_get_entitlements( - self, req: authorization.authorization_pb2.GetEntitlementsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[authorization.authorization_pb2.GetEntitlementsResponse]: - """Low-level method to call GetEntitlements, granting access to errors and metadata""" - url = self.base_url + "/authorization.AuthorizationService/GetEntitlements" - return self._connect_client.call_unary(url, req, authorization.authorization_pb2.GetEntitlementsResponse,extra_headers, timeout_seconds) - - - def get_entitlements( - self, req: authorization.authorization_pb2.GetEntitlementsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> authorization.authorization_pb2.GetEntitlementsResponse: - response = self.call_get_entitlements(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - -class AsyncAuthorizationServiceClient: - def __init__( - self, - base_url: str, - http_client: aiohttp.ClientSession, - protocol: ConnectProtocol = ConnectProtocol.CONNECT_PROTOBUF, - ): - self.base_url = base_url - self._connect_client = AsyncConnectClient(http_client, protocol) - - async def call_get_decisions( - self, req: authorization.authorization_pb2.GetDecisionsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[authorization.authorization_pb2.GetDecisionsResponse]: - """Low-level method to call GetDecisions, granting access to errors and metadata""" - url = self.base_url + "/authorization.AuthorizationService/GetDecisions" - return await self._connect_client.call_unary(url, req, authorization.authorization_pb2.GetDecisionsResponse,extra_headers, timeout_seconds) - - async def get_decisions( - self, req: authorization.authorization_pb2.GetDecisionsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> authorization.authorization_pb2.GetDecisionsResponse: - response = await self.call_get_decisions(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_get_decisions_by_token( - self, req: authorization.authorization_pb2.GetDecisionsByTokenRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[authorization.authorization_pb2.GetDecisionsByTokenResponse]: - """Low-level method to call GetDecisionsByToken, granting access to errors and metadata""" - url = self.base_url + "/authorization.AuthorizationService/GetDecisionsByToken" - return await self._connect_client.call_unary(url, req, authorization.authorization_pb2.GetDecisionsByTokenResponse,extra_headers, timeout_seconds) - - async def get_decisions_by_token( - self, req: authorization.authorization_pb2.GetDecisionsByTokenRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> authorization.authorization_pb2.GetDecisionsByTokenResponse: - response = await self.call_get_decisions_by_token(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_get_entitlements( - self, req: authorization.authorization_pb2.GetEntitlementsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[authorization.authorization_pb2.GetEntitlementsResponse]: - """Low-level method to call GetEntitlements, granting access to errors and metadata""" - url = self.base_url + "/authorization.AuthorizationService/GetEntitlements" - return await self._connect_client.call_unary(url, req, authorization.authorization_pb2.GetEntitlementsResponse,extra_headers, timeout_seconds) - - async def get_entitlements( - self, req: authorization.authorization_pb2.GetEntitlementsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> authorization.authorization_pb2.GetEntitlementsResponse: - response = await self.call_get_entitlements(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - -@typing.runtime_checkable -class AuthorizationServiceProtocol(typing.Protocol): - def get_decisions(self, req: ClientRequest[authorization.authorization_pb2.GetDecisionsRequest]) -> ServerResponse[authorization.authorization_pb2.GetDecisionsResponse]: - ... - def get_decisions_by_token(self, req: ClientRequest[authorization.authorization_pb2.GetDecisionsByTokenRequest]) -> ServerResponse[authorization.authorization_pb2.GetDecisionsByTokenResponse]: - ... - def get_entitlements(self, req: ClientRequest[authorization.authorization_pb2.GetEntitlementsRequest]) -> ServerResponse[authorization.authorization_pb2.GetEntitlementsResponse]: - ... - -AUTHORIZATION_SERVICE_PATH_PREFIX = "/authorization.AuthorizationService" - -def wsgi_authorization_service(implementation: AuthorizationServiceProtocol) -> WSGIApplication: - app = ConnectWSGI() - app.register_unary_rpc("/authorization.AuthorizationService/GetDecisions", implementation.get_decisions, authorization.authorization_pb2.GetDecisionsRequest) - app.register_unary_rpc("/authorization.AuthorizationService/GetDecisionsByToken", implementation.get_decisions_by_token, authorization.authorization_pb2.GetDecisionsByTokenRequest) - app.register_unary_rpc("/authorization.AuthorizationService/GetEntitlements", implementation.get_entitlements, authorization.authorization_pb2.GetEntitlementsRequest) - return app diff --git a/otdf-python-proto/src/otdf_python_proto/authorization/v2/authorization_connect.py b/otdf-python-proto/src/otdf_python_proto/authorization/v2/authorization_connect.py new file mode 100644 index 0000000..cb7329d --- /dev/null +++ b/otdf-python-proto/src/otdf_python_proto/authorization/v2/authorization_connect.py @@ -0,0 +1,315 @@ +# -*- coding: utf-8 -*- +# Generated by https://github.com/connectrpc/connect-python. DO NOT EDIT! +# source: authorization/v2/authorization.proto + +from collections.abc import AsyncGenerator, AsyncIterator, Iterable, Iterator, Mapping +from typing import Protocol + +from connectrpc.client import ConnectClient, ConnectClientSync +from connectrpc.code import Code +from connectrpc.errors import ConnectError +from connectrpc.interceptor import Interceptor, InterceptorSync +from connectrpc.method import IdempotencyLevel, MethodInfo +from connectrpc.request import Headers, RequestContext +from connectrpc.server import ConnectASGIApplication, ConnectWSGIApplication, Endpoint, EndpointSync +import authorization.v2.authorization_pb2 as authorization_dot_v2_dot_authorization__pb2 + + +class AuthorizationService(Protocol): + async def get_decision(self, request: authorization_dot_v2_dot_authorization__pb2.GetDecisionRequest, ctx: RequestContext) -> authorization_dot_v2_dot_authorization__pb2.GetDecisionResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def get_decision_multi_resource(self, request: authorization_dot_v2_dot_authorization__pb2.GetDecisionMultiResourceRequest, ctx: RequestContext) -> authorization_dot_v2_dot_authorization__pb2.GetDecisionMultiResourceResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def get_decision_bulk(self, request: authorization_dot_v2_dot_authorization__pb2.GetDecisionBulkRequest, ctx: RequestContext) -> authorization_dot_v2_dot_authorization__pb2.GetDecisionBulkResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def get_entitlements(self, request: authorization_dot_v2_dot_authorization__pb2.GetEntitlementsRequest, ctx: RequestContext) -> authorization_dot_v2_dot_authorization__pb2.GetEntitlementsResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + +class AuthorizationServiceASGIApplication(ConnectASGIApplication[AuthorizationService]): + def __init__(self, service: AuthorizationService | AsyncGenerator[AuthorizationService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None) -> None: + super().__init__( + service=service, + endpoints=lambda svc: { + "/authorization.v2.AuthorizationService/GetDecision": Endpoint.unary( + method=MethodInfo( + name="GetDecision", + service_name="authorization.v2.AuthorizationService", + input=authorization_dot_v2_dot_authorization__pb2.GetDecisionRequest, + output=authorization_dot_v2_dot_authorization__pb2.GetDecisionResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.get_decision, + ), + "/authorization.v2.AuthorizationService/GetDecisionMultiResource": Endpoint.unary( + method=MethodInfo( + name="GetDecisionMultiResource", + service_name="authorization.v2.AuthorizationService", + input=authorization_dot_v2_dot_authorization__pb2.GetDecisionMultiResourceRequest, + output=authorization_dot_v2_dot_authorization__pb2.GetDecisionMultiResourceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.get_decision_multi_resource, + ), + "/authorization.v2.AuthorizationService/GetDecisionBulk": Endpoint.unary( + method=MethodInfo( + name="GetDecisionBulk", + service_name="authorization.v2.AuthorizationService", + input=authorization_dot_v2_dot_authorization__pb2.GetDecisionBulkRequest, + output=authorization_dot_v2_dot_authorization__pb2.GetDecisionBulkResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.get_decision_bulk, + ), + "/authorization.v2.AuthorizationService/GetEntitlements": Endpoint.unary( + method=MethodInfo( + name="GetEntitlements", + service_name="authorization.v2.AuthorizationService", + input=authorization_dot_v2_dot_authorization__pb2.GetEntitlementsRequest, + output=authorization_dot_v2_dot_authorization__pb2.GetEntitlementsResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.get_entitlements, + ), + }, + interceptors=interceptors, + read_max_bytes=read_max_bytes, + ) + + @property + def path(self) -> str: + """Returns the URL path to mount the application to when serving multiple applications.""" + return "/authorization.v2.AuthorizationService" + + +class AuthorizationServiceClient(ConnectClient): + async def get_decision( + self, + request: authorization_dot_v2_dot_authorization__pb2.GetDecisionRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> authorization_dot_v2_dot_authorization__pb2.GetDecisionResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="GetDecision", + service_name="authorization.v2.AuthorizationService", + input=authorization_dot_v2_dot_authorization__pb2.GetDecisionRequest, + output=authorization_dot_v2_dot_authorization__pb2.GetDecisionResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def get_decision_multi_resource( + self, + request: authorization_dot_v2_dot_authorization__pb2.GetDecisionMultiResourceRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> authorization_dot_v2_dot_authorization__pb2.GetDecisionMultiResourceResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="GetDecisionMultiResource", + service_name="authorization.v2.AuthorizationService", + input=authorization_dot_v2_dot_authorization__pb2.GetDecisionMultiResourceRequest, + output=authorization_dot_v2_dot_authorization__pb2.GetDecisionMultiResourceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def get_decision_bulk( + self, + request: authorization_dot_v2_dot_authorization__pb2.GetDecisionBulkRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> authorization_dot_v2_dot_authorization__pb2.GetDecisionBulkResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="GetDecisionBulk", + service_name="authorization.v2.AuthorizationService", + input=authorization_dot_v2_dot_authorization__pb2.GetDecisionBulkRequest, + output=authorization_dot_v2_dot_authorization__pb2.GetDecisionBulkResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def get_entitlements( + self, + request: authorization_dot_v2_dot_authorization__pb2.GetEntitlementsRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> authorization_dot_v2_dot_authorization__pb2.GetEntitlementsResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="GetEntitlements", + service_name="authorization.v2.AuthorizationService", + input=authorization_dot_v2_dot_authorization__pb2.GetEntitlementsRequest, + output=authorization_dot_v2_dot_authorization__pb2.GetEntitlementsResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + +class AuthorizationServiceSync(Protocol): + def get_decision(self, request: authorization_dot_v2_dot_authorization__pb2.GetDecisionRequest, ctx: RequestContext) -> authorization_dot_v2_dot_authorization__pb2.GetDecisionResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def get_decision_multi_resource(self, request: authorization_dot_v2_dot_authorization__pb2.GetDecisionMultiResourceRequest, ctx: RequestContext) -> authorization_dot_v2_dot_authorization__pb2.GetDecisionMultiResourceResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def get_decision_bulk(self, request: authorization_dot_v2_dot_authorization__pb2.GetDecisionBulkRequest, ctx: RequestContext) -> authorization_dot_v2_dot_authorization__pb2.GetDecisionBulkResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def get_entitlements(self, request: authorization_dot_v2_dot_authorization__pb2.GetEntitlementsRequest, ctx: RequestContext) -> authorization_dot_v2_dot_authorization__pb2.GetEntitlementsResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + +class AuthorizationServiceWSGIApplication(ConnectWSGIApplication): + def __init__(self, service: AuthorizationServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None) -> None: + super().__init__( + endpoints={ + "/authorization.v2.AuthorizationService/GetDecision": EndpointSync.unary( + method=MethodInfo( + name="GetDecision", + service_name="authorization.v2.AuthorizationService", + input=authorization_dot_v2_dot_authorization__pb2.GetDecisionRequest, + output=authorization_dot_v2_dot_authorization__pb2.GetDecisionResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.get_decision, + ), + "/authorization.v2.AuthorizationService/GetDecisionMultiResource": EndpointSync.unary( + method=MethodInfo( + name="GetDecisionMultiResource", + service_name="authorization.v2.AuthorizationService", + input=authorization_dot_v2_dot_authorization__pb2.GetDecisionMultiResourceRequest, + output=authorization_dot_v2_dot_authorization__pb2.GetDecisionMultiResourceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.get_decision_multi_resource, + ), + "/authorization.v2.AuthorizationService/GetDecisionBulk": EndpointSync.unary( + method=MethodInfo( + name="GetDecisionBulk", + service_name="authorization.v2.AuthorizationService", + input=authorization_dot_v2_dot_authorization__pb2.GetDecisionBulkRequest, + output=authorization_dot_v2_dot_authorization__pb2.GetDecisionBulkResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.get_decision_bulk, + ), + "/authorization.v2.AuthorizationService/GetEntitlements": EndpointSync.unary( + method=MethodInfo( + name="GetEntitlements", + service_name="authorization.v2.AuthorizationService", + input=authorization_dot_v2_dot_authorization__pb2.GetEntitlementsRequest, + output=authorization_dot_v2_dot_authorization__pb2.GetEntitlementsResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.get_entitlements, + ), + }, + interceptors=interceptors, + read_max_bytes=read_max_bytes, + ) + + @property + def path(self) -> str: + """Returns the URL path to mount the application to when serving multiple applications.""" + return "/authorization.v2.AuthorizationService" + + +class AuthorizationServiceClientSync(ConnectClientSync): + def get_decision( + self, + request: authorization_dot_v2_dot_authorization__pb2.GetDecisionRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> authorization_dot_v2_dot_authorization__pb2.GetDecisionResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="GetDecision", + service_name="authorization.v2.AuthorizationService", + input=authorization_dot_v2_dot_authorization__pb2.GetDecisionRequest, + output=authorization_dot_v2_dot_authorization__pb2.GetDecisionResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def get_decision_multi_resource( + self, + request: authorization_dot_v2_dot_authorization__pb2.GetDecisionMultiResourceRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> authorization_dot_v2_dot_authorization__pb2.GetDecisionMultiResourceResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="GetDecisionMultiResource", + service_name="authorization.v2.AuthorizationService", + input=authorization_dot_v2_dot_authorization__pb2.GetDecisionMultiResourceRequest, + output=authorization_dot_v2_dot_authorization__pb2.GetDecisionMultiResourceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def get_decision_bulk( + self, + request: authorization_dot_v2_dot_authorization__pb2.GetDecisionBulkRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> authorization_dot_v2_dot_authorization__pb2.GetDecisionBulkResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="GetDecisionBulk", + service_name="authorization.v2.AuthorizationService", + input=authorization_dot_v2_dot_authorization__pb2.GetDecisionBulkRequest, + output=authorization_dot_v2_dot_authorization__pb2.GetDecisionBulkResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def get_entitlements( + self, + request: authorization_dot_v2_dot_authorization__pb2.GetEntitlementsRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> authorization_dot_v2_dot_authorization__pb2.GetEntitlementsResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="GetEntitlements", + service_name="authorization.v2.AuthorizationService", + input=authorization_dot_v2_dot_authorization__pb2.GetEntitlementsRequest, + output=authorization_dot_v2_dot_authorization__pb2.GetEntitlementsResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) diff --git a/otdf-python-proto/src/otdf_python_proto/authorization/v2/authorization_pb2_connect.py b/otdf-python-proto/src/otdf_python_proto/authorization/v2/authorization_pb2_connect.py deleted file mode 100644 index 64fabc6..0000000 --- a/otdf-python-proto/src/otdf_python_proto/authorization/v2/authorization_pb2_connect.py +++ /dev/null @@ -1,233 +0,0 @@ -# Generated Connect client code - -from __future__ import annotations -from collections.abc import AsyncIterator -from collections.abc import Iterator -from collections.abc import Iterable -import aiohttp -import urllib3 -import typing -import sys - -from connectrpc.client_async import AsyncConnectClient -from connectrpc.client_sync import ConnectClient -from connectrpc.client_protocol import ConnectProtocol -from connectrpc.client_connect import ConnectProtocolError -from connectrpc.headers import HeaderInput -from connectrpc.server import ClientRequest -from connectrpc.server import ClientStream -from connectrpc.server import ServerResponse -from connectrpc.server import ServerStream -from connectrpc.server_sync import ConnectWSGI -from connectrpc.streams import StreamInput -from connectrpc.streams import AsyncStreamOutput -from connectrpc.streams import StreamOutput -from connectrpc.unary import UnaryOutput -from connectrpc.unary import ClientStreamingOutput - -if typing.TYPE_CHECKING: - # wsgiref.types was added in Python 3.11. - if sys.version_info >= (3, 11): - from wsgiref.types import WSGIApplication - else: - from _typeshed.wsgi import WSGIApplication - -import authorization.v2.authorization_pb2 - -class AuthorizationServiceClient: - def __init__( - self, - base_url: str, - http_client: urllib3.PoolManager | None = None, - protocol: ConnectProtocol = ConnectProtocol.CONNECT_PROTOBUF, - ): - self.base_url = base_url - self._connect_client = ConnectClient(http_client, protocol) - def call_get_decision( - self, req: authorization.v2.authorization_pb2.GetDecisionRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[authorization.v2.authorization_pb2.GetDecisionResponse]: - """Low-level method to call GetDecision, granting access to errors and metadata""" - url = self.base_url + "/authorization.v2.AuthorizationService/GetDecision" - return self._connect_client.call_unary(url, req, authorization.v2.authorization_pb2.GetDecisionResponse,extra_headers, timeout_seconds) - - - def get_decision( - self, req: authorization.v2.authorization_pb2.GetDecisionRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> authorization.v2.authorization_pb2.GetDecisionResponse: - response = self.call_get_decision(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_get_decision_multi_resource( - self, req: authorization.v2.authorization_pb2.GetDecisionMultiResourceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[authorization.v2.authorization_pb2.GetDecisionMultiResourceResponse]: - """Low-level method to call GetDecisionMultiResource, granting access to errors and metadata""" - url = self.base_url + "/authorization.v2.AuthorizationService/GetDecisionMultiResource" - return self._connect_client.call_unary(url, req, authorization.v2.authorization_pb2.GetDecisionMultiResourceResponse,extra_headers, timeout_seconds) - - - def get_decision_multi_resource( - self, req: authorization.v2.authorization_pb2.GetDecisionMultiResourceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> authorization.v2.authorization_pb2.GetDecisionMultiResourceResponse: - response = self.call_get_decision_multi_resource(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_get_decision_bulk( - self, req: authorization.v2.authorization_pb2.GetDecisionBulkRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[authorization.v2.authorization_pb2.GetDecisionBulkResponse]: - """Low-level method to call GetDecisionBulk, granting access to errors and metadata""" - url = self.base_url + "/authorization.v2.AuthorizationService/GetDecisionBulk" - return self._connect_client.call_unary(url, req, authorization.v2.authorization_pb2.GetDecisionBulkResponse,extra_headers, timeout_seconds) - - - def get_decision_bulk( - self, req: authorization.v2.authorization_pb2.GetDecisionBulkRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> authorization.v2.authorization_pb2.GetDecisionBulkResponse: - response = self.call_get_decision_bulk(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_get_entitlements( - self, req: authorization.v2.authorization_pb2.GetEntitlementsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[authorization.v2.authorization_pb2.GetEntitlementsResponse]: - """Low-level method to call GetEntitlements, granting access to errors and metadata""" - url = self.base_url + "/authorization.v2.AuthorizationService/GetEntitlements" - return self._connect_client.call_unary(url, req, authorization.v2.authorization_pb2.GetEntitlementsResponse,extra_headers, timeout_seconds) - - - def get_entitlements( - self, req: authorization.v2.authorization_pb2.GetEntitlementsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> authorization.v2.authorization_pb2.GetEntitlementsResponse: - response = self.call_get_entitlements(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - -class AsyncAuthorizationServiceClient: - def __init__( - self, - base_url: str, - http_client: aiohttp.ClientSession, - protocol: ConnectProtocol = ConnectProtocol.CONNECT_PROTOBUF, - ): - self.base_url = base_url - self._connect_client = AsyncConnectClient(http_client, protocol) - - async def call_get_decision( - self, req: authorization.v2.authorization_pb2.GetDecisionRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[authorization.v2.authorization_pb2.GetDecisionResponse]: - """Low-level method to call GetDecision, granting access to errors and metadata""" - url = self.base_url + "/authorization.v2.AuthorizationService/GetDecision" - return await self._connect_client.call_unary(url, req, authorization.v2.authorization_pb2.GetDecisionResponse,extra_headers, timeout_seconds) - - async def get_decision( - self, req: authorization.v2.authorization_pb2.GetDecisionRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> authorization.v2.authorization_pb2.GetDecisionResponse: - response = await self.call_get_decision(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_get_decision_multi_resource( - self, req: authorization.v2.authorization_pb2.GetDecisionMultiResourceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[authorization.v2.authorization_pb2.GetDecisionMultiResourceResponse]: - """Low-level method to call GetDecisionMultiResource, granting access to errors and metadata""" - url = self.base_url + "/authorization.v2.AuthorizationService/GetDecisionMultiResource" - return await self._connect_client.call_unary(url, req, authorization.v2.authorization_pb2.GetDecisionMultiResourceResponse,extra_headers, timeout_seconds) - - async def get_decision_multi_resource( - self, req: authorization.v2.authorization_pb2.GetDecisionMultiResourceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> authorization.v2.authorization_pb2.GetDecisionMultiResourceResponse: - response = await self.call_get_decision_multi_resource(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_get_decision_bulk( - self, req: authorization.v2.authorization_pb2.GetDecisionBulkRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[authorization.v2.authorization_pb2.GetDecisionBulkResponse]: - """Low-level method to call GetDecisionBulk, granting access to errors and metadata""" - url = self.base_url + "/authorization.v2.AuthorizationService/GetDecisionBulk" - return await self._connect_client.call_unary(url, req, authorization.v2.authorization_pb2.GetDecisionBulkResponse,extra_headers, timeout_seconds) - - async def get_decision_bulk( - self, req: authorization.v2.authorization_pb2.GetDecisionBulkRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> authorization.v2.authorization_pb2.GetDecisionBulkResponse: - response = await self.call_get_decision_bulk(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_get_entitlements( - self, req: authorization.v2.authorization_pb2.GetEntitlementsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[authorization.v2.authorization_pb2.GetEntitlementsResponse]: - """Low-level method to call GetEntitlements, granting access to errors and metadata""" - url = self.base_url + "/authorization.v2.AuthorizationService/GetEntitlements" - return await self._connect_client.call_unary(url, req, authorization.v2.authorization_pb2.GetEntitlementsResponse,extra_headers, timeout_seconds) - - async def get_entitlements( - self, req: authorization.v2.authorization_pb2.GetEntitlementsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> authorization.v2.authorization_pb2.GetEntitlementsResponse: - response = await self.call_get_entitlements(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - -@typing.runtime_checkable -class AuthorizationServiceProtocol(typing.Protocol): - def get_decision(self, req: ClientRequest[authorization.v2.authorization_pb2.GetDecisionRequest]) -> ServerResponse[authorization.v2.authorization_pb2.GetDecisionResponse]: - ... - def get_decision_multi_resource(self, req: ClientRequest[authorization.v2.authorization_pb2.GetDecisionMultiResourceRequest]) -> ServerResponse[authorization.v2.authorization_pb2.GetDecisionMultiResourceResponse]: - ... - def get_decision_bulk(self, req: ClientRequest[authorization.v2.authorization_pb2.GetDecisionBulkRequest]) -> ServerResponse[authorization.v2.authorization_pb2.GetDecisionBulkResponse]: - ... - def get_entitlements(self, req: ClientRequest[authorization.v2.authorization_pb2.GetEntitlementsRequest]) -> ServerResponse[authorization.v2.authorization_pb2.GetEntitlementsResponse]: - ... - -AUTHORIZATION_SERVICE_PATH_PREFIX = "/authorization.v2.AuthorizationService" - -def wsgi_authorization_service(implementation: AuthorizationServiceProtocol) -> WSGIApplication: - app = ConnectWSGI() - app.register_unary_rpc("/authorization.v2.AuthorizationService/GetDecision", implementation.get_decision, authorization.v2.authorization_pb2.GetDecisionRequest) - app.register_unary_rpc("/authorization.v2.AuthorizationService/GetDecisionMultiResource", implementation.get_decision_multi_resource, authorization.v2.authorization_pb2.GetDecisionMultiResourceRequest) - app.register_unary_rpc("/authorization.v2.AuthorizationService/GetDecisionBulk", implementation.get_decision_bulk, authorization.v2.authorization_pb2.GetDecisionBulkRequest) - app.register_unary_rpc("/authorization.v2.AuthorizationService/GetEntitlements", implementation.get_entitlements, authorization.v2.authorization_pb2.GetEntitlementsRequest) - return app diff --git a/otdf-python-proto/src/otdf_python_proto/entityresolution/__init__.py b/otdf-python-proto/src/otdf_python_proto/entityresolution/__init__.py index 146c5b7..9caf395 100644 --- a/otdf-python-proto/src/otdf_python_proto/entityresolution/__init__.py +++ b/otdf-python-proto/src/otdf_python_proto/entityresolution/__init__.py @@ -1 +1,11 @@ """entityresolution protobuf definitions.""" + +from .entity_resolution_connect import ( + EntityResolutionClient, + EntityResolutionClientSync, +) + +__all__ = [ + "EntityResolutionClient", + "EntityResolutionClientSync", +] diff --git a/otdf-python-proto/src/otdf_python_proto/entityresolution/entity_resolution_connect.py b/otdf-python-proto/src/otdf_python_proto/entityresolution/entity_resolution_connect.py new file mode 100644 index 0000000..2d09bae --- /dev/null +++ b/otdf-python-proto/src/otdf_python_proto/entityresolution/entity_resolution_connect.py @@ -0,0 +1,185 @@ +# -*- coding: utf-8 -*- +# Generated by https://github.com/connectrpc/connect-python. DO NOT EDIT! +# source: entityresolution/entity_resolution.proto + +from collections.abc import AsyncGenerator, AsyncIterator, Iterable, Iterator, Mapping +from typing import Protocol + +from connectrpc.client import ConnectClient, ConnectClientSync +from connectrpc.code import Code +from connectrpc.errors import ConnectError +from connectrpc.interceptor import Interceptor, InterceptorSync +from connectrpc.method import IdempotencyLevel, MethodInfo +from connectrpc.request import Headers, RequestContext +from connectrpc.server import ConnectASGIApplication, ConnectWSGIApplication, Endpoint, EndpointSync +from . import entity_resolution_pb2 as entityresolution_dot_entity__resolution__pb2 + + +class EntityResolutionService(Protocol): + async def resolve_entities(self, request: entityresolution_dot_entity__resolution__pb2.ResolveEntitiesRequest, ctx: RequestContext) -> entityresolution_dot_entity__resolution__pb2.ResolveEntitiesResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def create_entity_chain_from_jwt(self, request: entityresolution_dot_entity__resolution__pb2.CreateEntityChainFromJwtRequest, ctx: RequestContext) -> entityresolution_dot_entity__resolution__pb2.CreateEntityChainFromJwtResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + +class EntityResolutionServiceASGIApplication(ConnectASGIApplication[EntityResolutionService]): + def __init__(self, service: EntityResolutionService | AsyncGenerator[EntityResolutionService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None) -> None: + super().__init__( + service=service, + endpoints=lambda svc: { + "/entityresolution.EntityResolutionService/ResolveEntities": Endpoint.unary( + method=MethodInfo( + name="ResolveEntities", + service_name="entityresolution.EntityResolutionService", + input=entityresolution_dot_entity__resolution__pb2.ResolveEntitiesRequest, + output=entityresolution_dot_entity__resolution__pb2.ResolveEntitiesResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.resolve_entities, + ), + "/entityresolution.EntityResolutionService/CreateEntityChainFromJwt": Endpoint.unary( + method=MethodInfo( + name="CreateEntityChainFromJwt", + service_name="entityresolution.EntityResolutionService", + input=entityresolution_dot_entity__resolution__pb2.CreateEntityChainFromJwtRequest, + output=entityresolution_dot_entity__resolution__pb2.CreateEntityChainFromJwtResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.create_entity_chain_from_jwt, + ), + }, + interceptors=interceptors, + read_max_bytes=read_max_bytes, + ) + + @property + def path(self) -> str: + """Returns the URL path to mount the application to when serving multiple applications.""" + return "/entityresolution.EntityResolutionService" + + +class EntityResolutionServiceClient(ConnectClient): + async def resolve_entities( + self, + request: entityresolution_dot_entity__resolution__pb2.ResolveEntitiesRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> entityresolution_dot_entity__resolution__pb2.ResolveEntitiesResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="ResolveEntities", + service_name="entityresolution.EntityResolutionService", + input=entityresolution_dot_entity__resolution__pb2.ResolveEntitiesRequest, + output=entityresolution_dot_entity__resolution__pb2.ResolveEntitiesResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def create_entity_chain_from_jwt( + self, + request: entityresolution_dot_entity__resolution__pb2.CreateEntityChainFromJwtRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> entityresolution_dot_entity__resolution__pb2.CreateEntityChainFromJwtResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="CreateEntityChainFromJwt", + service_name="entityresolution.EntityResolutionService", + input=entityresolution_dot_entity__resolution__pb2.CreateEntityChainFromJwtRequest, + output=entityresolution_dot_entity__resolution__pb2.CreateEntityChainFromJwtResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + +class EntityResolutionServiceSync(Protocol): + def resolve_entities(self, request: entityresolution_dot_entity__resolution__pb2.ResolveEntitiesRequest, ctx: RequestContext) -> entityresolution_dot_entity__resolution__pb2.ResolveEntitiesResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def create_entity_chain_from_jwt(self, request: entityresolution_dot_entity__resolution__pb2.CreateEntityChainFromJwtRequest, ctx: RequestContext) -> entityresolution_dot_entity__resolution__pb2.CreateEntityChainFromJwtResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + +class EntityResolutionServiceWSGIApplication(ConnectWSGIApplication): + def __init__(self, service: EntityResolutionServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None) -> None: + super().__init__( + endpoints={ + "/entityresolution.EntityResolutionService/ResolveEntities": EndpointSync.unary( + method=MethodInfo( + name="ResolveEntities", + service_name="entityresolution.EntityResolutionService", + input=entityresolution_dot_entity__resolution__pb2.ResolveEntitiesRequest, + output=entityresolution_dot_entity__resolution__pb2.ResolveEntitiesResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.resolve_entities, + ), + "/entityresolution.EntityResolutionService/CreateEntityChainFromJwt": EndpointSync.unary( + method=MethodInfo( + name="CreateEntityChainFromJwt", + service_name="entityresolution.EntityResolutionService", + input=entityresolution_dot_entity__resolution__pb2.CreateEntityChainFromJwtRequest, + output=entityresolution_dot_entity__resolution__pb2.CreateEntityChainFromJwtResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.create_entity_chain_from_jwt, + ), + }, + interceptors=interceptors, + read_max_bytes=read_max_bytes, + ) + + @property + def path(self) -> str: + """Returns the URL path to mount the application to when serving multiple applications.""" + return "/entityresolution.EntityResolutionService" + + +class EntityResolutionServiceClientSync(ConnectClientSync): + def resolve_entities( + self, + request: entityresolution_dot_entity__resolution__pb2.ResolveEntitiesRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> entityresolution_dot_entity__resolution__pb2.ResolveEntitiesResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="ResolveEntities", + service_name="entityresolution.EntityResolutionService", + input=entityresolution_dot_entity__resolution__pb2.ResolveEntitiesRequest, + output=entityresolution_dot_entity__resolution__pb2.ResolveEntitiesResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def create_entity_chain_from_jwt( + self, + request: entityresolution_dot_entity__resolution__pb2.CreateEntityChainFromJwtRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> entityresolution_dot_entity__resolution__pb2.CreateEntityChainFromJwtResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="CreateEntityChainFromJwt", + service_name="entityresolution.EntityResolutionService", + input=entityresolution_dot_entity__resolution__pb2.CreateEntityChainFromJwtRequest, + output=entityresolution_dot_entity__resolution__pb2.CreateEntityChainFromJwtResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) diff --git a/otdf-python-proto/src/otdf_python_proto/entityresolution/entity_resolution_pb2_connect.py b/otdf-python-proto/src/otdf_python_proto/entityresolution/entity_resolution_pb2_connect.py deleted file mode 100644 index a28cb79..0000000 --- a/otdf-python-proto/src/otdf_python_proto/entityresolution/entity_resolution_pb2_connect.py +++ /dev/null @@ -1,149 +0,0 @@ -# Generated Connect client code - -from __future__ import annotations -from collections.abc import AsyncIterator -from collections.abc import Iterator -from collections.abc import Iterable -import aiohttp -import urllib3 -import typing -import sys - -from connectrpc.client_async import AsyncConnectClient -from connectrpc.client_sync import ConnectClient -from connectrpc.client_protocol import ConnectProtocol -from connectrpc.client_connect import ConnectProtocolError -from connectrpc.headers import HeaderInput -from connectrpc.server import ClientRequest -from connectrpc.server import ClientStream -from connectrpc.server import ServerResponse -from connectrpc.server import ServerStream -from connectrpc.server_sync import ConnectWSGI -from connectrpc.streams import StreamInput -from connectrpc.streams import AsyncStreamOutput -from connectrpc.streams import StreamOutput -from connectrpc.unary import UnaryOutput -from connectrpc.unary import ClientStreamingOutput - -if typing.TYPE_CHECKING: - # wsgiref.types was added in Python 3.11. - if sys.version_info >= (3, 11): - from wsgiref.types import WSGIApplication - else: - from _typeshed.wsgi import WSGIApplication - -import entityresolution.entity_resolution_pb2 - -class EntityResolutionServiceClient: - def __init__( - self, - base_url: str, - http_client: urllib3.PoolManager | None = None, - protocol: ConnectProtocol = ConnectProtocol.CONNECT_PROTOBUF, - ): - self.base_url = base_url - self._connect_client = ConnectClient(http_client, protocol) - def call_resolve_entities( - self, req: entityresolution.entity_resolution_pb2.ResolveEntitiesRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[entityresolution.entity_resolution_pb2.ResolveEntitiesResponse]: - """Low-level method to call ResolveEntities, granting access to errors and metadata""" - url = self.base_url + "/entityresolution.EntityResolutionService/ResolveEntities" - return self._connect_client.call_unary(url, req, entityresolution.entity_resolution_pb2.ResolveEntitiesResponse,extra_headers, timeout_seconds) - - - def resolve_entities( - self, req: entityresolution.entity_resolution_pb2.ResolveEntitiesRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> entityresolution.entity_resolution_pb2.ResolveEntitiesResponse: - response = self.call_resolve_entities(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_create_entity_chain_from_jwt( - self, req: entityresolution.entity_resolution_pb2.CreateEntityChainFromJwtRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[entityresolution.entity_resolution_pb2.CreateEntityChainFromJwtResponse]: - """Low-level method to call CreateEntityChainFromJwt, granting access to errors and metadata""" - url = self.base_url + "/entityresolution.EntityResolutionService/CreateEntityChainFromJwt" - return self._connect_client.call_unary(url, req, entityresolution.entity_resolution_pb2.CreateEntityChainFromJwtResponse,extra_headers, timeout_seconds) - - - def create_entity_chain_from_jwt( - self, req: entityresolution.entity_resolution_pb2.CreateEntityChainFromJwtRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> entityresolution.entity_resolution_pb2.CreateEntityChainFromJwtResponse: - response = self.call_create_entity_chain_from_jwt(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - -class AsyncEntityResolutionServiceClient: - def __init__( - self, - base_url: str, - http_client: aiohttp.ClientSession, - protocol: ConnectProtocol = ConnectProtocol.CONNECT_PROTOBUF, - ): - self.base_url = base_url - self._connect_client = AsyncConnectClient(http_client, protocol) - - async def call_resolve_entities( - self, req: entityresolution.entity_resolution_pb2.ResolveEntitiesRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[entityresolution.entity_resolution_pb2.ResolveEntitiesResponse]: - """Low-level method to call ResolveEntities, granting access to errors and metadata""" - url = self.base_url + "/entityresolution.EntityResolutionService/ResolveEntities" - return await self._connect_client.call_unary(url, req, entityresolution.entity_resolution_pb2.ResolveEntitiesResponse,extra_headers, timeout_seconds) - - async def resolve_entities( - self, req: entityresolution.entity_resolution_pb2.ResolveEntitiesRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> entityresolution.entity_resolution_pb2.ResolveEntitiesResponse: - response = await self.call_resolve_entities(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_create_entity_chain_from_jwt( - self, req: entityresolution.entity_resolution_pb2.CreateEntityChainFromJwtRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[entityresolution.entity_resolution_pb2.CreateEntityChainFromJwtResponse]: - """Low-level method to call CreateEntityChainFromJwt, granting access to errors and metadata""" - url = self.base_url + "/entityresolution.EntityResolutionService/CreateEntityChainFromJwt" - return await self._connect_client.call_unary(url, req, entityresolution.entity_resolution_pb2.CreateEntityChainFromJwtResponse,extra_headers, timeout_seconds) - - async def create_entity_chain_from_jwt( - self, req: entityresolution.entity_resolution_pb2.CreateEntityChainFromJwtRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> entityresolution.entity_resolution_pb2.CreateEntityChainFromJwtResponse: - response = await self.call_create_entity_chain_from_jwt(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - -@typing.runtime_checkable -class EntityResolutionServiceProtocol(typing.Protocol): - def resolve_entities(self, req: ClientRequest[entityresolution.entity_resolution_pb2.ResolveEntitiesRequest]) -> ServerResponse[entityresolution.entity_resolution_pb2.ResolveEntitiesResponse]: - ... - def create_entity_chain_from_jwt(self, req: ClientRequest[entityresolution.entity_resolution_pb2.CreateEntityChainFromJwtRequest]) -> ServerResponse[entityresolution.entity_resolution_pb2.CreateEntityChainFromJwtResponse]: - ... - -ENTITY_RESOLUTION_SERVICE_PATH_PREFIX = "/entityresolution.EntityResolutionService" - -def wsgi_entity_resolution_service(implementation: EntityResolutionServiceProtocol) -> WSGIApplication: - app = ConnectWSGI() - app.register_unary_rpc("/entityresolution.EntityResolutionService/ResolveEntities", implementation.resolve_entities, entityresolution.entity_resolution_pb2.ResolveEntitiesRequest) - app.register_unary_rpc("/entityresolution.EntityResolutionService/CreateEntityChainFromJwt", implementation.create_entity_chain_from_jwt, entityresolution.entity_resolution_pb2.CreateEntityChainFromJwtRequest) - return app diff --git a/otdf-python-proto/src/otdf_python_proto/entityresolution/v2/entity_resolution_connect.py b/otdf-python-proto/src/otdf_python_proto/entityresolution/v2/entity_resolution_connect.py new file mode 100644 index 0000000..1ba558a --- /dev/null +++ b/otdf-python-proto/src/otdf_python_proto/entityresolution/v2/entity_resolution_connect.py @@ -0,0 +1,185 @@ +# -*- coding: utf-8 -*- +# Generated by https://github.com/connectrpc/connect-python. DO NOT EDIT! +# source: entityresolution/v2/entity_resolution.proto + +from collections.abc import AsyncGenerator, AsyncIterator, Iterable, Iterator, Mapping +from typing import Protocol + +from connectrpc.client import ConnectClient, ConnectClientSync +from connectrpc.code import Code +from connectrpc.errors import ConnectError +from connectrpc.interceptor import Interceptor, InterceptorSync +from connectrpc.method import IdempotencyLevel, MethodInfo +from connectrpc.request import Headers, RequestContext +from connectrpc.server import ConnectASGIApplication, ConnectWSGIApplication, Endpoint, EndpointSync +import entityresolution.v2.entity_resolution_pb2 as entityresolution_dot_v2_dot_entity__resolution__pb2 + + +class EntityResolutionService(Protocol): + async def resolve_entities(self, request: entityresolution_dot_v2_dot_entity__resolution__pb2.ResolveEntitiesRequest, ctx: RequestContext) -> entityresolution_dot_v2_dot_entity__resolution__pb2.ResolveEntitiesResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def create_entity_chains_from_tokens(self, request: entityresolution_dot_v2_dot_entity__resolution__pb2.CreateEntityChainsFromTokensRequest, ctx: RequestContext) -> entityresolution_dot_v2_dot_entity__resolution__pb2.CreateEntityChainsFromTokensResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + +class EntityResolutionServiceASGIApplication(ConnectASGIApplication[EntityResolutionService]): + def __init__(self, service: EntityResolutionService | AsyncGenerator[EntityResolutionService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None) -> None: + super().__init__( + service=service, + endpoints=lambda svc: { + "/entityresolution.v2.EntityResolutionService/ResolveEntities": Endpoint.unary( + method=MethodInfo( + name="ResolveEntities", + service_name="entityresolution.v2.EntityResolutionService", + input=entityresolution_dot_v2_dot_entity__resolution__pb2.ResolveEntitiesRequest, + output=entityresolution_dot_v2_dot_entity__resolution__pb2.ResolveEntitiesResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.resolve_entities, + ), + "/entityresolution.v2.EntityResolutionService/CreateEntityChainsFromTokens": Endpoint.unary( + method=MethodInfo( + name="CreateEntityChainsFromTokens", + service_name="entityresolution.v2.EntityResolutionService", + input=entityresolution_dot_v2_dot_entity__resolution__pb2.CreateEntityChainsFromTokensRequest, + output=entityresolution_dot_v2_dot_entity__resolution__pb2.CreateEntityChainsFromTokensResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.create_entity_chains_from_tokens, + ), + }, + interceptors=interceptors, + read_max_bytes=read_max_bytes, + ) + + @property + def path(self) -> str: + """Returns the URL path to mount the application to when serving multiple applications.""" + return "/entityresolution.v2.EntityResolutionService" + + +class EntityResolutionServiceClient(ConnectClient): + async def resolve_entities( + self, + request: entityresolution_dot_v2_dot_entity__resolution__pb2.ResolveEntitiesRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> entityresolution_dot_v2_dot_entity__resolution__pb2.ResolveEntitiesResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="ResolveEntities", + service_name="entityresolution.v2.EntityResolutionService", + input=entityresolution_dot_v2_dot_entity__resolution__pb2.ResolveEntitiesRequest, + output=entityresolution_dot_v2_dot_entity__resolution__pb2.ResolveEntitiesResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def create_entity_chains_from_tokens( + self, + request: entityresolution_dot_v2_dot_entity__resolution__pb2.CreateEntityChainsFromTokensRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> entityresolution_dot_v2_dot_entity__resolution__pb2.CreateEntityChainsFromTokensResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="CreateEntityChainsFromTokens", + service_name="entityresolution.v2.EntityResolutionService", + input=entityresolution_dot_v2_dot_entity__resolution__pb2.CreateEntityChainsFromTokensRequest, + output=entityresolution_dot_v2_dot_entity__resolution__pb2.CreateEntityChainsFromTokensResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + +class EntityResolutionServiceSync(Protocol): + def resolve_entities(self, request: entityresolution_dot_v2_dot_entity__resolution__pb2.ResolveEntitiesRequest, ctx: RequestContext) -> entityresolution_dot_v2_dot_entity__resolution__pb2.ResolveEntitiesResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def create_entity_chains_from_tokens(self, request: entityresolution_dot_v2_dot_entity__resolution__pb2.CreateEntityChainsFromTokensRequest, ctx: RequestContext) -> entityresolution_dot_v2_dot_entity__resolution__pb2.CreateEntityChainsFromTokensResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + +class EntityResolutionServiceWSGIApplication(ConnectWSGIApplication): + def __init__(self, service: EntityResolutionServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None) -> None: + super().__init__( + endpoints={ + "/entityresolution.v2.EntityResolutionService/ResolveEntities": EndpointSync.unary( + method=MethodInfo( + name="ResolveEntities", + service_name="entityresolution.v2.EntityResolutionService", + input=entityresolution_dot_v2_dot_entity__resolution__pb2.ResolveEntitiesRequest, + output=entityresolution_dot_v2_dot_entity__resolution__pb2.ResolveEntitiesResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.resolve_entities, + ), + "/entityresolution.v2.EntityResolutionService/CreateEntityChainsFromTokens": EndpointSync.unary( + method=MethodInfo( + name="CreateEntityChainsFromTokens", + service_name="entityresolution.v2.EntityResolutionService", + input=entityresolution_dot_v2_dot_entity__resolution__pb2.CreateEntityChainsFromTokensRequest, + output=entityresolution_dot_v2_dot_entity__resolution__pb2.CreateEntityChainsFromTokensResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.create_entity_chains_from_tokens, + ), + }, + interceptors=interceptors, + read_max_bytes=read_max_bytes, + ) + + @property + def path(self) -> str: + """Returns the URL path to mount the application to when serving multiple applications.""" + return "/entityresolution.v2.EntityResolutionService" + + +class EntityResolutionServiceClientSync(ConnectClientSync): + def resolve_entities( + self, + request: entityresolution_dot_v2_dot_entity__resolution__pb2.ResolveEntitiesRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> entityresolution_dot_v2_dot_entity__resolution__pb2.ResolveEntitiesResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="ResolveEntities", + service_name="entityresolution.v2.EntityResolutionService", + input=entityresolution_dot_v2_dot_entity__resolution__pb2.ResolveEntitiesRequest, + output=entityresolution_dot_v2_dot_entity__resolution__pb2.ResolveEntitiesResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def create_entity_chains_from_tokens( + self, + request: entityresolution_dot_v2_dot_entity__resolution__pb2.CreateEntityChainsFromTokensRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> entityresolution_dot_v2_dot_entity__resolution__pb2.CreateEntityChainsFromTokensResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="CreateEntityChainsFromTokens", + service_name="entityresolution.v2.EntityResolutionService", + input=entityresolution_dot_v2_dot_entity__resolution__pb2.CreateEntityChainsFromTokensRequest, + output=entityresolution_dot_v2_dot_entity__resolution__pb2.CreateEntityChainsFromTokensResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) diff --git a/otdf-python-proto/src/otdf_python_proto/entityresolution/v2/entity_resolution_pb2_connect.py b/otdf-python-proto/src/otdf_python_proto/entityresolution/v2/entity_resolution_pb2_connect.py deleted file mode 100644 index 2fa1944..0000000 --- a/otdf-python-proto/src/otdf_python_proto/entityresolution/v2/entity_resolution_pb2_connect.py +++ /dev/null @@ -1,149 +0,0 @@ -# Generated Connect client code - -from __future__ import annotations -from collections.abc import AsyncIterator -from collections.abc import Iterator -from collections.abc import Iterable -import aiohttp -import urllib3 -import typing -import sys - -from connectrpc.client_async import AsyncConnectClient -from connectrpc.client_sync import ConnectClient -from connectrpc.client_protocol import ConnectProtocol -from connectrpc.client_connect import ConnectProtocolError -from connectrpc.headers import HeaderInput -from connectrpc.server import ClientRequest -from connectrpc.server import ClientStream -from connectrpc.server import ServerResponse -from connectrpc.server import ServerStream -from connectrpc.server_sync import ConnectWSGI -from connectrpc.streams import StreamInput -from connectrpc.streams import AsyncStreamOutput -from connectrpc.streams import StreamOutput -from connectrpc.unary import UnaryOutput -from connectrpc.unary import ClientStreamingOutput - -if typing.TYPE_CHECKING: - # wsgiref.types was added in Python 3.11. - if sys.version_info >= (3, 11): - from wsgiref.types import WSGIApplication - else: - from _typeshed.wsgi import WSGIApplication - -import entityresolution.v2.entity_resolution_pb2 - -class EntityResolutionServiceClient: - def __init__( - self, - base_url: str, - http_client: urllib3.PoolManager | None = None, - protocol: ConnectProtocol = ConnectProtocol.CONNECT_PROTOBUF, - ): - self.base_url = base_url - self._connect_client = ConnectClient(http_client, protocol) - def call_resolve_entities( - self, req: entityresolution.v2.entity_resolution_pb2.ResolveEntitiesRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[entityresolution.v2.entity_resolution_pb2.ResolveEntitiesResponse]: - """Low-level method to call ResolveEntities, granting access to errors and metadata""" - url = self.base_url + "/entityresolution.v2.EntityResolutionService/ResolveEntities" - return self._connect_client.call_unary(url, req, entityresolution.v2.entity_resolution_pb2.ResolveEntitiesResponse,extra_headers, timeout_seconds) - - - def resolve_entities( - self, req: entityresolution.v2.entity_resolution_pb2.ResolveEntitiesRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> entityresolution.v2.entity_resolution_pb2.ResolveEntitiesResponse: - response = self.call_resolve_entities(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_create_entity_chains_from_tokens( - self, req: entityresolution.v2.entity_resolution_pb2.CreateEntityChainsFromTokensRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[entityresolution.v2.entity_resolution_pb2.CreateEntityChainsFromTokensResponse]: - """Low-level method to call CreateEntityChainsFromTokens, granting access to errors and metadata""" - url = self.base_url + "/entityresolution.v2.EntityResolutionService/CreateEntityChainsFromTokens" - return self._connect_client.call_unary(url, req, entityresolution.v2.entity_resolution_pb2.CreateEntityChainsFromTokensResponse,extra_headers, timeout_seconds) - - - def create_entity_chains_from_tokens( - self, req: entityresolution.v2.entity_resolution_pb2.CreateEntityChainsFromTokensRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> entityresolution.v2.entity_resolution_pb2.CreateEntityChainsFromTokensResponse: - response = self.call_create_entity_chains_from_tokens(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - -class AsyncEntityResolutionServiceClient: - def __init__( - self, - base_url: str, - http_client: aiohttp.ClientSession, - protocol: ConnectProtocol = ConnectProtocol.CONNECT_PROTOBUF, - ): - self.base_url = base_url - self._connect_client = AsyncConnectClient(http_client, protocol) - - async def call_resolve_entities( - self, req: entityresolution.v2.entity_resolution_pb2.ResolveEntitiesRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[entityresolution.v2.entity_resolution_pb2.ResolveEntitiesResponse]: - """Low-level method to call ResolveEntities, granting access to errors and metadata""" - url = self.base_url + "/entityresolution.v2.EntityResolutionService/ResolveEntities" - return await self._connect_client.call_unary(url, req, entityresolution.v2.entity_resolution_pb2.ResolveEntitiesResponse,extra_headers, timeout_seconds) - - async def resolve_entities( - self, req: entityresolution.v2.entity_resolution_pb2.ResolveEntitiesRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> entityresolution.v2.entity_resolution_pb2.ResolveEntitiesResponse: - response = await self.call_resolve_entities(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_create_entity_chains_from_tokens( - self, req: entityresolution.v2.entity_resolution_pb2.CreateEntityChainsFromTokensRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[entityresolution.v2.entity_resolution_pb2.CreateEntityChainsFromTokensResponse]: - """Low-level method to call CreateEntityChainsFromTokens, granting access to errors and metadata""" - url = self.base_url + "/entityresolution.v2.EntityResolutionService/CreateEntityChainsFromTokens" - return await self._connect_client.call_unary(url, req, entityresolution.v2.entity_resolution_pb2.CreateEntityChainsFromTokensResponse,extra_headers, timeout_seconds) - - async def create_entity_chains_from_tokens( - self, req: entityresolution.v2.entity_resolution_pb2.CreateEntityChainsFromTokensRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> entityresolution.v2.entity_resolution_pb2.CreateEntityChainsFromTokensResponse: - response = await self.call_create_entity_chains_from_tokens(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - -@typing.runtime_checkable -class EntityResolutionServiceProtocol(typing.Protocol): - def resolve_entities(self, req: ClientRequest[entityresolution.v2.entity_resolution_pb2.ResolveEntitiesRequest]) -> ServerResponse[entityresolution.v2.entity_resolution_pb2.ResolveEntitiesResponse]: - ... - def create_entity_chains_from_tokens(self, req: ClientRequest[entityresolution.v2.entity_resolution_pb2.CreateEntityChainsFromTokensRequest]) -> ServerResponse[entityresolution.v2.entity_resolution_pb2.CreateEntityChainsFromTokensResponse]: - ... - -ENTITY_RESOLUTION_SERVICE_PATH_PREFIX = "/entityresolution.v2.EntityResolutionService" - -def wsgi_entity_resolution_service(implementation: EntityResolutionServiceProtocol) -> WSGIApplication: - app = ConnectWSGI() - app.register_unary_rpc("/entityresolution.v2.EntityResolutionService/ResolveEntities", implementation.resolve_entities, entityresolution.v2.entity_resolution_pb2.ResolveEntitiesRequest) - app.register_unary_rpc("/entityresolution.v2.EntityResolutionService/CreateEntityChainsFromTokens", implementation.create_entity_chains_from_tokens, entityresolution.v2.entity_resolution_pb2.CreateEntityChainsFromTokensRequest) - return app diff --git a/otdf-python-proto/src/otdf_python_proto/kas/__init__.py b/otdf-python-proto/src/otdf_python_proto/kas/__init__.py index b40d7eb..2878ff1 100644 --- a/otdf-python-proto/src/otdf_python_proto/kas/__init__.py +++ b/otdf-python-proto/src/otdf_python_proto/kas/__init__.py @@ -1,9 +1,9 @@ """KAS (Key Access Service) protobuf definitions.""" from .kas_pb2 import * -from .kas_pb2_connect import AccessServiceClient, AsyncAccessServiceClient +from .kas_connect import AccessServiceClient, AccessServiceClientSync __all__ = [ "AccessServiceClient", - "AsyncAccessServiceClient", + "AccessServiceClientSync", ] diff --git a/otdf-python-proto/src/otdf_python_proto/kas/kas_connect.py b/otdf-python-proto/src/otdf_python_proto/kas/kas_connect.py new file mode 100644 index 0000000..7a71a26 --- /dev/null +++ b/otdf-python-proto/src/otdf_python_proto/kas/kas_connect.py @@ -0,0 +1,259 @@ +# -*- coding: utf-8 -*- +# Generated by https://github.com/connectrpc/connect-python. DO NOT EDIT! +# source: kas/kas.proto + +from collections.abc import AsyncGenerator, AsyncIterator, Iterable, Iterator, Mapping +from typing import Protocol + +from connectrpc.client import ConnectClient, ConnectClientSync +from connectrpc.code import Code +from connectrpc.errors import ConnectError +from connectrpc.interceptor import Interceptor, InterceptorSync +from connectrpc.method import IdempotencyLevel, MethodInfo +from connectrpc.request import Headers, RequestContext +from connectrpc.server import ConnectASGIApplication, ConnectWSGIApplication, Endpoint, EndpointSync +import google.protobuf.wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb2 +from . import kas_pb2 as kas_dot_kas__pb2 + + +class AccessService(Protocol): + async def public_key(self, request: kas_dot_kas__pb2.PublicKeyRequest, ctx: RequestContext) -> kas_dot_kas__pb2.PublicKeyResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def legacy_public_key(self, request: kas_dot_kas__pb2.LegacyPublicKeyRequest, ctx: RequestContext) -> google_dot_protobuf_dot_wrappers__pb2.StringValue: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def rewrap(self, request: kas_dot_kas__pb2.RewrapRequest, ctx: RequestContext) -> kas_dot_kas__pb2.RewrapResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + +class AccessServiceASGIApplication(ConnectASGIApplication[AccessService]): + def __init__(self, service: AccessService | AsyncGenerator[AccessService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None) -> None: + super().__init__( + service=service, + endpoints=lambda svc: { + "/kas.AccessService/PublicKey": Endpoint.unary( + method=MethodInfo( + name="PublicKey", + service_name="kas.AccessService", + input=kas_dot_kas__pb2.PublicKeyRequest, + output=kas_dot_kas__pb2.PublicKeyResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + function=svc.public_key, + ), + "/kas.AccessService/LegacyPublicKey": Endpoint.unary( + method=MethodInfo( + name="LegacyPublicKey", + service_name="kas.AccessService", + input=kas_dot_kas__pb2.LegacyPublicKeyRequest, + output=google_dot_protobuf_dot_wrappers__pb2.StringValue, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + function=svc.legacy_public_key, + ), + "/kas.AccessService/Rewrap": Endpoint.unary( + method=MethodInfo( + name="Rewrap", + service_name="kas.AccessService", + input=kas_dot_kas__pb2.RewrapRequest, + output=kas_dot_kas__pb2.RewrapResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.rewrap, + ), + }, + interceptors=interceptors, + read_max_bytes=read_max_bytes, + ) + + @property + def path(self) -> str: + """Returns the URL path to mount the application to when serving multiple applications.""" + return "/kas.AccessService" + + +class AccessServiceClient(ConnectClient): + async def public_key( + self, + request: kas_dot_kas__pb2.PublicKeyRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + use_get: bool = False, + ) -> kas_dot_kas__pb2.PublicKeyResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="PublicKey", + service_name="kas.AccessService", + input=kas_dot_kas__pb2.PublicKeyRequest, + output=kas_dot_kas__pb2.PublicKeyResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + headers=headers, + timeout_ms=timeout_ms, + use_get=use_get, + ) + + async def legacy_public_key( + self, + request: kas_dot_kas__pb2.LegacyPublicKeyRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + use_get: bool = False, + ) -> google_dot_protobuf_dot_wrappers__pb2.StringValue: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="LegacyPublicKey", + service_name="kas.AccessService", + input=kas_dot_kas__pb2.LegacyPublicKeyRequest, + output=google_dot_protobuf_dot_wrappers__pb2.StringValue, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + headers=headers, + timeout_ms=timeout_ms, + use_get=use_get, + ) + + async def rewrap( + self, + request: kas_dot_kas__pb2.RewrapRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> kas_dot_kas__pb2.RewrapResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="Rewrap", + service_name="kas.AccessService", + input=kas_dot_kas__pb2.RewrapRequest, + output=kas_dot_kas__pb2.RewrapResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + +class AccessServiceSync(Protocol): + def public_key(self, request: kas_dot_kas__pb2.PublicKeyRequest, ctx: RequestContext) -> kas_dot_kas__pb2.PublicKeyResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def legacy_public_key(self, request: kas_dot_kas__pb2.LegacyPublicKeyRequest, ctx: RequestContext) -> google_dot_protobuf_dot_wrappers__pb2.StringValue: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def rewrap(self, request: kas_dot_kas__pb2.RewrapRequest, ctx: RequestContext) -> kas_dot_kas__pb2.RewrapResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + +class AccessServiceWSGIApplication(ConnectWSGIApplication): + def __init__(self, service: AccessServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None) -> None: + super().__init__( + endpoints={ + "/kas.AccessService/PublicKey": EndpointSync.unary( + method=MethodInfo( + name="PublicKey", + service_name="kas.AccessService", + input=kas_dot_kas__pb2.PublicKeyRequest, + output=kas_dot_kas__pb2.PublicKeyResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + function=service.public_key, + ), + "/kas.AccessService/LegacyPublicKey": EndpointSync.unary( + method=MethodInfo( + name="LegacyPublicKey", + service_name="kas.AccessService", + input=kas_dot_kas__pb2.LegacyPublicKeyRequest, + output=google_dot_protobuf_dot_wrappers__pb2.StringValue, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + function=service.legacy_public_key, + ), + "/kas.AccessService/Rewrap": EndpointSync.unary( + method=MethodInfo( + name="Rewrap", + service_name="kas.AccessService", + input=kas_dot_kas__pb2.RewrapRequest, + output=kas_dot_kas__pb2.RewrapResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.rewrap, + ), + }, + interceptors=interceptors, + read_max_bytes=read_max_bytes, + ) + + @property + def path(self) -> str: + """Returns the URL path to mount the application to when serving multiple applications.""" + return "/kas.AccessService" + + +class AccessServiceClientSync(ConnectClientSync): + def public_key( + self, + request: kas_dot_kas__pb2.PublicKeyRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + use_get: bool = False, + ) -> kas_dot_kas__pb2.PublicKeyResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="PublicKey", + service_name="kas.AccessService", + input=kas_dot_kas__pb2.PublicKeyRequest, + output=kas_dot_kas__pb2.PublicKeyResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + headers=headers, + timeout_ms=timeout_ms, + use_get=use_get, + ) + + def legacy_public_key( + self, + request: kas_dot_kas__pb2.LegacyPublicKeyRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + use_get: bool = False, + ) -> google_dot_protobuf_dot_wrappers__pb2.StringValue: + return self.execute_unary( + request=request, + method=MethodInfo( + name="LegacyPublicKey", + service_name="kas.AccessService", + input=kas_dot_kas__pb2.LegacyPublicKeyRequest, + output=google_dot_protobuf_dot_wrappers__pb2.StringValue, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + headers=headers, + timeout_ms=timeout_ms, + use_get=use_get, + ) + + def rewrap( + self, + request: kas_dot_kas__pb2.RewrapRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> kas_dot_kas__pb2.RewrapResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="Rewrap", + service_name="kas.AccessService", + input=kas_dot_kas__pb2.RewrapRequest, + output=kas_dot_kas__pb2.RewrapResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) diff --git a/otdf-python-proto/src/otdf_python_proto/kas/kas_pb2_connect.py b/otdf-python-proto/src/otdf_python_proto/kas/kas_pb2_connect.py deleted file mode 100644 index e7983b7..0000000 --- a/otdf-python-proto/src/otdf_python_proto/kas/kas_pb2_connect.py +++ /dev/null @@ -1,192 +0,0 @@ -# Generated Connect client code - -from __future__ import annotations -from collections.abc import AsyncIterator -from collections.abc import Iterator -from collections.abc import Iterable -import aiohttp -import urllib3 -import typing -import sys - -from connectrpc.client_async import AsyncConnectClient -from connectrpc.client_sync import ConnectClient -from connectrpc.client_protocol import ConnectProtocol -from connectrpc.client_connect import ConnectProtocolError -from connectrpc.headers import HeaderInput -from connectrpc.server import ClientRequest -from connectrpc.server import ClientStream -from connectrpc.server import ServerResponse -from connectrpc.server import ServerStream -from connectrpc.server_sync import ConnectWSGI -from connectrpc.streams import StreamInput -from connectrpc.streams import AsyncStreamOutput -from connectrpc.streams import StreamOutput -from connectrpc.unary import UnaryOutput -from connectrpc.unary import ClientStreamingOutput - -if typing.TYPE_CHECKING: - # wsgiref.types was added in Python 3.11. - if sys.version_info >= (3, 11): - from wsgiref.types import WSGIApplication - else: - from _typeshed.wsgi import WSGIApplication - -import google.protobuf.wrappers_pb2 -from . import kas_pb2 - -class AccessServiceClient: - def __init__( - self, - base_url: str, - http_client: urllib3.PoolManager | None = None, - protocol: ConnectProtocol = ConnectProtocol.CONNECT_PROTOBUF, - ): - self.base_url = base_url - self._connect_client = ConnectClient(http_client, protocol) - def call_public_key( - self, req: kas_pb2.PublicKeyRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[kas_pb2.PublicKeyResponse]: - """Low-level method to call PublicKey, granting access to errors and metadata""" - url = self.base_url + "/kas.AccessService/PublicKey" - return self._connect_client.call_unary(url, req, kas_pb2.PublicKeyResponse,extra_headers, timeout_seconds) - - - def public_key( - self, req: kas_pb2.PublicKeyRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> kas_pb2.PublicKeyResponse: - response = self.call_public_key(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_legacy_public_key( - self, req: kas_pb2.LegacyPublicKeyRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[google.protobuf.wrappers_pb2.StringValue]: - """Low-level method to call LegacyPublicKey, granting access to errors and metadata""" - url = self.base_url + "/kas.AccessService/LegacyPublicKey" - return self._connect_client.call_unary(url, req, google.protobuf.wrappers_pb2.StringValue,extra_headers, timeout_seconds) - - - def legacy_public_key( - self, req: kas_pb2.LegacyPublicKeyRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> google.protobuf.wrappers_pb2.StringValue: - response = self.call_legacy_public_key(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_rewrap( - self, req: kas_pb2.RewrapRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[kas_pb2.RewrapResponse]: - """Low-level method to call Rewrap, granting access to errors and metadata""" - url = self.base_url + "/kas.AccessService/Rewrap" - return self._connect_client.call_unary(url, req, kas_pb2.RewrapResponse,extra_headers, timeout_seconds) - - - def rewrap( - self, req: kas_pb2.RewrapRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> kas_pb2.RewrapResponse: - response = self.call_rewrap(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - -class AsyncAccessServiceClient: - def __init__( - self, - base_url: str, - http_client: aiohttp.ClientSession, - protocol: ConnectProtocol = ConnectProtocol.CONNECT_PROTOBUF, - ): - self.base_url = base_url - self._connect_client = AsyncConnectClient(http_client, protocol) - - async def call_public_key( - self, req: kas_pb2.PublicKeyRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[kas_pb2.PublicKeyResponse]: - """Low-level method to call PublicKey, granting access to errors and metadata""" - url = self.base_url + "/kas.AccessService/PublicKey" - return await self._connect_client.call_unary(url, req, kas_pb2.PublicKeyResponse,extra_headers, timeout_seconds) - - async def public_key( - self, req: kas_pb2.PublicKeyRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> kas_pb2.PublicKeyResponse: - response = await self.call_public_key(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_legacy_public_key( - self, req: kas_pb2.LegacyPublicKeyRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[google.protobuf.wrappers_pb2.StringValue]: - """Low-level method to call LegacyPublicKey, granting access to errors and metadata""" - url = self.base_url + "/kas.AccessService/LegacyPublicKey" - return await self._connect_client.call_unary(url, req, google.protobuf.wrappers_pb2.StringValue,extra_headers, timeout_seconds) - - async def legacy_public_key( - self, req: kas_pb2.LegacyPublicKeyRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> google.protobuf.wrappers_pb2.StringValue: - response = await self.call_legacy_public_key(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_rewrap( - self, req: kas_pb2.RewrapRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[kas_pb2.RewrapResponse]: - """Low-level method to call Rewrap, granting access to errors and metadata""" - url = self.base_url + "/kas.AccessService/Rewrap" - return await self._connect_client.call_unary(url, req, kas_pb2.RewrapResponse,extra_headers, timeout_seconds) - - async def rewrap( - self, req: kas_pb2.RewrapRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> kas_pb2.RewrapResponse: - response = await self.call_rewrap(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - -@typing.runtime_checkable -class AccessServiceProtocol(typing.Protocol): - def public_key(self, req: ClientRequest[kas_pb2.PublicKeyRequest]) -> ServerResponse[kas_pb2.PublicKeyResponse]: - ... - def legacy_public_key(self, req: ClientRequest[kas_pb2.LegacyPublicKeyRequest]) -> ServerResponse[google.protobuf.wrappers_pb2.StringValue]: - ... - def rewrap(self, req: ClientRequest[kas_pb2.RewrapRequest]) -> ServerResponse[kas_pb2.RewrapResponse]: - ... - -ACCESS_SERVICE_PATH_PREFIX = "/kas.AccessService" - -def wsgi_access_service(implementation: AccessServiceProtocol) -> WSGIApplication: - app = ConnectWSGI() - app.register_unary_rpc("/kas.AccessService/PublicKey", implementation.public_key, kas_pb2.PublicKeyRequest) - app.register_unary_rpc("/kas.AccessService/LegacyPublicKey", implementation.legacy_public_key, kas_pb2.LegacyPublicKeyRequest) - app.register_unary_rpc("/kas.AccessService/Rewrap", implementation.rewrap, kas_pb2.RewrapRequest) - return app diff --git a/otdf-python-proto/src/otdf_python_proto/policy/actions/__init__.py b/otdf-python-proto/src/otdf_python_proto/policy/actions/__init__.py new file mode 100644 index 0000000..ffb8332 --- /dev/null +++ b/otdf-python-proto/src/otdf_python_proto/policy/actions/__init__.py @@ -0,0 +1,11 @@ +"""policy.actions protobuf definitions.""" + +from .actions_connect import ( + ActionsServiceClient, + ActionsServiceClientSync, +) + +__all__ = [ + "ActionsServiceClient", + "ActionsServiceClientSync", +] diff --git a/otdf-python-proto/src/otdf_python_proto/policy/actions/actions_connect.py b/otdf-python-proto/src/otdf_python_proto/policy/actions/actions_connect.py new file mode 100644 index 0000000..7f5e336 --- /dev/null +++ b/otdf-python-proto/src/otdf_python_proto/policy/actions/actions_connect.py @@ -0,0 +1,380 @@ +# -*- coding: utf-8 -*- +# Generated by https://github.com/connectrpc/connect-python. DO NOT EDIT! +# source: policy/actions/actions.proto + +from collections.abc import AsyncGenerator, AsyncIterator, Iterable, Iterator, Mapping +from typing import Protocol + +from connectrpc.client import ConnectClient, ConnectClientSync +from connectrpc.code import Code +from connectrpc.errors import ConnectError +from connectrpc.interceptor import Interceptor, InterceptorSync +from connectrpc.method import IdempotencyLevel, MethodInfo +from connectrpc.request import Headers, RequestContext +from connectrpc.server import ConnectASGIApplication, ConnectWSGIApplication, Endpoint, EndpointSync +import policy.actions.actions_pb2 as policy_dot_actions_dot_actions__pb2 + + +class ActionService(Protocol): + async def get_action(self, request: policy_dot_actions_dot_actions__pb2.GetActionRequest, ctx: RequestContext) -> policy_dot_actions_dot_actions__pb2.GetActionResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def list_actions(self, request: policy_dot_actions_dot_actions__pb2.ListActionsRequest, ctx: RequestContext) -> policy_dot_actions_dot_actions__pb2.ListActionsResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def create_action(self, request: policy_dot_actions_dot_actions__pb2.CreateActionRequest, ctx: RequestContext) -> policy_dot_actions_dot_actions__pb2.CreateActionResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def update_action(self, request: policy_dot_actions_dot_actions__pb2.UpdateActionRequest, ctx: RequestContext) -> policy_dot_actions_dot_actions__pb2.UpdateActionResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def delete_action(self, request: policy_dot_actions_dot_actions__pb2.DeleteActionRequest, ctx: RequestContext) -> policy_dot_actions_dot_actions__pb2.DeleteActionResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + +class ActionServiceASGIApplication(ConnectASGIApplication[ActionService]): + def __init__(self, service: ActionService | AsyncGenerator[ActionService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None) -> None: + super().__init__( + service=service, + endpoints=lambda svc: { + "/policy.actions.ActionService/GetAction": Endpoint.unary( + method=MethodInfo( + name="GetAction", + service_name="policy.actions.ActionService", + input=policy_dot_actions_dot_actions__pb2.GetActionRequest, + output=policy_dot_actions_dot_actions__pb2.GetActionResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.get_action, + ), + "/policy.actions.ActionService/ListActions": Endpoint.unary( + method=MethodInfo( + name="ListActions", + service_name="policy.actions.ActionService", + input=policy_dot_actions_dot_actions__pb2.ListActionsRequest, + output=policy_dot_actions_dot_actions__pb2.ListActionsResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.list_actions, + ), + "/policy.actions.ActionService/CreateAction": Endpoint.unary( + method=MethodInfo( + name="CreateAction", + service_name="policy.actions.ActionService", + input=policy_dot_actions_dot_actions__pb2.CreateActionRequest, + output=policy_dot_actions_dot_actions__pb2.CreateActionResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.create_action, + ), + "/policy.actions.ActionService/UpdateAction": Endpoint.unary( + method=MethodInfo( + name="UpdateAction", + service_name="policy.actions.ActionService", + input=policy_dot_actions_dot_actions__pb2.UpdateActionRequest, + output=policy_dot_actions_dot_actions__pb2.UpdateActionResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.update_action, + ), + "/policy.actions.ActionService/DeleteAction": Endpoint.unary( + method=MethodInfo( + name="DeleteAction", + service_name="policy.actions.ActionService", + input=policy_dot_actions_dot_actions__pb2.DeleteActionRequest, + output=policy_dot_actions_dot_actions__pb2.DeleteActionResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.delete_action, + ), + }, + interceptors=interceptors, + read_max_bytes=read_max_bytes, + ) + + @property + def path(self) -> str: + """Returns the URL path to mount the application to when serving multiple applications.""" + return "/policy.actions.ActionService" + + +class ActionServiceClient(ConnectClient): + async def get_action( + self, + request: policy_dot_actions_dot_actions__pb2.GetActionRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_actions_dot_actions__pb2.GetActionResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="GetAction", + service_name="policy.actions.ActionService", + input=policy_dot_actions_dot_actions__pb2.GetActionRequest, + output=policy_dot_actions_dot_actions__pb2.GetActionResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def list_actions( + self, + request: policy_dot_actions_dot_actions__pb2.ListActionsRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_actions_dot_actions__pb2.ListActionsResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="ListActions", + service_name="policy.actions.ActionService", + input=policy_dot_actions_dot_actions__pb2.ListActionsRequest, + output=policy_dot_actions_dot_actions__pb2.ListActionsResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def create_action( + self, + request: policy_dot_actions_dot_actions__pb2.CreateActionRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_actions_dot_actions__pb2.CreateActionResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="CreateAction", + service_name="policy.actions.ActionService", + input=policy_dot_actions_dot_actions__pb2.CreateActionRequest, + output=policy_dot_actions_dot_actions__pb2.CreateActionResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def update_action( + self, + request: policy_dot_actions_dot_actions__pb2.UpdateActionRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_actions_dot_actions__pb2.UpdateActionResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="UpdateAction", + service_name="policy.actions.ActionService", + input=policy_dot_actions_dot_actions__pb2.UpdateActionRequest, + output=policy_dot_actions_dot_actions__pb2.UpdateActionResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def delete_action( + self, + request: policy_dot_actions_dot_actions__pb2.DeleteActionRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_actions_dot_actions__pb2.DeleteActionResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="DeleteAction", + service_name="policy.actions.ActionService", + input=policy_dot_actions_dot_actions__pb2.DeleteActionRequest, + output=policy_dot_actions_dot_actions__pb2.DeleteActionResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + +class ActionServiceSync(Protocol): + def get_action(self, request: policy_dot_actions_dot_actions__pb2.GetActionRequest, ctx: RequestContext) -> policy_dot_actions_dot_actions__pb2.GetActionResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def list_actions(self, request: policy_dot_actions_dot_actions__pb2.ListActionsRequest, ctx: RequestContext) -> policy_dot_actions_dot_actions__pb2.ListActionsResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def create_action(self, request: policy_dot_actions_dot_actions__pb2.CreateActionRequest, ctx: RequestContext) -> policy_dot_actions_dot_actions__pb2.CreateActionResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def update_action(self, request: policy_dot_actions_dot_actions__pb2.UpdateActionRequest, ctx: RequestContext) -> policy_dot_actions_dot_actions__pb2.UpdateActionResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def delete_action(self, request: policy_dot_actions_dot_actions__pb2.DeleteActionRequest, ctx: RequestContext) -> policy_dot_actions_dot_actions__pb2.DeleteActionResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + +class ActionServiceWSGIApplication(ConnectWSGIApplication): + def __init__(self, service: ActionServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None) -> None: + super().__init__( + endpoints={ + "/policy.actions.ActionService/GetAction": EndpointSync.unary( + method=MethodInfo( + name="GetAction", + service_name="policy.actions.ActionService", + input=policy_dot_actions_dot_actions__pb2.GetActionRequest, + output=policy_dot_actions_dot_actions__pb2.GetActionResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.get_action, + ), + "/policy.actions.ActionService/ListActions": EndpointSync.unary( + method=MethodInfo( + name="ListActions", + service_name="policy.actions.ActionService", + input=policy_dot_actions_dot_actions__pb2.ListActionsRequest, + output=policy_dot_actions_dot_actions__pb2.ListActionsResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.list_actions, + ), + "/policy.actions.ActionService/CreateAction": EndpointSync.unary( + method=MethodInfo( + name="CreateAction", + service_name="policy.actions.ActionService", + input=policy_dot_actions_dot_actions__pb2.CreateActionRequest, + output=policy_dot_actions_dot_actions__pb2.CreateActionResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.create_action, + ), + "/policy.actions.ActionService/UpdateAction": EndpointSync.unary( + method=MethodInfo( + name="UpdateAction", + service_name="policy.actions.ActionService", + input=policy_dot_actions_dot_actions__pb2.UpdateActionRequest, + output=policy_dot_actions_dot_actions__pb2.UpdateActionResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.update_action, + ), + "/policy.actions.ActionService/DeleteAction": EndpointSync.unary( + method=MethodInfo( + name="DeleteAction", + service_name="policy.actions.ActionService", + input=policy_dot_actions_dot_actions__pb2.DeleteActionRequest, + output=policy_dot_actions_dot_actions__pb2.DeleteActionResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.delete_action, + ), + }, + interceptors=interceptors, + read_max_bytes=read_max_bytes, + ) + + @property + def path(self) -> str: + """Returns the URL path to mount the application to when serving multiple applications.""" + return "/policy.actions.ActionService" + + +class ActionServiceClientSync(ConnectClientSync): + def get_action( + self, + request: policy_dot_actions_dot_actions__pb2.GetActionRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_actions_dot_actions__pb2.GetActionResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="GetAction", + service_name="policy.actions.ActionService", + input=policy_dot_actions_dot_actions__pb2.GetActionRequest, + output=policy_dot_actions_dot_actions__pb2.GetActionResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def list_actions( + self, + request: policy_dot_actions_dot_actions__pb2.ListActionsRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_actions_dot_actions__pb2.ListActionsResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="ListActions", + service_name="policy.actions.ActionService", + input=policy_dot_actions_dot_actions__pb2.ListActionsRequest, + output=policy_dot_actions_dot_actions__pb2.ListActionsResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def create_action( + self, + request: policy_dot_actions_dot_actions__pb2.CreateActionRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_actions_dot_actions__pb2.CreateActionResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="CreateAction", + service_name="policy.actions.ActionService", + input=policy_dot_actions_dot_actions__pb2.CreateActionRequest, + output=policy_dot_actions_dot_actions__pb2.CreateActionResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def update_action( + self, + request: policy_dot_actions_dot_actions__pb2.UpdateActionRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_actions_dot_actions__pb2.UpdateActionResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="UpdateAction", + service_name="policy.actions.ActionService", + input=policy_dot_actions_dot_actions__pb2.UpdateActionRequest, + output=policy_dot_actions_dot_actions__pb2.UpdateActionResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def delete_action( + self, + request: policy_dot_actions_dot_actions__pb2.DeleteActionRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_actions_dot_actions__pb2.DeleteActionResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="DeleteAction", + service_name="policy.actions.ActionService", + input=policy_dot_actions_dot_actions__pb2.DeleteActionRequest, + output=policy_dot_actions_dot_actions__pb2.DeleteActionResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) diff --git a/otdf-python-proto/src/otdf_python_proto/policy/actions/actions_pb2_connect.py b/otdf-python-proto/src/otdf_python_proto/policy/actions/actions_pb2_connect.py deleted file mode 100644 index f9e5cd8..0000000 --- a/otdf-python-proto/src/otdf_python_proto/policy/actions/actions_pb2_connect.py +++ /dev/null @@ -1,275 +0,0 @@ -# Generated Connect client code - -from __future__ import annotations -from collections.abc import AsyncIterator -from collections.abc import Iterator -from collections.abc import Iterable -import aiohttp -import urllib3 -import typing -import sys - -from connectrpc.client_async import AsyncConnectClient -from connectrpc.client_sync import ConnectClient -from connectrpc.client_protocol import ConnectProtocol -from connectrpc.client_connect import ConnectProtocolError -from connectrpc.headers import HeaderInput -from connectrpc.server import ClientRequest -from connectrpc.server import ClientStream -from connectrpc.server import ServerResponse -from connectrpc.server import ServerStream -from connectrpc.server_sync import ConnectWSGI -from connectrpc.streams import StreamInput -from connectrpc.streams import AsyncStreamOutput -from connectrpc.streams import StreamOutput -from connectrpc.unary import UnaryOutput -from connectrpc.unary import ClientStreamingOutput - -if typing.TYPE_CHECKING: - # wsgiref.types was added in Python 3.11. - if sys.version_info >= (3, 11): - from wsgiref.types import WSGIApplication - else: - from _typeshed.wsgi import WSGIApplication - -import policy.actions.actions_pb2 - -class ActionServiceClient: - def __init__( - self, - base_url: str, - http_client: urllib3.PoolManager | None = None, - protocol: ConnectProtocol = ConnectProtocol.CONNECT_PROTOBUF, - ): - self.base_url = base_url - self._connect_client = ConnectClient(http_client, protocol) - def call_get_action( - self, req: policy.actions.actions_pb2.GetActionRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.actions.actions_pb2.GetActionResponse]: - """Low-level method to call GetAction, granting access to errors and metadata""" - url = self.base_url + "/policy.actions.ActionService/GetAction" - return self._connect_client.call_unary(url, req, policy.actions.actions_pb2.GetActionResponse,extra_headers, timeout_seconds) - - - def get_action( - self, req: policy.actions.actions_pb2.GetActionRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.actions.actions_pb2.GetActionResponse: - response = self.call_get_action(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_list_actions( - self, req: policy.actions.actions_pb2.ListActionsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.actions.actions_pb2.ListActionsResponse]: - """Low-level method to call ListActions, granting access to errors and metadata""" - url = self.base_url + "/policy.actions.ActionService/ListActions" - return self._connect_client.call_unary(url, req, policy.actions.actions_pb2.ListActionsResponse,extra_headers, timeout_seconds) - - - def list_actions( - self, req: policy.actions.actions_pb2.ListActionsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.actions.actions_pb2.ListActionsResponse: - response = self.call_list_actions(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_create_action( - self, req: policy.actions.actions_pb2.CreateActionRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.actions.actions_pb2.CreateActionResponse]: - """Low-level method to call CreateAction, granting access to errors and metadata""" - url = self.base_url + "/policy.actions.ActionService/CreateAction" - return self._connect_client.call_unary(url, req, policy.actions.actions_pb2.CreateActionResponse,extra_headers, timeout_seconds) - - - def create_action( - self, req: policy.actions.actions_pb2.CreateActionRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.actions.actions_pb2.CreateActionResponse: - response = self.call_create_action(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_update_action( - self, req: policy.actions.actions_pb2.UpdateActionRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.actions.actions_pb2.UpdateActionResponse]: - """Low-level method to call UpdateAction, granting access to errors and metadata""" - url = self.base_url + "/policy.actions.ActionService/UpdateAction" - return self._connect_client.call_unary(url, req, policy.actions.actions_pb2.UpdateActionResponse,extra_headers, timeout_seconds) - - - def update_action( - self, req: policy.actions.actions_pb2.UpdateActionRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.actions.actions_pb2.UpdateActionResponse: - response = self.call_update_action(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_delete_action( - self, req: policy.actions.actions_pb2.DeleteActionRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.actions.actions_pb2.DeleteActionResponse]: - """Low-level method to call DeleteAction, granting access to errors and metadata""" - url = self.base_url + "/policy.actions.ActionService/DeleteAction" - return self._connect_client.call_unary(url, req, policy.actions.actions_pb2.DeleteActionResponse,extra_headers, timeout_seconds) - - - def delete_action( - self, req: policy.actions.actions_pb2.DeleteActionRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.actions.actions_pb2.DeleteActionResponse: - response = self.call_delete_action(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - -class AsyncActionServiceClient: - def __init__( - self, - base_url: str, - http_client: aiohttp.ClientSession, - protocol: ConnectProtocol = ConnectProtocol.CONNECT_PROTOBUF, - ): - self.base_url = base_url - self._connect_client = AsyncConnectClient(http_client, protocol) - - async def call_get_action( - self, req: policy.actions.actions_pb2.GetActionRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.actions.actions_pb2.GetActionResponse]: - """Low-level method to call GetAction, granting access to errors and metadata""" - url = self.base_url + "/policy.actions.ActionService/GetAction" - return await self._connect_client.call_unary(url, req, policy.actions.actions_pb2.GetActionResponse,extra_headers, timeout_seconds) - - async def get_action( - self, req: policy.actions.actions_pb2.GetActionRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.actions.actions_pb2.GetActionResponse: - response = await self.call_get_action(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_list_actions( - self, req: policy.actions.actions_pb2.ListActionsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.actions.actions_pb2.ListActionsResponse]: - """Low-level method to call ListActions, granting access to errors and metadata""" - url = self.base_url + "/policy.actions.ActionService/ListActions" - return await self._connect_client.call_unary(url, req, policy.actions.actions_pb2.ListActionsResponse,extra_headers, timeout_seconds) - - async def list_actions( - self, req: policy.actions.actions_pb2.ListActionsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.actions.actions_pb2.ListActionsResponse: - response = await self.call_list_actions(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_create_action( - self, req: policy.actions.actions_pb2.CreateActionRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.actions.actions_pb2.CreateActionResponse]: - """Low-level method to call CreateAction, granting access to errors and metadata""" - url = self.base_url + "/policy.actions.ActionService/CreateAction" - return await self._connect_client.call_unary(url, req, policy.actions.actions_pb2.CreateActionResponse,extra_headers, timeout_seconds) - - async def create_action( - self, req: policy.actions.actions_pb2.CreateActionRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.actions.actions_pb2.CreateActionResponse: - response = await self.call_create_action(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_update_action( - self, req: policy.actions.actions_pb2.UpdateActionRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.actions.actions_pb2.UpdateActionResponse]: - """Low-level method to call UpdateAction, granting access to errors and metadata""" - url = self.base_url + "/policy.actions.ActionService/UpdateAction" - return await self._connect_client.call_unary(url, req, policy.actions.actions_pb2.UpdateActionResponse,extra_headers, timeout_seconds) - - async def update_action( - self, req: policy.actions.actions_pb2.UpdateActionRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.actions.actions_pb2.UpdateActionResponse: - response = await self.call_update_action(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_delete_action( - self, req: policy.actions.actions_pb2.DeleteActionRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.actions.actions_pb2.DeleteActionResponse]: - """Low-level method to call DeleteAction, granting access to errors and metadata""" - url = self.base_url + "/policy.actions.ActionService/DeleteAction" - return await self._connect_client.call_unary(url, req, policy.actions.actions_pb2.DeleteActionResponse,extra_headers, timeout_seconds) - - async def delete_action( - self, req: policy.actions.actions_pb2.DeleteActionRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.actions.actions_pb2.DeleteActionResponse: - response = await self.call_delete_action(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - -@typing.runtime_checkable -class ActionServiceProtocol(typing.Protocol): - def get_action(self, req: ClientRequest[policy.actions.actions_pb2.GetActionRequest]) -> ServerResponse[policy.actions.actions_pb2.GetActionResponse]: - ... - def list_actions(self, req: ClientRequest[policy.actions.actions_pb2.ListActionsRequest]) -> ServerResponse[policy.actions.actions_pb2.ListActionsResponse]: - ... - def create_action(self, req: ClientRequest[policy.actions.actions_pb2.CreateActionRequest]) -> ServerResponse[policy.actions.actions_pb2.CreateActionResponse]: - ... - def update_action(self, req: ClientRequest[policy.actions.actions_pb2.UpdateActionRequest]) -> ServerResponse[policy.actions.actions_pb2.UpdateActionResponse]: - ... - def delete_action(self, req: ClientRequest[policy.actions.actions_pb2.DeleteActionRequest]) -> ServerResponse[policy.actions.actions_pb2.DeleteActionResponse]: - ... - -ACTION_SERVICE_PATH_PREFIX = "/policy.actions.ActionService" - -def wsgi_action_service(implementation: ActionServiceProtocol) -> WSGIApplication: - app = ConnectWSGI() - app.register_unary_rpc("/policy.actions.ActionService/GetAction", implementation.get_action, policy.actions.actions_pb2.GetActionRequest) - app.register_unary_rpc("/policy.actions.ActionService/ListActions", implementation.list_actions, policy.actions.actions_pb2.ListActionsRequest) - app.register_unary_rpc("/policy.actions.ActionService/CreateAction", implementation.create_action, policy.actions.actions_pb2.CreateActionRequest) - app.register_unary_rpc("/policy.actions.ActionService/UpdateAction", implementation.update_action, policy.actions.actions_pb2.UpdateActionRequest) - app.register_unary_rpc("/policy.actions.ActionService/DeleteAction", implementation.delete_action, policy.actions.actions_pb2.DeleteActionRequest) - return app diff --git a/otdf-python-proto/src/otdf_python_proto/policy/attributes/__init__.py b/otdf-python-proto/src/otdf_python_proto/policy/attributes/__init__.py new file mode 100644 index 0000000..a719681 --- /dev/null +++ b/otdf-python-proto/src/otdf_python_proto/policy/attributes/__init__.py @@ -0,0 +1,11 @@ +"""policy.attributes protobuf definitions.""" + +from .attributes_connect import ( + AttributesServiceClient, + AttributesServiceClientSync, +) + +__all__ = [ + "AttributesServiceClient", + "AttributesServiceClientSync", +] diff --git a/otdf-python-proto/src/otdf_python_proto/policy/attributes/attributes_connect.py b/otdf-python-proto/src/otdf_python_proto/policy/attributes/attributes_connect.py new file mode 100644 index 0000000..a96ca5b --- /dev/null +++ b/otdf-python-proto/src/otdf_python_proto/policy/attributes/attributes_connect.py @@ -0,0 +1,1310 @@ +# -*- coding: utf-8 -*- +# Generated by https://github.com/connectrpc/connect-python. DO NOT EDIT! +# source: policy/attributes/attributes.proto + +from collections.abc import AsyncGenerator, AsyncIterator, Iterable, Iterator, Mapping +from typing import Protocol + +from connectrpc.client import ConnectClient, ConnectClientSync +from connectrpc.code import Code +from connectrpc.errors import ConnectError +from connectrpc.interceptor import Interceptor, InterceptorSync +from connectrpc.method import IdempotencyLevel, MethodInfo +from connectrpc.request import Headers, RequestContext +from connectrpc.server import ConnectASGIApplication, ConnectWSGIApplication, Endpoint, EndpointSync +import policy.attributes.attributes_pb2 as policy_dot_attributes_dot_attributes__pb2 + + +class AttributesService(Protocol): + async def list_attributes(self, request: policy_dot_attributes_dot_attributes__pb2.ListAttributesRequest, ctx: RequestContext) -> policy_dot_attributes_dot_attributes__pb2.ListAttributesResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def list_attribute_values(self, request: policy_dot_attributes_dot_attributes__pb2.ListAttributeValuesRequest, ctx: RequestContext) -> policy_dot_attributes_dot_attributes__pb2.ListAttributeValuesResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def get_attribute(self, request: policy_dot_attributes_dot_attributes__pb2.GetAttributeRequest, ctx: RequestContext) -> policy_dot_attributes_dot_attributes__pb2.GetAttributeResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def get_attribute_values_by_fqns(self, request: policy_dot_attributes_dot_attributes__pb2.GetAttributeValuesByFqnsRequest, ctx: RequestContext) -> policy_dot_attributes_dot_attributes__pb2.GetAttributeValuesByFqnsResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def create_attribute(self, request: policy_dot_attributes_dot_attributes__pb2.CreateAttributeRequest, ctx: RequestContext) -> policy_dot_attributes_dot_attributes__pb2.CreateAttributeResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def update_attribute(self, request: policy_dot_attributes_dot_attributes__pb2.UpdateAttributeRequest, ctx: RequestContext) -> policy_dot_attributes_dot_attributes__pb2.UpdateAttributeResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def deactivate_attribute(self, request: policy_dot_attributes_dot_attributes__pb2.DeactivateAttributeRequest, ctx: RequestContext) -> policy_dot_attributes_dot_attributes__pb2.DeactivateAttributeResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def get_attribute_value(self, request: policy_dot_attributes_dot_attributes__pb2.GetAttributeValueRequest, ctx: RequestContext) -> policy_dot_attributes_dot_attributes__pb2.GetAttributeValueResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def create_attribute_value(self, request: policy_dot_attributes_dot_attributes__pb2.CreateAttributeValueRequest, ctx: RequestContext) -> policy_dot_attributes_dot_attributes__pb2.CreateAttributeValueResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def update_attribute_value(self, request: policy_dot_attributes_dot_attributes__pb2.UpdateAttributeValueRequest, ctx: RequestContext) -> policy_dot_attributes_dot_attributes__pb2.UpdateAttributeValueResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def deactivate_attribute_value(self, request: policy_dot_attributes_dot_attributes__pb2.DeactivateAttributeValueRequest, ctx: RequestContext) -> policy_dot_attributes_dot_attributes__pb2.DeactivateAttributeValueResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def assign_key_access_server_to_attribute(self, request: policy_dot_attributes_dot_attributes__pb2.AssignKeyAccessServerToAttributeRequest, ctx: RequestContext) -> policy_dot_attributes_dot_attributes__pb2.AssignKeyAccessServerToAttributeResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def remove_key_access_server_from_attribute(self, request: policy_dot_attributes_dot_attributes__pb2.RemoveKeyAccessServerFromAttributeRequest, ctx: RequestContext) -> policy_dot_attributes_dot_attributes__pb2.RemoveKeyAccessServerFromAttributeResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def assign_key_access_server_to_value(self, request: policy_dot_attributes_dot_attributes__pb2.AssignKeyAccessServerToValueRequest, ctx: RequestContext) -> policy_dot_attributes_dot_attributes__pb2.AssignKeyAccessServerToValueResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def remove_key_access_server_from_value(self, request: policy_dot_attributes_dot_attributes__pb2.RemoveKeyAccessServerFromValueRequest, ctx: RequestContext) -> policy_dot_attributes_dot_attributes__pb2.RemoveKeyAccessServerFromValueResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def assign_public_key_to_attribute(self, request: policy_dot_attributes_dot_attributes__pb2.AssignPublicKeyToAttributeRequest, ctx: RequestContext) -> policy_dot_attributes_dot_attributes__pb2.AssignPublicKeyToAttributeResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def remove_public_key_from_attribute(self, request: policy_dot_attributes_dot_attributes__pb2.RemovePublicKeyFromAttributeRequest, ctx: RequestContext) -> policy_dot_attributes_dot_attributes__pb2.RemovePublicKeyFromAttributeResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def assign_public_key_to_value(self, request: policy_dot_attributes_dot_attributes__pb2.AssignPublicKeyToValueRequest, ctx: RequestContext) -> policy_dot_attributes_dot_attributes__pb2.AssignPublicKeyToValueResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def remove_public_key_from_value(self, request: policy_dot_attributes_dot_attributes__pb2.RemovePublicKeyFromValueRequest, ctx: RequestContext) -> policy_dot_attributes_dot_attributes__pb2.RemovePublicKeyFromValueResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + +class AttributesServiceASGIApplication(ConnectASGIApplication[AttributesService]): + def __init__(self, service: AttributesService | AsyncGenerator[AttributesService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None) -> None: + super().__init__( + service=service, + endpoints=lambda svc: { + "/policy.attributes.AttributesService/ListAttributes": Endpoint.unary( + method=MethodInfo( + name="ListAttributes", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.ListAttributesRequest, + output=policy_dot_attributes_dot_attributes__pb2.ListAttributesResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + function=svc.list_attributes, + ), + "/policy.attributes.AttributesService/ListAttributeValues": Endpoint.unary( + method=MethodInfo( + name="ListAttributeValues", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.ListAttributeValuesRequest, + output=policy_dot_attributes_dot_attributes__pb2.ListAttributeValuesResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + function=svc.list_attribute_values, + ), + "/policy.attributes.AttributesService/GetAttribute": Endpoint.unary( + method=MethodInfo( + name="GetAttribute", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.GetAttributeRequest, + output=policy_dot_attributes_dot_attributes__pb2.GetAttributeResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + function=svc.get_attribute, + ), + "/policy.attributes.AttributesService/GetAttributeValuesByFqns": Endpoint.unary( + method=MethodInfo( + name="GetAttributeValuesByFqns", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.GetAttributeValuesByFqnsRequest, + output=policy_dot_attributes_dot_attributes__pb2.GetAttributeValuesByFqnsResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + function=svc.get_attribute_values_by_fqns, + ), + "/policy.attributes.AttributesService/CreateAttribute": Endpoint.unary( + method=MethodInfo( + name="CreateAttribute", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.CreateAttributeRequest, + output=policy_dot_attributes_dot_attributes__pb2.CreateAttributeResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.create_attribute, + ), + "/policy.attributes.AttributesService/UpdateAttribute": Endpoint.unary( + method=MethodInfo( + name="UpdateAttribute", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.UpdateAttributeRequest, + output=policy_dot_attributes_dot_attributes__pb2.UpdateAttributeResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.update_attribute, + ), + "/policy.attributes.AttributesService/DeactivateAttribute": Endpoint.unary( + method=MethodInfo( + name="DeactivateAttribute", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.DeactivateAttributeRequest, + output=policy_dot_attributes_dot_attributes__pb2.DeactivateAttributeResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.deactivate_attribute, + ), + "/policy.attributes.AttributesService/GetAttributeValue": Endpoint.unary( + method=MethodInfo( + name="GetAttributeValue", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.GetAttributeValueRequest, + output=policy_dot_attributes_dot_attributes__pb2.GetAttributeValueResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + function=svc.get_attribute_value, + ), + "/policy.attributes.AttributesService/CreateAttributeValue": Endpoint.unary( + method=MethodInfo( + name="CreateAttributeValue", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.CreateAttributeValueRequest, + output=policy_dot_attributes_dot_attributes__pb2.CreateAttributeValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.create_attribute_value, + ), + "/policy.attributes.AttributesService/UpdateAttributeValue": Endpoint.unary( + method=MethodInfo( + name="UpdateAttributeValue", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.UpdateAttributeValueRequest, + output=policy_dot_attributes_dot_attributes__pb2.UpdateAttributeValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.update_attribute_value, + ), + "/policy.attributes.AttributesService/DeactivateAttributeValue": Endpoint.unary( + method=MethodInfo( + name="DeactivateAttributeValue", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.DeactivateAttributeValueRequest, + output=policy_dot_attributes_dot_attributes__pb2.DeactivateAttributeValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.deactivate_attribute_value, + ), + "/policy.attributes.AttributesService/AssignKeyAccessServerToAttribute": Endpoint.unary( + method=MethodInfo( + name="AssignKeyAccessServerToAttribute", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.AssignKeyAccessServerToAttributeRequest, + output=policy_dot_attributes_dot_attributes__pb2.AssignKeyAccessServerToAttributeResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.assign_key_access_server_to_attribute, + ), + "/policy.attributes.AttributesService/RemoveKeyAccessServerFromAttribute": Endpoint.unary( + method=MethodInfo( + name="RemoveKeyAccessServerFromAttribute", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.RemoveKeyAccessServerFromAttributeRequest, + output=policy_dot_attributes_dot_attributes__pb2.RemoveKeyAccessServerFromAttributeResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.remove_key_access_server_from_attribute, + ), + "/policy.attributes.AttributesService/AssignKeyAccessServerToValue": Endpoint.unary( + method=MethodInfo( + name="AssignKeyAccessServerToValue", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.AssignKeyAccessServerToValueRequest, + output=policy_dot_attributes_dot_attributes__pb2.AssignKeyAccessServerToValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.assign_key_access_server_to_value, + ), + "/policy.attributes.AttributesService/RemoveKeyAccessServerFromValue": Endpoint.unary( + method=MethodInfo( + name="RemoveKeyAccessServerFromValue", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.RemoveKeyAccessServerFromValueRequest, + output=policy_dot_attributes_dot_attributes__pb2.RemoveKeyAccessServerFromValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.remove_key_access_server_from_value, + ), + "/policy.attributes.AttributesService/AssignPublicKeyToAttribute": Endpoint.unary( + method=MethodInfo( + name="AssignPublicKeyToAttribute", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.AssignPublicKeyToAttributeRequest, + output=policy_dot_attributes_dot_attributes__pb2.AssignPublicKeyToAttributeResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.assign_public_key_to_attribute, + ), + "/policy.attributes.AttributesService/RemovePublicKeyFromAttribute": Endpoint.unary( + method=MethodInfo( + name="RemovePublicKeyFromAttribute", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.RemovePublicKeyFromAttributeRequest, + output=policy_dot_attributes_dot_attributes__pb2.RemovePublicKeyFromAttributeResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.remove_public_key_from_attribute, + ), + "/policy.attributes.AttributesService/AssignPublicKeyToValue": Endpoint.unary( + method=MethodInfo( + name="AssignPublicKeyToValue", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.AssignPublicKeyToValueRequest, + output=policy_dot_attributes_dot_attributes__pb2.AssignPublicKeyToValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.assign_public_key_to_value, + ), + "/policy.attributes.AttributesService/RemovePublicKeyFromValue": Endpoint.unary( + method=MethodInfo( + name="RemovePublicKeyFromValue", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.RemovePublicKeyFromValueRequest, + output=policy_dot_attributes_dot_attributes__pb2.RemovePublicKeyFromValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.remove_public_key_from_value, + ), + }, + interceptors=interceptors, + read_max_bytes=read_max_bytes, + ) + + @property + def path(self) -> str: + """Returns the URL path to mount the application to when serving multiple applications.""" + return "/policy.attributes.AttributesService" + + +class AttributesServiceClient(ConnectClient): + async def list_attributes( + self, + request: policy_dot_attributes_dot_attributes__pb2.ListAttributesRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + use_get: bool = False, + ) -> policy_dot_attributes_dot_attributes__pb2.ListAttributesResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="ListAttributes", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.ListAttributesRequest, + output=policy_dot_attributes_dot_attributes__pb2.ListAttributesResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + headers=headers, + timeout_ms=timeout_ms, + use_get=use_get, + ) + + async def list_attribute_values( + self, + request: policy_dot_attributes_dot_attributes__pb2.ListAttributeValuesRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + use_get: bool = False, + ) -> policy_dot_attributes_dot_attributes__pb2.ListAttributeValuesResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="ListAttributeValues", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.ListAttributeValuesRequest, + output=policy_dot_attributes_dot_attributes__pb2.ListAttributeValuesResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + headers=headers, + timeout_ms=timeout_ms, + use_get=use_get, + ) + + async def get_attribute( + self, + request: policy_dot_attributes_dot_attributes__pb2.GetAttributeRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + use_get: bool = False, + ) -> policy_dot_attributes_dot_attributes__pb2.GetAttributeResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="GetAttribute", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.GetAttributeRequest, + output=policy_dot_attributes_dot_attributes__pb2.GetAttributeResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + headers=headers, + timeout_ms=timeout_ms, + use_get=use_get, + ) + + async def get_attribute_values_by_fqns( + self, + request: policy_dot_attributes_dot_attributes__pb2.GetAttributeValuesByFqnsRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + use_get: bool = False, + ) -> policy_dot_attributes_dot_attributes__pb2.GetAttributeValuesByFqnsResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="GetAttributeValuesByFqns", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.GetAttributeValuesByFqnsRequest, + output=policy_dot_attributes_dot_attributes__pb2.GetAttributeValuesByFqnsResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + headers=headers, + timeout_ms=timeout_ms, + use_get=use_get, + ) + + async def create_attribute( + self, + request: policy_dot_attributes_dot_attributes__pb2.CreateAttributeRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_attributes_dot_attributes__pb2.CreateAttributeResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="CreateAttribute", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.CreateAttributeRequest, + output=policy_dot_attributes_dot_attributes__pb2.CreateAttributeResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def update_attribute( + self, + request: policy_dot_attributes_dot_attributes__pb2.UpdateAttributeRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_attributes_dot_attributes__pb2.UpdateAttributeResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="UpdateAttribute", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.UpdateAttributeRequest, + output=policy_dot_attributes_dot_attributes__pb2.UpdateAttributeResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def deactivate_attribute( + self, + request: policy_dot_attributes_dot_attributes__pb2.DeactivateAttributeRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_attributes_dot_attributes__pb2.DeactivateAttributeResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="DeactivateAttribute", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.DeactivateAttributeRequest, + output=policy_dot_attributes_dot_attributes__pb2.DeactivateAttributeResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def get_attribute_value( + self, + request: policy_dot_attributes_dot_attributes__pb2.GetAttributeValueRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + use_get: bool = False, + ) -> policy_dot_attributes_dot_attributes__pb2.GetAttributeValueResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="GetAttributeValue", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.GetAttributeValueRequest, + output=policy_dot_attributes_dot_attributes__pb2.GetAttributeValueResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + headers=headers, + timeout_ms=timeout_ms, + use_get=use_get, + ) + + async def create_attribute_value( + self, + request: policy_dot_attributes_dot_attributes__pb2.CreateAttributeValueRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_attributes_dot_attributes__pb2.CreateAttributeValueResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="CreateAttributeValue", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.CreateAttributeValueRequest, + output=policy_dot_attributes_dot_attributes__pb2.CreateAttributeValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def update_attribute_value( + self, + request: policy_dot_attributes_dot_attributes__pb2.UpdateAttributeValueRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_attributes_dot_attributes__pb2.UpdateAttributeValueResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="UpdateAttributeValue", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.UpdateAttributeValueRequest, + output=policy_dot_attributes_dot_attributes__pb2.UpdateAttributeValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def deactivate_attribute_value( + self, + request: policy_dot_attributes_dot_attributes__pb2.DeactivateAttributeValueRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_attributes_dot_attributes__pb2.DeactivateAttributeValueResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="DeactivateAttributeValue", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.DeactivateAttributeValueRequest, + output=policy_dot_attributes_dot_attributes__pb2.DeactivateAttributeValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def assign_key_access_server_to_attribute( + self, + request: policy_dot_attributes_dot_attributes__pb2.AssignKeyAccessServerToAttributeRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_attributes_dot_attributes__pb2.AssignKeyAccessServerToAttributeResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="AssignKeyAccessServerToAttribute", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.AssignKeyAccessServerToAttributeRequest, + output=policy_dot_attributes_dot_attributes__pb2.AssignKeyAccessServerToAttributeResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def remove_key_access_server_from_attribute( + self, + request: policy_dot_attributes_dot_attributes__pb2.RemoveKeyAccessServerFromAttributeRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_attributes_dot_attributes__pb2.RemoveKeyAccessServerFromAttributeResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="RemoveKeyAccessServerFromAttribute", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.RemoveKeyAccessServerFromAttributeRequest, + output=policy_dot_attributes_dot_attributes__pb2.RemoveKeyAccessServerFromAttributeResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def assign_key_access_server_to_value( + self, + request: policy_dot_attributes_dot_attributes__pb2.AssignKeyAccessServerToValueRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_attributes_dot_attributes__pb2.AssignKeyAccessServerToValueResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="AssignKeyAccessServerToValue", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.AssignKeyAccessServerToValueRequest, + output=policy_dot_attributes_dot_attributes__pb2.AssignKeyAccessServerToValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def remove_key_access_server_from_value( + self, + request: policy_dot_attributes_dot_attributes__pb2.RemoveKeyAccessServerFromValueRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_attributes_dot_attributes__pb2.RemoveKeyAccessServerFromValueResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="RemoveKeyAccessServerFromValue", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.RemoveKeyAccessServerFromValueRequest, + output=policy_dot_attributes_dot_attributes__pb2.RemoveKeyAccessServerFromValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def assign_public_key_to_attribute( + self, + request: policy_dot_attributes_dot_attributes__pb2.AssignPublicKeyToAttributeRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_attributes_dot_attributes__pb2.AssignPublicKeyToAttributeResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="AssignPublicKeyToAttribute", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.AssignPublicKeyToAttributeRequest, + output=policy_dot_attributes_dot_attributes__pb2.AssignPublicKeyToAttributeResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def remove_public_key_from_attribute( + self, + request: policy_dot_attributes_dot_attributes__pb2.RemovePublicKeyFromAttributeRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_attributes_dot_attributes__pb2.RemovePublicKeyFromAttributeResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="RemovePublicKeyFromAttribute", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.RemovePublicKeyFromAttributeRequest, + output=policy_dot_attributes_dot_attributes__pb2.RemovePublicKeyFromAttributeResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def assign_public_key_to_value( + self, + request: policy_dot_attributes_dot_attributes__pb2.AssignPublicKeyToValueRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_attributes_dot_attributes__pb2.AssignPublicKeyToValueResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="AssignPublicKeyToValue", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.AssignPublicKeyToValueRequest, + output=policy_dot_attributes_dot_attributes__pb2.AssignPublicKeyToValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def remove_public_key_from_value( + self, + request: policy_dot_attributes_dot_attributes__pb2.RemovePublicKeyFromValueRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_attributes_dot_attributes__pb2.RemovePublicKeyFromValueResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="RemovePublicKeyFromValue", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.RemovePublicKeyFromValueRequest, + output=policy_dot_attributes_dot_attributes__pb2.RemovePublicKeyFromValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + +class AttributesServiceSync(Protocol): + def list_attributes(self, request: policy_dot_attributes_dot_attributes__pb2.ListAttributesRequest, ctx: RequestContext) -> policy_dot_attributes_dot_attributes__pb2.ListAttributesResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def list_attribute_values(self, request: policy_dot_attributes_dot_attributes__pb2.ListAttributeValuesRequest, ctx: RequestContext) -> policy_dot_attributes_dot_attributes__pb2.ListAttributeValuesResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def get_attribute(self, request: policy_dot_attributes_dot_attributes__pb2.GetAttributeRequest, ctx: RequestContext) -> policy_dot_attributes_dot_attributes__pb2.GetAttributeResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def get_attribute_values_by_fqns(self, request: policy_dot_attributes_dot_attributes__pb2.GetAttributeValuesByFqnsRequest, ctx: RequestContext) -> policy_dot_attributes_dot_attributes__pb2.GetAttributeValuesByFqnsResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def create_attribute(self, request: policy_dot_attributes_dot_attributes__pb2.CreateAttributeRequest, ctx: RequestContext) -> policy_dot_attributes_dot_attributes__pb2.CreateAttributeResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def update_attribute(self, request: policy_dot_attributes_dot_attributes__pb2.UpdateAttributeRequest, ctx: RequestContext) -> policy_dot_attributes_dot_attributes__pb2.UpdateAttributeResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def deactivate_attribute(self, request: policy_dot_attributes_dot_attributes__pb2.DeactivateAttributeRequest, ctx: RequestContext) -> policy_dot_attributes_dot_attributes__pb2.DeactivateAttributeResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def get_attribute_value(self, request: policy_dot_attributes_dot_attributes__pb2.GetAttributeValueRequest, ctx: RequestContext) -> policy_dot_attributes_dot_attributes__pb2.GetAttributeValueResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def create_attribute_value(self, request: policy_dot_attributes_dot_attributes__pb2.CreateAttributeValueRequest, ctx: RequestContext) -> policy_dot_attributes_dot_attributes__pb2.CreateAttributeValueResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def update_attribute_value(self, request: policy_dot_attributes_dot_attributes__pb2.UpdateAttributeValueRequest, ctx: RequestContext) -> policy_dot_attributes_dot_attributes__pb2.UpdateAttributeValueResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def deactivate_attribute_value(self, request: policy_dot_attributes_dot_attributes__pb2.DeactivateAttributeValueRequest, ctx: RequestContext) -> policy_dot_attributes_dot_attributes__pb2.DeactivateAttributeValueResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def assign_key_access_server_to_attribute(self, request: policy_dot_attributes_dot_attributes__pb2.AssignKeyAccessServerToAttributeRequest, ctx: RequestContext) -> policy_dot_attributes_dot_attributes__pb2.AssignKeyAccessServerToAttributeResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def remove_key_access_server_from_attribute(self, request: policy_dot_attributes_dot_attributes__pb2.RemoveKeyAccessServerFromAttributeRequest, ctx: RequestContext) -> policy_dot_attributes_dot_attributes__pb2.RemoveKeyAccessServerFromAttributeResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def assign_key_access_server_to_value(self, request: policy_dot_attributes_dot_attributes__pb2.AssignKeyAccessServerToValueRequest, ctx: RequestContext) -> policy_dot_attributes_dot_attributes__pb2.AssignKeyAccessServerToValueResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def remove_key_access_server_from_value(self, request: policy_dot_attributes_dot_attributes__pb2.RemoveKeyAccessServerFromValueRequest, ctx: RequestContext) -> policy_dot_attributes_dot_attributes__pb2.RemoveKeyAccessServerFromValueResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def assign_public_key_to_attribute(self, request: policy_dot_attributes_dot_attributes__pb2.AssignPublicKeyToAttributeRequest, ctx: RequestContext) -> policy_dot_attributes_dot_attributes__pb2.AssignPublicKeyToAttributeResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def remove_public_key_from_attribute(self, request: policy_dot_attributes_dot_attributes__pb2.RemovePublicKeyFromAttributeRequest, ctx: RequestContext) -> policy_dot_attributes_dot_attributes__pb2.RemovePublicKeyFromAttributeResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def assign_public_key_to_value(self, request: policy_dot_attributes_dot_attributes__pb2.AssignPublicKeyToValueRequest, ctx: RequestContext) -> policy_dot_attributes_dot_attributes__pb2.AssignPublicKeyToValueResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def remove_public_key_from_value(self, request: policy_dot_attributes_dot_attributes__pb2.RemovePublicKeyFromValueRequest, ctx: RequestContext) -> policy_dot_attributes_dot_attributes__pb2.RemovePublicKeyFromValueResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + +class AttributesServiceWSGIApplication(ConnectWSGIApplication): + def __init__(self, service: AttributesServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None) -> None: + super().__init__( + endpoints={ + "/policy.attributes.AttributesService/ListAttributes": EndpointSync.unary( + method=MethodInfo( + name="ListAttributes", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.ListAttributesRequest, + output=policy_dot_attributes_dot_attributes__pb2.ListAttributesResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + function=service.list_attributes, + ), + "/policy.attributes.AttributesService/ListAttributeValues": EndpointSync.unary( + method=MethodInfo( + name="ListAttributeValues", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.ListAttributeValuesRequest, + output=policy_dot_attributes_dot_attributes__pb2.ListAttributeValuesResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + function=service.list_attribute_values, + ), + "/policy.attributes.AttributesService/GetAttribute": EndpointSync.unary( + method=MethodInfo( + name="GetAttribute", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.GetAttributeRequest, + output=policy_dot_attributes_dot_attributes__pb2.GetAttributeResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + function=service.get_attribute, + ), + "/policy.attributes.AttributesService/GetAttributeValuesByFqns": EndpointSync.unary( + method=MethodInfo( + name="GetAttributeValuesByFqns", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.GetAttributeValuesByFqnsRequest, + output=policy_dot_attributes_dot_attributes__pb2.GetAttributeValuesByFqnsResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + function=service.get_attribute_values_by_fqns, + ), + "/policy.attributes.AttributesService/CreateAttribute": EndpointSync.unary( + method=MethodInfo( + name="CreateAttribute", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.CreateAttributeRequest, + output=policy_dot_attributes_dot_attributes__pb2.CreateAttributeResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.create_attribute, + ), + "/policy.attributes.AttributesService/UpdateAttribute": EndpointSync.unary( + method=MethodInfo( + name="UpdateAttribute", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.UpdateAttributeRequest, + output=policy_dot_attributes_dot_attributes__pb2.UpdateAttributeResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.update_attribute, + ), + "/policy.attributes.AttributesService/DeactivateAttribute": EndpointSync.unary( + method=MethodInfo( + name="DeactivateAttribute", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.DeactivateAttributeRequest, + output=policy_dot_attributes_dot_attributes__pb2.DeactivateAttributeResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.deactivate_attribute, + ), + "/policy.attributes.AttributesService/GetAttributeValue": EndpointSync.unary( + method=MethodInfo( + name="GetAttributeValue", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.GetAttributeValueRequest, + output=policy_dot_attributes_dot_attributes__pb2.GetAttributeValueResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + function=service.get_attribute_value, + ), + "/policy.attributes.AttributesService/CreateAttributeValue": EndpointSync.unary( + method=MethodInfo( + name="CreateAttributeValue", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.CreateAttributeValueRequest, + output=policy_dot_attributes_dot_attributes__pb2.CreateAttributeValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.create_attribute_value, + ), + "/policy.attributes.AttributesService/UpdateAttributeValue": EndpointSync.unary( + method=MethodInfo( + name="UpdateAttributeValue", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.UpdateAttributeValueRequest, + output=policy_dot_attributes_dot_attributes__pb2.UpdateAttributeValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.update_attribute_value, + ), + "/policy.attributes.AttributesService/DeactivateAttributeValue": EndpointSync.unary( + method=MethodInfo( + name="DeactivateAttributeValue", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.DeactivateAttributeValueRequest, + output=policy_dot_attributes_dot_attributes__pb2.DeactivateAttributeValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.deactivate_attribute_value, + ), + "/policy.attributes.AttributesService/AssignKeyAccessServerToAttribute": EndpointSync.unary( + method=MethodInfo( + name="AssignKeyAccessServerToAttribute", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.AssignKeyAccessServerToAttributeRequest, + output=policy_dot_attributes_dot_attributes__pb2.AssignKeyAccessServerToAttributeResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.assign_key_access_server_to_attribute, + ), + "/policy.attributes.AttributesService/RemoveKeyAccessServerFromAttribute": EndpointSync.unary( + method=MethodInfo( + name="RemoveKeyAccessServerFromAttribute", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.RemoveKeyAccessServerFromAttributeRequest, + output=policy_dot_attributes_dot_attributes__pb2.RemoveKeyAccessServerFromAttributeResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.remove_key_access_server_from_attribute, + ), + "/policy.attributes.AttributesService/AssignKeyAccessServerToValue": EndpointSync.unary( + method=MethodInfo( + name="AssignKeyAccessServerToValue", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.AssignKeyAccessServerToValueRequest, + output=policy_dot_attributes_dot_attributes__pb2.AssignKeyAccessServerToValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.assign_key_access_server_to_value, + ), + "/policy.attributes.AttributesService/RemoveKeyAccessServerFromValue": EndpointSync.unary( + method=MethodInfo( + name="RemoveKeyAccessServerFromValue", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.RemoveKeyAccessServerFromValueRequest, + output=policy_dot_attributes_dot_attributes__pb2.RemoveKeyAccessServerFromValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.remove_key_access_server_from_value, + ), + "/policy.attributes.AttributesService/AssignPublicKeyToAttribute": EndpointSync.unary( + method=MethodInfo( + name="AssignPublicKeyToAttribute", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.AssignPublicKeyToAttributeRequest, + output=policy_dot_attributes_dot_attributes__pb2.AssignPublicKeyToAttributeResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.assign_public_key_to_attribute, + ), + "/policy.attributes.AttributesService/RemovePublicKeyFromAttribute": EndpointSync.unary( + method=MethodInfo( + name="RemovePublicKeyFromAttribute", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.RemovePublicKeyFromAttributeRequest, + output=policy_dot_attributes_dot_attributes__pb2.RemovePublicKeyFromAttributeResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.remove_public_key_from_attribute, + ), + "/policy.attributes.AttributesService/AssignPublicKeyToValue": EndpointSync.unary( + method=MethodInfo( + name="AssignPublicKeyToValue", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.AssignPublicKeyToValueRequest, + output=policy_dot_attributes_dot_attributes__pb2.AssignPublicKeyToValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.assign_public_key_to_value, + ), + "/policy.attributes.AttributesService/RemovePublicKeyFromValue": EndpointSync.unary( + method=MethodInfo( + name="RemovePublicKeyFromValue", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.RemovePublicKeyFromValueRequest, + output=policy_dot_attributes_dot_attributes__pb2.RemovePublicKeyFromValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.remove_public_key_from_value, + ), + }, + interceptors=interceptors, + read_max_bytes=read_max_bytes, + ) + + @property + def path(self) -> str: + """Returns the URL path to mount the application to when serving multiple applications.""" + return "/policy.attributes.AttributesService" + + +class AttributesServiceClientSync(ConnectClientSync): + def list_attributes( + self, + request: policy_dot_attributes_dot_attributes__pb2.ListAttributesRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + use_get: bool = False, + ) -> policy_dot_attributes_dot_attributes__pb2.ListAttributesResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="ListAttributes", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.ListAttributesRequest, + output=policy_dot_attributes_dot_attributes__pb2.ListAttributesResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + headers=headers, + timeout_ms=timeout_ms, + use_get=use_get, + ) + + def list_attribute_values( + self, + request: policy_dot_attributes_dot_attributes__pb2.ListAttributeValuesRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + use_get: bool = False, + ) -> policy_dot_attributes_dot_attributes__pb2.ListAttributeValuesResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="ListAttributeValues", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.ListAttributeValuesRequest, + output=policy_dot_attributes_dot_attributes__pb2.ListAttributeValuesResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + headers=headers, + timeout_ms=timeout_ms, + use_get=use_get, + ) + + def get_attribute( + self, + request: policy_dot_attributes_dot_attributes__pb2.GetAttributeRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + use_get: bool = False, + ) -> policy_dot_attributes_dot_attributes__pb2.GetAttributeResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="GetAttribute", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.GetAttributeRequest, + output=policy_dot_attributes_dot_attributes__pb2.GetAttributeResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + headers=headers, + timeout_ms=timeout_ms, + use_get=use_get, + ) + + def get_attribute_values_by_fqns( + self, + request: policy_dot_attributes_dot_attributes__pb2.GetAttributeValuesByFqnsRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + use_get: bool = False, + ) -> policy_dot_attributes_dot_attributes__pb2.GetAttributeValuesByFqnsResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="GetAttributeValuesByFqns", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.GetAttributeValuesByFqnsRequest, + output=policy_dot_attributes_dot_attributes__pb2.GetAttributeValuesByFqnsResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + headers=headers, + timeout_ms=timeout_ms, + use_get=use_get, + ) + + def create_attribute( + self, + request: policy_dot_attributes_dot_attributes__pb2.CreateAttributeRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_attributes_dot_attributes__pb2.CreateAttributeResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="CreateAttribute", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.CreateAttributeRequest, + output=policy_dot_attributes_dot_attributes__pb2.CreateAttributeResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def update_attribute( + self, + request: policy_dot_attributes_dot_attributes__pb2.UpdateAttributeRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_attributes_dot_attributes__pb2.UpdateAttributeResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="UpdateAttribute", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.UpdateAttributeRequest, + output=policy_dot_attributes_dot_attributes__pb2.UpdateAttributeResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def deactivate_attribute( + self, + request: policy_dot_attributes_dot_attributes__pb2.DeactivateAttributeRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_attributes_dot_attributes__pb2.DeactivateAttributeResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="DeactivateAttribute", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.DeactivateAttributeRequest, + output=policy_dot_attributes_dot_attributes__pb2.DeactivateAttributeResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def get_attribute_value( + self, + request: policy_dot_attributes_dot_attributes__pb2.GetAttributeValueRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + use_get: bool = False, + ) -> policy_dot_attributes_dot_attributes__pb2.GetAttributeValueResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="GetAttributeValue", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.GetAttributeValueRequest, + output=policy_dot_attributes_dot_attributes__pb2.GetAttributeValueResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + headers=headers, + timeout_ms=timeout_ms, + use_get=use_get, + ) + + def create_attribute_value( + self, + request: policy_dot_attributes_dot_attributes__pb2.CreateAttributeValueRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_attributes_dot_attributes__pb2.CreateAttributeValueResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="CreateAttributeValue", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.CreateAttributeValueRequest, + output=policy_dot_attributes_dot_attributes__pb2.CreateAttributeValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def update_attribute_value( + self, + request: policy_dot_attributes_dot_attributes__pb2.UpdateAttributeValueRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_attributes_dot_attributes__pb2.UpdateAttributeValueResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="UpdateAttributeValue", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.UpdateAttributeValueRequest, + output=policy_dot_attributes_dot_attributes__pb2.UpdateAttributeValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def deactivate_attribute_value( + self, + request: policy_dot_attributes_dot_attributes__pb2.DeactivateAttributeValueRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_attributes_dot_attributes__pb2.DeactivateAttributeValueResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="DeactivateAttributeValue", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.DeactivateAttributeValueRequest, + output=policy_dot_attributes_dot_attributes__pb2.DeactivateAttributeValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def assign_key_access_server_to_attribute( + self, + request: policy_dot_attributes_dot_attributes__pb2.AssignKeyAccessServerToAttributeRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_attributes_dot_attributes__pb2.AssignKeyAccessServerToAttributeResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="AssignKeyAccessServerToAttribute", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.AssignKeyAccessServerToAttributeRequest, + output=policy_dot_attributes_dot_attributes__pb2.AssignKeyAccessServerToAttributeResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def remove_key_access_server_from_attribute( + self, + request: policy_dot_attributes_dot_attributes__pb2.RemoveKeyAccessServerFromAttributeRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_attributes_dot_attributes__pb2.RemoveKeyAccessServerFromAttributeResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="RemoveKeyAccessServerFromAttribute", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.RemoveKeyAccessServerFromAttributeRequest, + output=policy_dot_attributes_dot_attributes__pb2.RemoveKeyAccessServerFromAttributeResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def assign_key_access_server_to_value( + self, + request: policy_dot_attributes_dot_attributes__pb2.AssignKeyAccessServerToValueRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_attributes_dot_attributes__pb2.AssignKeyAccessServerToValueResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="AssignKeyAccessServerToValue", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.AssignKeyAccessServerToValueRequest, + output=policy_dot_attributes_dot_attributes__pb2.AssignKeyAccessServerToValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def remove_key_access_server_from_value( + self, + request: policy_dot_attributes_dot_attributes__pb2.RemoveKeyAccessServerFromValueRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_attributes_dot_attributes__pb2.RemoveKeyAccessServerFromValueResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="RemoveKeyAccessServerFromValue", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.RemoveKeyAccessServerFromValueRequest, + output=policy_dot_attributes_dot_attributes__pb2.RemoveKeyAccessServerFromValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def assign_public_key_to_attribute( + self, + request: policy_dot_attributes_dot_attributes__pb2.AssignPublicKeyToAttributeRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_attributes_dot_attributes__pb2.AssignPublicKeyToAttributeResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="AssignPublicKeyToAttribute", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.AssignPublicKeyToAttributeRequest, + output=policy_dot_attributes_dot_attributes__pb2.AssignPublicKeyToAttributeResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def remove_public_key_from_attribute( + self, + request: policy_dot_attributes_dot_attributes__pb2.RemovePublicKeyFromAttributeRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_attributes_dot_attributes__pb2.RemovePublicKeyFromAttributeResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="RemovePublicKeyFromAttribute", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.RemovePublicKeyFromAttributeRequest, + output=policy_dot_attributes_dot_attributes__pb2.RemovePublicKeyFromAttributeResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def assign_public_key_to_value( + self, + request: policy_dot_attributes_dot_attributes__pb2.AssignPublicKeyToValueRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_attributes_dot_attributes__pb2.AssignPublicKeyToValueResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="AssignPublicKeyToValue", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.AssignPublicKeyToValueRequest, + output=policy_dot_attributes_dot_attributes__pb2.AssignPublicKeyToValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def remove_public_key_from_value( + self, + request: policy_dot_attributes_dot_attributes__pb2.RemovePublicKeyFromValueRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_attributes_dot_attributes__pb2.RemovePublicKeyFromValueResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="RemovePublicKeyFromValue", + service_name="policy.attributes.AttributesService", + input=policy_dot_attributes_dot_attributes__pb2.RemovePublicKeyFromValueRequest, + output=policy_dot_attributes_dot_attributes__pb2.RemovePublicKeyFromValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) diff --git a/otdf-python-proto/src/otdf_python_proto/policy/attributes/attributes_pb2_connect.py b/otdf-python-proto/src/otdf_python_proto/policy/attributes/attributes_pb2_connect.py deleted file mode 100644 index e10a553..0000000 --- a/otdf-python-proto/src/otdf_python_proto/policy/attributes/attributes_pb2_connect.py +++ /dev/null @@ -1,863 +0,0 @@ -# Generated Connect client code - -from __future__ import annotations -from collections.abc import AsyncIterator -from collections.abc import Iterator -from collections.abc import Iterable -import aiohttp -import urllib3 -import typing -import sys - -from connectrpc.client_async import AsyncConnectClient -from connectrpc.client_sync import ConnectClient -from connectrpc.client_protocol import ConnectProtocol -from connectrpc.client_connect import ConnectProtocolError -from connectrpc.headers import HeaderInput -from connectrpc.server import ClientRequest -from connectrpc.server import ClientStream -from connectrpc.server import ServerResponse -from connectrpc.server import ServerStream -from connectrpc.server_sync import ConnectWSGI -from connectrpc.streams import StreamInput -from connectrpc.streams import AsyncStreamOutput -from connectrpc.streams import StreamOutput -from connectrpc.unary import UnaryOutput -from connectrpc.unary import ClientStreamingOutput - -if typing.TYPE_CHECKING: - # wsgiref.types was added in Python 3.11. - if sys.version_info >= (3, 11): - from wsgiref.types import WSGIApplication - else: - from _typeshed.wsgi import WSGIApplication - -import policy.attributes.attributes_pb2 - -class AttributesServiceClient: - def __init__( - self, - base_url: str, - http_client: urllib3.PoolManager | None = None, - protocol: ConnectProtocol = ConnectProtocol.CONNECT_PROTOBUF, - ): - self.base_url = base_url - self._connect_client = ConnectClient(http_client, protocol) - def call_list_attributes( - self, req: policy.attributes.attributes_pb2.ListAttributesRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.attributes.attributes_pb2.ListAttributesResponse]: - """Low-level method to call ListAttributes, granting access to errors and metadata""" - url = self.base_url + "/policy.attributes.AttributesService/ListAttributes" - return self._connect_client.call_unary(url, req, policy.attributes.attributes_pb2.ListAttributesResponse,extra_headers, timeout_seconds) - - - def list_attributes( - self, req: policy.attributes.attributes_pb2.ListAttributesRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.attributes.attributes_pb2.ListAttributesResponse: - response = self.call_list_attributes(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_list_attribute_values( - self, req: policy.attributes.attributes_pb2.ListAttributeValuesRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.attributes.attributes_pb2.ListAttributeValuesResponse]: - """Low-level method to call ListAttributeValues, granting access to errors and metadata""" - url = self.base_url + "/policy.attributes.AttributesService/ListAttributeValues" - return self._connect_client.call_unary(url, req, policy.attributes.attributes_pb2.ListAttributeValuesResponse,extra_headers, timeout_seconds) - - - def list_attribute_values( - self, req: policy.attributes.attributes_pb2.ListAttributeValuesRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.attributes.attributes_pb2.ListAttributeValuesResponse: - response = self.call_list_attribute_values(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_get_attribute( - self, req: policy.attributes.attributes_pb2.GetAttributeRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.attributes.attributes_pb2.GetAttributeResponse]: - """Low-level method to call GetAttribute, granting access to errors and metadata""" - url = self.base_url + "/policy.attributes.AttributesService/GetAttribute" - return self._connect_client.call_unary(url, req, policy.attributes.attributes_pb2.GetAttributeResponse,extra_headers, timeout_seconds) - - - def get_attribute( - self, req: policy.attributes.attributes_pb2.GetAttributeRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.attributes.attributes_pb2.GetAttributeResponse: - response = self.call_get_attribute(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_get_attribute_values_by_fqns( - self, req: policy.attributes.attributes_pb2.GetAttributeValuesByFqnsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.attributes.attributes_pb2.GetAttributeValuesByFqnsResponse]: - """Low-level method to call GetAttributeValuesByFqns, granting access to errors and metadata""" - url = self.base_url + "/policy.attributes.AttributesService/GetAttributeValuesByFqns" - return self._connect_client.call_unary(url, req, policy.attributes.attributes_pb2.GetAttributeValuesByFqnsResponse,extra_headers, timeout_seconds) - - - def get_attribute_values_by_fqns( - self, req: policy.attributes.attributes_pb2.GetAttributeValuesByFqnsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.attributes.attributes_pb2.GetAttributeValuesByFqnsResponse: - response = self.call_get_attribute_values_by_fqns(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_create_attribute( - self, req: policy.attributes.attributes_pb2.CreateAttributeRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.attributes.attributes_pb2.CreateAttributeResponse]: - """Low-level method to call CreateAttribute, granting access to errors and metadata""" - url = self.base_url + "/policy.attributes.AttributesService/CreateAttribute" - return self._connect_client.call_unary(url, req, policy.attributes.attributes_pb2.CreateAttributeResponse,extra_headers, timeout_seconds) - - - def create_attribute( - self, req: policy.attributes.attributes_pb2.CreateAttributeRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.attributes.attributes_pb2.CreateAttributeResponse: - response = self.call_create_attribute(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_update_attribute( - self, req: policy.attributes.attributes_pb2.UpdateAttributeRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.attributes.attributes_pb2.UpdateAttributeResponse]: - """Low-level method to call UpdateAttribute, granting access to errors and metadata""" - url = self.base_url + "/policy.attributes.AttributesService/UpdateAttribute" - return self._connect_client.call_unary(url, req, policy.attributes.attributes_pb2.UpdateAttributeResponse,extra_headers, timeout_seconds) - - - def update_attribute( - self, req: policy.attributes.attributes_pb2.UpdateAttributeRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.attributes.attributes_pb2.UpdateAttributeResponse: - response = self.call_update_attribute(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_deactivate_attribute( - self, req: policy.attributes.attributes_pb2.DeactivateAttributeRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.attributes.attributes_pb2.DeactivateAttributeResponse]: - """Low-level method to call DeactivateAttribute, granting access to errors and metadata""" - url = self.base_url + "/policy.attributes.AttributesService/DeactivateAttribute" - return self._connect_client.call_unary(url, req, policy.attributes.attributes_pb2.DeactivateAttributeResponse,extra_headers, timeout_seconds) - - - def deactivate_attribute( - self, req: policy.attributes.attributes_pb2.DeactivateAttributeRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.attributes.attributes_pb2.DeactivateAttributeResponse: - response = self.call_deactivate_attribute(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_get_attribute_value( - self, req: policy.attributes.attributes_pb2.GetAttributeValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.attributes.attributes_pb2.GetAttributeValueResponse]: - """Low-level method to call GetAttributeValue, granting access to errors and metadata""" - url = self.base_url + "/policy.attributes.AttributesService/GetAttributeValue" - return self._connect_client.call_unary(url, req, policy.attributes.attributes_pb2.GetAttributeValueResponse,extra_headers, timeout_seconds) - - - def get_attribute_value( - self, req: policy.attributes.attributes_pb2.GetAttributeValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.attributes.attributes_pb2.GetAttributeValueResponse: - response = self.call_get_attribute_value(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_create_attribute_value( - self, req: policy.attributes.attributes_pb2.CreateAttributeValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.attributes.attributes_pb2.CreateAttributeValueResponse]: - """Low-level method to call CreateAttributeValue, granting access to errors and metadata""" - url = self.base_url + "/policy.attributes.AttributesService/CreateAttributeValue" - return self._connect_client.call_unary(url, req, policy.attributes.attributes_pb2.CreateAttributeValueResponse,extra_headers, timeout_seconds) - - - def create_attribute_value( - self, req: policy.attributes.attributes_pb2.CreateAttributeValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.attributes.attributes_pb2.CreateAttributeValueResponse: - response = self.call_create_attribute_value(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_update_attribute_value( - self, req: policy.attributes.attributes_pb2.UpdateAttributeValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.attributes.attributes_pb2.UpdateAttributeValueResponse]: - """Low-level method to call UpdateAttributeValue, granting access to errors and metadata""" - url = self.base_url + "/policy.attributes.AttributesService/UpdateAttributeValue" - return self._connect_client.call_unary(url, req, policy.attributes.attributes_pb2.UpdateAttributeValueResponse,extra_headers, timeout_seconds) - - - def update_attribute_value( - self, req: policy.attributes.attributes_pb2.UpdateAttributeValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.attributes.attributes_pb2.UpdateAttributeValueResponse: - response = self.call_update_attribute_value(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_deactivate_attribute_value( - self, req: policy.attributes.attributes_pb2.DeactivateAttributeValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.attributes.attributes_pb2.DeactivateAttributeValueResponse]: - """Low-level method to call DeactivateAttributeValue, granting access to errors and metadata""" - url = self.base_url + "/policy.attributes.AttributesService/DeactivateAttributeValue" - return self._connect_client.call_unary(url, req, policy.attributes.attributes_pb2.DeactivateAttributeValueResponse,extra_headers, timeout_seconds) - - - def deactivate_attribute_value( - self, req: policy.attributes.attributes_pb2.DeactivateAttributeValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.attributes.attributes_pb2.DeactivateAttributeValueResponse: - response = self.call_deactivate_attribute_value(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_assign_key_access_server_to_attribute( - self, req: policy.attributes.attributes_pb2.AssignKeyAccessServerToAttributeRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.attributes.attributes_pb2.AssignKeyAccessServerToAttributeResponse]: - """Low-level method to call AssignKeyAccessServerToAttribute, granting access to errors and metadata""" - url = self.base_url + "/policy.attributes.AttributesService/AssignKeyAccessServerToAttribute" - return self._connect_client.call_unary(url, req, policy.attributes.attributes_pb2.AssignKeyAccessServerToAttributeResponse,extra_headers, timeout_seconds) - - - def assign_key_access_server_to_attribute( - self, req: policy.attributes.attributes_pb2.AssignKeyAccessServerToAttributeRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.attributes.attributes_pb2.AssignKeyAccessServerToAttributeResponse: - response = self.call_assign_key_access_server_to_attribute(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_remove_key_access_server_from_attribute( - self, req: policy.attributes.attributes_pb2.RemoveKeyAccessServerFromAttributeRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.attributes.attributes_pb2.RemoveKeyAccessServerFromAttributeResponse]: - """Low-level method to call RemoveKeyAccessServerFromAttribute, granting access to errors and metadata""" - url = self.base_url + "/policy.attributes.AttributesService/RemoveKeyAccessServerFromAttribute" - return self._connect_client.call_unary(url, req, policy.attributes.attributes_pb2.RemoveKeyAccessServerFromAttributeResponse,extra_headers, timeout_seconds) - - - def remove_key_access_server_from_attribute( - self, req: policy.attributes.attributes_pb2.RemoveKeyAccessServerFromAttributeRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.attributes.attributes_pb2.RemoveKeyAccessServerFromAttributeResponse: - response = self.call_remove_key_access_server_from_attribute(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_assign_key_access_server_to_value( - self, req: policy.attributes.attributes_pb2.AssignKeyAccessServerToValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.attributes.attributes_pb2.AssignKeyAccessServerToValueResponse]: - """Low-level method to call AssignKeyAccessServerToValue, granting access to errors and metadata""" - url = self.base_url + "/policy.attributes.AttributesService/AssignKeyAccessServerToValue" - return self._connect_client.call_unary(url, req, policy.attributes.attributes_pb2.AssignKeyAccessServerToValueResponse,extra_headers, timeout_seconds) - - - def assign_key_access_server_to_value( - self, req: policy.attributes.attributes_pb2.AssignKeyAccessServerToValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.attributes.attributes_pb2.AssignKeyAccessServerToValueResponse: - response = self.call_assign_key_access_server_to_value(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_remove_key_access_server_from_value( - self, req: policy.attributes.attributes_pb2.RemoveKeyAccessServerFromValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.attributes.attributes_pb2.RemoveKeyAccessServerFromValueResponse]: - """Low-level method to call RemoveKeyAccessServerFromValue, granting access to errors and metadata""" - url = self.base_url + "/policy.attributes.AttributesService/RemoveKeyAccessServerFromValue" - return self._connect_client.call_unary(url, req, policy.attributes.attributes_pb2.RemoveKeyAccessServerFromValueResponse,extra_headers, timeout_seconds) - - - def remove_key_access_server_from_value( - self, req: policy.attributes.attributes_pb2.RemoveKeyAccessServerFromValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.attributes.attributes_pb2.RemoveKeyAccessServerFromValueResponse: - response = self.call_remove_key_access_server_from_value(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_assign_public_key_to_attribute( - self, req: policy.attributes.attributes_pb2.AssignPublicKeyToAttributeRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.attributes.attributes_pb2.AssignPublicKeyToAttributeResponse]: - """Low-level method to call AssignPublicKeyToAttribute, granting access to errors and metadata""" - url = self.base_url + "/policy.attributes.AttributesService/AssignPublicKeyToAttribute" - return self._connect_client.call_unary(url, req, policy.attributes.attributes_pb2.AssignPublicKeyToAttributeResponse,extra_headers, timeout_seconds) - - - def assign_public_key_to_attribute( - self, req: policy.attributes.attributes_pb2.AssignPublicKeyToAttributeRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.attributes.attributes_pb2.AssignPublicKeyToAttributeResponse: - response = self.call_assign_public_key_to_attribute(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_remove_public_key_from_attribute( - self, req: policy.attributes.attributes_pb2.RemovePublicKeyFromAttributeRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.attributes.attributes_pb2.RemovePublicKeyFromAttributeResponse]: - """Low-level method to call RemovePublicKeyFromAttribute, granting access to errors and metadata""" - url = self.base_url + "/policy.attributes.AttributesService/RemovePublicKeyFromAttribute" - return self._connect_client.call_unary(url, req, policy.attributes.attributes_pb2.RemovePublicKeyFromAttributeResponse,extra_headers, timeout_seconds) - - - def remove_public_key_from_attribute( - self, req: policy.attributes.attributes_pb2.RemovePublicKeyFromAttributeRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.attributes.attributes_pb2.RemovePublicKeyFromAttributeResponse: - response = self.call_remove_public_key_from_attribute(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_assign_public_key_to_value( - self, req: policy.attributes.attributes_pb2.AssignPublicKeyToValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.attributes.attributes_pb2.AssignPublicKeyToValueResponse]: - """Low-level method to call AssignPublicKeyToValue, granting access to errors and metadata""" - url = self.base_url + "/policy.attributes.AttributesService/AssignPublicKeyToValue" - return self._connect_client.call_unary(url, req, policy.attributes.attributes_pb2.AssignPublicKeyToValueResponse,extra_headers, timeout_seconds) - - - def assign_public_key_to_value( - self, req: policy.attributes.attributes_pb2.AssignPublicKeyToValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.attributes.attributes_pb2.AssignPublicKeyToValueResponse: - response = self.call_assign_public_key_to_value(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_remove_public_key_from_value( - self, req: policy.attributes.attributes_pb2.RemovePublicKeyFromValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.attributes.attributes_pb2.RemovePublicKeyFromValueResponse]: - """Low-level method to call RemovePublicKeyFromValue, granting access to errors and metadata""" - url = self.base_url + "/policy.attributes.AttributesService/RemovePublicKeyFromValue" - return self._connect_client.call_unary(url, req, policy.attributes.attributes_pb2.RemovePublicKeyFromValueResponse,extra_headers, timeout_seconds) - - - def remove_public_key_from_value( - self, req: policy.attributes.attributes_pb2.RemovePublicKeyFromValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.attributes.attributes_pb2.RemovePublicKeyFromValueResponse: - response = self.call_remove_public_key_from_value(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - -class AsyncAttributesServiceClient: - def __init__( - self, - base_url: str, - http_client: aiohttp.ClientSession, - protocol: ConnectProtocol = ConnectProtocol.CONNECT_PROTOBUF, - ): - self.base_url = base_url - self._connect_client = AsyncConnectClient(http_client, protocol) - - async def call_list_attributes( - self, req: policy.attributes.attributes_pb2.ListAttributesRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.attributes.attributes_pb2.ListAttributesResponse]: - """Low-level method to call ListAttributes, granting access to errors and metadata""" - url = self.base_url + "/policy.attributes.AttributesService/ListAttributes" - return await self._connect_client.call_unary(url, req, policy.attributes.attributes_pb2.ListAttributesResponse,extra_headers, timeout_seconds) - - async def list_attributes( - self, req: policy.attributes.attributes_pb2.ListAttributesRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.attributes.attributes_pb2.ListAttributesResponse: - response = await self.call_list_attributes(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_list_attribute_values( - self, req: policy.attributes.attributes_pb2.ListAttributeValuesRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.attributes.attributes_pb2.ListAttributeValuesResponse]: - """Low-level method to call ListAttributeValues, granting access to errors and metadata""" - url = self.base_url + "/policy.attributes.AttributesService/ListAttributeValues" - return await self._connect_client.call_unary(url, req, policy.attributes.attributes_pb2.ListAttributeValuesResponse,extra_headers, timeout_seconds) - - async def list_attribute_values( - self, req: policy.attributes.attributes_pb2.ListAttributeValuesRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.attributes.attributes_pb2.ListAttributeValuesResponse: - response = await self.call_list_attribute_values(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_get_attribute( - self, req: policy.attributes.attributes_pb2.GetAttributeRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.attributes.attributes_pb2.GetAttributeResponse]: - """Low-level method to call GetAttribute, granting access to errors and metadata""" - url = self.base_url + "/policy.attributes.AttributesService/GetAttribute" - return await self._connect_client.call_unary(url, req, policy.attributes.attributes_pb2.GetAttributeResponse,extra_headers, timeout_seconds) - - async def get_attribute( - self, req: policy.attributes.attributes_pb2.GetAttributeRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.attributes.attributes_pb2.GetAttributeResponse: - response = await self.call_get_attribute(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_get_attribute_values_by_fqns( - self, req: policy.attributes.attributes_pb2.GetAttributeValuesByFqnsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.attributes.attributes_pb2.GetAttributeValuesByFqnsResponse]: - """Low-level method to call GetAttributeValuesByFqns, granting access to errors and metadata""" - url = self.base_url + "/policy.attributes.AttributesService/GetAttributeValuesByFqns" - return await self._connect_client.call_unary(url, req, policy.attributes.attributes_pb2.GetAttributeValuesByFqnsResponse,extra_headers, timeout_seconds) - - async def get_attribute_values_by_fqns( - self, req: policy.attributes.attributes_pb2.GetAttributeValuesByFqnsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.attributes.attributes_pb2.GetAttributeValuesByFqnsResponse: - response = await self.call_get_attribute_values_by_fqns(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_create_attribute( - self, req: policy.attributes.attributes_pb2.CreateAttributeRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.attributes.attributes_pb2.CreateAttributeResponse]: - """Low-level method to call CreateAttribute, granting access to errors and metadata""" - url = self.base_url + "/policy.attributes.AttributesService/CreateAttribute" - return await self._connect_client.call_unary(url, req, policy.attributes.attributes_pb2.CreateAttributeResponse,extra_headers, timeout_seconds) - - async def create_attribute( - self, req: policy.attributes.attributes_pb2.CreateAttributeRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.attributes.attributes_pb2.CreateAttributeResponse: - response = await self.call_create_attribute(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_update_attribute( - self, req: policy.attributes.attributes_pb2.UpdateAttributeRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.attributes.attributes_pb2.UpdateAttributeResponse]: - """Low-level method to call UpdateAttribute, granting access to errors and metadata""" - url = self.base_url + "/policy.attributes.AttributesService/UpdateAttribute" - return await self._connect_client.call_unary(url, req, policy.attributes.attributes_pb2.UpdateAttributeResponse,extra_headers, timeout_seconds) - - async def update_attribute( - self, req: policy.attributes.attributes_pb2.UpdateAttributeRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.attributes.attributes_pb2.UpdateAttributeResponse: - response = await self.call_update_attribute(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_deactivate_attribute( - self, req: policy.attributes.attributes_pb2.DeactivateAttributeRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.attributes.attributes_pb2.DeactivateAttributeResponse]: - """Low-level method to call DeactivateAttribute, granting access to errors and metadata""" - url = self.base_url + "/policy.attributes.AttributesService/DeactivateAttribute" - return await self._connect_client.call_unary(url, req, policy.attributes.attributes_pb2.DeactivateAttributeResponse,extra_headers, timeout_seconds) - - async def deactivate_attribute( - self, req: policy.attributes.attributes_pb2.DeactivateAttributeRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.attributes.attributes_pb2.DeactivateAttributeResponse: - response = await self.call_deactivate_attribute(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_get_attribute_value( - self, req: policy.attributes.attributes_pb2.GetAttributeValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.attributes.attributes_pb2.GetAttributeValueResponse]: - """Low-level method to call GetAttributeValue, granting access to errors and metadata""" - url = self.base_url + "/policy.attributes.AttributesService/GetAttributeValue" - return await self._connect_client.call_unary(url, req, policy.attributes.attributes_pb2.GetAttributeValueResponse,extra_headers, timeout_seconds) - - async def get_attribute_value( - self, req: policy.attributes.attributes_pb2.GetAttributeValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.attributes.attributes_pb2.GetAttributeValueResponse: - response = await self.call_get_attribute_value(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_create_attribute_value( - self, req: policy.attributes.attributes_pb2.CreateAttributeValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.attributes.attributes_pb2.CreateAttributeValueResponse]: - """Low-level method to call CreateAttributeValue, granting access to errors and metadata""" - url = self.base_url + "/policy.attributes.AttributesService/CreateAttributeValue" - return await self._connect_client.call_unary(url, req, policy.attributes.attributes_pb2.CreateAttributeValueResponse,extra_headers, timeout_seconds) - - async def create_attribute_value( - self, req: policy.attributes.attributes_pb2.CreateAttributeValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.attributes.attributes_pb2.CreateAttributeValueResponse: - response = await self.call_create_attribute_value(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_update_attribute_value( - self, req: policy.attributes.attributes_pb2.UpdateAttributeValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.attributes.attributes_pb2.UpdateAttributeValueResponse]: - """Low-level method to call UpdateAttributeValue, granting access to errors and metadata""" - url = self.base_url + "/policy.attributes.AttributesService/UpdateAttributeValue" - return await self._connect_client.call_unary(url, req, policy.attributes.attributes_pb2.UpdateAttributeValueResponse,extra_headers, timeout_seconds) - - async def update_attribute_value( - self, req: policy.attributes.attributes_pb2.UpdateAttributeValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.attributes.attributes_pb2.UpdateAttributeValueResponse: - response = await self.call_update_attribute_value(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_deactivate_attribute_value( - self, req: policy.attributes.attributes_pb2.DeactivateAttributeValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.attributes.attributes_pb2.DeactivateAttributeValueResponse]: - """Low-level method to call DeactivateAttributeValue, granting access to errors and metadata""" - url = self.base_url + "/policy.attributes.AttributesService/DeactivateAttributeValue" - return await self._connect_client.call_unary(url, req, policy.attributes.attributes_pb2.DeactivateAttributeValueResponse,extra_headers, timeout_seconds) - - async def deactivate_attribute_value( - self, req: policy.attributes.attributes_pb2.DeactivateAttributeValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.attributes.attributes_pb2.DeactivateAttributeValueResponse: - response = await self.call_deactivate_attribute_value(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_assign_key_access_server_to_attribute( - self, req: policy.attributes.attributes_pb2.AssignKeyAccessServerToAttributeRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.attributes.attributes_pb2.AssignKeyAccessServerToAttributeResponse]: - """Low-level method to call AssignKeyAccessServerToAttribute, granting access to errors and metadata""" - url = self.base_url + "/policy.attributes.AttributesService/AssignKeyAccessServerToAttribute" - return await self._connect_client.call_unary(url, req, policy.attributes.attributes_pb2.AssignKeyAccessServerToAttributeResponse,extra_headers, timeout_seconds) - - async def assign_key_access_server_to_attribute( - self, req: policy.attributes.attributes_pb2.AssignKeyAccessServerToAttributeRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.attributes.attributes_pb2.AssignKeyAccessServerToAttributeResponse: - response = await self.call_assign_key_access_server_to_attribute(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_remove_key_access_server_from_attribute( - self, req: policy.attributes.attributes_pb2.RemoveKeyAccessServerFromAttributeRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.attributes.attributes_pb2.RemoveKeyAccessServerFromAttributeResponse]: - """Low-level method to call RemoveKeyAccessServerFromAttribute, granting access to errors and metadata""" - url = self.base_url + "/policy.attributes.AttributesService/RemoveKeyAccessServerFromAttribute" - return await self._connect_client.call_unary(url, req, policy.attributes.attributes_pb2.RemoveKeyAccessServerFromAttributeResponse,extra_headers, timeout_seconds) - - async def remove_key_access_server_from_attribute( - self, req: policy.attributes.attributes_pb2.RemoveKeyAccessServerFromAttributeRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.attributes.attributes_pb2.RemoveKeyAccessServerFromAttributeResponse: - response = await self.call_remove_key_access_server_from_attribute(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_assign_key_access_server_to_value( - self, req: policy.attributes.attributes_pb2.AssignKeyAccessServerToValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.attributes.attributes_pb2.AssignKeyAccessServerToValueResponse]: - """Low-level method to call AssignKeyAccessServerToValue, granting access to errors and metadata""" - url = self.base_url + "/policy.attributes.AttributesService/AssignKeyAccessServerToValue" - return await self._connect_client.call_unary(url, req, policy.attributes.attributes_pb2.AssignKeyAccessServerToValueResponse,extra_headers, timeout_seconds) - - async def assign_key_access_server_to_value( - self, req: policy.attributes.attributes_pb2.AssignKeyAccessServerToValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.attributes.attributes_pb2.AssignKeyAccessServerToValueResponse: - response = await self.call_assign_key_access_server_to_value(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_remove_key_access_server_from_value( - self, req: policy.attributes.attributes_pb2.RemoveKeyAccessServerFromValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.attributes.attributes_pb2.RemoveKeyAccessServerFromValueResponse]: - """Low-level method to call RemoveKeyAccessServerFromValue, granting access to errors and metadata""" - url = self.base_url + "/policy.attributes.AttributesService/RemoveKeyAccessServerFromValue" - return await self._connect_client.call_unary(url, req, policy.attributes.attributes_pb2.RemoveKeyAccessServerFromValueResponse,extra_headers, timeout_seconds) - - async def remove_key_access_server_from_value( - self, req: policy.attributes.attributes_pb2.RemoveKeyAccessServerFromValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.attributes.attributes_pb2.RemoveKeyAccessServerFromValueResponse: - response = await self.call_remove_key_access_server_from_value(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_assign_public_key_to_attribute( - self, req: policy.attributes.attributes_pb2.AssignPublicKeyToAttributeRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.attributes.attributes_pb2.AssignPublicKeyToAttributeResponse]: - """Low-level method to call AssignPublicKeyToAttribute, granting access to errors and metadata""" - url = self.base_url + "/policy.attributes.AttributesService/AssignPublicKeyToAttribute" - return await self._connect_client.call_unary(url, req, policy.attributes.attributes_pb2.AssignPublicKeyToAttributeResponse,extra_headers, timeout_seconds) - - async def assign_public_key_to_attribute( - self, req: policy.attributes.attributes_pb2.AssignPublicKeyToAttributeRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.attributes.attributes_pb2.AssignPublicKeyToAttributeResponse: - response = await self.call_assign_public_key_to_attribute(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_remove_public_key_from_attribute( - self, req: policy.attributes.attributes_pb2.RemovePublicKeyFromAttributeRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.attributes.attributes_pb2.RemovePublicKeyFromAttributeResponse]: - """Low-level method to call RemovePublicKeyFromAttribute, granting access to errors and metadata""" - url = self.base_url + "/policy.attributes.AttributesService/RemovePublicKeyFromAttribute" - return await self._connect_client.call_unary(url, req, policy.attributes.attributes_pb2.RemovePublicKeyFromAttributeResponse,extra_headers, timeout_seconds) - - async def remove_public_key_from_attribute( - self, req: policy.attributes.attributes_pb2.RemovePublicKeyFromAttributeRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.attributes.attributes_pb2.RemovePublicKeyFromAttributeResponse: - response = await self.call_remove_public_key_from_attribute(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_assign_public_key_to_value( - self, req: policy.attributes.attributes_pb2.AssignPublicKeyToValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.attributes.attributes_pb2.AssignPublicKeyToValueResponse]: - """Low-level method to call AssignPublicKeyToValue, granting access to errors and metadata""" - url = self.base_url + "/policy.attributes.AttributesService/AssignPublicKeyToValue" - return await self._connect_client.call_unary(url, req, policy.attributes.attributes_pb2.AssignPublicKeyToValueResponse,extra_headers, timeout_seconds) - - async def assign_public_key_to_value( - self, req: policy.attributes.attributes_pb2.AssignPublicKeyToValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.attributes.attributes_pb2.AssignPublicKeyToValueResponse: - response = await self.call_assign_public_key_to_value(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_remove_public_key_from_value( - self, req: policy.attributes.attributes_pb2.RemovePublicKeyFromValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.attributes.attributes_pb2.RemovePublicKeyFromValueResponse]: - """Low-level method to call RemovePublicKeyFromValue, granting access to errors and metadata""" - url = self.base_url + "/policy.attributes.AttributesService/RemovePublicKeyFromValue" - return await self._connect_client.call_unary(url, req, policy.attributes.attributes_pb2.RemovePublicKeyFromValueResponse,extra_headers, timeout_seconds) - - async def remove_public_key_from_value( - self, req: policy.attributes.attributes_pb2.RemovePublicKeyFromValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.attributes.attributes_pb2.RemovePublicKeyFromValueResponse: - response = await self.call_remove_public_key_from_value(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - -@typing.runtime_checkable -class AttributesServiceProtocol(typing.Protocol): - def list_attributes(self, req: ClientRequest[policy.attributes.attributes_pb2.ListAttributesRequest]) -> ServerResponse[policy.attributes.attributes_pb2.ListAttributesResponse]: - ... - def list_attribute_values(self, req: ClientRequest[policy.attributes.attributes_pb2.ListAttributeValuesRequest]) -> ServerResponse[policy.attributes.attributes_pb2.ListAttributeValuesResponse]: - ... - def get_attribute(self, req: ClientRequest[policy.attributes.attributes_pb2.GetAttributeRequest]) -> ServerResponse[policy.attributes.attributes_pb2.GetAttributeResponse]: - ... - def get_attribute_values_by_fqns(self, req: ClientRequest[policy.attributes.attributes_pb2.GetAttributeValuesByFqnsRequest]) -> ServerResponse[policy.attributes.attributes_pb2.GetAttributeValuesByFqnsResponse]: - ... - def create_attribute(self, req: ClientRequest[policy.attributes.attributes_pb2.CreateAttributeRequest]) -> ServerResponse[policy.attributes.attributes_pb2.CreateAttributeResponse]: - ... - def update_attribute(self, req: ClientRequest[policy.attributes.attributes_pb2.UpdateAttributeRequest]) -> ServerResponse[policy.attributes.attributes_pb2.UpdateAttributeResponse]: - ... - def deactivate_attribute(self, req: ClientRequest[policy.attributes.attributes_pb2.DeactivateAttributeRequest]) -> ServerResponse[policy.attributes.attributes_pb2.DeactivateAttributeResponse]: - ... - def get_attribute_value(self, req: ClientRequest[policy.attributes.attributes_pb2.GetAttributeValueRequest]) -> ServerResponse[policy.attributes.attributes_pb2.GetAttributeValueResponse]: - ... - def create_attribute_value(self, req: ClientRequest[policy.attributes.attributes_pb2.CreateAttributeValueRequest]) -> ServerResponse[policy.attributes.attributes_pb2.CreateAttributeValueResponse]: - ... - def update_attribute_value(self, req: ClientRequest[policy.attributes.attributes_pb2.UpdateAttributeValueRequest]) -> ServerResponse[policy.attributes.attributes_pb2.UpdateAttributeValueResponse]: - ... - def deactivate_attribute_value(self, req: ClientRequest[policy.attributes.attributes_pb2.DeactivateAttributeValueRequest]) -> ServerResponse[policy.attributes.attributes_pb2.DeactivateAttributeValueResponse]: - ... - def assign_key_access_server_to_attribute(self, req: ClientRequest[policy.attributes.attributes_pb2.AssignKeyAccessServerToAttributeRequest]) -> ServerResponse[policy.attributes.attributes_pb2.AssignKeyAccessServerToAttributeResponse]: - ... - def remove_key_access_server_from_attribute(self, req: ClientRequest[policy.attributes.attributes_pb2.RemoveKeyAccessServerFromAttributeRequest]) -> ServerResponse[policy.attributes.attributes_pb2.RemoveKeyAccessServerFromAttributeResponse]: - ... - def assign_key_access_server_to_value(self, req: ClientRequest[policy.attributes.attributes_pb2.AssignKeyAccessServerToValueRequest]) -> ServerResponse[policy.attributes.attributes_pb2.AssignKeyAccessServerToValueResponse]: - ... - def remove_key_access_server_from_value(self, req: ClientRequest[policy.attributes.attributes_pb2.RemoveKeyAccessServerFromValueRequest]) -> ServerResponse[policy.attributes.attributes_pb2.RemoveKeyAccessServerFromValueResponse]: - ... - def assign_public_key_to_attribute(self, req: ClientRequest[policy.attributes.attributes_pb2.AssignPublicKeyToAttributeRequest]) -> ServerResponse[policy.attributes.attributes_pb2.AssignPublicKeyToAttributeResponse]: - ... - def remove_public_key_from_attribute(self, req: ClientRequest[policy.attributes.attributes_pb2.RemovePublicKeyFromAttributeRequest]) -> ServerResponse[policy.attributes.attributes_pb2.RemovePublicKeyFromAttributeResponse]: - ... - def assign_public_key_to_value(self, req: ClientRequest[policy.attributes.attributes_pb2.AssignPublicKeyToValueRequest]) -> ServerResponse[policy.attributes.attributes_pb2.AssignPublicKeyToValueResponse]: - ... - def remove_public_key_from_value(self, req: ClientRequest[policy.attributes.attributes_pb2.RemovePublicKeyFromValueRequest]) -> ServerResponse[policy.attributes.attributes_pb2.RemovePublicKeyFromValueResponse]: - ... - -ATTRIBUTES_SERVICE_PATH_PREFIX = "/policy.attributes.AttributesService" - -def wsgi_attributes_service(implementation: AttributesServiceProtocol) -> WSGIApplication: - app = ConnectWSGI() - app.register_unary_rpc("/policy.attributes.AttributesService/ListAttributes", implementation.list_attributes, policy.attributes.attributes_pb2.ListAttributesRequest) - app.register_unary_rpc("/policy.attributes.AttributesService/ListAttributeValues", implementation.list_attribute_values, policy.attributes.attributes_pb2.ListAttributeValuesRequest) - app.register_unary_rpc("/policy.attributes.AttributesService/GetAttribute", implementation.get_attribute, policy.attributes.attributes_pb2.GetAttributeRequest) - app.register_unary_rpc("/policy.attributes.AttributesService/GetAttributeValuesByFqns", implementation.get_attribute_values_by_fqns, policy.attributes.attributes_pb2.GetAttributeValuesByFqnsRequest) - app.register_unary_rpc("/policy.attributes.AttributesService/CreateAttribute", implementation.create_attribute, policy.attributes.attributes_pb2.CreateAttributeRequest) - app.register_unary_rpc("/policy.attributes.AttributesService/UpdateAttribute", implementation.update_attribute, policy.attributes.attributes_pb2.UpdateAttributeRequest) - app.register_unary_rpc("/policy.attributes.AttributesService/DeactivateAttribute", implementation.deactivate_attribute, policy.attributes.attributes_pb2.DeactivateAttributeRequest) - app.register_unary_rpc("/policy.attributes.AttributesService/GetAttributeValue", implementation.get_attribute_value, policy.attributes.attributes_pb2.GetAttributeValueRequest) - app.register_unary_rpc("/policy.attributes.AttributesService/CreateAttributeValue", implementation.create_attribute_value, policy.attributes.attributes_pb2.CreateAttributeValueRequest) - app.register_unary_rpc("/policy.attributes.AttributesService/UpdateAttributeValue", implementation.update_attribute_value, policy.attributes.attributes_pb2.UpdateAttributeValueRequest) - app.register_unary_rpc("/policy.attributes.AttributesService/DeactivateAttributeValue", implementation.deactivate_attribute_value, policy.attributes.attributes_pb2.DeactivateAttributeValueRequest) - app.register_unary_rpc("/policy.attributes.AttributesService/AssignKeyAccessServerToAttribute", implementation.assign_key_access_server_to_attribute, policy.attributes.attributes_pb2.AssignKeyAccessServerToAttributeRequest) - app.register_unary_rpc("/policy.attributes.AttributesService/RemoveKeyAccessServerFromAttribute", implementation.remove_key_access_server_from_attribute, policy.attributes.attributes_pb2.RemoveKeyAccessServerFromAttributeRequest) - app.register_unary_rpc("/policy.attributes.AttributesService/AssignKeyAccessServerToValue", implementation.assign_key_access_server_to_value, policy.attributes.attributes_pb2.AssignKeyAccessServerToValueRequest) - app.register_unary_rpc("/policy.attributes.AttributesService/RemoveKeyAccessServerFromValue", implementation.remove_key_access_server_from_value, policy.attributes.attributes_pb2.RemoveKeyAccessServerFromValueRequest) - app.register_unary_rpc("/policy.attributes.AttributesService/AssignPublicKeyToAttribute", implementation.assign_public_key_to_attribute, policy.attributes.attributes_pb2.AssignPublicKeyToAttributeRequest) - app.register_unary_rpc("/policy.attributes.AttributesService/RemovePublicKeyFromAttribute", implementation.remove_public_key_from_attribute, policy.attributes.attributes_pb2.RemovePublicKeyFromAttributeRequest) - app.register_unary_rpc("/policy.attributes.AttributesService/AssignPublicKeyToValue", implementation.assign_public_key_to_value, policy.attributes.attributes_pb2.AssignPublicKeyToValueRequest) - app.register_unary_rpc("/policy.attributes.AttributesService/RemovePublicKeyFromValue", implementation.remove_public_key_from_value, policy.attributes.attributes_pb2.RemovePublicKeyFromValueRequest) - return app diff --git a/otdf-python-proto/src/otdf_python_proto/policy/kasregistry/__init__.py b/otdf-python-proto/src/otdf_python_proto/policy/kasregistry/__init__.py new file mode 100644 index 0000000..ab5425e --- /dev/null +++ b/otdf-python-proto/src/otdf_python_proto/policy/kasregistry/__init__.py @@ -0,0 +1,11 @@ +"""policy.kasregistry protobuf definitions.""" + +from .key_access_server_registry_connect import ( + KeyAccessServerRegistryServiceClient, + KeyAccessServerRegistryServiceClientSync, +) + +__all__ = [ + "KeyAccessServerRegistryServiceClient", + "KeyAccessServerRegistryServiceClientSync", +] diff --git a/otdf-python-proto/src/otdf_python_proto/policy/kasregistry/key_access_server_registry_connect.py b/otdf-python-proto/src/otdf_python_proto/policy/kasregistry/key_access_server_registry_connect.py new file mode 100644 index 0000000..c5296ee --- /dev/null +++ b/otdf-python-proto/src/otdf_python_proto/policy/kasregistry/key_access_server_registry_connect.py @@ -0,0 +1,912 @@ +# -*- coding: utf-8 -*- +# Generated by https://github.com/connectrpc/connect-python. DO NOT EDIT! +# source: policy/kasregistry/key_access_server_registry.proto + +from collections.abc import AsyncGenerator, AsyncIterator, Iterable, Iterator, Mapping +from typing import Protocol + +from connectrpc.client import ConnectClient, ConnectClientSync +from connectrpc.code import Code +from connectrpc.errors import ConnectError +from connectrpc.interceptor import Interceptor, InterceptorSync +from connectrpc.method import IdempotencyLevel, MethodInfo +from connectrpc.request import Headers, RequestContext +from connectrpc.server import ConnectASGIApplication, ConnectWSGIApplication, Endpoint, EndpointSync +import policy.kasregistry.key_access_server_registry_pb2 as policy_dot_kasregistry_dot_key__access__server__registry__pb2 + + +class KeyAccessServerRegistryService(Protocol): + async def list_key_access_servers(self, request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.ListKeyAccessServersRequest, ctx: RequestContext) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.ListKeyAccessServersResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def get_key_access_server(self, request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.GetKeyAccessServerRequest, ctx: RequestContext) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.GetKeyAccessServerResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def create_key_access_server(self, request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.CreateKeyAccessServerRequest, ctx: RequestContext) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.CreateKeyAccessServerResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def update_key_access_server(self, request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.UpdateKeyAccessServerRequest, ctx: RequestContext) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.UpdateKeyAccessServerResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def delete_key_access_server(self, request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.DeleteKeyAccessServerRequest, ctx: RequestContext) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.DeleteKeyAccessServerResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def list_key_access_server_grants(self, request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.ListKeyAccessServerGrantsRequest, ctx: RequestContext) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.ListKeyAccessServerGrantsResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def create_key(self, request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.CreateKeyRequest, ctx: RequestContext) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.CreateKeyResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def get_key(self, request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.GetKeyRequest, ctx: RequestContext) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.GetKeyResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def list_keys(self, request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.ListKeysRequest, ctx: RequestContext) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.ListKeysResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def update_key(self, request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.UpdateKeyRequest, ctx: RequestContext) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.UpdateKeyResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def rotate_key(self, request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.RotateKeyRequest, ctx: RequestContext) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.RotateKeyResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def set_base_key(self, request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.SetBaseKeyRequest, ctx: RequestContext) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.SetBaseKeyResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def get_base_key(self, request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.GetBaseKeyRequest, ctx: RequestContext) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.GetBaseKeyResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + +class KeyAccessServerRegistryServiceASGIApplication(ConnectASGIApplication[KeyAccessServerRegistryService]): + def __init__(self, service: KeyAccessServerRegistryService | AsyncGenerator[KeyAccessServerRegistryService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None) -> None: + super().__init__( + service=service, + endpoints=lambda svc: { + "/policy.kasregistry.KeyAccessServerRegistryService/ListKeyAccessServers": Endpoint.unary( + method=MethodInfo( + name="ListKeyAccessServers", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.ListKeyAccessServersRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.ListKeyAccessServersResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + function=svc.list_key_access_servers, + ), + "/policy.kasregistry.KeyAccessServerRegistryService/GetKeyAccessServer": Endpoint.unary( + method=MethodInfo( + name="GetKeyAccessServer", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.GetKeyAccessServerRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.GetKeyAccessServerResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + function=svc.get_key_access_server, + ), + "/policy.kasregistry.KeyAccessServerRegistryService/CreateKeyAccessServer": Endpoint.unary( + method=MethodInfo( + name="CreateKeyAccessServer", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.CreateKeyAccessServerRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.CreateKeyAccessServerResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.create_key_access_server, + ), + "/policy.kasregistry.KeyAccessServerRegistryService/UpdateKeyAccessServer": Endpoint.unary( + method=MethodInfo( + name="UpdateKeyAccessServer", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.UpdateKeyAccessServerRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.UpdateKeyAccessServerResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.update_key_access_server, + ), + "/policy.kasregistry.KeyAccessServerRegistryService/DeleteKeyAccessServer": Endpoint.unary( + method=MethodInfo( + name="DeleteKeyAccessServer", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.DeleteKeyAccessServerRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.DeleteKeyAccessServerResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.delete_key_access_server, + ), + "/policy.kasregistry.KeyAccessServerRegistryService/ListKeyAccessServerGrants": Endpoint.unary( + method=MethodInfo( + name="ListKeyAccessServerGrants", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.ListKeyAccessServerGrantsRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.ListKeyAccessServerGrantsResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + function=svc.list_key_access_server_grants, + ), + "/policy.kasregistry.KeyAccessServerRegistryService/CreateKey": Endpoint.unary( + method=MethodInfo( + name="CreateKey", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.CreateKeyRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.CreateKeyResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.create_key, + ), + "/policy.kasregistry.KeyAccessServerRegistryService/GetKey": Endpoint.unary( + method=MethodInfo( + name="GetKey", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.GetKeyRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.GetKeyResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.get_key, + ), + "/policy.kasregistry.KeyAccessServerRegistryService/ListKeys": Endpoint.unary( + method=MethodInfo( + name="ListKeys", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.ListKeysRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.ListKeysResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.list_keys, + ), + "/policy.kasregistry.KeyAccessServerRegistryService/UpdateKey": Endpoint.unary( + method=MethodInfo( + name="UpdateKey", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.UpdateKeyRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.UpdateKeyResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.update_key, + ), + "/policy.kasregistry.KeyAccessServerRegistryService/RotateKey": Endpoint.unary( + method=MethodInfo( + name="RotateKey", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.RotateKeyRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.RotateKeyResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.rotate_key, + ), + "/policy.kasregistry.KeyAccessServerRegistryService/SetBaseKey": Endpoint.unary( + method=MethodInfo( + name="SetBaseKey", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.SetBaseKeyRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.SetBaseKeyResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.set_base_key, + ), + "/policy.kasregistry.KeyAccessServerRegistryService/GetBaseKey": Endpoint.unary( + method=MethodInfo( + name="GetBaseKey", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.GetBaseKeyRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.GetBaseKeyResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.get_base_key, + ), + }, + interceptors=interceptors, + read_max_bytes=read_max_bytes, + ) + + @property + def path(self) -> str: + """Returns the URL path to mount the application to when serving multiple applications.""" + return "/policy.kasregistry.KeyAccessServerRegistryService" + + +class KeyAccessServerRegistryServiceClient(ConnectClient): + async def list_key_access_servers( + self, + request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.ListKeyAccessServersRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + use_get: bool = False, + ) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.ListKeyAccessServersResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="ListKeyAccessServers", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.ListKeyAccessServersRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.ListKeyAccessServersResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + headers=headers, + timeout_ms=timeout_ms, + use_get=use_get, + ) + + async def get_key_access_server( + self, + request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.GetKeyAccessServerRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + use_get: bool = False, + ) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.GetKeyAccessServerResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="GetKeyAccessServer", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.GetKeyAccessServerRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.GetKeyAccessServerResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + headers=headers, + timeout_ms=timeout_ms, + use_get=use_get, + ) + + async def create_key_access_server( + self, + request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.CreateKeyAccessServerRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.CreateKeyAccessServerResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="CreateKeyAccessServer", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.CreateKeyAccessServerRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.CreateKeyAccessServerResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def update_key_access_server( + self, + request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.UpdateKeyAccessServerRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.UpdateKeyAccessServerResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="UpdateKeyAccessServer", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.UpdateKeyAccessServerRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.UpdateKeyAccessServerResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def delete_key_access_server( + self, + request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.DeleteKeyAccessServerRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.DeleteKeyAccessServerResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="DeleteKeyAccessServer", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.DeleteKeyAccessServerRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.DeleteKeyAccessServerResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def list_key_access_server_grants( + self, + request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.ListKeyAccessServerGrantsRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + use_get: bool = False, + ) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.ListKeyAccessServerGrantsResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="ListKeyAccessServerGrants", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.ListKeyAccessServerGrantsRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.ListKeyAccessServerGrantsResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + headers=headers, + timeout_ms=timeout_ms, + use_get=use_get, + ) + + async def create_key( + self, + request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.CreateKeyRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.CreateKeyResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="CreateKey", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.CreateKeyRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.CreateKeyResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def get_key( + self, + request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.GetKeyRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.GetKeyResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="GetKey", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.GetKeyRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.GetKeyResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def list_keys( + self, + request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.ListKeysRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.ListKeysResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="ListKeys", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.ListKeysRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.ListKeysResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def update_key( + self, + request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.UpdateKeyRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.UpdateKeyResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="UpdateKey", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.UpdateKeyRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.UpdateKeyResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def rotate_key( + self, + request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.RotateKeyRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.RotateKeyResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="RotateKey", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.RotateKeyRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.RotateKeyResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def set_base_key( + self, + request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.SetBaseKeyRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.SetBaseKeyResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="SetBaseKey", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.SetBaseKeyRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.SetBaseKeyResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def get_base_key( + self, + request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.GetBaseKeyRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.GetBaseKeyResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="GetBaseKey", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.GetBaseKeyRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.GetBaseKeyResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + +class KeyAccessServerRegistryServiceSync(Protocol): + def list_key_access_servers(self, request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.ListKeyAccessServersRequest, ctx: RequestContext) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.ListKeyAccessServersResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def get_key_access_server(self, request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.GetKeyAccessServerRequest, ctx: RequestContext) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.GetKeyAccessServerResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def create_key_access_server(self, request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.CreateKeyAccessServerRequest, ctx: RequestContext) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.CreateKeyAccessServerResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def update_key_access_server(self, request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.UpdateKeyAccessServerRequest, ctx: RequestContext) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.UpdateKeyAccessServerResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def delete_key_access_server(self, request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.DeleteKeyAccessServerRequest, ctx: RequestContext) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.DeleteKeyAccessServerResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def list_key_access_server_grants(self, request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.ListKeyAccessServerGrantsRequest, ctx: RequestContext) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.ListKeyAccessServerGrantsResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def create_key(self, request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.CreateKeyRequest, ctx: RequestContext) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.CreateKeyResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def get_key(self, request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.GetKeyRequest, ctx: RequestContext) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.GetKeyResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def list_keys(self, request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.ListKeysRequest, ctx: RequestContext) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.ListKeysResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def update_key(self, request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.UpdateKeyRequest, ctx: RequestContext) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.UpdateKeyResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def rotate_key(self, request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.RotateKeyRequest, ctx: RequestContext) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.RotateKeyResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def set_base_key(self, request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.SetBaseKeyRequest, ctx: RequestContext) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.SetBaseKeyResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def get_base_key(self, request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.GetBaseKeyRequest, ctx: RequestContext) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.GetBaseKeyResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + +class KeyAccessServerRegistryServiceWSGIApplication(ConnectWSGIApplication): + def __init__(self, service: KeyAccessServerRegistryServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None) -> None: + super().__init__( + endpoints={ + "/policy.kasregistry.KeyAccessServerRegistryService/ListKeyAccessServers": EndpointSync.unary( + method=MethodInfo( + name="ListKeyAccessServers", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.ListKeyAccessServersRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.ListKeyAccessServersResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + function=service.list_key_access_servers, + ), + "/policy.kasregistry.KeyAccessServerRegistryService/GetKeyAccessServer": EndpointSync.unary( + method=MethodInfo( + name="GetKeyAccessServer", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.GetKeyAccessServerRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.GetKeyAccessServerResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + function=service.get_key_access_server, + ), + "/policy.kasregistry.KeyAccessServerRegistryService/CreateKeyAccessServer": EndpointSync.unary( + method=MethodInfo( + name="CreateKeyAccessServer", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.CreateKeyAccessServerRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.CreateKeyAccessServerResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.create_key_access_server, + ), + "/policy.kasregistry.KeyAccessServerRegistryService/UpdateKeyAccessServer": EndpointSync.unary( + method=MethodInfo( + name="UpdateKeyAccessServer", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.UpdateKeyAccessServerRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.UpdateKeyAccessServerResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.update_key_access_server, + ), + "/policy.kasregistry.KeyAccessServerRegistryService/DeleteKeyAccessServer": EndpointSync.unary( + method=MethodInfo( + name="DeleteKeyAccessServer", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.DeleteKeyAccessServerRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.DeleteKeyAccessServerResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.delete_key_access_server, + ), + "/policy.kasregistry.KeyAccessServerRegistryService/ListKeyAccessServerGrants": EndpointSync.unary( + method=MethodInfo( + name="ListKeyAccessServerGrants", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.ListKeyAccessServerGrantsRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.ListKeyAccessServerGrantsResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + function=service.list_key_access_server_grants, + ), + "/policy.kasregistry.KeyAccessServerRegistryService/CreateKey": EndpointSync.unary( + method=MethodInfo( + name="CreateKey", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.CreateKeyRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.CreateKeyResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.create_key, + ), + "/policy.kasregistry.KeyAccessServerRegistryService/GetKey": EndpointSync.unary( + method=MethodInfo( + name="GetKey", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.GetKeyRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.GetKeyResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.get_key, + ), + "/policy.kasregistry.KeyAccessServerRegistryService/ListKeys": EndpointSync.unary( + method=MethodInfo( + name="ListKeys", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.ListKeysRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.ListKeysResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.list_keys, + ), + "/policy.kasregistry.KeyAccessServerRegistryService/UpdateKey": EndpointSync.unary( + method=MethodInfo( + name="UpdateKey", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.UpdateKeyRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.UpdateKeyResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.update_key, + ), + "/policy.kasregistry.KeyAccessServerRegistryService/RotateKey": EndpointSync.unary( + method=MethodInfo( + name="RotateKey", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.RotateKeyRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.RotateKeyResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.rotate_key, + ), + "/policy.kasregistry.KeyAccessServerRegistryService/SetBaseKey": EndpointSync.unary( + method=MethodInfo( + name="SetBaseKey", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.SetBaseKeyRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.SetBaseKeyResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.set_base_key, + ), + "/policy.kasregistry.KeyAccessServerRegistryService/GetBaseKey": EndpointSync.unary( + method=MethodInfo( + name="GetBaseKey", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.GetBaseKeyRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.GetBaseKeyResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.get_base_key, + ), + }, + interceptors=interceptors, + read_max_bytes=read_max_bytes, + ) + + @property + def path(self) -> str: + """Returns the URL path to mount the application to when serving multiple applications.""" + return "/policy.kasregistry.KeyAccessServerRegistryService" + + +class KeyAccessServerRegistryServiceClientSync(ConnectClientSync): + def list_key_access_servers( + self, + request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.ListKeyAccessServersRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + use_get: bool = False, + ) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.ListKeyAccessServersResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="ListKeyAccessServers", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.ListKeyAccessServersRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.ListKeyAccessServersResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + headers=headers, + timeout_ms=timeout_ms, + use_get=use_get, + ) + + def get_key_access_server( + self, + request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.GetKeyAccessServerRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + use_get: bool = False, + ) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.GetKeyAccessServerResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="GetKeyAccessServer", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.GetKeyAccessServerRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.GetKeyAccessServerResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + headers=headers, + timeout_ms=timeout_ms, + use_get=use_get, + ) + + def create_key_access_server( + self, + request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.CreateKeyAccessServerRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.CreateKeyAccessServerResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="CreateKeyAccessServer", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.CreateKeyAccessServerRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.CreateKeyAccessServerResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def update_key_access_server( + self, + request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.UpdateKeyAccessServerRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.UpdateKeyAccessServerResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="UpdateKeyAccessServer", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.UpdateKeyAccessServerRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.UpdateKeyAccessServerResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def delete_key_access_server( + self, + request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.DeleteKeyAccessServerRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.DeleteKeyAccessServerResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="DeleteKeyAccessServer", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.DeleteKeyAccessServerRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.DeleteKeyAccessServerResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def list_key_access_server_grants( + self, + request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.ListKeyAccessServerGrantsRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + use_get: bool = False, + ) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.ListKeyAccessServerGrantsResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="ListKeyAccessServerGrants", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.ListKeyAccessServerGrantsRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.ListKeyAccessServerGrantsResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + headers=headers, + timeout_ms=timeout_ms, + use_get=use_get, + ) + + def create_key( + self, + request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.CreateKeyRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.CreateKeyResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="CreateKey", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.CreateKeyRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.CreateKeyResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def get_key( + self, + request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.GetKeyRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.GetKeyResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="GetKey", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.GetKeyRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.GetKeyResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def list_keys( + self, + request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.ListKeysRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.ListKeysResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="ListKeys", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.ListKeysRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.ListKeysResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def update_key( + self, + request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.UpdateKeyRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.UpdateKeyResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="UpdateKey", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.UpdateKeyRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.UpdateKeyResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def rotate_key( + self, + request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.RotateKeyRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.RotateKeyResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="RotateKey", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.RotateKeyRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.RotateKeyResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def set_base_key( + self, + request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.SetBaseKeyRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.SetBaseKeyResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="SetBaseKey", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.SetBaseKeyRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.SetBaseKeyResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def get_base_key( + self, + request: policy_dot_kasregistry_dot_key__access__server__registry__pb2.GetBaseKeyRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_kasregistry_dot_key__access__server__registry__pb2.GetBaseKeyResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="GetBaseKey", + service_name="policy.kasregistry.KeyAccessServerRegistryService", + input=policy_dot_kasregistry_dot_key__access__server__registry__pb2.GetBaseKeyRequest, + output=policy_dot_kasregistry_dot_key__access__server__registry__pb2.GetBaseKeyResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) diff --git a/otdf-python-proto/src/otdf_python_proto/policy/kasregistry/key_access_server_registry_pb2_connect.py b/otdf-python-proto/src/otdf_python_proto/policy/kasregistry/key_access_server_registry_pb2_connect.py deleted file mode 100644 index 7bb54e2..0000000 --- a/otdf-python-proto/src/otdf_python_proto/policy/kasregistry/key_access_server_registry_pb2_connect.py +++ /dev/null @@ -1,611 +0,0 @@ -# Generated Connect client code - -from __future__ import annotations -from collections.abc import AsyncIterator -from collections.abc import Iterator -from collections.abc import Iterable -import aiohttp -import urllib3 -import typing -import sys - -from connectrpc.client_async import AsyncConnectClient -from connectrpc.client_sync import ConnectClient -from connectrpc.client_protocol import ConnectProtocol -from connectrpc.client_connect import ConnectProtocolError -from connectrpc.headers import HeaderInput -from connectrpc.server import ClientRequest -from connectrpc.server import ClientStream -from connectrpc.server import ServerResponse -from connectrpc.server import ServerStream -from connectrpc.server_sync import ConnectWSGI -from connectrpc.streams import StreamInput -from connectrpc.streams import AsyncStreamOutput -from connectrpc.streams import StreamOutput -from connectrpc.unary import UnaryOutput -from connectrpc.unary import ClientStreamingOutput - -if typing.TYPE_CHECKING: - # wsgiref.types was added in Python 3.11. - if sys.version_info >= (3, 11): - from wsgiref.types import WSGIApplication - else: - from _typeshed.wsgi import WSGIApplication - -import policy.kasregistry.key_access_server_registry_pb2 - -class KeyAccessServerRegistryServiceClient: - def __init__( - self, - base_url: str, - http_client: urllib3.PoolManager | None = None, - protocol: ConnectProtocol = ConnectProtocol.CONNECT_PROTOBUF, - ): - self.base_url = base_url - self._connect_client = ConnectClient(http_client, protocol) - def call_list_key_access_servers( - self, req: policy.kasregistry.key_access_server_registry_pb2.ListKeyAccessServersRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.kasregistry.key_access_server_registry_pb2.ListKeyAccessServersResponse]: - """Low-level method to call ListKeyAccessServers, granting access to errors and metadata""" - url = self.base_url + "/policy.kasregistry.KeyAccessServerRegistryService/ListKeyAccessServers" - return self._connect_client.call_unary(url, req, policy.kasregistry.key_access_server_registry_pb2.ListKeyAccessServersResponse,extra_headers, timeout_seconds) - - - def list_key_access_servers( - self, req: policy.kasregistry.key_access_server_registry_pb2.ListKeyAccessServersRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.kasregistry.key_access_server_registry_pb2.ListKeyAccessServersResponse: - response = self.call_list_key_access_servers(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_get_key_access_server( - self, req: policy.kasregistry.key_access_server_registry_pb2.GetKeyAccessServerRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.kasregistry.key_access_server_registry_pb2.GetKeyAccessServerResponse]: - """Low-level method to call GetKeyAccessServer, granting access to errors and metadata""" - url = self.base_url + "/policy.kasregistry.KeyAccessServerRegistryService/GetKeyAccessServer" - return self._connect_client.call_unary(url, req, policy.kasregistry.key_access_server_registry_pb2.GetKeyAccessServerResponse,extra_headers, timeout_seconds) - - - def get_key_access_server( - self, req: policy.kasregistry.key_access_server_registry_pb2.GetKeyAccessServerRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.kasregistry.key_access_server_registry_pb2.GetKeyAccessServerResponse: - response = self.call_get_key_access_server(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_create_key_access_server( - self, req: policy.kasregistry.key_access_server_registry_pb2.CreateKeyAccessServerRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.kasregistry.key_access_server_registry_pb2.CreateKeyAccessServerResponse]: - """Low-level method to call CreateKeyAccessServer, granting access to errors and metadata""" - url = self.base_url + "/policy.kasregistry.KeyAccessServerRegistryService/CreateKeyAccessServer" - return self._connect_client.call_unary(url, req, policy.kasregistry.key_access_server_registry_pb2.CreateKeyAccessServerResponse,extra_headers, timeout_seconds) - - - def create_key_access_server( - self, req: policy.kasregistry.key_access_server_registry_pb2.CreateKeyAccessServerRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.kasregistry.key_access_server_registry_pb2.CreateKeyAccessServerResponse: - response = self.call_create_key_access_server(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_update_key_access_server( - self, req: policy.kasregistry.key_access_server_registry_pb2.UpdateKeyAccessServerRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.kasregistry.key_access_server_registry_pb2.UpdateKeyAccessServerResponse]: - """Low-level method to call UpdateKeyAccessServer, granting access to errors and metadata""" - url = self.base_url + "/policy.kasregistry.KeyAccessServerRegistryService/UpdateKeyAccessServer" - return self._connect_client.call_unary(url, req, policy.kasregistry.key_access_server_registry_pb2.UpdateKeyAccessServerResponse,extra_headers, timeout_seconds) - - - def update_key_access_server( - self, req: policy.kasregistry.key_access_server_registry_pb2.UpdateKeyAccessServerRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.kasregistry.key_access_server_registry_pb2.UpdateKeyAccessServerResponse: - response = self.call_update_key_access_server(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_delete_key_access_server( - self, req: policy.kasregistry.key_access_server_registry_pb2.DeleteKeyAccessServerRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.kasregistry.key_access_server_registry_pb2.DeleteKeyAccessServerResponse]: - """Low-level method to call DeleteKeyAccessServer, granting access to errors and metadata""" - url = self.base_url + "/policy.kasregistry.KeyAccessServerRegistryService/DeleteKeyAccessServer" - return self._connect_client.call_unary(url, req, policy.kasregistry.key_access_server_registry_pb2.DeleteKeyAccessServerResponse,extra_headers, timeout_seconds) - - - def delete_key_access_server( - self, req: policy.kasregistry.key_access_server_registry_pb2.DeleteKeyAccessServerRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.kasregistry.key_access_server_registry_pb2.DeleteKeyAccessServerResponse: - response = self.call_delete_key_access_server(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_list_key_access_server_grants( - self, req: policy.kasregistry.key_access_server_registry_pb2.ListKeyAccessServerGrantsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.kasregistry.key_access_server_registry_pb2.ListKeyAccessServerGrantsResponse]: - """Low-level method to call ListKeyAccessServerGrants, granting access to errors and metadata""" - url = self.base_url + "/policy.kasregistry.KeyAccessServerRegistryService/ListKeyAccessServerGrants" - return self._connect_client.call_unary(url, req, policy.kasregistry.key_access_server_registry_pb2.ListKeyAccessServerGrantsResponse,extra_headers, timeout_seconds) - - - def list_key_access_server_grants( - self, req: policy.kasregistry.key_access_server_registry_pb2.ListKeyAccessServerGrantsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.kasregistry.key_access_server_registry_pb2.ListKeyAccessServerGrantsResponse: - response = self.call_list_key_access_server_grants(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_create_key( - self, req: policy.kasregistry.key_access_server_registry_pb2.CreateKeyRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.kasregistry.key_access_server_registry_pb2.CreateKeyResponse]: - """Low-level method to call CreateKey, granting access to errors and metadata""" - url = self.base_url + "/policy.kasregistry.KeyAccessServerRegistryService/CreateKey" - return self._connect_client.call_unary(url, req, policy.kasregistry.key_access_server_registry_pb2.CreateKeyResponse,extra_headers, timeout_seconds) - - - def create_key( - self, req: policy.kasregistry.key_access_server_registry_pb2.CreateKeyRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.kasregistry.key_access_server_registry_pb2.CreateKeyResponse: - response = self.call_create_key(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_get_key( - self, req: policy.kasregistry.key_access_server_registry_pb2.GetKeyRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.kasregistry.key_access_server_registry_pb2.GetKeyResponse]: - """Low-level method to call GetKey, granting access to errors and metadata""" - url = self.base_url + "/policy.kasregistry.KeyAccessServerRegistryService/GetKey" - return self._connect_client.call_unary(url, req, policy.kasregistry.key_access_server_registry_pb2.GetKeyResponse,extra_headers, timeout_seconds) - - - def get_key( - self, req: policy.kasregistry.key_access_server_registry_pb2.GetKeyRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.kasregistry.key_access_server_registry_pb2.GetKeyResponse: - response = self.call_get_key(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_list_keys( - self, req: policy.kasregistry.key_access_server_registry_pb2.ListKeysRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.kasregistry.key_access_server_registry_pb2.ListKeysResponse]: - """Low-level method to call ListKeys, granting access to errors and metadata""" - url = self.base_url + "/policy.kasregistry.KeyAccessServerRegistryService/ListKeys" - return self._connect_client.call_unary(url, req, policy.kasregistry.key_access_server_registry_pb2.ListKeysResponse,extra_headers, timeout_seconds) - - - def list_keys( - self, req: policy.kasregistry.key_access_server_registry_pb2.ListKeysRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.kasregistry.key_access_server_registry_pb2.ListKeysResponse: - response = self.call_list_keys(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_update_key( - self, req: policy.kasregistry.key_access_server_registry_pb2.UpdateKeyRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.kasregistry.key_access_server_registry_pb2.UpdateKeyResponse]: - """Low-level method to call UpdateKey, granting access to errors and metadata""" - url = self.base_url + "/policy.kasregistry.KeyAccessServerRegistryService/UpdateKey" - return self._connect_client.call_unary(url, req, policy.kasregistry.key_access_server_registry_pb2.UpdateKeyResponse,extra_headers, timeout_seconds) - - - def update_key( - self, req: policy.kasregistry.key_access_server_registry_pb2.UpdateKeyRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.kasregistry.key_access_server_registry_pb2.UpdateKeyResponse: - response = self.call_update_key(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_rotate_key( - self, req: policy.kasregistry.key_access_server_registry_pb2.RotateKeyRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.kasregistry.key_access_server_registry_pb2.RotateKeyResponse]: - """Low-level method to call RotateKey, granting access to errors and metadata""" - url = self.base_url + "/policy.kasregistry.KeyAccessServerRegistryService/RotateKey" - return self._connect_client.call_unary(url, req, policy.kasregistry.key_access_server_registry_pb2.RotateKeyResponse,extra_headers, timeout_seconds) - - - def rotate_key( - self, req: policy.kasregistry.key_access_server_registry_pb2.RotateKeyRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.kasregistry.key_access_server_registry_pb2.RotateKeyResponse: - response = self.call_rotate_key(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_set_base_key( - self, req: policy.kasregistry.key_access_server_registry_pb2.SetBaseKeyRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.kasregistry.key_access_server_registry_pb2.SetBaseKeyResponse]: - """Low-level method to call SetBaseKey, granting access to errors and metadata""" - url = self.base_url + "/policy.kasregistry.KeyAccessServerRegistryService/SetBaseKey" - return self._connect_client.call_unary(url, req, policy.kasregistry.key_access_server_registry_pb2.SetBaseKeyResponse,extra_headers, timeout_seconds) - - - def set_base_key( - self, req: policy.kasregistry.key_access_server_registry_pb2.SetBaseKeyRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.kasregistry.key_access_server_registry_pb2.SetBaseKeyResponse: - response = self.call_set_base_key(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_get_base_key( - self, req: policy.kasregistry.key_access_server_registry_pb2.GetBaseKeyRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.kasregistry.key_access_server_registry_pb2.GetBaseKeyResponse]: - """Low-level method to call GetBaseKey, granting access to errors and metadata""" - url = self.base_url + "/policy.kasregistry.KeyAccessServerRegistryService/GetBaseKey" - return self._connect_client.call_unary(url, req, policy.kasregistry.key_access_server_registry_pb2.GetBaseKeyResponse,extra_headers, timeout_seconds) - - - def get_base_key( - self, req: policy.kasregistry.key_access_server_registry_pb2.GetBaseKeyRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.kasregistry.key_access_server_registry_pb2.GetBaseKeyResponse: - response = self.call_get_base_key(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - -class AsyncKeyAccessServerRegistryServiceClient: - def __init__( - self, - base_url: str, - http_client: aiohttp.ClientSession, - protocol: ConnectProtocol = ConnectProtocol.CONNECT_PROTOBUF, - ): - self.base_url = base_url - self._connect_client = AsyncConnectClient(http_client, protocol) - - async def call_list_key_access_servers( - self, req: policy.kasregistry.key_access_server_registry_pb2.ListKeyAccessServersRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.kasregistry.key_access_server_registry_pb2.ListKeyAccessServersResponse]: - """Low-level method to call ListKeyAccessServers, granting access to errors and metadata""" - url = self.base_url + "/policy.kasregistry.KeyAccessServerRegistryService/ListKeyAccessServers" - return await self._connect_client.call_unary(url, req, policy.kasregistry.key_access_server_registry_pb2.ListKeyAccessServersResponse,extra_headers, timeout_seconds) - - async def list_key_access_servers( - self, req: policy.kasregistry.key_access_server_registry_pb2.ListKeyAccessServersRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.kasregistry.key_access_server_registry_pb2.ListKeyAccessServersResponse: - response = await self.call_list_key_access_servers(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_get_key_access_server( - self, req: policy.kasregistry.key_access_server_registry_pb2.GetKeyAccessServerRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.kasregistry.key_access_server_registry_pb2.GetKeyAccessServerResponse]: - """Low-level method to call GetKeyAccessServer, granting access to errors and metadata""" - url = self.base_url + "/policy.kasregistry.KeyAccessServerRegistryService/GetKeyAccessServer" - return await self._connect_client.call_unary(url, req, policy.kasregistry.key_access_server_registry_pb2.GetKeyAccessServerResponse,extra_headers, timeout_seconds) - - async def get_key_access_server( - self, req: policy.kasregistry.key_access_server_registry_pb2.GetKeyAccessServerRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.kasregistry.key_access_server_registry_pb2.GetKeyAccessServerResponse: - response = await self.call_get_key_access_server(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_create_key_access_server( - self, req: policy.kasregistry.key_access_server_registry_pb2.CreateKeyAccessServerRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.kasregistry.key_access_server_registry_pb2.CreateKeyAccessServerResponse]: - """Low-level method to call CreateKeyAccessServer, granting access to errors and metadata""" - url = self.base_url + "/policy.kasregistry.KeyAccessServerRegistryService/CreateKeyAccessServer" - return await self._connect_client.call_unary(url, req, policy.kasregistry.key_access_server_registry_pb2.CreateKeyAccessServerResponse,extra_headers, timeout_seconds) - - async def create_key_access_server( - self, req: policy.kasregistry.key_access_server_registry_pb2.CreateKeyAccessServerRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.kasregistry.key_access_server_registry_pb2.CreateKeyAccessServerResponse: - response = await self.call_create_key_access_server(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_update_key_access_server( - self, req: policy.kasregistry.key_access_server_registry_pb2.UpdateKeyAccessServerRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.kasregistry.key_access_server_registry_pb2.UpdateKeyAccessServerResponse]: - """Low-level method to call UpdateKeyAccessServer, granting access to errors and metadata""" - url = self.base_url + "/policy.kasregistry.KeyAccessServerRegistryService/UpdateKeyAccessServer" - return await self._connect_client.call_unary(url, req, policy.kasregistry.key_access_server_registry_pb2.UpdateKeyAccessServerResponse,extra_headers, timeout_seconds) - - async def update_key_access_server( - self, req: policy.kasregistry.key_access_server_registry_pb2.UpdateKeyAccessServerRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.kasregistry.key_access_server_registry_pb2.UpdateKeyAccessServerResponse: - response = await self.call_update_key_access_server(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_delete_key_access_server( - self, req: policy.kasregistry.key_access_server_registry_pb2.DeleteKeyAccessServerRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.kasregistry.key_access_server_registry_pb2.DeleteKeyAccessServerResponse]: - """Low-level method to call DeleteKeyAccessServer, granting access to errors and metadata""" - url = self.base_url + "/policy.kasregistry.KeyAccessServerRegistryService/DeleteKeyAccessServer" - return await self._connect_client.call_unary(url, req, policy.kasregistry.key_access_server_registry_pb2.DeleteKeyAccessServerResponse,extra_headers, timeout_seconds) - - async def delete_key_access_server( - self, req: policy.kasregistry.key_access_server_registry_pb2.DeleteKeyAccessServerRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.kasregistry.key_access_server_registry_pb2.DeleteKeyAccessServerResponse: - response = await self.call_delete_key_access_server(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_list_key_access_server_grants( - self, req: policy.kasregistry.key_access_server_registry_pb2.ListKeyAccessServerGrantsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.kasregistry.key_access_server_registry_pb2.ListKeyAccessServerGrantsResponse]: - """Low-level method to call ListKeyAccessServerGrants, granting access to errors and metadata""" - url = self.base_url + "/policy.kasregistry.KeyAccessServerRegistryService/ListKeyAccessServerGrants" - return await self._connect_client.call_unary(url, req, policy.kasregistry.key_access_server_registry_pb2.ListKeyAccessServerGrantsResponse,extra_headers, timeout_seconds) - - async def list_key_access_server_grants( - self, req: policy.kasregistry.key_access_server_registry_pb2.ListKeyAccessServerGrantsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.kasregistry.key_access_server_registry_pb2.ListKeyAccessServerGrantsResponse: - response = await self.call_list_key_access_server_grants(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_create_key( - self, req: policy.kasregistry.key_access_server_registry_pb2.CreateKeyRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.kasregistry.key_access_server_registry_pb2.CreateKeyResponse]: - """Low-level method to call CreateKey, granting access to errors and metadata""" - url = self.base_url + "/policy.kasregistry.KeyAccessServerRegistryService/CreateKey" - return await self._connect_client.call_unary(url, req, policy.kasregistry.key_access_server_registry_pb2.CreateKeyResponse,extra_headers, timeout_seconds) - - async def create_key( - self, req: policy.kasregistry.key_access_server_registry_pb2.CreateKeyRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.kasregistry.key_access_server_registry_pb2.CreateKeyResponse: - response = await self.call_create_key(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_get_key( - self, req: policy.kasregistry.key_access_server_registry_pb2.GetKeyRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.kasregistry.key_access_server_registry_pb2.GetKeyResponse]: - """Low-level method to call GetKey, granting access to errors and metadata""" - url = self.base_url + "/policy.kasregistry.KeyAccessServerRegistryService/GetKey" - return await self._connect_client.call_unary(url, req, policy.kasregistry.key_access_server_registry_pb2.GetKeyResponse,extra_headers, timeout_seconds) - - async def get_key( - self, req: policy.kasregistry.key_access_server_registry_pb2.GetKeyRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.kasregistry.key_access_server_registry_pb2.GetKeyResponse: - response = await self.call_get_key(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_list_keys( - self, req: policy.kasregistry.key_access_server_registry_pb2.ListKeysRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.kasregistry.key_access_server_registry_pb2.ListKeysResponse]: - """Low-level method to call ListKeys, granting access to errors and metadata""" - url = self.base_url + "/policy.kasregistry.KeyAccessServerRegistryService/ListKeys" - return await self._connect_client.call_unary(url, req, policy.kasregistry.key_access_server_registry_pb2.ListKeysResponse,extra_headers, timeout_seconds) - - async def list_keys( - self, req: policy.kasregistry.key_access_server_registry_pb2.ListKeysRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.kasregistry.key_access_server_registry_pb2.ListKeysResponse: - response = await self.call_list_keys(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_update_key( - self, req: policy.kasregistry.key_access_server_registry_pb2.UpdateKeyRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.kasregistry.key_access_server_registry_pb2.UpdateKeyResponse]: - """Low-level method to call UpdateKey, granting access to errors and metadata""" - url = self.base_url + "/policy.kasregistry.KeyAccessServerRegistryService/UpdateKey" - return await self._connect_client.call_unary(url, req, policy.kasregistry.key_access_server_registry_pb2.UpdateKeyResponse,extra_headers, timeout_seconds) - - async def update_key( - self, req: policy.kasregistry.key_access_server_registry_pb2.UpdateKeyRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.kasregistry.key_access_server_registry_pb2.UpdateKeyResponse: - response = await self.call_update_key(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_rotate_key( - self, req: policy.kasregistry.key_access_server_registry_pb2.RotateKeyRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.kasregistry.key_access_server_registry_pb2.RotateKeyResponse]: - """Low-level method to call RotateKey, granting access to errors and metadata""" - url = self.base_url + "/policy.kasregistry.KeyAccessServerRegistryService/RotateKey" - return await self._connect_client.call_unary(url, req, policy.kasregistry.key_access_server_registry_pb2.RotateKeyResponse,extra_headers, timeout_seconds) - - async def rotate_key( - self, req: policy.kasregistry.key_access_server_registry_pb2.RotateKeyRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.kasregistry.key_access_server_registry_pb2.RotateKeyResponse: - response = await self.call_rotate_key(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_set_base_key( - self, req: policy.kasregistry.key_access_server_registry_pb2.SetBaseKeyRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.kasregistry.key_access_server_registry_pb2.SetBaseKeyResponse]: - """Low-level method to call SetBaseKey, granting access to errors and metadata""" - url = self.base_url + "/policy.kasregistry.KeyAccessServerRegistryService/SetBaseKey" - return await self._connect_client.call_unary(url, req, policy.kasregistry.key_access_server_registry_pb2.SetBaseKeyResponse,extra_headers, timeout_seconds) - - async def set_base_key( - self, req: policy.kasregistry.key_access_server_registry_pb2.SetBaseKeyRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.kasregistry.key_access_server_registry_pb2.SetBaseKeyResponse: - response = await self.call_set_base_key(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_get_base_key( - self, req: policy.kasregistry.key_access_server_registry_pb2.GetBaseKeyRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.kasregistry.key_access_server_registry_pb2.GetBaseKeyResponse]: - """Low-level method to call GetBaseKey, granting access to errors and metadata""" - url = self.base_url + "/policy.kasregistry.KeyAccessServerRegistryService/GetBaseKey" - return await self._connect_client.call_unary(url, req, policy.kasregistry.key_access_server_registry_pb2.GetBaseKeyResponse,extra_headers, timeout_seconds) - - async def get_base_key( - self, req: policy.kasregistry.key_access_server_registry_pb2.GetBaseKeyRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.kasregistry.key_access_server_registry_pb2.GetBaseKeyResponse: - response = await self.call_get_base_key(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - -@typing.runtime_checkable -class KeyAccessServerRegistryServiceProtocol(typing.Protocol): - def list_key_access_servers(self, req: ClientRequest[policy.kasregistry.key_access_server_registry_pb2.ListKeyAccessServersRequest]) -> ServerResponse[policy.kasregistry.key_access_server_registry_pb2.ListKeyAccessServersResponse]: - ... - def get_key_access_server(self, req: ClientRequest[policy.kasregistry.key_access_server_registry_pb2.GetKeyAccessServerRequest]) -> ServerResponse[policy.kasregistry.key_access_server_registry_pb2.GetKeyAccessServerResponse]: - ... - def create_key_access_server(self, req: ClientRequest[policy.kasregistry.key_access_server_registry_pb2.CreateKeyAccessServerRequest]) -> ServerResponse[policy.kasregistry.key_access_server_registry_pb2.CreateKeyAccessServerResponse]: - ... - def update_key_access_server(self, req: ClientRequest[policy.kasregistry.key_access_server_registry_pb2.UpdateKeyAccessServerRequest]) -> ServerResponse[policy.kasregistry.key_access_server_registry_pb2.UpdateKeyAccessServerResponse]: - ... - def delete_key_access_server(self, req: ClientRequest[policy.kasregistry.key_access_server_registry_pb2.DeleteKeyAccessServerRequest]) -> ServerResponse[policy.kasregistry.key_access_server_registry_pb2.DeleteKeyAccessServerResponse]: - ... - def list_key_access_server_grants(self, req: ClientRequest[policy.kasregistry.key_access_server_registry_pb2.ListKeyAccessServerGrantsRequest]) -> ServerResponse[policy.kasregistry.key_access_server_registry_pb2.ListKeyAccessServerGrantsResponse]: - ... - def create_key(self, req: ClientRequest[policy.kasregistry.key_access_server_registry_pb2.CreateKeyRequest]) -> ServerResponse[policy.kasregistry.key_access_server_registry_pb2.CreateKeyResponse]: - ... - def get_key(self, req: ClientRequest[policy.kasregistry.key_access_server_registry_pb2.GetKeyRequest]) -> ServerResponse[policy.kasregistry.key_access_server_registry_pb2.GetKeyResponse]: - ... - def list_keys(self, req: ClientRequest[policy.kasregistry.key_access_server_registry_pb2.ListKeysRequest]) -> ServerResponse[policy.kasregistry.key_access_server_registry_pb2.ListKeysResponse]: - ... - def update_key(self, req: ClientRequest[policy.kasregistry.key_access_server_registry_pb2.UpdateKeyRequest]) -> ServerResponse[policy.kasregistry.key_access_server_registry_pb2.UpdateKeyResponse]: - ... - def rotate_key(self, req: ClientRequest[policy.kasregistry.key_access_server_registry_pb2.RotateKeyRequest]) -> ServerResponse[policy.kasregistry.key_access_server_registry_pb2.RotateKeyResponse]: - ... - def set_base_key(self, req: ClientRequest[policy.kasregistry.key_access_server_registry_pb2.SetBaseKeyRequest]) -> ServerResponse[policy.kasregistry.key_access_server_registry_pb2.SetBaseKeyResponse]: - ... - def get_base_key(self, req: ClientRequest[policy.kasregistry.key_access_server_registry_pb2.GetBaseKeyRequest]) -> ServerResponse[policy.kasregistry.key_access_server_registry_pb2.GetBaseKeyResponse]: - ... - -KEY_ACCESS_SERVER_REGISTRY_SERVICE_PATH_PREFIX = "/policy.kasregistry.KeyAccessServerRegistryService" - -def wsgi_key_access_server_registry_service(implementation: KeyAccessServerRegistryServiceProtocol) -> WSGIApplication: - app = ConnectWSGI() - app.register_unary_rpc("/policy.kasregistry.KeyAccessServerRegistryService/ListKeyAccessServers", implementation.list_key_access_servers, policy.kasregistry.key_access_server_registry_pb2.ListKeyAccessServersRequest) - app.register_unary_rpc("/policy.kasregistry.KeyAccessServerRegistryService/GetKeyAccessServer", implementation.get_key_access_server, policy.kasregistry.key_access_server_registry_pb2.GetKeyAccessServerRequest) - app.register_unary_rpc("/policy.kasregistry.KeyAccessServerRegistryService/CreateKeyAccessServer", implementation.create_key_access_server, policy.kasregistry.key_access_server_registry_pb2.CreateKeyAccessServerRequest) - app.register_unary_rpc("/policy.kasregistry.KeyAccessServerRegistryService/UpdateKeyAccessServer", implementation.update_key_access_server, policy.kasregistry.key_access_server_registry_pb2.UpdateKeyAccessServerRequest) - app.register_unary_rpc("/policy.kasregistry.KeyAccessServerRegistryService/DeleteKeyAccessServer", implementation.delete_key_access_server, policy.kasregistry.key_access_server_registry_pb2.DeleteKeyAccessServerRequest) - app.register_unary_rpc("/policy.kasregistry.KeyAccessServerRegistryService/ListKeyAccessServerGrants", implementation.list_key_access_server_grants, policy.kasregistry.key_access_server_registry_pb2.ListKeyAccessServerGrantsRequest) - app.register_unary_rpc("/policy.kasregistry.KeyAccessServerRegistryService/CreateKey", implementation.create_key, policy.kasregistry.key_access_server_registry_pb2.CreateKeyRequest) - app.register_unary_rpc("/policy.kasregistry.KeyAccessServerRegistryService/GetKey", implementation.get_key, policy.kasregistry.key_access_server_registry_pb2.GetKeyRequest) - app.register_unary_rpc("/policy.kasregistry.KeyAccessServerRegistryService/ListKeys", implementation.list_keys, policy.kasregistry.key_access_server_registry_pb2.ListKeysRequest) - app.register_unary_rpc("/policy.kasregistry.KeyAccessServerRegistryService/UpdateKey", implementation.update_key, policy.kasregistry.key_access_server_registry_pb2.UpdateKeyRequest) - app.register_unary_rpc("/policy.kasregistry.KeyAccessServerRegistryService/RotateKey", implementation.rotate_key, policy.kasregistry.key_access_server_registry_pb2.RotateKeyRequest) - app.register_unary_rpc("/policy.kasregistry.KeyAccessServerRegistryService/SetBaseKey", implementation.set_base_key, policy.kasregistry.key_access_server_registry_pb2.SetBaseKeyRequest) - app.register_unary_rpc("/policy.kasregistry.KeyAccessServerRegistryService/GetBaseKey", implementation.get_base_key, policy.kasregistry.key_access_server_registry_pb2.GetBaseKeyRequest) - return app diff --git a/otdf-python-proto/src/otdf_python_proto/policy/keymanagement/__init__.py b/otdf-python-proto/src/otdf_python_proto/policy/keymanagement/__init__.py new file mode 100644 index 0000000..70630b1 --- /dev/null +++ b/otdf-python-proto/src/otdf_python_proto/policy/keymanagement/__init__.py @@ -0,0 +1,11 @@ +"""policy.keymanagement protobuf definitions.""" + +from .key_management_connect import ( + KeyManagementServiceClient, + KeyManagementServiceClientSync, +) + +__all__ = [ + "KeyManagementServiceClient", + "KeyManagementServiceClientSync", +] diff --git a/otdf-python-proto/src/otdf_python_proto/policy/keymanagement/key_management_connect.py b/otdf-python-proto/src/otdf_python_proto/policy/keymanagement/key_management_connect.py new file mode 100644 index 0000000..3d69d05 --- /dev/null +++ b/otdf-python-proto/src/otdf_python_proto/policy/keymanagement/key_management_connect.py @@ -0,0 +1,380 @@ +# -*- coding: utf-8 -*- +# Generated by https://github.com/connectrpc/connect-python. DO NOT EDIT! +# source: policy/keymanagement/key_management.proto + +from collections.abc import AsyncGenerator, AsyncIterator, Iterable, Iterator, Mapping +from typing import Protocol + +from connectrpc.client import ConnectClient, ConnectClientSync +from connectrpc.code import Code +from connectrpc.errors import ConnectError +from connectrpc.interceptor import Interceptor, InterceptorSync +from connectrpc.method import IdempotencyLevel, MethodInfo +from connectrpc.request import Headers, RequestContext +from connectrpc.server import ConnectASGIApplication, ConnectWSGIApplication, Endpoint, EndpointSync +import policy.keymanagement.key_management_pb2 as policy_dot_keymanagement_dot_key__management__pb2 + + +class KeyManagementService(Protocol): + async def create_provider_config(self, request: policy_dot_keymanagement_dot_key__management__pb2.CreateProviderConfigRequest, ctx: RequestContext) -> policy_dot_keymanagement_dot_key__management__pb2.CreateProviderConfigResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def get_provider_config(self, request: policy_dot_keymanagement_dot_key__management__pb2.GetProviderConfigRequest, ctx: RequestContext) -> policy_dot_keymanagement_dot_key__management__pb2.GetProviderConfigResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def list_provider_configs(self, request: policy_dot_keymanagement_dot_key__management__pb2.ListProviderConfigsRequest, ctx: RequestContext) -> policy_dot_keymanagement_dot_key__management__pb2.ListProviderConfigsResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def update_provider_config(self, request: policy_dot_keymanagement_dot_key__management__pb2.UpdateProviderConfigRequest, ctx: RequestContext) -> policy_dot_keymanagement_dot_key__management__pb2.UpdateProviderConfigResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def delete_provider_config(self, request: policy_dot_keymanagement_dot_key__management__pb2.DeleteProviderConfigRequest, ctx: RequestContext) -> policy_dot_keymanagement_dot_key__management__pb2.DeleteProviderConfigResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + +class KeyManagementServiceASGIApplication(ConnectASGIApplication[KeyManagementService]): + def __init__(self, service: KeyManagementService | AsyncGenerator[KeyManagementService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None) -> None: + super().__init__( + service=service, + endpoints=lambda svc: { + "/policy.keymanagement.KeyManagementService/CreateProviderConfig": Endpoint.unary( + method=MethodInfo( + name="CreateProviderConfig", + service_name="policy.keymanagement.KeyManagementService", + input=policy_dot_keymanagement_dot_key__management__pb2.CreateProviderConfigRequest, + output=policy_dot_keymanagement_dot_key__management__pb2.CreateProviderConfigResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.create_provider_config, + ), + "/policy.keymanagement.KeyManagementService/GetProviderConfig": Endpoint.unary( + method=MethodInfo( + name="GetProviderConfig", + service_name="policy.keymanagement.KeyManagementService", + input=policy_dot_keymanagement_dot_key__management__pb2.GetProviderConfigRequest, + output=policy_dot_keymanagement_dot_key__management__pb2.GetProviderConfigResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.get_provider_config, + ), + "/policy.keymanagement.KeyManagementService/ListProviderConfigs": Endpoint.unary( + method=MethodInfo( + name="ListProviderConfigs", + service_name="policy.keymanagement.KeyManagementService", + input=policy_dot_keymanagement_dot_key__management__pb2.ListProviderConfigsRequest, + output=policy_dot_keymanagement_dot_key__management__pb2.ListProviderConfigsResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.list_provider_configs, + ), + "/policy.keymanagement.KeyManagementService/UpdateProviderConfig": Endpoint.unary( + method=MethodInfo( + name="UpdateProviderConfig", + service_name="policy.keymanagement.KeyManagementService", + input=policy_dot_keymanagement_dot_key__management__pb2.UpdateProviderConfigRequest, + output=policy_dot_keymanagement_dot_key__management__pb2.UpdateProviderConfigResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.update_provider_config, + ), + "/policy.keymanagement.KeyManagementService/DeleteProviderConfig": Endpoint.unary( + method=MethodInfo( + name="DeleteProviderConfig", + service_name="policy.keymanagement.KeyManagementService", + input=policy_dot_keymanagement_dot_key__management__pb2.DeleteProviderConfigRequest, + output=policy_dot_keymanagement_dot_key__management__pb2.DeleteProviderConfigResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.delete_provider_config, + ), + }, + interceptors=interceptors, + read_max_bytes=read_max_bytes, + ) + + @property + def path(self) -> str: + """Returns the URL path to mount the application to when serving multiple applications.""" + return "/policy.keymanagement.KeyManagementService" + + +class KeyManagementServiceClient(ConnectClient): + async def create_provider_config( + self, + request: policy_dot_keymanagement_dot_key__management__pb2.CreateProviderConfigRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_keymanagement_dot_key__management__pb2.CreateProviderConfigResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="CreateProviderConfig", + service_name="policy.keymanagement.KeyManagementService", + input=policy_dot_keymanagement_dot_key__management__pb2.CreateProviderConfigRequest, + output=policy_dot_keymanagement_dot_key__management__pb2.CreateProviderConfigResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def get_provider_config( + self, + request: policy_dot_keymanagement_dot_key__management__pb2.GetProviderConfigRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_keymanagement_dot_key__management__pb2.GetProviderConfigResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="GetProviderConfig", + service_name="policy.keymanagement.KeyManagementService", + input=policy_dot_keymanagement_dot_key__management__pb2.GetProviderConfigRequest, + output=policy_dot_keymanagement_dot_key__management__pb2.GetProviderConfigResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def list_provider_configs( + self, + request: policy_dot_keymanagement_dot_key__management__pb2.ListProviderConfigsRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_keymanagement_dot_key__management__pb2.ListProviderConfigsResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="ListProviderConfigs", + service_name="policy.keymanagement.KeyManagementService", + input=policy_dot_keymanagement_dot_key__management__pb2.ListProviderConfigsRequest, + output=policy_dot_keymanagement_dot_key__management__pb2.ListProviderConfigsResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def update_provider_config( + self, + request: policy_dot_keymanagement_dot_key__management__pb2.UpdateProviderConfigRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_keymanagement_dot_key__management__pb2.UpdateProviderConfigResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="UpdateProviderConfig", + service_name="policy.keymanagement.KeyManagementService", + input=policy_dot_keymanagement_dot_key__management__pb2.UpdateProviderConfigRequest, + output=policy_dot_keymanagement_dot_key__management__pb2.UpdateProviderConfigResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def delete_provider_config( + self, + request: policy_dot_keymanagement_dot_key__management__pb2.DeleteProviderConfigRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_keymanagement_dot_key__management__pb2.DeleteProviderConfigResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="DeleteProviderConfig", + service_name="policy.keymanagement.KeyManagementService", + input=policy_dot_keymanagement_dot_key__management__pb2.DeleteProviderConfigRequest, + output=policy_dot_keymanagement_dot_key__management__pb2.DeleteProviderConfigResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + +class KeyManagementServiceSync(Protocol): + def create_provider_config(self, request: policy_dot_keymanagement_dot_key__management__pb2.CreateProviderConfigRequest, ctx: RequestContext) -> policy_dot_keymanagement_dot_key__management__pb2.CreateProviderConfigResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def get_provider_config(self, request: policy_dot_keymanagement_dot_key__management__pb2.GetProviderConfigRequest, ctx: RequestContext) -> policy_dot_keymanagement_dot_key__management__pb2.GetProviderConfigResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def list_provider_configs(self, request: policy_dot_keymanagement_dot_key__management__pb2.ListProviderConfigsRequest, ctx: RequestContext) -> policy_dot_keymanagement_dot_key__management__pb2.ListProviderConfigsResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def update_provider_config(self, request: policy_dot_keymanagement_dot_key__management__pb2.UpdateProviderConfigRequest, ctx: RequestContext) -> policy_dot_keymanagement_dot_key__management__pb2.UpdateProviderConfigResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def delete_provider_config(self, request: policy_dot_keymanagement_dot_key__management__pb2.DeleteProviderConfigRequest, ctx: RequestContext) -> policy_dot_keymanagement_dot_key__management__pb2.DeleteProviderConfigResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + +class KeyManagementServiceWSGIApplication(ConnectWSGIApplication): + def __init__(self, service: KeyManagementServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None) -> None: + super().__init__( + endpoints={ + "/policy.keymanagement.KeyManagementService/CreateProviderConfig": EndpointSync.unary( + method=MethodInfo( + name="CreateProviderConfig", + service_name="policy.keymanagement.KeyManagementService", + input=policy_dot_keymanagement_dot_key__management__pb2.CreateProviderConfigRequest, + output=policy_dot_keymanagement_dot_key__management__pb2.CreateProviderConfigResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.create_provider_config, + ), + "/policy.keymanagement.KeyManagementService/GetProviderConfig": EndpointSync.unary( + method=MethodInfo( + name="GetProviderConfig", + service_name="policy.keymanagement.KeyManagementService", + input=policy_dot_keymanagement_dot_key__management__pb2.GetProviderConfigRequest, + output=policy_dot_keymanagement_dot_key__management__pb2.GetProviderConfigResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.get_provider_config, + ), + "/policy.keymanagement.KeyManagementService/ListProviderConfigs": EndpointSync.unary( + method=MethodInfo( + name="ListProviderConfigs", + service_name="policy.keymanagement.KeyManagementService", + input=policy_dot_keymanagement_dot_key__management__pb2.ListProviderConfigsRequest, + output=policy_dot_keymanagement_dot_key__management__pb2.ListProviderConfigsResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.list_provider_configs, + ), + "/policy.keymanagement.KeyManagementService/UpdateProviderConfig": EndpointSync.unary( + method=MethodInfo( + name="UpdateProviderConfig", + service_name="policy.keymanagement.KeyManagementService", + input=policy_dot_keymanagement_dot_key__management__pb2.UpdateProviderConfigRequest, + output=policy_dot_keymanagement_dot_key__management__pb2.UpdateProviderConfigResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.update_provider_config, + ), + "/policy.keymanagement.KeyManagementService/DeleteProviderConfig": EndpointSync.unary( + method=MethodInfo( + name="DeleteProviderConfig", + service_name="policy.keymanagement.KeyManagementService", + input=policy_dot_keymanagement_dot_key__management__pb2.DeleteProviderConfigRequest, + output=policy_dot_keymanagement_dot_key__management__pb2.DeleteProviderConfigResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.delete_provider_config, + ), + }, + interceptors=interceptors, + read_max_bytes=read_max_bytes, + ) + + @property + def path(self) -> str: + """Returns the URL path to mount the application to when serving multiple applications.""" + return "/policy.keymanagement.KeyManagementService" + + +class KeyManagementServiceClientSync(ConnectClientSync): + def create_provider_config( + self, + request: policy_dot_keymanagement_dot_key__management__pb2.CreateProviderConfigRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_keymanagement_dot_key__management__pb2.CreateProviderConfigResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="CreateProviderConfig", + service_name="policy.keymanagement.KeyManagementService", + input=policy_dot_keymanagement_dot_key__management__pb2.CreateProviderConfigRequest, + output=policy_dot_keymanagement_dot_key__management__pb2.CreateProviderConfigResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def get_provider_config( + self, + request: policy_dot_keymanagement_dot_key__management__pb2.GetProviderConfigRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_keymanagement_dot_key__management__pb2.GetProviderConfigResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="GetProviderConfig", + service_name="policy.keymanagement.KeyManagementService", + input=policy_dot_keymanagement_dot_key__management__pb2.GetProviderConfigRequest, + output=policy_dot_keymanagement_dot_key__management__pb2.GetProviderConfigResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def list_provider_configs( + self, + request: policy_dot_keymanagement_dot_key__management__pb2.ListProviderConfigsRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_keymanagement_dot_key__management__pb2.ListProviderConfigsResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="ListProviderConfigs", + service_name="policy.keymanagement.KeyManagementService", + input=policy_dot_keymanagement_dot_key__management__pb2.ListProviderConfigsRequest, + output=policy_dot_keymanagement_dot_key__management__pb2.ListProviderConfigsResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def update_provider_config( + self, + request: policy_dot_keymanagement_dot_key__management__pb2.UpdateProviderConfigRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_keymanagement_dot_key__management__pb2.UpdateProviderConfigResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="UpdateProviderConfig", + service_name="policy.keymanagement.KeyManagementService", + input=policy_dot_keymanagement_dot_key__management__pb2.UpdateProviderConfigRequest, + output=policy_dot_keymanagement_dot_key__management__pb2.UpdateProviderConfigResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def delete_provider_config( + self, + request: policy_dot_keymanagement_dot_key__management__pb2.DeleteProviderConfigRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_keymanagement_dot_key__management__pb2.DeleteProviderConfigResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="DeleteProviderConfig", + service_name="policy.keymanagement.KeyManagementService", + input=policy_dot_keymanagement_dot_key__management__pb2.DeleteProviderConfigRequest, + output=policy_dot_keymanagement_dot_key__management__pb2.DeleteProviderConfigResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) diff --git a/otdf-python-proto/src/otdf_python_proto/policy/keymanagement/key_management_pb2_connect.py b/otdf-python-proto/src/otdf_python_proto/policy/keymanagement/key_management_pb2_connect.py deleted file mode 100644 index 8db118f..0000000 --- a/otdf-python-proto/src/otdf_python_proto/policy/keymanagement/key_management_pb2_connect.py +++ /dev/null @@ -1,275 +0,0 @@ -# Generated Connect client code - -from __future__ import annotations -from collections.abc import AsyncIterator -from collections.abc import Iterator -from collections.abc import Iterable -import aiohttp -import urllib3 -import typing -import sys - -from connectrpc.client_async import AsyncConnectClient -from connectrpc.client_sync import ConnectClient -from connectrpc.client_protocol import ConnectProtocol -from connectrpc.client_connect import ConnectProtocolError -from connectrpc.headers import HeaderInput -from connectrpc.server import ClientRequest -from connectrpc.server import ClientStream -from connectrpc.server import ServerResponse -from connectrpc.server import ServerStream -from connectrpc.server_sync import ConnectWSGI -from connectrpc.streams import StreamInput -from connectrpc.streams import AsyncStreamOutput -from connectrpc.streams import StreamOutput -from connectrpc.unary import UnaryOutput -from connectrpc.unary import ClientStreamingOutput - -if typing.TYPE_CHECKING: - # wsgiref.types was added in Python 3.11. - if sys.version_info >= (3, 11): - from wsgiref.types import WSGIApplication - else: - from _typeshed.wsgi import WSGIApplication - -import policy.keymanagement.key_management_pb2 - -class KeyManagementServiceClient: - def __init__( - self, - base_url: str, - http_client: urllib3.PoolManager | None = None, - protocol: ConnectProtocol = ConnectProtocol.CONNECT_PROTOBUF, - ): - self.base_url = base_url - self._connect_client = ConnectClient(http_client, protocol) - def call_create_provider_config( - self, req: policy.keymanagement.key_management_pb2.CreateProviderConfigRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.keymanagement.key_management_pb2.CreateProviderConfigResponse]: - """Low-level method to call CreateProviderConfig, granting access to errors and metadata""" - url = self.base_url + "/policy.keymanagement.KeyManagementService/CreateProviderConfig" - return self._connect_client.call_unary(url, req, policy.keymanagement.key_management_pb2.CreateProviderConfigResponse,extra_headers, timeout_seconds) - - - def create_provider_config( - self, req: policy.keymanagement.key_management_pb2.CreateProviderConfigRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.keymanagement.key_management_pb2.CreateProviderConfigResponse: - response = self.call_create_provider_config(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_get_provider_config( - self, req: policy.keymanagement.key_management_pb2.GetProviderConfigRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.keymanagement.key_management_pb2.GetProviderConfigResponse]: - """Low-level method to call GetProviderConfig, granting access to errors and metadata""" - url = self.base_url + "/policy.keymanagement.KeyManagementService/GetProviderConfig" - return self._connect_client.call_unary(url, req, policy.keymanagement.key_management_pb2.GetProviderConfigResponse,extra_headers, timeout_seconds) - - - def get_provider_config( - self, req: policy.keymanagement.key_management_pb2.GetProviderConfigRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.keymanagement.key_management_pb2.GetProviderConfigResponse: - response = self.call_get_provider_config(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_list_provider_configs( - self, req: policy.keymanagement.key_management_pb2.ListProviderConfigsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.keymanagement.key_management_pb2.ListProviderConfigsResponse]: - """Low-level method to call ListProviderConfigs, granting access to errors and metadata""" - url = self.base_url + "/policy.keymanagement.KeyManagementService/ListProviderConfigs" - return self._connect_client.call_unary(url, req, policy.keymanagement.key_management_pb2.ListProviderConfigsResponse,extra_headers, timeout_seconds) - - - def list_provider_configs( - self, req: policy.keymanagement.key_management_pb2.ListProviderConfigsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.keymanagement.key_management_pb2.ListProviderConfigsResponse: - response = self.call_list_provider_configs(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_update_provider_config( - self, req: policy.keymanagement.key_management_pb2.UpdateProviderConfigRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.keymanagement.key_management_pb2.UpdateProviderConfigResponse]: - """Low-level method to call UpdateProviderConfig, granting access to errors and metadata""" - url = self.base_url + "/policy.keymanagement.KeyManagementService/UpdateProviderConfig" - return self._connect_client.call_unary(url, req, policy.keymanagement.key_management_pb2.UpdateProviderConfigResponse,extra_headers, timeout_seconds) - - - def update_provider_config( - self, req: policy.keymanagement.key_management_pb2.UpdateProviderConfigRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.keymanagement.key_management_pb2.UpdateProviderConfigResponse: - response = self.call_update_provider_config(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_delete_provider_config( - self, req: policy.keymanagement.key_management_pb2.DeleteProviderConfigRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.keymanagement.key_management_pb2.DeleteProviderConfigResponse]: - """Low-level method to call DeleteProviderConfig, granting access to errors and metadata""" - url = self.base_url + "/policy.keymanagement.KeyManagementService/DeleteProviderConfig" - return self._connect_client.call_unary(url, req, policy.keymanagement.key_management_pb2.DeleteProviderConfigResponse,extra_headers, timeout_seconds) - - - def delete_provider_config( - self, req: policy.keymanagement.key_management_pb2.DeleteProviderConfigRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.keymanagement.key_management_pb2.DeleteProviderConfigResponse: - response = self.call_delete_provider_config(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - -class AsyncKeyManagementServiceClient: - def __init__( - self, - base_url: str, - http_client: aiohttp.ClientSession, - protocol: ConnectProtocol = ConnectProtocol.CONNECT_PROTOBUF, - ): - self.base_url = base_url - self._connect_client = AsyncConnectClient(http_client, protocol) - - async def call_create_provider_config( - self, req: policy.keymanagement.key_management_pb2.CreateProviderConfigRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.keymanagement.key_management_pb2.CreateProviderConfigResponse]: - """Low-level method to call CreateProviderConfig, granting access to errors and metadata""" - url = self.base_url + "/policy.keymanagement.KeyManagementService/CreateProviderConfig" - return await self._connect_client.call_unary(url, req, policy.keymanagement.key_management_pb2.CreateProviderConfigResponse,extra_headers, timeout_seconds) - - async def create_provider_config( - self, req: policy.keymanagement.key_management_pb2.CreateProviderConfigRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.keymanagement.key_management_pb2.CreateProviderConfigResponse: - response = await self.call_create_provider_config(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_get_provider_config( - self, req: policy.keymanagement.key_management_pb2.GetProviderConfigRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.keymanagement.key_management_pb2.GetProviderConfigResponse]: - """Low-level method to call GetProviderConfig, granting access to errors and metadata""" - url = self.base_url + "/policy.keymanagement.KeyManagementService/GetProviderConfig" - return await self._connect_client.call_unary(url, req, policy.keymanagement.key_management_pb2.GetProviderConfigResponse,extra_headers, timeout_seconds) - - async def get_provider_config( - self, req: policy.keymanagement.key_management_pb2.GetProviderConfigRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.keymanagement.key_management_pb2.GetProviderConfigResponse: - response = await self.call_get_provider_config(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_list_provider_configs( - self, req: policy.keymanagement.key_management_pb2.ListProviderConfigsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.keymanagement.key_management_pb2.ListProviderConfigsResponse]: - """Low-level method to call ListProviderConfigs, granting access to errors and metadata""" - url = self.base_url + "/policy.keymanagement.KeyManagementService/ListProviderConfigs" - return await self._connect_client.call_unary(url, req, policy.keymanagement.key_management_pb2.ListProviderConfigsResponse,extra_headers, timeout_seconds) - - async def list_provider_configs( - self, req: policy.keymanagement.key_management_pb2.ListProviderConfigsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.keymanagement.key_management_pb2.ListProviderConfigsResponse: - response = await self.call_list_provider_configs(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_update_provider_config( - self, req: policy.keymanagement.key_management_pb2.UpdateProviderConfigRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.keymanagement.key_management_pb2.UpdateProviderConfigResponse]: - """Low-level method to call UpdateProviderConfig, granting access to errors and metadata""" - url = self.base_url + "/policy.keymanagement.KeyManagementService/UpdateProviderConfig" - return await self._connect_client.call_unary(url, req, policy.keymanagement.key_management_pb2.UpdateProviderConfigResponse,extra_headers, timeout_seconds) - - async def update_provider_config( - self, req: policy.keymanagement.key_management_pb2.UpdateProviderConfigRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.keymanagement.key_management_pb2.UpdateProviderConfigResponse: - response = await self.call_update_provider_config(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_delete_provider_config( - self, req: policy.keymanagement.key_management_pb2.DeleteProviderConfigRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.keymanagement.key_management_pb2.DeleteProviderConfigResponse]: - """Low-level method to call DeleteProviderConfig, granting access to errors and metadata""" - url = self.base_url + "/policy.keymanagement.KeyManagementService/DeleteProviderConfig" - return await self._connect_client.call_unary(url, req, policy.keymanagement.key_management_pb2.DeleteProviderConfigResponse,extra_headers, timeout_seconds) - - async def delete_provider_config( - self, req: policy.keymanagement.key_management_pb2.DeleteProviderConfigRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.keymanagement.key_management_pb2.DeleteProviderConfigResponse: - response = await self.call_delete_provider_config(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - -@typing.runtime_checkable -class KeyManagementServiceProtocol(typing.Protocol): - def create_provider_config(self, req: ClientRequest[policy.keymanagement.key_management_pb2.CreateProviderConfigRequest]) -> ServerResponse[policy.keymanagement.key_management_pb2.CreateProviderConfigResponse]: - ... - def get_provider_config(self, req: ClientRequest[policy.keymanagement.key_management_pb2.GetProviderConfigRequest]) -> ServerResponse[policy.keymanagement.key_management_pb2.GetProviderConfigResponse]: - ... - def list_provider_configs(self, req: ClientRequest[policy.keymanagement.key_management_pb2.ListProviderConfigsRequest]) -> ServerResponse[policy.keymanagement.key_management_pb2.ListProviderConfigsResponse]: - ... - def update_provider_config(self, req: ClientRequest[policy.keymanagement.key_management_pb2.UpdateProviderConfigRequest]) -> ServerResponse[policy.keymanagement.key_management_pb2.UpdateProviderConfigResponse]: - ... - def delete_provider_config(self, req: ClientRequest[policy.keymanagement.key_management_pb2.DeleteProviderConfigRequest]) -> ServerResponse[policy.keymanagement.key_management_pb2.DeleteProviderConfigResponse]: - ... - -KEY_MANAGEMENT_SERVICE_PATH_PREFIX = "/policy.keymanagement.KeyManagementService" - -def wsgi_key_management_service(implementation: KeyManagementServiceProtocol) -> WSGIApplication: - app = ConnectWSGI() - app.register_unary_rpc("/policy.keymanagement.KeyManagementService/CreateProviderConfig", implementation.create_provider_config, policy.keymanagement.key_management_pb2.CreateProviderConfigRequest) - app.register_unary_rpc("/policy.keymanagement.KeyManagementService/GetProviderConfig", implementation.get_provider_config, policy.keymanagement.key_management_pb2.GetProviderConfigRequest) - app.register_unary_rpc("/policy.keymanagement.KeyManagementService/ListProviderConfigs", implementation.list_provider_configs, policy.keymanagement.key_management_pb2.ListProviderConfigsRequest) - app.register_unary_rpc("/policy.keymanagement.KeyManagementService/UpdateProviderConfig", implementation.update_provider_config, policy.keymanagement.key_management_pb2.UpdateProviderConfigRequest) - app.register_unary_rpc("/policy.keymanagement.KeyManagementService/DeleteProviderConfig", implementation.delete_provider_config, policy.keymanagement.key_management_pb2.DeleteProviderConfigRequest) - return app diff --git a/otdf-python-proto/src/otdf_python_proto/policy/namespaces/__init__.py b/otdf-python-proto/src/otdf_python_proto/policy/namespaces/__init__.py new file mode 100644 index 0000000..746a661 --- /dev/null +++ b/otdf-python-proto/src/otdf_python_proto/policy/namespaces/__init__.py @@ -0,0 +1,11 @@ +"""policy.namespaces protobuf definitions.""" + +from .namespaces_connect import ( + NamespaceServiceClient, + NamespaceServiceClientSync, +) + +__all__ = [ + "NamespaceServiceClient", + "NamespaceServiceClientSync", +] diff --git a/otdf-python-proto/src/otdf_python_proto/policy/namespaces/namespaces_connect.py b/otdf-python-proto/src/otdf_python_proto/policy/namespaces/namespaces_connect.py new file mode 100644 index 0000000..d923619 --- /dev/null +++ b/otdf-python-proto/src/otdf_python_proto/policy/namespaces/namespaces_connect.py @@ -0,0 +1,648 @@ +# -*- coding: utf-8 -*- +# Generated by https://github.com/connectrpc/connect-python. DO NOT EDIT! +# source: policy/namespaces/namespaces.proto + +from collections.abc import AsyncGenerator, AsyncIterator, Iterable, Iterator, Mapping +from typing import Protocol + +from connectrpc.client import ConnectClient, ConnectClientSync +from connectrpc.code import Code +from connectrpc.errors import ConnectError +from connectrpc.interceptor import Interceptor, InterceptorSync +from connectrpc.method import IdempotencyLevel, MethodInfo +from connectrpc.request import Headers, RequestContext +from connectrpc.server import ConnectASGIApplication, ConnectWSGIApplication, Endpoint, EndpointSync +import policy.namespaces.namespaces_pb2 as policy_dot_namespaces_dot_namespaces__pb2 + + +class NamespaceService(Protocol): + async def get_namespace(self, request: policy_dot_namespaces_dot_namespaces__pb2.GetNamespaceRequest, ctx: RequestContext) -> policy_dot_namespaces_dot_namespaces__pb2.GetNamespaceResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def list_namespaces(self, request: policy_dot_namespaces_dot_namespaces__pb2.ListNamespacesRequest, ctx: RequestContext) -> policy_dot_namespaces_dot_namespaces__pb2.ListNamespacesResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def create_namespace(self, request: policy_dot_namespaces_dot_namespaces__pb2.CreateNamespaceRequest, ctx: RequestContext) -> policy_dot_namespaces_dot_namespaces__pb2.CreateNamespaceResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def update_namespace(self, request: policy_dot_namespaces_dot_namespaces__pb2.UpdateNamespaceRequest, ctx: RequestContext) -> policy_dot_namespaces_dot_namespaces__pb2.UpdateNamespaceResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def deactivate_namespace(self, request: policy_dot_namespaces_dot_namespaces__pb2.DeactivateNamespaceRequest, ctx: RequestContext) -> policy_dot_namespaces_dot_namespaces__pb2.DeactivateNamespaceResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def assign_key_access_server_to_namespace(self, request: policy_dot_namespaces_dot_namespaces__pb2.AssignKeyAccessServerToNamespaceRequest, ctx: RequestContext) -> policy_dot_namespaces_dot_namespaces__pb2.AssignKeyAccessServerToNamespaceResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def remove_key_access_server_from_namespace(self, request: policy_dot_namespaces_dot_namespaces__pb2.RemoveKeyAccessServerFromNamespaceRequest, ctx: RequestContext) -> policy_dot_namespaces_dot_namespaces__pb2.RemoveKeyAccessServerFromNamespaceResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def assign_public_key_to_namespace(self, request: policy_dot_namespaces_dot_namespaces__pb2.AssignPublicKeyToNamespaceRequest, ctx: RequestContext) -> policy_dot_namespaces_dot_namespaces__pb2.AssignPublicKeyToNamespaceResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def remove_public_key_from_namespace(self, request: policy_dot_namespaces_dot_namespaces__pb2.RemovePublicKeyFromNamespaceRequest, ctx: RequestContext) -> policy_dot_namespaces_dot_namespaces__pb2.RemovePublicKeyFromNamespaceResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + +class NamespaceServiceASGIApplication(ConnectASGIApplication[NamespaceService]): + def __init__(self, service: NamespaceService | AsyncGenerator[NamespaceService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None) -> None: + super().__init__( + service=service, + endpoints=lambda svc: { + "/policy.namespaces.NamespaceService/GetNamespace": Endpoint.unary( + method=MethodInfo( + name="GetNamespace", + service_name="policy.namespaces.NamespaceService", + input=policy_dot_namespaces_dot_namespaces__pb2.GetNamespaceRequest, + output=policy_dot_namespaces_dot_namespaces__pb2.GetNamespaceResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + function=svc.get_namespace, + ), + "/policy.namespaces.NamespaceService/ListNamespaces": Endpoint.unary( + method=MethodInfo( + name="ListNamespaces", + service_name="policy.namespaces.NamespaceService", + input=policy_dot_namespaces_dot_namespaces__pb2.ListNamespacesRequest, + output=policy_dot_namespaces_dot_namespaces__pb2.ListNamespacesResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + function=svc.list_namespaces, + ), + "/policy.namespaces.NamespaceService/CreateNamespace": Endpoint.unary( + method=MethodInfo( + name="CreateNamespace", + service_name="policy.namespaces.NamespaceService", + input=policy_dot_namespaces_dot_namespaces__pb2.CreateNamespaceRequest, + output=policy_dot_namespaces_dot_namespaces__pb2.CreateNamespaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.create_namespace, + ), + "/policy.namespaces.NamespaceService/UpdateNamespace": Endpoint.unary( + method=MethodInfo( + name="UpdateNamespace", + service_name="policy.namespaces.NamespaceService", + input=policy_dot_namespaces_dot_namespaces__pb2.UpdateNamespaceRequest, + output=policy_dot_namespaces_dot_namespaces__pb2.UpdateNamespaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.update_namespace, + ), + "/policy.namespaces.NamespaceService/DeactivateNamespace": Endpoint.unary( + method=MethodInfo( + name="DeactivateNamespace", + service_name="policy.namespaces.NamespaceService", + input=policy_dot_namespaces_dot_namespaces__pb2.DeactivateNamespaceRequest, + output=policy_dot_namespaces_dot_namespaces__pb2.DeactivateNamespaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.deactivate_namespace, + ), + "/policy.namespaces.NamespaceService/AssignKeyAccessServerToNamespace": Endpoint.unary( + method=MethodInfo( + name="AssignKeyAccessServerToNamespace", + service_name="policy.namespaces.NamespaceService", + input=policy_dot_namespaces_dot_namespaces__pb2.AssignKeyAccessServerToNamespaceRequest, + output=policy_dot_namespaces_dot_namespaces__pb2.AssignKeyAccessServerToNamespaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.assign_key_access_server_to_namespace, + ), + "/policy.namespaces.NamespaceService/RemoveKeyAccessServerFromNamespace": Endpoint.unary( + method=MethodInfo( + name="RemoveKeyAccessServerFromNamespace", + service_name="policy.namespaces.NamespaceService", + input=policy_dot_namespaces_dot_namespaces__pb2.RemoveKeyAccessServerFromNamespaceRequest, + output=policy_dot_namespaces_dot_namespaces__pb2.RemoveKeyAccessServerFromNamespaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.remove_key_access_server_from_namespace, + ), + "/policy.namespaces.NamespaceService/AssignPublicKeyToNamespace": Endpoint.unary( + method=MethodInfo( + name="AssignPublicKeyToNamespace", + service_name="policy.namespaces.NamespaceService", + input=policy_dot_namespaces_dot_namespaces__pb2.AssignPublicKeyToNamespaceRequest, + output=policy_dot_namespaces_dot_namespaces__pb2.AssignPublicKeyToNamespaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.assign_public_key_to_namespace, + ), + "/policy.namespaces.NamespaceService/RemovePublicKeyFromNamespace": Endpoint.unary( + method=MethodInfo( + name="RemovePublicKeyFromNamespace", + service_name="policy.namespaces.NamespaceService", + input=policy_dot_namespaces_dot_namespaces__pb2.RemovePublicKeyFromNamespaceRequest, + output=policy_dot_namespaces_dot_namespaces__pb2.RemovePublicKeyFromNamespaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.remove_public_key_from_namespace, + ), + }, + interceptors=interceptors, + read_max_bytes=read_max_bytes, + ) + + @property + def path(self) -> str: + """Returns the URL path to mount the application to when serving multiple applications.""" + return "/policy.namespaces.NamespaceService" + + +class NamespaceServiceClient(ConnectClient): + async def get_namespace( + self, + request: policy_dot_namespaces_dot_namespaces__pb2.GetNamespaceRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + use_get: bool = False, + ) -> policy_dot_namespaces_dot_namespaces__pb2.GetNamespaceResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="GetNamespace", + service_name="policy.namespaces.NamespaceService", + input=policy_dot_namespaces_dot_namespaces__pb2.GetNamespaceRequest, + output=policy_dot_namespaces_dot_namespaces__pb2.GetNamespaceResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + headers=headers, + timeout_ms=timeout_ms, + use_get=use_get, + ) + + async def list_namespaces( + self, + request: policy_dot_namespaces_dot_namespaces__pb2.ListNamespacesRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + use_get: bool = False, + ) -> policy_dot_namespaces_dot_namespaces__pb2.ListNamespacesResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="ListNamespaces", + service_name="policy.namespaces.NamespaceService", + input=policy_dot_namespaces_dot_namespaces__pb2.ListNamespacesRequest, + output=policy_dot_namespaces_dot_namespaces__pb2.ListNamespacesResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + headers=headers, + timeout_ms=timeout_ms, + use_get=use_get, + ) + + async def create_namespace( + self, + request: policy_dot_namespaces_dot_namespaces__pb2.CreateNamespaceRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_namespaces_dot_namespaces__pb2.CreateNamespaceResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="CreateNamespace", + service_name="policy.namespaces.NamespaceService", + input=policy_dot_namespaces_dot_namespaces__pb2.CreateNamespaceRequest, + output=policy_dot_namespaces_dot_namespaces__pb2.CreateNamespaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def update_namespace( + self, + request: policy_dot_namespaces_dot_namespaces__pb2.UpdateNamespaceRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_namespaces_dot_namespaces__pb2.UpdateNamespaceResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="UpdateNamespace", + service_name="policy.namespaces.NamespaceService", + input=policy_dot_namespaces_dot_namespaces__pb2.UpdateNamespaceRequest, + output=policy_dot_namespaces_dot_namespaces__pb2.UpdateNamespaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def deactivate_namespace( + self, + request: policy_dot_namespaces_dot_namespaces__pb2.DeactivateNamespaceRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_namespaces_dot_namespaces__pb2.DeactivateNamespaceResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="DeactivateNamespace", + service_name="policy.namespaces.NamespaceService", + input=policy_dot_namespaces_dot_namespaces__pb2.DeactivateNamespaceRequest, + output=policy_dot_namespaces_dot_namespaces__pb2.DeactivateNamespaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def assign_key_access_server_to_namespace( + self, + request: policy_dot_namespaces_dot_namespaces__pb2.AssignKeyAccessServerToNamespaceRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_namespaces_dot_namespaces__pb2.AssignKeyAccessServerToNamespaceResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="AssignKeyAccessServerToNamespace", + service_name="policy.namespaces.NamespaceService", + input=policy_dot_namespaces_dot_namespaces__pb2.AssignKeyAccessServerToNamespaceRequest, + output=policy_dot_namespaces_dot_namespaces__pb2.AssignKeyAccessServerToNamespaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def remove_key_access_server_from_namespace( + self, + request: policy_dot_namespaces_dot_namespaces__pb2.RemoveKeyAccessServerFromNamespaceRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_namespaces_dot_namespaces__pb2.RemoveKeyAccessServerFromNamespaceResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="RemoveKeyAccessServerFromNamespace", + service_name="policy.namespaces.NamespaceService", + input=policy_dot_namespaces_dot_namespaces__pb2.RemoveKeyAccessServerFromNamespaceRequest, + output=policy_dot_namespaces_dot_namespaces__pb2.RemoveKeyAccessServerFromNamespaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def assign_public_key_to_namespace( + self, + request: policy_dot_namespaces_dot_namespaces__pb2.AssignPublicKeyToNamespaceRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_namespaces_dot_namespaces__pb2.AssignPublicKeyToNamespaceResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="AssignPublicKeyToNamespace", + service_name="policy.namespaces.NamespaceService", + input=policy_dot_namespaces_dot_namespaces__pb2.AssignPublicKeyToNamespaceRequest, + output=policy_dot_namespaces_dot_namespaces__pb2.AssignPublicKeyToNamespaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def remove_public_key_from_namespace( + self, + request: policy_dot_namespaces_dot_namespaces__pb2.RemovePublicKeyFromNamespaceRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_namespaces_dot_namespaces__pb2.RemovePublicKeyFromNamespaceResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="RemovePublicKeyFromNamespace", + service_name="policy.namespaces.NamespaceService", + input=policy_dot_namespaces_dot_namespaces__pb2.RemovePublicKeyFromNamespaceRequest, + output=policy_dot_namespaces_dot_namespaces__pb2.RemovePublicKeyFromNamespaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + +class NamespaceServiceSync(Protocol): + def get_namespace(self, request: policy_dot_namespaces_dot_namespaces__pb2.GetNamespaceRequest, ctx: RequestContext) -> policy_dot_namespaces_dot_namespaces__pb2.GetNamespaceResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def list_namespaces(self, request: policy_dot_namespaces_dot_namespaces__pb2.ListNamespacesRequest, ctx: RequestContext) -> policy_dot_namespaces_dot_namespaces__pb2.ListNamespacesResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def create_namespace(self, request: policy_dot_namespaces_dot_namespaces__pb2.CreateNamespaceRequest, ctx: RequestContext) -> policy_dot_namespaces_dot_namespaces__pb2.CreateNamespaceResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def update_namespace(self, request: policy_dot_namespaces_dot_namespaces__pb2.UpdateNamespaceRequest, ctx: RequestContext) -> policy_dot_namespaces_dot_namespaces__pb2.UpdateNamespaceResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def deactivate_namespace(self, request: policy_dot_namespaces_dot_namespaces__pb2.DeactivateNamespaceRequest, ctx: RequestContext) -> policy_dot_namespaces_dot_namespaces__pb2.DeactivateNamespaceResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def assign_key_access_server_to_namespace(self, request: policy_dot_namespaces_dot_namespaces__pb2.AssignKeyAccessServerToNamespaceRequest, ctx: RequestContext) -> policy_dot_namespaces_dot_namespaces__pb2.AssignKeyAccessServerToNamespaceResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def remove_key_access_server_from_namespace(self, request: policy_dot_namespaces_dot_namespaces__pb2.RemoveKeyAccessServerFromNamespaceRequest, ctx: RequestContext) -> policy_dot_namespaces_dot_namespaces__pb2.RemoveKeyAccessServerFromNamespaceResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def assign_public_key_to_namespace(self, request: policy_dot_namespaces_dot_namespaces__pb2.AssignPublicKeyToNamespaceRequest, ctx: RequestContext) -> policy_dot_namespaces_dot_namespaces__pb2.AssignPublicKeyToNamespaceResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def remove_public_key_from_namespace(self, request: policy_dot_namespaces_dot_namespaces__pb2.RemovePublicKeyFromNamespaceRequest, ctx: RequestContext) -> policy_dot_namespaces_dot_namespaces__pb2.RemovePublicKeyFromNamespaceResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + +class NamespaceServiceWSGIApplication(ConnectWSGIApplication): + def __init__(self, service: NamespaceServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None) -> None: + super().__init__( + endpoints={ + "/policy.namespaces.NamespaceService/GetNamespace": EndpointSync.unary( + method=MethodInfo( + name="GetNamespace", + service_name="policy.namespaces.NamespaceService", + input=policy_dot_namespaces_dot_namespaces__pb2.GetNamespaceRequest, + output=policy_dot_namespaces_dot_namespaces__pb2.GetNamespaceResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + function=service.get_namespace, + ), + "/policy.namespaces.NamespaceService/ListNamespaces": EndpointSync.unary( + method=MethodInfo( + name="ListNamespaces", + service_name="policy.namespaces.NamespaceService", + input=policy_dot_namespaces_dot_namespaces__pb2.ListNamespacesRequest, + output=policy_dot_namespaces_dot_namespaces__pb2.ListNamespacesResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + function=service.list_namespaces, + ), + "/policy.namespaces.NamespaceService/CreateNamespace": EndpointSync.unary( + method=MethodInfo( + name="CreateNamespace", + service_name="policy.namespaces.NamespaceService", + input=policy_dot_namespaces_dot_namespaces__pb2.CreateNamespaceRequest, + output=policy_dot_namespaces_dot_namespaces__pb2.CreateNamespaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.create_namespace, + ), + "/policy.namespaces.NamespaceService/UpdateNamespace": EndpointSync.unary( + method=MethodInfo( + name="UpdateNamespace", + service_name="policy.namespaces.NamespaceService", + input=policy_dot_namespaces_dot_namespaces__pb2.UpdateNamespaceRequest, + output=policy_dot_namespaces_dot_namespaces__pb2.UpdateNamespaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.update_namespace, + ), + "/policy.namespaces.NamespaceService/DeactivateNamespace": EndpointSync.unary( + method=MethodInfo( + name="DeactivateNamespace", + service_name="policy.namespaces.NamespaceService", + input=policy_dot_namespaces_dot_namespaces__pb2.DeactivateNamespaceRequest, + output=policy_dot_namespaces_dot_namespaces__pb2.DeactivateNamespaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.deactivate_namespace, + ), + "/policy.namespaces.NamespaceService/AssignKeyAccessServerToNamespace": EndpointSync.unary( + method=MethodInfo( + name="AssignKeyAccessServerToNamespace", + service_name="policy.namespaces.NamespaceService", + input=policy_dot_namespaces_dot_namespaces__pb2.AssignKeyAccessServerToNamespaceRequest, + output=policy_dot_namespaces_dot_namespaces__pb2.AssignKeyAccessServerToNamespaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.assign_key_access_server_to_namespace, + ), + "/policy.namespaces.NamespaceService/RemoveKeyAccessServerFromNamespace": EndpointSync.unary( + method=MethodInfo( + name="RemoveKeyAccessServerFromNamespace", + service_name="policy.namespaces.NamespaceService", + input=policy_dot_namespaces_dot_namespaces__pb2.RemoveKeyAccessServerFromNamespaceRequest, + output=policy_dot_namespaces_dot_namespaces__pb2.RemoveKeyAccessServerFromNamespaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.remove_key_access_server_from_namespace, + ), + "/policy.namespaces.NamespaceService/AssignPublicKeyToNamespace": EndpointSync.unary( + method=MethodInfo( + name="AssignPublicKeyToNamespace", + service_name="policy.namespaces.NamespaceService", + input=policy_dot_namespaces_dot_namespaces__pb2.AssignPublicKeyToNamespaceRequest, + output=policy_dot_namespaces_dot_namespaces__pb2.AssignPublicKeyToNamespaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.assign_public_key_to_namespace, + ), + "/policy.namespaces.NamespaceService/RemovePublicKeyFromNamespace": EndpointSync.unary( + method=MethodInfo( + name="RemovePublicKeyFromNamespace", + service_name="policy.namespaces.NamespaceService", + input=policy_dot_namespaces_dot_namespaces__pb2.RemovePublicKeyFromNamespaceRequest, + output=policy_dot_namespaces_dot_namespaces__pb2.RemovePublicKeyFromNamespaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.remove_public_key_from_namespace, + ), + }, + interceptors=interceptors, + read_max_bytes=read_max_bytes, + ) + + @property + def path(self) -> str: + """Returns the URL path to mount the application to when serving multiple applications.""" + return "/policy.namespaces.NamespaceService" + + +class NamespaceServiceClientSync(ConnectClientSync): + def get_namespace( + self, + request: policy_dot_namespaces_dot_namespaces__pb2.GetNamespaceRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + use_get: bool = False, + ) -> policy_dot_namespaces_dot_namespaces__pb2.GetNamespaceResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="GetNamespace", + service_name="policy.namespaces.NamespaceService", + input=policy_dot_namespaces_dot_namespaces__pb2.GetNamespaceRequest, + output=policy_dot_namespaces_dot_namespaces__pb2.GetNamespaceResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + headers=headers, + timeout_ms=timeout_ms, + use_get=use_get, + ) + + def list_namespaces( + self, + request: policy_dot_namespaces_dot_namespaces__pb2.ListNamespacesRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + use_get: bool = False, + ) -> policy_dot_namespaces_dot_namespaces__pb2.ListNamespacesResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="ListNamespaces", + service_name="policy.namespaces.NamespaceService", + input=policy_dot_namespaces_dot_namespaces__pb2.ListNamespacesRequest, + output=policy_dot_namespaces_dot_namespaces__pb2.ListNamespacesResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + headers=headers, + timeout_ms=timeout_ms, + use_get=use_get, + ) + + def create_namespace( + self, + request: policy_dot_namespaces_dot_namespaces__pb2.CreateNamespaceRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_namespaces_dot_namespaces__pb2.CreateNamespaceResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="CreateNamespace", + service_name="policy.namespaces.NamespaceService", + input=policy_dot_namespaces_dot_namespaces__pb2.CreateNamespaceRequest, + output=policy_dot_namespaces_dot_namespaces__pb2.CreateNamespaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def update_namespace( + self, + request: policy_dot_namespaces_dot_namespaces__pb2.UpdateNamespaceRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_namespaces_dot_namespaces__pb2.UpdateNamespaceResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="UpdateNamespace", + service_name="policy.namespaces.NamespaceService", + input=policy_dot_namespaces_dot_namespaces__pb2.UpdateNamespaceRequest, + output=policy_dot_namespaces_dot_namespaces__pb2.UpdateNamespaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def deactivate_namespace( + self, + request: policy_dot_namespaces_dot_namespaces__pb2.DeactivateNamespaceRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_namespaces_dot_namespaces__pb2.DeactivateNamespaceResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="DeactivateNamespace", + service_name="policy.namespaces.NamespaceService", + input=policy_dot_namespaces_dot_namespaces__pb2.DeactivateNamespaceRequest, + output=policy_dot_namespaces_dot_namespaces__pb2.DeactivateNamespaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def assign_key_access_server_to_namespace( + self, + request: policy_dot_namespaces_dot_namespaces__pb2.AssignKeyAccessServerToNamespaceRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_namespaces_dot_namespaces__pb2.AssignKeyAccessServerToNamespaceResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="AssignKeyAccessServerToNamespace", + service_name="policy.namespaces.NamespaceService", + input=policy_dot_namespaces_dot_namespaces__pb2.AssignKeyAccessServerToNamespaceRequest, + output=policy_dot_namespaces_dot_namespaces__pb2.AssignKeyAccessServerToNamespaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def remove_key_access_server_from_namespace( + self, + request: policy_dot_namespaces_dot_namespaces__pb2.RemoveKeyAccessServerFromNamespaceRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_namespaces_dot_namespaces__pb2.RemoveKeyAccessServerFromNamespaceResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="RemoveKeyAccessServerFromNamespace", + service_name="policy.namespaces.NamespaceService", + input=policy_dot_namespaces_dot_namespaces__pb2.RemoveKeyAccessServerFromNamespaceRequest, + output=policy_dot_namespaces_dot_namespaces__pb2.RemoveKeyAccessServerFromNamespaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def assign_public_key_to_namespace( + self, + request: policy_dot_namespaces_dot_namespaces__pb2.AssignPublicKeyToNamespaceRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_namespaces_dot_namespaces__pb2.AssignPublicKeyToNamespaceResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="AssignPublicKeyToNamespace", + service_name="policy.namespaces.NamespaceService", + input=policy_dot_namespaces_dot_namespaces__pb2.AssignPublicKeyToNamespaceRequest, + output=policy_dot_namespaces_dot_namespaces__pb2.AssignPublicKeyToNamespaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def remove_public_key_from_namespace( + self, + request: policy_dot_namespaces_dot_namespaces__pb2.RemovePublicKeyFromNamespaceRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_namespaces_dot_namespaces__pb2.RemovePublicKeyFromNamespaceResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="RemovePublicKeyFromNamespace", + service_name="policy.namespaces.NamespaceService", + input=policy_dot_namespaces_dot_namespaces__pb2.RemovePublicKeyFromNamespaceRequest, + output=policy_dot_namespaces_dot_namespaces__pb2.RemovePublicKeyFromNamespaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) diff --git a/otdf-python-proto/src/otdf_python_proto/policy/namespaces/namespaces_pb2_connect.py b/otdf-python-proto/src/otdf_python_proto/policy/namespaces/namespaces_pb2_connect.py deleted file mode 100644 index 7ae3e05..0000000 --- a/otdf-python-proto/src/otdf_python_proto/policy/namespaces/namespaces_pb2_connect.py +++ /dev/null @@ -1,443 +0,0 @@ -# Generated Connect client code - -from __future__ import annotations -from collections.abc import AsyncIterator -from collections.abc import Iterator -from collections.abc import Iterable -import aiohttp -import urllib3 -import typing -import sys - -from connectrpc.client_async import AsyncConnectClient -from connectrpc.client_sync import ConnectClient -from connectrpc.client_protocol import ConnectProtocol -from connectrpc.client_connect import ConnectProtocolError -from connectrpc.headers import HeaderInput -from connectrpc.server import ClientRequest -from connectrpc.server import ClientStream -from connectrpc.server import ServerResponse -from connectrpc.server import ServerStream -from connectrpc.server_sync import ConnectWSGI -from connectrpc.streams import StreamInput -from connectrpc.streams import AsyncStreamOutput -from connectrpc.streams import StreamOutput -from connectrpc.unary import UnaryOutput -from connectrpc.unary import ClientStreamingOutput - -if typing.TYPE_CHECKING: - # wsgiref.types was added in Python 3.11. - if sys.version_info >= (3, 11): - from wsgiref.types import WSGIApplication - else: - from _typeshed.wsgi import WSGIApplication - -import policy.namespaces.namespaces_pb2 - -class NamespaceServiceClient: - def __init__( - self, - base_url: str, - http_client: urllib3.PoolManager | None = None, - protocol: ConnectProtocol = ConnectProtocol.CONNECT_PROTOBUF, - ): - self.base_url = base_url - self._connect_client = ConnectClient(http_client, protocol) - def call_get_namespace( - self, req: policy.namespaces.namespaces_pb2.GetNamespaceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.namespaces.namespaces_pb2.GetNamespaceResponse]: - """Low-level method to call GetNamespace, granting access to errors and metadata""" - url = self.base_url + "/policy.namespaces.NamespaceService/GetNamespace" - return self._connect_client.call_unary(url, req, policy.namespaces.namespaces_pb2.GetNamespaceResponse,extra_headers, timeout_seconds) - - - def get_namespace( - self, req: policy.namespaces.namespaces_pb2.GetNamespaceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.namespaces.namespaces_pb2.GetNamespaceResponse: - response = self.call_get_namespace(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_list_namespaces( - self, req: policy.namespaces.namespaces_pb2.ListNamespacesRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.namespaces.namespaces_pb2.ListNamespacesResponse]: - """Low-level method to call ListNamespaces, granting access to errors and metadata""" - url = self.base_url + "/policy.namespaces.NamespaceService/ListNamespaces" - return self._connect_client.call_unary(url, req, policy.namespaces.namespaces_pb2.ListNamespacesResponse,extra_headers, timeout_seconds) - - - def list_namespaces( - self, req: policy.namespaces.namespaces_pb2.ListNamespacesRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.namespaces.namespaces_pb2.ListNamespacesResponse: - response = self.call_list_namespaces(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_create_namespace( - self, req: policy.namespaces.namespaces_pb2.CreateNamespaceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.namespaces.namespaces_pb2.CreateNamespaceResponse]: - """Low-level method to call CreateNamespace, granting access to errors and metadata""" - url = self.base_url + "/policy.namespaces.NamespaceService/CreateNamespace" - return self._connect_client.call_unary(url, req, policy.namespaces.namespaces_pb2.CreateNamespaceResponse,extra_headers, timeout_seconds) - - - def create_namespace( - self, req: policy.namespaces.namespaces_pb2.CreateNamespaceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.namespaces.namespaces_pb2.CreateNamespaceResponse: - response = self.call_create_namespace(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_update_namespace( - self, req: policy.namespaces.namespaces_pb2.UpdateNamespaceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.namespaces.namespaces_pb2.UpdateNamespaceResponse]: - """Low-level method to call UpdateNamespace, granting access to errors and metadata""" - url = self.base_url + "/policy.namespaces.NamespaceService/UpdateNamespace" - return self._connect_client.call_unary(url, req, policy.namespaces.namespaces_pb2.UpdateNamespaceResponse,extra_headers, timeout_seconds) - - - def update_namespace( - self, req: policy.namespaces.namespaces_pb2.UpdateNamespaceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.namespaces.namespaces_pb2.UpdateNamespaceResponse: - response = self.call_update_namespace(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_deactivate_namespace( - self, req: policy.namespaces.namespaces_pb2.DeactivateNamespaceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.namespaces.namespaces_pb2.DeactivateNamespaceResponse]: - """Low-level method to call DeactivateNamespace, granting access to errors and metadata""" - url = self.base_url + "/policy.namespaces.NamespaceService/DeactivateNamespace" - return self._connect_client.call_unary(url, req, policy.namespaces.namespaces_pb2.DeactivateNamespaceResponse,extra_headers, timeout_seconds) - - - def deactivate_namespace( - self, req: policy.namespaces.namespaces_pb2.DeactivateNamespaceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.namespaces.namespaces_pb2.DeactivateNamespaceResponse: - response = self.call_deactivate_namespace(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_assign_key_access_server_to_namespace( - self, req: policy.namespaces.namespaces_pb2.AssignKeyAccessServerToNamespaceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.namespaces.namespaces_pb2.AssignKeyAccessServerToNamespaceResponse]: - """Low-level method to call AssignKeyAccessServerToNamespace, granting access to errors and metadata""" - url = self.base_url + "/policy.namespaces.NamespaceService/AssignKeyAccessServerToNamespace" - return self._connect_client.call_unary(url, req, policy.namespaces.namespaces_pb2.AssignKeyAccessServerToNamespaceResponse,extra_headers, timeout_seconds) - - - def assign_key_access_server_to_namespace( - self, req: policy.namespaces.namespaces_pb2.AssignKeyAccessServerToNamespaceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.namespaces.namespaces_pb2.AssignKeyAccessServerToNamespaceResponse: - response = self.call_assign_key_access_server_to_namespace(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_remove_key_access_server_from_namespace( - self, req: policy.namespaces.namespaces_pb2.RemoveKeyAccessServerFromNamespaceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.namespaces.namespaces_pb2.RemoveKeyAccessServerFromNamespaceResponse]: - """Low-level method to call RemoveKeyAccessServerFromNamespace, granting access to errors and metadata""" - url = self.base_url + "/policy.namespaces.NamespaceService/RemoveKeyAccessServerFromNamespace" - return self._connect_client.call_unary(url, req, policy.namespaces.namespaces_pb2.RemoveKeyAccessServerFromNamespaceResponse,extra_headers, timeout_seconds) - - - def remove_key_access_server_from_namespace( - self, req: policy.namespaces.namespaces_pb2.RemoveKeyAccessServerFromNamespaceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.namespaces.namespaces_pb2.RemoveKeyAccessServerFromNamespaceResponse: - response = self.call_remove_key_access_server_from_namespace(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_assign_public_key_to_namespace( - self, req: policy.namespaces.namespaces_pb2.AssignPublicKeyToNamespaceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.namespaces.namespaces_pb2.AssignPublicKeyToNamespaceResponse]: - """Low-level method to call AssignPublicKeyToNamespace, granting access to errors and metadata""" - url = self.base_url + "/policy.namespaces.NamespaceService/AssignPublicKeyToNamespace" - return self._connect_client.call_unary(url, req, policy.namespaces.namespaces_pb2.AssignPublicKeyToNamespaceResponse,extra_headers, timeout_seconds) - - - def assign_public_key_to_namespace( - self, req: policy.namespaces.namespaces_pb2.AssignPublicKeyToNamespaceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.namespaces.namespaces_pb2.AssignPublicKeyToNamespaceResponse: - response = self.call_assign_public_key_to_namespace(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_remove_public_key_from_namespace( - self, req: policy.namespaces.namespaces_pb2.RemovePublicKeyFromNamespaceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.namespaces.namespaces_pb2.RemovePublicKeyFromNamespaceResponse]: - """Low-level method to call RemovePublicKeyFromNamespace, granting access to errors and metadata""" - url = self.base_url + "/policy.namespaces.NamespaceService/RemovePublicKeyFromNamespace" - return self._connect_client.call_unary(url, req, policy.namespaces.namespaces_pb2.RemovePublicKeyFromNamespaceResponse,extra_headers, timeout_seconds) - - - def remove_public_key_from_namespace( - self, req: policy.namespaces.namespaces_pb2.RemovePublicKeyFromNamespaceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.namespaces.namespaces_pb2.RemovePublicKeyFromNamespaceResponse: - response = self.call_remove_public_key_from_namespace(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - -class AsyncNamespaceServiceClient: - def __init__( - self, - base_url: str, - http_client: aiohttp.ClientSession, - protocol: ConnectProtocol = ConnectProtocol.CONNECT_PROTOBUF, - ): - self.base_url = base_url - self._connect_client = AsyncConnectClient(http_client, protocol) - - async def call_get_namespace( - self, req: policy.namespaces.namespaces_pb2.GetNamespaceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.namespaces.namespaces_pb2.GetNamespaceResponse]: - """Low-level method to call GetNamespace, granting access to errors and metadata""" - url = self.base_url + "/policy.namespaces.NamespaceService/GetNamespace" - return await self._connect_client.call_unary(url, req, policy.namespaces.namespaces_pb2.GetNamespaceResponse,extra_headers, timeout_seconds) - - async def get_namespace( - self, req: policy.namespaces.namespaces_pb2.GetNamespaceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.namespaces.namespaces_pb2.GetNamespaceResponse: - response = await self.call_get_namespace(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_list_namespaces( - self, req: policy.namespaces.namespaces_pb2.ListNamespacesRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.namespaces.namespaces_pb2.ListNamespacesResponse]: - """Low-level method to call ListNamespaces, granting access to errors and metadata""" - url = self.base_url + "/policy.namespaces.NamespaceService/ListNamespaces" - return await self._connect_client.call_unary(url, req, policy.namespaces.namespaces_pb2.ListNamespacesResponse,extra_headers, timeout_seconds) - - async def list_namespaces( - self, req: policy.namespaces.namespaces_pb2.ListNamespacesRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.namespaces.namespaces_pb2.ListNamespacesResponse: - response = await self.call_list_namespaces(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_create_namespace( - self, req: policy.namespaces.namespaces_pb2.CreateNamespaceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.namespaces.namespaces_pb2.CreateNamespaceResponse]: - """Low-level method to call CreateNamespace, granting access to errors and metadata""" - url = self.base_url + "/policy.namespaces.NamespaceService/CreateNamespace" - return await self._connect_client.call_unary(url, req, policy.namespaces.namespaces_pb2.CreateNamespaceResponse,extra_headers, timeout_seconds) - - async def create_namespace( - self, req: policy.namespaces.namespaces_pb2.CreateNamespaceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.namespaces.namespaces_pb2.CreateNamespaceResponse: - response = await self.call_create_namespace(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_update_namespace( - self, req: policy.namespaces.namespaces_pb2.UpdateNamespaceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.namespaces.namespaces_pb2.UpdateNamespaceResponse]: - """Low-level method to call UpdateNamespace, granting access to errors and metadata""" - url = self.base_url + "/policy.namespaces.NamespaceService/UpdateNamespace" - return await self._connect_client.call_unary(url, req, policy.namespaces.namespaces_pb2.UpdateNamespaceResponse,extra_headers, timeout_seconds) - - async def update_namespace( - self, req: policy.namespaces.namespaces_pb2.UpdateNamespaceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.namespaces.namespaces_pb2.UpdateNamespaceResponse: - response = await self.call_update_namespace(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_deactivate_namespace( - self, req: policy.namespaces.namespaces_pb2.DeactivateNamespaceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.namespaces.namespaces_pb2.DeactivateNamespaceResponse]: - """Low-level method to call DeactivateNamespace, granting access to errors and metadata""" - url = self.base_url + "/policy.namespaces.NamespaceService/DeactivateNamespace" - return await self._connect_client.call_unary(url, req, policy.namespaces.namespaces_pb2.DeactivateNamespaceResponse,extra_headers, timeout_seconds) - - async def deactivate_namespace( - self, req: policy.namespaces.namespaces_pb2.DeactivateNamespaceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.namespaces.namespaces_pb2.DeactivateNamespaceResponse: - response = await self.call_deactivate_namespace(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_assign_key_access_server_to_namespace( - self, req: policy.namespaces.namespaces_pb2.AssignKeyAccessServerToNamespaceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.namespaces.namespaces_pb2.AssignKeyAccessServerToNamespaceResponse]: - """Low-level method to call AssignKeyAccessServerToNamespace, granting access to errors and metadata""" - url = self.base_url + "/policy.namespaces.NamespaceService/AssignKeyAccessServerToNamespace" - return await self._connect_client.call_unary(url, req, policy.namespaces.namespaces_pb2.AssignKeyAccessServerToNamespaceResponse,extra_headers, timeout_seconds) - - async def assign_key_access_server_to_namespace( - self, req: policy.namespaces.namespaces_pb2.AssignKeyAccessServerToNamespaceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.namespaces.namespaces_pb2.AssignKeyAccessServerToNamespaceResponse: - response = await self.call_assign_key_access_server_to_namespace(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_remove_key_access_server_from_namespace( - self, req: policy.namespaces.namespaces_pb2.RemoveKeyAccessServerFromNamespaceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.namespaces.namespaces_pb2.RemoveKeyAccessServerFromNamespaceResponse]: - """Low-level method to call RemoveKeyAccessServerFromNamespace, granting access to errors and metadata""" - url = self.base_url + "/policy.namespaces.NamespaceService/RemoveKeyAccessServerFromNamespace" - return await self._connect_client.call_unary(url, req, policy.namespaces.namespaces_pb2.RemoveKeyAccessServerFromNamespaceResponse,extra_headers, timeout_seconds) - - async def remove_key_access_server_from_namespace( - self, req: policy.namespaces.namespaces_pb2.RemoveKeyAccessServerFromNamespaceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.namespaces.namespaces_pb2.RemoveKeyAccessServerFromNamespaceResponse: - response = await self.call_remove_key_access_server_from_namespace(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_assign_public_key_to_namespace( - self, req: policy.namespaces.namespaces_pb2.AssignPublicKeyToNamespaceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.namespaces.namespaces_pb2.AssignPublicKeyToNamespaceResponse]: - """Low-level method to call AssignPublicKeyToNamespace, granting access to errors and metadata""" - url = self.base_url + "/policy.namespaces.NamespaceService/AssignPublicKeyToNamespace" - return await self._connect_client.call_unary(url, req, policy.namespaces.namespaces_pb2.AssignPublicKeyToNamespaceResponse,extra_headers, timeout_seconds) - - async def assign_public_key_to_namespace( - self, req: policy.namespaces.namespaces_pb2.AssignPublicKeyToNamespaceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.namespaces.namespaces_pb2.AssignPublicKeyToNamespaceResponse: - response = await self.call_assign_public_key_to_namespace(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_remove_public_key_from_namespace( - self, req: policy.namespaces.namespaces_pb2.RemovePublicKeyFromNamespaceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.namespaces.namespaces_pb2.RemovePublicKeyFromNamespaceResponse]: - """Low-level method to call RemovePublicKeyFromNamespace, granting access to errors and metadata""" - url = self.base_url + "/policy.namespaces.NamespaceService/RemovePublicKeyFromNamespace" - return await self._connect_client.call_unary(url, req, policy.namespaces.namespaces_pb2.RemovePublicKeyFromNamespaceResponse,extra_headers, timeout_seconds) - - async def remove_public_key_from_namespace( - self, req: policy.namespaces.namespaces_pb2.RemovePublicKeyFromNamespaceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.namespaces.namespaces_pb2.RemovePublicKeyFromNamespaceResponse: - response = await self.call_remove_public_key_from_namespace(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - -@typing.runtime_checkable -class NamespaceServiceProtocol(typing.Protocol): - def get_namespace(self, req: ClientRequest[policy.namespaces.namespaces_pb2.GetNamespaceRequest]) -> ServerResponse[policy.namespaces.namespaces_pb2.GetNamespaceResponse]: - ... - def list_namespaces(self, req: ClientRequest[policy.namespaces.namespaces_pb2.ListNamespacesRequest]) -> ServerResponse[policy.namespaces.namespaces_pb2.ListNamespacesResponse]: - ... - def create_namespace(self, req: ClientRequest[policy.namespaces.namespaces_pb2.CreateNamespaceRequest]) -> ServerResponse[policy.namespaces.namespaces_pb2.CreateNamespaceResponse]: - ... - def update_namespace(self, req: ClientRequest[policy.namespaces.namespaces_pb2.UpdateNamespaceRequest]) -> ServerResponse[policy.namespaces.namespaces_pb2.UpdateNamespaceResponse]: - ... - def deactivate_namespace(self, req: ClientRequest[policy.namespaces.namespaces_pb2.DeactivateNamespaceRequest]) -> ServerResponse[policy.namespaces.namespaces_pb2.DeactivateNamespaceResponse]: - ... - def assign_key_access_server_to_namespace(self, req: ClientRequest[policy.namespaces.namespaces_pb2.AssignKeyAccessServerToNamespaceRequest]) -> ServerResponse[policy.namespaces.namespaces_pb2.AssignKeyAccessServerToNamespaceResponse]: - ... - def remove_key_access_server_from_namespace(self, req: ClientRequest[policy.namespaces.namespaces_pb2.RemoveKeyAccessServerFromNamespaceRequest]) -> ServerResponse[policy.namespaces.namespaces_pb2.RemoveKeyAccessServerFromNamespaceResponse]: - ... - def assign_public_key_to_namespace(self, req: ClientRequest[policy.namespaces.namespaces_pb2.AssignPublicKeyToNamespaceRequest]) -> ServerResponse[policy.namespaces.namespaces_pb2.AssignPublicKeyToNamespaceResponse]: - ... - def remove_public_key_from_namespace(self, req: ClientRequest[policy.namespaces.namespaces_pb2.RemovePublicKeyFromNamespaceRequest]) -> ServerResponse[policy.namespaces.namespaces_pb2.RemovePublicKeyFromNamespaceResponse]: - ... - -NAMESPACE_SERVICE_PATH_PREFIX = "/policy.namespaces.NamespaceService" - -def wsgi_namespace_service(implementation: NamespaceServiceProtocol) -> WSGIApplication: - app = ConnectWSGI() - app.register_unary_rpc("/policy.namespaces.NamespaceService/GetNamespace", implementation.get_namespace, policy.namespaces.namespaces_pb2.GetNamespaceRequest) - app.register_unary_rpc("/policy.namespaces.NamespaceService/ListNamespaces", implementation.list_namespaces, policy.namespaces.namespaces_pb2.ListNamespacesRequest) - app.register_unary_rpc("/policy.namespaces.NamespaceService/CreateNamespace", implementation.create_namespace, policy.namespaces.namespaces_pb2.CreateNamespaceRequest) - app.register_unary_rpc("/policy.namespaces.NamespaceService/UpdateNamespace", implementation.update_namespace, policy.namespaces.namespaces_pb2.UpdateNamespaceRequest) - app.register_unary_rpc("/policy.namespaces.NamespaceService/DeactivateNamespace", implementation.deactivate_namespace, policy.namespaces.namespaces_pb2.DeactivateNamespaceRequest) - app.register_unary_rpc("/policy.namespaces.NamespaceService/AssignKeyAccessServerToNamespace", implementation.assign_key_access_server_to_namespace, policy.namespaces.namespaces_pb2.AssignKeyAccessServerToNamespaceRequest) - app.register_unary_rpc("/policy.namespaces.NamespaceService/RemoveKeyAccessServerFromNamespace", implementation.remove_key_access_server_from_namespace, policy.namespaces.namespaces_pb2.RemoveKeyAccessServerFromNamespaceRequest) - app.register_unary_rpc("/policy.namespaces.NamespaceService/AssignPublicKeyToNamespace", implementation.assign_public_key_to_namespace, policy.namespaces.namespaces_pb2.AssignPublicKeyToNamespaceRequest) - app.register_unary_rpc("/policy.namespaces.NamespaceService/RemovePublicKeyFromNamespace", implementation.remove_public_key_from_namespace, policy.namespaces.namespaces_pb2.RemovePublicKeyFromNamespaceRequest) - return app diff --git a/otdf-python-proto/src/otdf_python_proto/policy/registeredresources/__init__.py b/otdf-python-proto/src/otdf_python_proto/policy/registeredresources/__init__.py new file mode 100644 index 0000000..8e2b034 --- /dev/null +++ b/otdf-python-proto/src/otdf_python_proto/policy/registeredresources/__init__.py @@ -0,0 +1,11 @@ +"""policy.registeredresources protobuf definitions.""" + +from .registered_resources_connect import ( + RegisteredResourcesServiceClient, + RegisteredResourcesServiceClientSync, +) + +__all__ = [ + "RegisteredResourcesServiceClient", + "RegisteredResourcesServiceClientSync", +] diff --git a/otdf-python-proto/src/otdf_python_proto/policy/registeredresources/registered_resources_connect.py b/otdf-python-proto/src/otdf_python_proto/policy/registeredresources/registered_resources_connect.py new file mode 100644 index 0000000..91e13d3 --- /dev/null +++ b/otdf-python-proto/src/otdf_python_proto/policy/registeredresources/registered_resources_connect.py @@ -0,0 +1,770 @@ +# -*- coding: utf-8 -*- +# Generated by https://github.com/connectrpc/connect-python. DO NOT EDIT! +# source: policy/registeredresources/registered_resources.proto + +from collections.abc import AsyncGenerator, AsyncIterator, Iterable, Iterator, Mapping +from typing import Protocol + +from connectrpc.client import ConnectClient, ConnectClientSync +from connectrpc.code import Code +from connectrpc.errors import ConnectError +from connectrpc.interceptor import Interceptor, InterceptorSync +from connectrpc.method import IdempotencyLevel, MethodInfo +from connectrpc.request import Headers, RequestContext +from connectrpc.server import ConnectASGIApplication, ConnectWSGIApplication, Endpoint, EndpointSync +import policy.registeredresources.registered_resources_pb2 as policy_dot_registeredresources_dot_registered__resources__pb2 + + +class RegisteredResourcesService(Protocol): + async def create_registered_resource(self, request: policy_dot_registeredresources_dot_registered__resources__pb2.CreateRegisteredResourceRequest, ctx: RequestContext) -> policy_dot_registeredresources_dot_registered__resources__pb2.CreateRegisteredResourceResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def get_registered_resource(self, request: policy_dot_registeredresources_dot_registered__resources__pb2.GetRegisteredResourceRequest, ctx: RequestContext) -> policy_dot_registeredresources_dot_registered__resources__pb2.GetRegisteredResourceResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def list_registered_resources(self, request: policy_dot_registeredresources_dot_registered__resources__pb2.ListRegisteredResourcesRequest, ctx: RequestContext) -> policy_dot_registeredresources_dot_registered__resources__pb2.ListRegisteredResourcesResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def update_registered_resource(self, request: policy_dot_registeredresources_dot_registered__resources__pb2.UpdateRegisteredResourceRequest, ctx: RequestContext) -> policy_dot_registeredresources_dot_registered__resources__pb2.UpdateRegisteredResourceResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def delete_registered_resource(self, request: policy_dot_registeredresources_dot_registered__resources__pb2.DeleteRegisteredResourceRequest, ctx: RequestContext) -> policy_dot_registeredresources_dot_registered__resources__pb2.DeleteRegisteredResourceResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def create_registered_resource_value(self, request: policy_dot_registeredresources_dot_registered__resources__pb2.CreateRegisteredResourceValueRequest, ctx: RequestContext) -> policy_dot_registeredresources_dot_registered__resources__pb2.CreateRegisteredResourceValueResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def get_registered_resource_value(self, request: policy_dot_registeredresources_dot_registered__resources__pb2.GetRegisteredResourceValueRequest, ctx: RequestContext) -> policy_dot_registeredresources_dot_registered__resources__pb2.GetRegisteredResourceValueResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def get_registered_resource_values_by_f_q_ns(self, request: policy_dot_registeredresources_dot_registered__resources__pb2.GetRegisteredResourceValuesByFQNsRequest, ctx: RequestContext) -> policy_dot_registeredresources_dot_registered__resources__pb2.GetRegisteredResourceValuesByFQNsResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def list_registered_resource_values(self, request: policy_dot_registeredresources_dot_registered__resources__pb2.ListRegisteredResourceValuesRequest, ctx: RequestContext) -> policy_dot_registeredresources_dot_registered__resources__pb2.ListRegisteredResourceValuesResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def update_registered_resource_value(self, request: policy_dot_registeredresources_dot_registered__resources__pb2.UpdateRegisteredResourceValueRequest, ctx: RequestContext) -> policy_dot_registeredresources_dot_registered__resources__pb2.UpdateRegisteredResourceValueResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def delete_registered_resource_value(self, request: policy_dot_registeredresources_dot_registered__resources__pb2.DeleteRegisteredResourceValueRequest, ctx: RequestContext) -> policy_dot_registeredresources_dot_registered__resources__pb2.DeleteRegisteredResourceValueResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + +class RegisteredResourcesServiceASGIApplication(ConnectASGIApplication[RegisteredResourcesService]): + def __init__(self, service: RegisteredResourcesService | AsyncGenerator[RegisteredResourcesService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None) -> None: + super().__init__( + service=service, + endpoints=lambda svc: { + "/policy.registeredresources.RegisteredResourcesService/CreateRegisteredResource": Endpoint.unary( + method=MethodInfo( + name="CreateRegisteredResource", + service_name="policy.registeredresources.RegisteredResourcesService", + input=policy_dot_registeredresources_dot_registered__resources__pb2.CreateRegisteredResourceRequest, + output=policy_dot_registeredresources_dot_registered__resources__pb2.CreateRegisteredResourceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.create_registered_resource, + ), + "/policy.registeredresources.RegisteredResourcesService/GetRegisteredResource": Endpoint.unary( + method=MethodInfo( + name="GetRegisteredResource", + service_name="policy.registeredresources.RegisteredResourcesService", + input=policy_dot_registeredresources_dot_registered__resources__pb2.GetRegisteredResourceRequest, + output=policy_dot_registeredresources_dot_registered__resources__pb2.GetRegisteredResourceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.get_registered_resource, + ), + "/policy.registeredresources.RegisteredResourcesService/ListRegisteredResources": Endpoint.unary( + method=MethodInfo( + name="ListRegisteredResources", + service_name="policy.registeredresources.RegisteredResourcesService", + input=policy_dot_registeredresources_dot_registered__resources__pb2.ListRegisteredResourcesRequest, + output=policy_dot_registeredresources_dot_registered__resources__pb2.ListRegisteredResourcesResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.list_registered_resources, + ), + "/policy.registeredresources.RegisteredResourcesService/UpdateRegisteredResource": Endpoint.unary( + method=MethodInfo( + name="UpdateRegisteredResource", + service_name="policy.registeredresources.RegisteredResourcesService", + input=policy_dot_registeredresources_dot_registered__resources__pb2.UpdateRegisteredResourceRequest, + output=policy_dot_registeredresources_dot_registered__resources__pb2.UpdateRegisteredResourceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.update_registered_resource, + ), + "/policy.registeredresources.RegisteredResourcesService/DeleteRegisteredResource": Endpoint.unary( + method=MethodInfo( + name="DeleteRegisteredResource", + service_name="policy.registeredresources.RegisteredResourcesService", + input=policy_dot_registeredresources_dot_registered__resources__pb2.DeleteRegisteredResourceRequest, + output=policy_dot_registeredresources_dot_registered__resources__pb2.DeleteRegisteredResourceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.delete_registered_resource, + ), + "/policy.registeredresources.RegisteredResourcesService/CreateRegisteredResourceValue": Endpoint.unary( + method=MethodInfo( + name="CreateRegisteredResourceValue", + service_name="policy.registeredresources.RegisteredResourcesService", + input=policy_dot_registeredresources_dot_registered__resources__pb2.CreateRegisteredResourceValueRequest, + output=policy_dot_registeredresources_dot_registered__resources__pb2.CreateRegisteredResourceValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.create_registered_resource_value, + ), + "/policy.registeredresources.RegisteredResourcesService/GetRegisteredResourceValue": Endpoint.unary( + method=MethodInfo( + name="GetRegisteredResourceValue", + service_name="policy.registeredresources.RegisteredResourcesService", + input=policy_dot_registeredresources_dot_registered__resources__pb2.GetRegisteredResourceValueRequest, + output=policy_dot_registeredresources_dot_registered__resources__pb2.GetRegisteredResourceValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.get_registered_resource_value, + ), + "/policy.registeredresources.RegisteredResourcesService/GetRegisteredResourceValuesByFQNs": Endpoint.unary( + method=MethodInfo( + name="GetRegisteredResourceValuesByFQNs", + service_name="policy.registeredresources.RegisteredResourcesService", + input=policy_dot_registeredresources_dot_registered__resources__pb2.GetRegisteredResourceValuesByFQNsRequest, + output=policy_dot_registeredresources_dot_registered__resources__pb2.GetRegisteredResourceValuesByFQNsResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.get_registered_resource_values_by_f_q_ns, + ), + "/policy.registeredresources.RegisteredResourcesService/ListRegisteredResourceValues": Endpoint.unary( + method=MethodInfo( + name="ListRegisteredResourceValues", + service_name="policy.registeredresources.RegisteredResourcesService", + input=policy_dot_registeredresources_dot_registered__resources__pb2.ListRegisteredResourceValuesRequest, + output=policy_dot_registeredresources_dot_registered__resources__pb2.ListRegisteredResourceValuesResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.list_registered_resource_values, + ), + "/policy.registeredresources.RegisteredResourcesService/UpdateRegisteredResourceValue": Endpoint.unary( + method=MethodInfo( + name="UpdateRegisteredResourceValue", + service_name="policy.registeredresources.RegisteredResourcesService", + input=policy_dot_registeredresources_dot_registered__resources__pb2.UpdateRegisteredResourceValueRequest, + output=policy_dot_registeredresources_dot_registered__resources__pb2.UpdateRegisteredResourceValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.update_registered_resource_value, + ), + "/policy.registeredresources.RegisteredResourcesService/DeleteRegisteredResourceValue": Endpoint.unary( + method=MethodInfo( + name="DeleteRegisteredResourceValue", + service_name="policy.registeredresources.RegisteredResourcesService", + input=policy_dot_registeredresources_dot_registered__resources__pb2.DeleteRegisteredResourceValueRequest, + output=policy_dot_registeredresources_dot_registered__resources__pb2.DeleteRegisteredResourceValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.delete_registered_resource_value, + ), + }, + interceptors=interceptors, + read_max_bytes=read_max_bytes, + ) + + @property + def path(self) -> str: + """Returns the URL path to mount the application to when serving multiple applications.""" + return "/policy.registeredresources.RegisteredResourcesService" + + +class RegisteredResourcesServiceClient(ConnectClient): + async def create_registered_resource( + self, + request: policy_dot_registeredresources_dot_registered__resources__pb2.CreateRegisteredResourceRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_registeredresources_dot_registered__resources__pb2.CreateRegisteredResourceResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="CreateRegisteredResource", + service_name="policy.registeredresources.RegisteredResourcesService", + input=policy_dot_registeredresources_dot_registered__resources__pb2.CreateRegisteredResourceRequest, + output=policy_dot_registeredresources_dot_registered__resources__pb2.CreateRegisteredResourceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def get_registered_resource( + self, + request: policy_dot_registeredresources_dot_registered__resources__pb2.GetRegisteredResourceRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_registeredresources_dot_registered__resources__pb2.GetRegisteredResourceResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="GetRegisteredResource", + service_name="policy.registeredresources.RegisteredResourcesService", + input=policy_dot_registeredresources_dot_registered__resources__pb2.GetRegisteredResourceRequest, + output=policy_dot_registeredresources_dot_registered__resources__pb2.GetRegisteredResourceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def list_registered_resources( + self, + request: policy_dot_registeredresources_dot_registered__resources__pb2.ListRegisteredResourcesRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_registeredresources_dot_registered__resources__pb2.ListRegisteredResourcesResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="ListRegisteredResources", + service_name="policy.registeredresources.RegisteredResourcesService", + input=policy_dot_registeredresources_dot_registered__resources__pb2.ListRegisteredResourcesRequest, + output=policy_dot_registeredresources_dot_registered__resources__pb2.ListRegisteredResourcesResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def update_registered_resource( + self, + request: policy_dot_registeredresources_dot_registered__resources__pb2.UpdateRegisteredResourceRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_registeredresources_dot_registered__resources__pb2.UpdateRegisteredResourceResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="UpdateRegisteredResource", + service_name="policy.registeredresources.RegisteredResourcesService", + input=policy_dot_registeredresources_dot_registered__resources__pb2.UpdateRegisteredResourceRequest, + output=policy_dot_registeredresources_dot_registered__resources__pb2.UpdateRegisteredResourceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def delete_registered_resource( + self, + request: policy_dot_registeredresources_dot_registered__resources__pb2.DeleteRegisteredResourceRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_registeredresources_dot_registered__resources__pb2.DeleteRegisteredResourceResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="DeleteRegisteredResource", + service_name="policy.registeredresources.RegisteredResourcesService", + input=policy_dot_registeredresources_dot_registered__resources__pb2.DeleteRegisteredResourceRequest, + output=policy_dot_registeredresources_dot_registered__resources__pb2.DeleteRegisteredResourceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def create_registered_resource_value( + self, + request: policy_dot_registeredresources_dot_registered__resources__pb2.CreateRegisteredResourceValueRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_registeredresources_dot_registered__resources__pb2.CreateRegisteredResourceValueResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="CreateRegisteredResourceValue", + service_name="policy.registeredresources.RegisteredResourcesService", + input=policy_dot_registeredresources_dot_registered__resources__pb2.CreateRegisteredResourceValueRequest, + output=policy_dot_registeredresources_dot_registered__resources__pb2.CreateRegisteredResourceValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def get_registered_resource_value( + self, + request: policy_dot_registeredresources_dot_registered__resources__pb2.GetRegisteredResourceValueRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_registeredresources_dot_registered__resources__pb2.GetRegisteredResourceValueResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="GetRegisteredResourceValue", + service_name="policy.registeredresources.RegisteredResourcesService", + input=policy_dot_registeredresources_dot_registered__resources__pb2.GetRegisteredResourceValueRequest, + output=policy_dot_registeredresources_dot_registered__resources__pb2.GetRegisteredResourceValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def get_registered_resource_values_by_f_q_ns( + self, + request: policy_dot_registeredresources_dot_registered__resources__pb2.GetRegisteredResourceValuesByFQNsRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_registeredresources_dot_registered__resources__pb2.GetRegisteredResourceValuesByFQNsResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="GetRegisteredResourceValuesByFQNs", + service_name="policy.registeredresources.RegisteredResourcesService", + input=policy_dot_registeredresources_dot_registered__resources__pb2.GetRegisteredResourceValuesByFQNsRequest, + output=policy_dot_registeredresources_dot_registered__resources__pb2.GetRegisteredResourceValuesByFQNsResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def list_registered_resource_values( + self, + request: policy_dot_registeredresources_dot_registered__resources__pb2.ListRegisteredResourceValuesRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_registeredresources_dot_registered__resources__pb2.ListRegisteredResourceValuesResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="ListRegisteredResourceValues", + service_name="policy.registeredresources.RegisteredResourcesService", + input=policy_dot_registeredresources_dot_registered__resources__pb2.ListRegisteredResourceValuesRequest, + output=policy_dot_registeredresources_dot_registered__resources__pb2.ListRegisteredResourceValuesResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def update_registered_resource_value( + self, + request: policy_dot_registeredresources_dot_registered__resources__pb2.UpdateRegisteredResourceValueRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_registeredresources_dot_registered__resources__pb2.UpdateRegisteredResourceValueResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="UpdateRegisteredResourceValue", + service_name="policy.registeredresources.RegisteredResourcesService", + input=policy_dot_registeredresources_dot_registered__resources__pb2.UpdateRegisteredResourceValueRequest, + output=policy_dot_registeredresources_dot_registered__resources__pb2.UpdateRegisteredResourceValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def delete_registered_resource_value( + self, + request: policy_dot_registeredresources_dot_registered__resources__pb2.DeleteRegisteredResourceValueRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_registeredresources_dot_registered__resources__pb2.DeleteRegisteredResourceValueResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="DeleteRegisteredResourceValue", + service_name="policy.registeredresources.RegisteredResourcesService", + input=policy_dot_registeredresources_dot_registered__resources__pb2.DeleteRegisteredResourceValueRequest, + output=policy_dot_registeredresources_dot_registered__resources__pb2.DeleteRegisteredResourceValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + +class RegisteredResourcesServiceSync(Protocol): + def create_registered_resource(self, request: policy_dot_registeredresources_dot_registered__resources__pb2.CreateRegisteredResourceRequest, ctx: RequestContext) -> policy_dot_registeredresources_dot_registered__resources__pb2.CreateRegisteredResourceResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def get_registered_resource(self, request: policy_dot_registeredresources_dot_registered__resources__pb2.GetRegisteredResourceRequest, ctx: RequestContext) -> policy_dot_registeredresources_dot_registered__resources__pb2.GetRegisteredResourceResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def list_registered_resources(self, request: policy_dot_registeredresources_dot_registered__resources__pb2.ListRegisteredResourcesRequest, ctx: RequestContext) -> policy_dot_registeredresources_dot_registered__resources__pb2.ListRegisteredResourcesResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def update_registered_resource(self, request: policy_dot_registeredresources_dot_registered__resources__pb2.UpdateRegisteredResourceRequest, ctx: RequestContext) -> policy_dot_registeredresources_dot_registered__resources__pb2.UpdateRegisteredResourceResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def delete_registered_resource(self, request: policy_dot_registeredresources_dot_registered__resources__pb2.DeleteRegisteredResourceRequest, ctx: RequestContext) -> policy_dot_registeredresources_dot_registered__resources__pb2.DeleteRegisteredResourceResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def create_registered_resource_value(self, request: policy_dot_registeredresources_dot_registered__resources__pb2.CreateRegisteredResourceValueRequest, ctx: RequestContext) -> policy_dot_registeredresources_dot_registered__resources__pb2.CreateRegisteredResourceValueResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def get_registered_resource_value(self, request: policy_dot_registeredresources_dot_registered__resources__pb2.GetRegisteredResourceValueRequest, ctx: RequestContext) -> policy_dot_registeredresources_dot_registered__resources__pb2.GetRegisteredResourceValueResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def get_registered_resource_values_by_f_q_ns(self, request: policy_dot_registeredresources_dot_registered__resources__pb2.GetRegisteredResourceValuesByFQNsRequest, ctx: RequestContext) -> policy_dot_registeredresources_dot_registered__resources__pb2.GetRegisteredResourceValuesByFQNsResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def list_registered_resource_values(self, request: policy_dot_registeredresources_dot_registered__resources__pb2.ListRegisteredResourceValuesRequest, ctx: RequestContext) -> policy_dot_registeredresources_dot_registered__resources__pb2.ListRegisteredResourceValuesResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def update_registered_resource_value(self, request: policy_dot_registeredresources_dot_registered__resources__pb2.UpdateRegisteredResourceValueRequest, ctx: RequestContext) -> policy_dot_registeredresources_dot_registered__resources__pb2.UpdateRegisteredResourceValueResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def delete_registered_resource_value(self, request: policy_dot_registeredresources_dot_registered__resources__pb2.DeleteRegisteredResourceValueRequest, ctx: RequestContext) -> policy_dot_registeredresources_dot_registered__resources__pb2.DeleteRegisteredResourceValueResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + +class RegisteredResourcesServiceWSGIApplication(ConnectWSGIApplication): + def __init__(self, service: RegisteredResourcesServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None) -> None: + super().__init__( + endpoints={ + "/policy.registeredresources.RegisteredResourcesService/CreateRegisteredResource": EndpointSync.unary( + method=MethodInfo( + name="CreateRegisteredResource", + service_name="policy.registeredresources.RegisteredResourcesService", + input=policy_dot_registeredresources_dot_registered__resources__pb2.CreateRegisteredResourceRequest, + output=policy_dot_registeredresources_dot_registered__resources__pb2.CreateRegisteredResourceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.create_registered_resource, + ), + "/policy.registeredresources.RegisteredResourcesService/GetRegisteredResource": EndpointSync.unary( + method=MethodInfo( + name="GetRegisteredResource", + service_name="policy.registeredresources.RegisteredResourcesService", + input=policy_dot_registeredresources_dot_registered__resources__pb2.GetRegisteredResourceRequest, + output=policy_dot_registeredresources_dot_registered__resources__pb2.GetRegisteredResourceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.get_registered_resource, + ), + "/policy.registeredresources.RegisteredResourcesService/ListRegisteredResources": EndpointSync.unary( + method=MethodInfo( + name="ListRegisteredResources", + service_name="policy.registeredresources.RegisteredResourcesService", + input=policy_dot_registeredresources_dot_registered__resources__pb2.ListRegisteredResourcesRequest, + output=policy_dot_registeredresources_dot_registered__resources__pb2.ListRegisteredResourcesResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.list_registered_resources, + ), + "/policy.registeredresources.RegisteredResourcesService/UpdateRegisteredResource": EndpointSync.unary( + method=MethodInfo( + name="UpdateRegisteredResource", + service_name="policy.registeredresources.RegisteredResourcesService", + input=policy_dot_registeredresources_dot_registered__resources__pb2.UpdateRegisteredResourceRequest, + output=policy_dot_registeredresources_dot_registered__resources__pb2.UpdateRegisteredResourceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.update_registered_resource, + ), + "/policy.registeredresources.RegisteredResourcesService/DeleteRegisteredResource": EndpointSync.unary( + method=MethodInfo( + name="DeleteRegisteredResource", + service_name="policy.registeredresources.RegisteredResourcesService", + input=policy_dot_registeredresources_dot_registered__resources__pb2.DeleteRegisteredResourceRequest, + output=policy_dot_registeredresources_dot_registered__resources__pb2.DeleteRegisteredResourceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.delete_registered_resource, + ), + "/policy.registeredresources.RegisteredResourcesService/CreateRegisteredResourceValue": EndpointSync.unary( + method=MethodInfo( + name="CreateRegisteredResourceValue", + service_name="policy.registeredresources.RegisteredResourcesService", + input=policy_dot_registeredresources_dot_registered__resources__pb2.CreateRegisteredResourceValueRequest, + output=policy_dot_registeredresources_dot_registered__resources__pb2.CreateRegisteredResourceValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.create_registered_resource_value, + ), + "/policy.registeredresources.RegisteredResourcesService/GetRegisteredResourceValue": EndpointSync.unary( + method=MethodInfo( + name="GetRegisteredResourceValue", + service_name="policy.registeredresources.RegisteredResourcesService", + input=policy_dot_registeredresources_dot_registered__resources__pb2.GetRegisteredResourceValueRequest, + output=policy_dot_registeredresources_dot_registered__resources__pb2.GetRegisteredResourceValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.get_registered_resource_value, + ), + "/policy.registeredresources.RegisteredResourcesService/GetRegisteredResourceValuesByFQNs": EndpointSync.unary( + method=MethodInfo( + name="GetRegisteredResourceValuesByFQNs", + service_name="policy.registeredresources.RegisteredResourcesService", + input=policy_dot_registeredresources_dot_registered__resources__pb2.GetRegisteredResourceValuesByFQNsRequest, + output=policy_dot_registeredresources_dot_registered__resources__pb2.GetRegisteredResourceValuesByFQNsResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.get_registered_resource_values_by_f_q_ns, + ), + "/policy.registeredresources.RegisteredResourcesService/ListRegisteredResourceValues": EndpointSync.unary( + method=MethodInfo( + name="ListRegisteredResourceValues", + service_name="policy.registeredresources.RegisteredResourcesService", + input=policy_dot_registeredresources_dot_registered__resources__pb2.ListRegisteredResourceValuesRequest, + output=policy_dot_registeredresources_dot_registered__resources__pb2.ListRegisteredResourceValuesResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.list_registered_resource_values, + ), + "/policy.registeredresources.RegisteredResourcesService/UpdateRegisteredResourceValue": EndpointSync.unary( + method=MethodInfo( + name="UpdateRegisteredResourceValue", + service_name="policy.registeredresources.RegisteredResourcesService", + input=policy_dot_registeredresources_dot_registered__resources__pb2.UpdateRegisteredResourceValueRequest, + output=policy_dot_registeredresources_dot_registered__resources__pb2.UpdateRegisteredResourceValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.update_registered_resource_value, + ), + "/policy.registeredresources.RegisteredResourcesService/DeleteRegisteredResourceValue": EndpointSync.unary( + method=MethodInfo( + name="DeleteRegisteredResourceValue", + service_name="policy.registeredresources.RegisteredResourcesService", + input=policy_dot_registeredresources_dot_registered__resources__pb2.DeleteRegisteredResourceValueRequest, + output=policy_dot_registeredresources_dot_registered__resources__pb2.DeleteRegisteredResourceValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.delete_registered_resource_value, + ), + }, + interceptors=interceptors, + read_max_bytes=read_max_bytes, + ) + + @property + def path(self) -> str: + """Returns the URL path to mount the application to when serving multiple applications.""" + return "/policy.registeredresources.RegisteredResourcesService" + + +class RegisteredResourcesServiceClientSync(ConnectClientSync): + def create_registered_resource( + self, + request: policy_dot_registeredresources_dot_registered__resources__pb2.CreateRegisteredResourceRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_registeredresources_dot_registered__resources__pb2.CreateRegisteredResourceResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="CreateRegisteredResource", + service_name="policy.registeredresources.RegisteredResourcesService", + input=policy_dot_registeredresources_dot_registered__resources__pb2.CreateRegisteredResourceRequest, + output=policy_dot_registeredresources_dot_registered__resources__pb2.CreateRegisteredResourceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def get_registered_resource( + self, + request: policy_dot_registeredresources_dot_registered__resources__pb2.GetRegisteredResourceRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_registeredresources_dot_registered__resources__pb2.GetRegisteredResourceResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="GetRegisteredResource", + service_name="policy.registeredresources.RegisteredResourcesService", + input=policy_dot_registeredresources_dot_registered__resources__pb2.GetRegisteredResourceRequest, + output=policy_dot_registeredresources_dot_registered__resources__pb2.GetRegisteredResourceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def list_registered_resources( + self, + request: policy_dot_registeredresources_dot_registered__resources__pb2.ListRegisteredResourcesRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_registeredresources_dot_registered__resources__pb2.ListRegisteredResourcesResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="ListRegisteredResources", + service_name="policy.registeredresources.RegisteredResourcesService", + input=policy_dot_registeredresources_dot_registered__resources__pb2.ListRegisteredResourcesRequest, + output=policy_dot_registeredresources_dot_registered__resources__pb2.ListRegisteredResourcesResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def update_registered_resource( + self, + request: policy_dot_registeredresources_dot_registered__resources__pb2.UpdateRegisteredResourceRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_registeredresources_dot_registered__resources__pb2.UpdateRegisteredResourceResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="UpdateRegisteredResource", + service_name="policy.registeredresources.RegisteredResourcesService", + input=policy_dot_registeredresources_dot_registered__resources__pb2.UpdateRegisteredResourceRequest, + output=policy_dot_registeredresources_dot_registered__resources__pb2.UpdateRegisteredResourceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def delete_registered_resource( + self, + request: policy_dot_registeredresources_dot_registered__resources__pb2.DeleteRegisteredResourceRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_registeredresources_dot_registered__resources__pb2.DeleteRegisteredResourceResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="DeleteRegisteredResource", + service_name="policy.registeredresources.RegisteredResourcesService", + input=policy_dot_registeredresources_dot_registered__resources__pb2.DeleteRegisteredResourceRequest, + output=policy_dot_registeredresources_dot_registered__resources__pb2.DeleteRegisteredResourceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def create_registered_resource_value( + self, + request: policy_dot_registeredresources_dot_registered__resources__pb2.CreateRegisteredResourceValueRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_registeredresources_dot_registered__resources__pb2.CreateRegisteredResourceValueResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="CreateRegisteredResourceValue", + service_name="policy.registeredresources.RegisteredResourcesService", + input=policy_dot_registeredresources_dot_registered__resources__pb2.CreateRegisteredResourceValueRequest, + output=policy_dot_registeredresources_dot_registered__resources__pb2.CreateRegisteredResourceValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def get_registered_resource_value( + self, + request: policy_dot_registeredresources_dot_registered__resources__pb2.GetRegisteredResourceValueRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_registeredresources_dot_registered__resources__pb2.GetRegisteredResourceValueResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="GetRegisteredResourceValue", + service_name="policy.registeredresources.RegisteredResourcesService", + input=policy_dot_registeredresources_dot_registered__resources__pb2.GetRegisteredResourceValueRequest, + output=policy_dot_registeredresources_dot_registered__resources__pb2.GetRegisteredResourceValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def get_registered_resource_values_by_f_q_ns( + self, + request: policy_dot_registeredresources_dot_registered__resources__pb2.GetRegisteredResourceValuesByFQNsRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_registeredresources_dot_registered__resources__pb2.GetRegisteredResourceValuesByFQNsResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="GetRegisteredResourceValuesByFQNs", + service_name="policy.registeredresources.RegisteredResourcesService", + input=policy_dot_registeredresources_dot_registered__resources__pb2.GetRegisteredResourceValuesByFQNsRequest, + output=policy_dot_registeredresources_dot_registered__resources__pb2.GetRegisteredResourceValuesByFQNsResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def list_registered_resource_values( + self, + request: policy_dot_registeredresources_dot_registered__resources__pb2.ListRegisteredResourceValuesRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_registeredresources_dot_registered__resources__pb2.ListRegisteredResourceValuesResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="ListRegisteredResourceValues", + service_name="policy.registeredresources.RegisteredResourcesService", + input=policy_dot_registeredresources_dot_registered__resources__pb2.ListRegisteredResourceValuesRequest, + output=policy_dot_registeredresources_dot_registered__resources__pb2.ListRegisteredResourceValuesResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def update_registered_resource_value( + self, + request: policy_dot_registeredresources_dot_registered__resources__pb2.UpdateRegisteredResourceValueRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_registeredresources_dot_registered__resources__pb2.UpdateRegisteredResourceValueResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="UpdateRegisteredResourceValue", + service_name="policy.registeredresources.RegisteredResourcesService", + input=policy_dot_registeredresources_dot_registered__resources__pb2.UpdateRegisteredResourceValueRequest, + output=policy_dot_registeredresources_dot_registered__resources__pb2.UpdateRegisteredResourceValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def delete_registered_resource_value( + self, + request: policy_dot_registeredresources_dot_registered__resources__pb2.DeleteRegisteredResourceValueRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_registeredresources_dot_registered__resources__pb2.DeleteRegisteredResourceValueResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="DeleteRegisteredResourceValue", + service_name="policy.registeredresources.RegisteredResourcesService", + input=policy_dot_registeredresources_dot_registered__resources__pb2.DeleteRegisteredResourceValueRequest, + output=policy_dot_registeredresources_dot_registered__resources__pb2.DeleteRegisteredResourceValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) diff --git a/otdf-python-proto/src/otdf_python_proto/policy/registeredresources/registered_resources_pb2_connect.py b/otdf-python-proto/src/otdf_python_proto/policy/registeredresources/registered_resources_pb2_connect.py deleted file mode 100644 index 96922e5..0000000 --- a/otdf-python-proto/src/otdf_python_proto/policy/registeredresources/registered_resources_pb2_connect.py +++ /dev/null @@ -1,527 +0,0 @@ -# Generated Connect client code - -from __future__ import annotations -from collections.abc import AsyncIterator -from collections.abc import Iterator -from collections.abc import Iterable -import aiohttp -import urllib3 -import typing -import sys - -from connectrpc.client_async import AsyncConnectClient -from connectrpc.client_sync import ConnectClient -from connectrpc.client_protocol import ConnectProtocol -from connectrpc.client_connect import ConnectProtocolError -from connectrpc.headers import HeaderInput -from connectrpc.server import ClientRequest -from connectrpc.server import ClientStream -from connectrpc.server import ServerResponse -from connectrpc.server import ServerStream -from connectrpc.server_sync import ConnectWSGI -from connectrpc.streams import StreamInput -from connectrpc.streams import AsyncStreamOutput -from connectrpc.streams import StreamOutput -from connectrpc.unary import UnaryOutput -from connectrpc.unary import ClientStreamingOutput - -if typing.TYPE_CHECKING: - # wsgiref.types was added in Python 3.11. - if sys.version_info >= (3, 11): - from wsgiref.types import WSGIApplication - else: - from _typeshed.wsgi import WSGIApplication - -import policy.registeredresources.registered_resources_pb2 - -class RegisteredResourcesServiceClient: - def __init__( - self, - base_url: str, - http_client: urllib3.PoolManager | None = None, - protocol: ConnectProtocol = ConnectProtocol.CONNECT_PROTOBUF, - ): - self.base_url = base_url - self._connect_client = ConnectClient(http_client, protocol) - def call_create_registered_resource( - self, req: policy.registeredresources.registered_resources_pb2.CreateRegisteredResourceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.registeredresources.registered_resources_pb2.CreateRegisteredResourceResponse]: - """Low-level method to call CreateRegisteredResource, granting access to errors and metadata""" - url = self.base_url + "/policy.registeredresources.RegisteredResourcesService/CreateRegisteredResource" - return self._connect_client.call_unary(url, req, policy.registeredresources.registered_resources_pb2.CreateRegisteredResourceResponse,extra_headers, timeout_seconds) - - - def create_registered_resource( - self, req: policy.registeredresources.registered_resources_pb2.CreateRegisteredResourceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.registeredresources.registered_resources_pb2.CreateRegisteredResourceResponse: - response = self.call_create_registered_resource(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_get_registered_resource( - self, req: policy.registeredresources.registered_resources_pb2.GetRegisteredResourceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.registeredresources.registered_resources_pb2.GetRegisteredResourceResponse]: - """Low-level method to call GetRegisteredResource, granting access to errors and metadata""" - url = self.base_url + "/policy.registeredresources.RegisteredResourcesService/GetRegisteredResource" - return self._connect_client.call_unary(url, req, policy.registeredresources.registered_resources_pb2.GetRegisteredResourceResponse,extra_headers, timeout_seconds) - - - def get_registered_resource( - self, req: policy.registeredresources.registered_resources_pb2.GetRegisteredResourceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.registeredresources.registered_resources_pb2.GetRegisteredResourceResponse: - response = self.call_get_registered_resource(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_list_registered_resources( - self, req: policy.registeredresources.registered_resources_pb2.ListRegisteredResourcesRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.registeredresources.registered_resources_pb2.ListRegisteredResourcesResponse]: - """Low-level method to call ListRegisteredResources, granting access to errors and metadata""" - url = self.base_url + "/policy.registeredresources.RegisteredResourcesService/ListRegisteredResources" - return self._connect_client.call_unary(url, req, policy.registeredresources.registered_resources_pb2.ListRegisteredResourcesResponse,extra_headers, timeout_seconds) - - - def list_registered_resources( - self, req: policy.registeredresources.registered_resources_pb2.ListRegisteredResourcesRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.registeredresources.registered_resources_pb2.ListRegisteredResourcesResponse: - response = self.call_list_registered_resources(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_update_registered_resource( - self, req: policy.registeredresources.registered_resources_pb2.UpdateRegisteredResourceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.registeredresources.registered_resources_pb2.UpdateRegisteredResourceResponse]: - """Low-level method to call UpdateRegisteredResource, granting access to errors and metadata""" - url = self.base_url + "/policy.registeredresources.RegisteredResourcesService/UpdateRegisteredResource" - return self._connect_client.call_unary(url, req, policy.registeredresources.registered_resources_pb2.UpdateRegisteredResourceResponse,extra_headers, timeout_seconds) - - - def update_registered_resource( - self, req: policy.registeredresources.registered_resources_pb2.UpdateRegisteredResourceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.registeredresources.registered_resources_pb2.UpdateRegisteredResourceResponse: - response = self.call_update_registered_resource(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_delete_registered_resource( - self, req: policy.registeredresources.registered_resources_pb2.DeleteRegisteredResourceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.registeredresources.registered_resources_pb2.DeleteRegisteredResourceResponse]: - """Low-level method to call DeleteRegisteredResource, granting access to errors and metadata""" - url = self.base_url + "/policy.registeredresources.RegisteredResourcesService/DeleteRegisteredResource" - return self._connect_client.call_unary(url, req, policy.registeredresources.registered_resources_pb2.DeleteRegisteredResourceResponse,extra_headers, timeout_seconds) - - - def delete_registered_resource( - self, req: policy.registeredresources.registered_resources_pb2.DeleteRegisteredResourceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.registeredresources.registered_resources_pb2.DeleteRegisteredResourceResponse: - response = self.call_delete_registered_resource(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_create_registered_resource_value( - self, req: policy.registeredresources.registered_resources_pb2.CreateRegisteredResourceValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.registeredresources.registered_resources_pb2.CreateRegisteredResourceValueResponse]: - """Low-level method to call CreateRegisteredResourceValue, granting access to errors and metadata""" - url = self.base_url + "/policy.registeredresources.RegisteredResourcesService/CreateRegisteredResourceValue" - return self._connect_client.call_unary(url, req, policy.registeredresources.registered_resources_pb2.CreateRegisteredResourceValueResponse,extra_headers, timeout_seconds) - - - def create_registered_resource_value( - self, req: policy.registeredresources.registered_resources_pb2.CreateRegisteredResourceValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.registeredresources.registered_resources_pb2.CreateRegisteredResourceValueResponse: - response = self.call_create_registered_resource_value(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_get_registered_resource_value( - self, req: policy.registeredresources.registered_resources_pb2.GetRegisteredResourceValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.registeredresources.registered_resources_pb2.GetRegisteredResourceValueResponse]: - """Low-level method to call GetRegisteredResourceValue, granting access to errors and metadata""" - url = self.base_url + "/policy.registeredresources.RegisteredResourcesService/GetRegisteredResourceValue" - return self._connect_client.call_unary(url, req, policy.registeredresources.registered_resources_pb2.GetRegisteredResourceValueResponse,extra_headers, timeout_seconds) - - - def get_registered_resource_value( - self, req: policy.registeredresources.registered_resources_pb2.GetRegisteredResourceValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.registeredresources.registered_resources_pb2.GetRegisteredResourceValueResponse: - response = self.call_get_registered_resource_value(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_get_registered_resource_values_by_fq_ns( - self, req: policy.registeredresources.registered_resources_pb2.GetRegisteredResourceValuesByFQNsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.registeredresources.registered_resources_pb2.GetRegisteredResourceValuesByFQNsResponse]: - """Low-level method to call GetRegisteredResourceValuesByFQNs, granting access to errors and metadata""" - url = self.base_url + "/policy.registeredresources.RegisteredResourcesService/GetRegisteredResourceValuesByFQNs" - return self._connect_client.call_unary(url, req, policy.registeredresources.registered_resources_pb2.GetRegisteredResourceValuesByFQNsResponse,extra_headers, timeout_seconds) - - - def get_registered_resource_values_by_fq_ns( - self, req: policy.registeredresources.registered_resources_pb2.GetRegisteredResourceValuesByFQNsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.registeredresources.registered_resources_pb2.GetRegisteredResourceValuesByFQNsResponse: - response = self.call_get_registered_resource_values_by_fq_ns(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_list_registered_resource_values( - self, req: policy.registeredresources.registered_resources_pb2.ListRegisteredResourceValuesRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.registeredresources.registered_resources_pb2.ListRegisteredResourceValuesResponse]: - """Low-level method to call ListRegisteredResourceValues, granting access to errors and metadata""" - url = self.base_url + "/policy.registeredresources.RegisteredResourcesService/ListRegisteredResourceValues" - return self._connect_client.call_unary(url, req, policy.registeredresources.registered_resources_pb2.ListRegisteredResourceValuesResponse,extra_headers, timeout_seconds) - - - def list_registered_resource_values( - self, req: policy.registeredresources.registered_resources_pb2.ListRegisteredResourceValuesRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.registeredresources.registered_resources_pb2.ListRegisteredResourceValuesResponse: - response = self.call_list_registered_resource_values(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_update_registered_resource_value( - self, req: policy.registeredresources.registered_resources_pb2.UpdateRegisteredResourceValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.registeredresources.registered_resources_pb2.UpdateRegisteredResourceValueResponse]: - """Low-level method to call UpdateRegisteredResourceValue, granting access to errors and metadata""" - url = self.base_url + "/policy.registeredresources.RegisteredResourcesService/UpdateRegisteredResourceValue" - return self._connect_client.call_unary(url, req, policy.registeredresources.registered_resources_pb2.UpdateRegisteredResourceValueResponse,extra_headers, timeout_seconds) - - - def update_registered_resource_value( - self, req: policy.registeredresources.registered_resources_pb2.UpdateRegisteredResourceValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.registeredresources.registered_resources_pb2.UpdateRegisteredResourceValueResponse: - response = self.call_update_registered_resource_value(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_delete_registered_resource_value( - self, req: policy.registeredresources.registered_resources_pb2.DeleteRegisteredResourceValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.registeredresources.registered_resources_pb2.DeleteRegisteredResourceValueResponse]: - """Low-level method to call DeleteRegisteredResourceValue, granting access to errors and metadata""" - url = self.base_url + "/policy.registeredresources.RegisteredResourcesService/DeleteRegisteredResourceValue" - return self._connect_client.call_unary(url, req, policy.registeredresources.registered_resources_pb2.DeleteRegisteredResourceValueResponse,extra_headers, timeout_seconds) - - - def delete_registered_resource_value( - self, req: policy.registeredresources.registered_resources_pb2.DeleteRegisteredResourceValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.registeredresources.registered_resources_pb2.DeleteRegisteredResourceValueResponse: - response = self.call_delete_registered_resource_value(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - -class AsyncRegisteredResourcesServiceClient: - def __init__( - self, - base_url: str, - http_client: aiohttp.ClientSession, - protocol: ConnectProtocol = ConnectProtocol.CONNECT_PROTOBUF, - ): - self.base_url = base_url - self._connect_client = AsyncConnectClient(http_client, protocol) - - async def call_create_registered_resource( - self, req: policy.registeredresources.registered_resources_pb2.CreateRegisteredResourceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.registeredresources.registered_resources_pb2.CreateRegisteredResourceResponse]: - """Low-level method to call CreateRegisteredResource, granting access to errors and metadata""" - url = self.base_url + "/policy.registeredresources.RegisteredResourcesService/CreateRegisteredResource" - return await self._connect_client.call_unary(url, req, policy.registeredresources.registered_resources_pb2.CreateRegisteredResourceResponse,extra_headers, timeout_seconds) - - async def create_registered_resource( - self, req: policy.registeredresources.registered_resources_pb2.CreateRegisteredResourceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.registeredresources.registered_resources_pb2.CreateRegisteredResourceResponse: - response = await self.call_create_registered_resource(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_get_registered_resource( - self, req: policy.registeredresources.registered_resources_pb2.GetRegisteredResourceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.registeredresources.registered_resources_pb2.GetRegisteredResourceResponse]: - """Low-level method to call GetRegisteredResource, granting access to errors and metadata""" - url = self.base_url + "/policy.registeredresources.RegisteredResourcesService/GetRegisteredResource" - return await self._connect_client.call_unary(url, req, policy.registeredresources.registered_resources_pb2.GetRegisteredResourceResponse,extra_headers, timeout_seconds) - - async def get_registered_resource( - self, req: policy.registeredresources.registered_resources_pb2.GetRegisteredResourceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.registeredresources.registered_resources_pb2.GetRegisteredResourceResponse: - response = await self.call_get_registered_resource(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_list_registered_resources( - self, req: policy.registeredresources.registered_resources_pb2.ListRegisteredResourcesRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.registeredresources.registered_resources_pb2.ListRegisteredResourcesResponse]: - """Low-level method to call ListRegisteredResources, granting access to errors and metadata""" - url = self.base_url + "/policy.registeredresources.RegisteredResourcesService/ListRegisteredResources" - return await self._connect_client.call_unary(url, req, policy.registeredresources.registered_resources_pb2.ListRegisteredResourcesResponse,extra_headers, timeout_seconds) - - async def list_registered_resources( - self, req: policy.registeredresources.registered_resources_pb2.ListRegisteredResourcesRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.registeredresources.registered_resources_pb2.ListRegisteredResourcesResponse: - response = await self.call_list_registered_resources(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_update_registered_resource( - self, req: policy.registeredresources.registered_resources_pb2.UpdateRegisteredResourceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.registeredresources.registered_resources_pb2.UpdateRegisteredResourceResponse]: - """Low-level method to call UpdateRegisteredResource, granting access to errors and metadata""" - url = self.base_url + "/policy.registeredresources.RegisteredResourcesService/UpdateRegisteredResource" - return await self._connect_client.call_unary(url, req, policy.registeredresources.registered_resources_pb2.UpdateRegisteredResourceResponse,extra_headers, timeout_seconds) - - async def update_registered_resource( - self, req: policy.registeredresources.registered_resources_pb2.UpdateRegisteredResourceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.registeredresources.registered_resources_pb2.UpdateRegisteredResourceResponse: - response = await self.call_update_registered_resource(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_delete_registered_resource( - self, req: policy.registeredresources.registered_resources_pb2.DeleteRegisteredResourceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.registeredresources.registered_resources_pb2.DeleteRegisteredResourceResponse]: - """Low-level method to call DeleteRegisteredResource, granting access to errors and metadata""" - url = self.base_url + "/policy.registeredresources.RegisteredResourcesService/DeleteRegisteredResource" - return await self._connect_client.call_unary(url, req, policy.registeredresources.registered_resources_pb2.DeleteRegisteredResourceResponse,extra_headers, timeout_seconds) - - async def delete_registered_resource( - self, req: policy.registeredresources.registered_resources_pb2.DeleteRegisteredResourceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.registeredresources.registered_resources_pb2.DeleteRegisteredResourceResponse: - response = await self.call_delete_registered_resource(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_create_registered_resource_value( - self, req: policy.registeredresources.registered_resources_pb2.CreateRegisteredResourceValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.registeredresources.registered_resources_pb2.CreateRegisteredResourceValueResponse]: - """Low-level method to call CreateRegisteredResourceValue, granting access to errors and metadata""" - url = self.base_url + "/policy.registeredresources.RegisteredResourcesService/CreateRegisteredResourceValue" - return await self._connect_client.call_unary(url, req, policy.registeredresources.registered_resources_pb2.CreateRegisteredResourceValueResponse,extra_headers, timeout_seconds) - - async def create_registered_resource_value( - self, req: policy.registeredresources.registered_resources_pb2.CreateRegisteredResourceValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.registeredresources.registered_resources_pb2.CreateRegisteredResourceValueResponse: - response = await self.call_create_registered_resource_value(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_get_registered_resource_value( - self, req: policy.registeredresources.registered_resources_pb2.GetRegisteredResourceValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.registeredresources.registered_resources_pb2.GetRegisteredResourceValueResponse]: - """Low-level method to call GetRegisteredResourceValue, granting access to errors and metadata""" - url = self.base_url + "/policy.registeredresources.RegisteredResourcesService/GetRegisteredResourceValue" - return await self._connect_client.call_unary(url, req, policy.registeredresources.registered_resources_pb2.GetRegisteredResourceValueResponse,extra_headers, timeout_seconds) - - async def get_registered_resource_value( - self, req: policy.registeredresources.registered_resources_pb2.GetRegisteredResourceValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.registeredresources.registered_resources_pb2.GetRegisteredResourceValueResponse: - response = await self.call_get_registered_resource_value(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_get_registered_resource_values_by_fq_ns( - self, req: policy.registeredresources.registered_resources_pb2.GetRegisteredResourceValuesByFQNsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.registeredresources.registered_resources_pb2.GetRegisteredResourceValuesByFQNsResponse]: - """Low-level method to call GetRegisteredResourceValuesByFQNs, granting access to errors and metadata""" - url = self.base_url + "/policy.registeredresources.RegisteredResourcesService/GetRegisteredResourceValuesByFQNs" - return await self._connect_client.call_unary(url, req, policy.registeredresources.registered_resources_pb2.GetRegisteredResourceValuesByFQNsResponse,extra_headers, timeout_seconds) - - async def get_registered_resource_values_by_fq_ns( - self, req: policy.registeredresources.registered_resources_pb2.GetRegisteredResourceValuesByFQNsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.registeredresources.registered_resources_pb2.GetRegisteredResourceValuesByFQNsResponse: - response = await self.call_get_registered_resource_values_by_fq_ns(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_list_registered_resource_values( - self, req: policy.registeredresources.registered_resources_pb2.ListRegisteredResourceValuesRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.registeredresources.registered_resources_pb2.ListRegisteredResourceValuesResponse]: - """Low-level method to call ListRegisteredResourceValues, granting access to errors and metadata""" - url = self.base_url + "/policy.registeredresources.RegisteredResourcesService/ListRegisteredResourceValues" - return await self._connect_client.call_unary(url, req, policy.registeredresources.registered_resources_pb2.ListRegisteredResourceValuesResponse,extra_headers, timeout_seconds) - - async def list_registered_resource_values( - self, req: policy.registeredresources.registered_resources_pb2.ListRegisteredResourceValuesRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.registeredresources.registered_resources_pb2.ListRegisteredResourceValuesResponse: - response = await self.call_list_registered_resource_values(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_update_registered_resource_value( - self, req: policy.registeredresources.registered_resources_pb2.UpdateRegisteredResourceValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.registeredresources.registered_resources_pb2.UpdateRegisteredResourceValueResponse]: - """Low-level method to call UpdateRegisteredResourceValue, granting access to errors and metadata""" - url = self.base_url + "/policy.registeredresources.RegisteredResourcesService/UpdateRegisteredResourceValue" - return await self._connect_client.call_unary(url, req, policy.registeredresources.registered_resources_pb2.UpdateRegisteredResourceValueResponse,extra_headers, timeout_seconds) - - async def update_registered_resource_value( - self, req: policy.registeredresources.registered_resources_pb2.UpdateRegisteredResourceValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.registeredresources.registered_resources_pb2.UpdateRegisteredResourceValueResponse: - response = await self.call_update_registered_resource_value(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_delete_registered_resource_value( - self, req: policy.registeredresources.registered_resources_pb2.DeleteRegisteredResourceValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.registeredresources.registered_resources_pb2.DeleteRegisteredResourceValueResponse]: - """Low-level method to call DeleteRegisteredResourceValue, granting access to errors and metadata""" - url = self.base_url + "/policy.registeredresources.RegisteredResourcesService/DeleteRegisteredResourceValue" - return await self._connect_client.call_unary(url, req, policy.registeredresources.registered_resources_pb2.DeleteRegisteredResourceValueResponse,extra_headers, timeout_seconds) - - async def delete_registered_resource_value( - self, req: policy.registeredresources.registered_resources_pb2.DeleteRegisteredResourceValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.registeredresources.registered_resources_pb2.DeleteRegisteredResourceValueResponse: - response = await self.call_delete_registered_resource_value(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - -@typing.runtime_checkable -class RegisteredResourcesServiceProtocol(typing.Protocol): - def create_registered_resource(self, req: ClientRequest[policy.registeredresources.registered_resources_pb2.CreateRegisteredResourceRequest]) -> ServerResponse[policy.registeredresources.registered_resources_pb2.CreateRegisteredResourceResponse]: - ... - def get_registered_resource(self, req: ClientRequest[policy.registeredresources.registered_resources_pb2.GetRegisteredResourceRequest]) -> ServerResponse[policy.registeredresources.registered_resources_pb2.GetRegisteredResourceResponse]: - ... - def list_registered_resources(self, req: ClientRequest[policy.registeredresources.registered_resources_pb2.ListRegisteredResourcesRequest]) -> ServerResponse[policy.registeredresources.registered_resources_pb2.ListRegisteredResourcesResponse]: - ... - def update_registered_resource(self, req: ClientRequest[policy.registeredresources.registered_resources_pb2.UpdateRegisteredResourceRequest]) -> ServerResponse[policy.registeredresources.registered_resources_pb2.UpdateRegisteredResourceResponse]: - ... - def delete_registered_resource(self, req: ClientRequest[policy.registeredresources.registered_resources_pb2.DeleteRegisteredResourceRequest]) -> ServerResponse[policy.registeredresources.registered_resources_pb2.DeleteRegisteredResourceResponse]: - ... - def create_registered_resource_value(self, req: ClientRequest[policy.registeredresources.registered_resources_pb2.CreateRegisteredResourceValueRequest]) -> ServerResponse[policy.registeredresources.registered_resources_pb2.CreateRegisteredResourceValueResponse]: - ... - def get_registered_resource_value(self, req: ClientRequest[policy.registeredresources.registered_resources_pb2.GetRegisteredResourceValueRequest]) -> ServerResponse[policy.registeredresources.registered_resources_pb2.GetRegisteredResourceValueResponse]: - ... - def get_registered_resource_values_by_fq_ns(self, req: ClientRequest[policy.registeredresources.registered_resources_pb2.GetRegisteredResourceValuesByFQNsRequest]) -> ServerResponse[policy.registeredresources.registered_resources_pb2.GetRegisteredResourceValuesByFQNsResponse]: - ... - def list_registered_resource_values(self, req: ClientRequest[policy.registeredresources.registered_resources_pb2.ListRegisteredResourceValuesRequest]) -> ServerResponse[policy.registeredresources.registered_resources_pb2.ListRegisteredResourceValuesResponse]: - ... - def update_registered_resource_value(self, req: ClientRequest[policy.registeredresources.registered_resources_pb2.UpdateRegisteredResourceValueRequest]) -> ServerResponse[policy.registeredresources.registered_resources_pb2.UpdateRegisteredResourceValueResponse]: - ... - def delete_registered_resource_value(self, req: ClientRequest[policy.registeredresources.registered_resources_pb2.DeleteRegisteredResourceValueRequest]) -> ServerResponse[policy.registeredresources.registered_resources_pb2.DeleteRegisteredResourceValueResponse]: - ... - -REGISTERED_RESOURCES_SERVICE_PATH_PREFIX = "/policy.registeredresources.RegisteredResourcesService" - -def wsgi_registered_resources_service(implementation: RegisteredResourcesServiceProtocol) -> WSGIApplication: - app = ConnectWSGI() - app.register_unary_rpc("/policy.registeredresources.RegisteredResourcesService/CreateRegisteredResource", implementation.create_registered_resource, policy.registeredresources.registered_resources_pb2.CreateRegisteredResourceRequest) - app.register_unary_rpc("/policy.registeredresources.RegisteredResourcesService/GetRegisteredResource", implementation.get_registered_resource, policy.registeredresources.registered_resources_pb2.GetRegisteredResourceRequest) - app.register_unary_rpc("/policy.registeredresources.RegisteredResourcesService/ListRegisteredResources", implementation.list_registered_resources, policy.registeredresources.registered_resources_pb2.ListRegisteredResourcesRequest) - app.register_unary_rpc("/policy.registeredresources.RegisteredResourcesService/UpdateRegisteredResource", implementation.update_registered_resource, policy.registeredresources.registered_resources_pb2.UpdateRegisteredResourceRequest) - app.register_unary_rpc("/policy.registeredresources.RegisteredResourcesService/DeleteRegisteredResource", implementation.delete_registered_resource, policy.registeredresources.registered_resources_pb2.DeleteRegisteredResourceRequest) - app.register_unary_rpc("/policy.registeredresources.RegisteredResourcesService/CreateRegisteredResourceValue", implementation.create_registered_resource_value, policy.registeredresources.registered_resources_pb2.CreateRegisteredResourceValueRequest) - app.register_unary_rpc("/policy.registeredresources.RegisteredResourcesService/GetRegisteredResourceValue", implementation.get_registered_resource_value, policy.registeredresources.registered_resources_pb2.GetRegisteredResourceValueRequest) - app.register_unary_rpc("/policy.registeredresources.RegisteredResourcesService/GetRegisteredResourceValuesByFQNs", implementation.get_registered_resource_values_by_fq_ns, policy.registeredresources.registered_resources_pb2.GetRegisteredResourceValuesByFQNsRequest) - app.register_unary_rpc("/policy.registeredresources.RegisteredResourcesService/ListRegisteredResourceValues", implementation.list_registered_resource_values, policy.registeredresources.registered_resources_pb2.ListRegisteredResourceValuesRequest) - app.register_unary_rpc("/policy.registeredresources.RegisteredResourcesService/UpdateRegisteredResourceValue", implementation.update_registered_resource_value, policy.registeredresources.registered_resources_pb2.UpdateRegisteredResourceValueRequest) - app.register_unary_rpc("/policy.registeredresources.RegisteredResourcesService/DeleteRegisteredResourceValue", implementation.delete_registered_resource_value, policy.registeredresources.registered_resources_pb2.DeleteRegisteredResourceValueRequest) - return app diff --git a/otdf-python-proto/src/otdf_python_proto/policy/resourcemapping/__init__.py b/otdf-python-proto/src/otdf_python_proto/policy/resourcemapping/__init__.py new file mode 100644 index 0000000..0e6f22f --- /dev/null +++ b/otdf-python-proto/src/otdf_python_proto/policy/resourcemapping/__init__.py @@ -0,0 +1,11 @@ +"""policy.resourcemapping protobuf definitions.""" + +from .resource_mapping_connect import ( + ResourceMappingServiceClient, + ResourceMappingServiceClientSync, +) + +__all__ = [ + "ResourceMappingServiceClient", + "ResourceMappingServiceClientSync", +] diff --git a/otdf-python-proto/src/otdf_python_proto/policy/resourcemapping/resource_mapping_connect.py b/otdf-python-proto/src/otdf_python_proto/policy/resourcemapping/resource_mapping_connect.py new file mode 100644 index 0000000..c685e82 --- /dev/null +++ b/otdf-python-proto/src/otdf_python_proto/policy/resourcemapping/resource_mapping_connect.py @@ -0,0 +1,790 @@ +# -*- coding: utf-8 -*- +# Generated by https://github.com/connectrpc/connect-python. DO NOT EDIT! +# source: policy/resourcemapping/resource_mapping.proto + +from collections.abc import AsyncGenerator, AsyncIterator, Iterable, Iterator, Mapping +from typing import Protocol + +from connectrpc.client import ConnectClient, ConnectClientSync +from connectrpc.code import Code +from connectrpc.errors import ConnectError +from connectrpc.interceptor import Interceptor, InterceptorSync +from connectrpc.method import IdempotencyLevel, MethodInfo +from connectrpc.request import Headers, RequestContext +from connectrpc.server import ConnectASGIApplication, ConnectWSGIApplication, Endpoint, EndpointSync +import policy.resourcemapping.resource_mapping_pb2 as policy_dot_resourcemapping_dot_resource__mapping__pb2 + + +class ResourceMappingService(Protocol): + async def list_resource_mapping_groups(self, request: policy_dot_resourcemapping_dot_resource__mapping__pb2.ListResourceMappingGroupsRequest, ctx: RequestContext) -> policy_dot_resourcemapping_dot_resource__mapping__pb2.ListResourceMappingGroupsResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def get_resource_mapping_group(self, request: policy_dot_resourcemapping_dot_resource__mapping__pb2.GetResourceMappingGroupRequest, ctx: RequestContext) -> policy_dot_resourcemapping_dot_resource__mapping__pb2.GetResourceMappingGroupResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def create_resource_mapping_group(self, request: policy_dot_resourcemapping_dot_resource__mapping__pb2.CreateResourceMappingGroupRequest, ctx: RequestContext) -> policy_dot_resourcemapping_dot_resource__mapping__pb2.CreateResourceMappingGroupResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def update_resource_mapping_group(self, request: policy_dot_resourcemapping_dot_resource__mapping__pb2.UpdateResourceMappingGroupRequest, ctx: RequestContext) -> policy_dot_resourcemapping_dot_resource__mapping__pb2.UpdateResourceMappingGroupResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def delete_resource_mapping_group(self, request: policy_dot_resourcemapping_dot_resource__mapping__pb2.DeleteResourceMappingGroupRequest, ctx: RequestContext) -> policy_dot_resourcemapping_dot_resource__mapping__pb2.DeleteResourceMappingGroupResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def list_resource_mappings(self, request: policy_dot_resourcemapping_dot_resource__mapping__pb2.ListResourceMappingsRequest, ctx: RequestContext) -> policy_dot_resourcemapping_dot_resource__mapping__pb2.ListResourceMappingsResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def list_resource_mappings_by_group_fqns(self, request: policy_dot_resourcemapping_dot_resource__mapping__pb2.ListResourceMappingsByGroupFqnsRequest, ctx: RequestContext) -> policy_dot_resourcemapping_dot_resource__mapping__pb2.ListResourceMappingsByGroupFqnsResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def get_resource_mapping(self, request: policy_dot_resourcemapping_dot_resource__mapping__pb2.GetResourceMappingRequest, ctx: RequestContext) -> policy_dot_resourcemapping_dot_resource__mapping__pb2.GetResourceMappingResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def create_resource_mapping(self, request: policy_dot_resourcemapping_dot_resource__mapping__pb2.CreateResourceMappingRequest, ctx: RequestContext) -> policy_dot_resourcemapping_dot_resource__mapping__pb2.CreateResourceMappingResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def update_resource_mapping(self, request: policy_dot_resourcemapping_dot_resource__mapping__pb2.UpdateResourceMappingRequest, ctx: RequestContext) -> policy_dot_resourcemapping_dot_resource__mapping__pb2.UpdateResourceMappingResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def delete_resource_mapping(self, request: policy_dot_resourcemapping_dot_resource__mapping__pb2.DeleteResourceMappingRequest, ctx: RequestContext) -> policy_dot_resourcemapping_dot_resource__mapping__pb2.DeleteResourceMappingResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + +class ResourceMappingServiceASGIApplication(ConnectASGIApplication[ResourceMappingService]): + def __init__(self, service: ResourceMappingService | AsyncGenerator[ResourceMappingService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None) -> None: + super().__init__( + service=service, + endpoints=lambda svc: { + "/policy.resourcemapping.ResourceMappingService/ListResourceMappingGroups": Endpoint.unary( + method=MethodInfo( + name="ListResourceMappingGroups", + service_name="policy.resourcemapping.ResourceMappingService", + input=policy_dot_resourcemapping_dot_resource__mapping__pb2.ListResourceMappingGroupsRequest, + output=policy_dot_resourcemapping_dot_resource__mapping__pb2.ListResourceMappingGroupsResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + function=svc.list_resource_mapping_groups, + ), + "/policy.resourcemapping.ResourceMappingService/GetResourceMappingGroup": Endpoint.unary( + method=MethodInfo( + name="GetResourceMappingGroup", + service_name="policy.resourcemapping.ResourceMappingService", + input=policy_dot_resourcemapping_dot_resource__mapping__pb2.GetResourceMappingGroupRequest, + output=policy_dot_resourcemapping_dot_resource__mapping__pb2.GetResourceMappingGroupResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + function=svc.get_resource_mapping_group, + ), + "/policy.resourcemapping.ResourceMappingService/CreateResourceMappingGroup": Endpoint.unary( + method=MethodInfo( + name="CreateResourceMappingGroup", + service_name="policy.resourcemapping.ResourceMappingService", + input=policy_dot_resourcemapping_dot_resource__mapping__pb2.CreateResourceMappingGroupRequest, + output=policy_dot_resourcemapping_dot_resource__mapping__pb2.CreateResourceMappingGroupResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.create_resource_mapping_group, + ), + "/policy.resourcemapping.ResourceMappingService/UpdateResourceMappingGroup": Endpoint.unary( + method=MethodInfo( + name="UpdateResourceMappingGroup", + service_name="policy.resourcemapping.ResourceMappingService", + input=policy_dot_resourcemapping_dot_resource__mapping__pb2.UpdateResourceMappingGroupRequest, + output=policy_dot_resourcemapping_dot_resource__mapping__pb2.UpdateResourceMappingGroupResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.update_resource_mapping_group, + ), + "/policy.resourcemapping.ResourceMappingService/DeleteResourceMappingGroup": Endpoint.unary( + method=MethodInfo( + name="DeleteResourceMappingGroup", + service_name="policy.resourcemapping.ResourceMappingService", + input=policy_dot_resourcemapping_dot_resource__mapping__pb2.DeleteResourceMappingGroupRequest, + output=policy_dot_resourcemapping_dot_resource__mapping__pb2.DeleteResourceMappingGroupResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.delete_resource_mapping_group, + ), + "/policy.resourcemapping.ResourceMappingService/ListResourceMappings": Endpoint.unary( + method=MethodInfo( + name="ListResourceMappings", + service_name="policy.resourcemapping.ResourceMappingService", + input=policy_dot_resourcemapping_dot_resource__mapping__pb2.ListResourceMappingsRequest, + output=policy_dot_resourcemapping_dot_resource__mapping__pb2.ListResourceMappingsResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + function=svc.list_resource_mappings, + ), + "/policy.resourcemapping.ResourceMappingService/ListResourceMappingsByGroupFqns": Endpoint.unary( + method=MethodInfo( + name="ListResourceMappingsByGroupFqns", + service_name="policy.resourcemapping.ResourceMappingService", + input=policy_dot_resourcemapping_dot_resource__mapping__pb2.ListResourceMappingsByGroupFqnsRequest, + output=policy_dot_resourcemapping_dot_resource__mapping__pb2.ListResourceMappingsByGroupFqnsResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + function=svc.list_resource_mappings_by_group_fqns, + ), + "/policy.resourcemapping.ResourceMappingService/GetResourceMapping": Endpoint.unary( + method=MethodInfo( + name="GetResourceMapping", + service_name="policy.resourcemapping.ResourceMappingService", + input=policy_dot_resourcemapping_dot_resource__mapping__pb2.GetResourceMappingRequest, + output=policy_dot_resourcemapping_dot_resource__mapping__pb2.GetResourceMappingResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + function=svc.get_resource_mapping, + ), + "/policy.resourcemapping.ResourceMappingService/CreateResourceMapping": Endpoint.unary( + method=MethodInfo( + name="CreateResourceMapping", + service_name="policy.resourcemapping.ResourceMappingService", + input=policy_dot_resourcemapping_dot_resource__mapping__pb2.CreateResourceMappingRequest, + output=policy_dot_resourcemapping_dot_resource__mapping__pb2.CreateResourceMappingResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.create_resource_mapping, + ), + "/policy.resourcemapping.ResourceMappingService/UpdateResourceMapping": Endpoint.unary( + method=MethodInfo( + name="UpdateResourceMapping", + service_name="policy.resourcemapping.ResourceMappingService", + input=policy_dot_resourcemapping_dot_resource__mapping__pb2.UpdateResourceMappingRequest, + output=policy_dot_resourcemapping_dot_resource__mapping__pb2.UpdateResourceMappingResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.update_resource_mapping, + ), + "/policy.resourcemapping.ResourceMappingService/DeleteResourceMapping": Endpoint.unary( + method=MethodInfo( + name="DeleteResourceMapping", + service_name="policy.resourcemapping.ResourceMappingService", + input=policy_dot_resourcemapping_dot_resource__mapping__pb2.DeleteResourceMappingRequest, + output=policy_dot_resourcemapping_dot_resource__mapping__pb2.DeleteResourceMappingResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.delete_resource_mapping, + ), + }, + interceptors=interceptors, + read_max_bytes=read_max_bytes, + ) + + @property + def path(self) -> str: + """Returns the URL path to mount the application to when serving multiple applications.""" + return "/policy.resourcemapping.ResourceMappingService" + + +class ResourceMappingServiceClient(ConnectClient): + async def list_resource_mapping_groups( + self, + request: policy_dot_resourcemapping_dot_resource__mapping__pb2.ListResourceMappingGroupsRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + use_get: bool = False, + ) -> policy_dot_resourcemapping_dot_resource__mapping__pb2.ListResourceMappingGroupsResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="ListResourceMappingGroups", + service_name="policy.resourcemapping.ResourceMappingService", + input=policy_dot_resourcemapping_dot_resource__mapping__pb2.ListResourceMappingGroupsRequest, + output=policy_dot_resourcemapping_dot_resource__mapping__pb2.ListResourceMappingGroupsResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + headers=headers, + timeout_ms=timeout_ms, + use_get=use_get, + ) + + async def get_resource_mapping_group( + self, + request: policy_dot_resourcemapping_dot_resource__mapping__pb2.GetResourceMappingGroupRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + use_get: bool = False, + ) -> policy_dot_resourcemapping_dot_resource__mapping__pb2.GetResourceMappingGroupResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="GetResourceMappingGroup", + service_name="policy.resourcemapping.ResourceMappingService", + input=policy_dot_resourcemapping_dot_resource__mapping__pb2.GetResourceMappingGroupRequest, + output=policy_dot_resourcemapping_dot_resource__mapping__pb2.GetResourceMappingGroupResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + headers=headers, + timeout_ms=timeout_ms, + use_get=use_get, + ) + + async def create_resource_mapping_group( + self, + request: policy_dot_resourcemapping_dot_resource__mapping__pb2.CreateResourceMappingGroupRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_resourcemapping_dot_resource__mapping__pb2.CreateResourceMappingGroupResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="CreateResourceMappingGroup", + service_name="policy.resourcemapping.ResourceMappingService", + input=policy_dot_resourcemapping_dot_resource__mapping__pb2.CreateResourceMappingGroupRequest, + output=policy_dot_resourcemapping_dot_resource__mapping__pb2.CreateResourceMappingGroupResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def update_resource_mapping_group( + self, + request: policy_dot_resourcemapping_dot_resource__mapping__pb2.UpdateResourceMappingGroupRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_resourcemapping_dot_resource__mapping__pb2.UpdateResourceMappingGroupResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="UpdateResourceMappingGroup", + service_name="policy.resourcemapping.ResourceMappingService", + input=policy_dot_resourcemapping_dot_resource__mapping__pb2.UpdateResourceMappingGroupRequest, + output=policy_dot_resourcemapping_dot_resource__mapping__pb2.UpdateResourceMappingGroupResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def delete_resource_mapping_group( + self, + request: policy_dot_resourcemapping_dot_resource__mapping__pb2.DeleteResourceMappingGroupRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_resourcemapping_dot_resource__mapping__pb2.DeleteResourceMappingGroupResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="DeleteResourceMappingGroup", + service_name="policy.resourcemapping.ResourceMappingService", + input=policy_dot_resourcemapping_dot_resource__mapping__pb2.DeleteResourceMappingGroupRequest, + output=policy_dot_resourcemapping_dot_resource__mapping__pb2.DeleteResourceMappingGroupResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def list_resource_mappings( + self, + request: policy_dot_resourcemapping_dot_resource__mapping__pb2.ListResourceMappingsRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + use_get: bool = False, + ) -> policy_dot_resourcemapping_dot_resource__mapping__pb2.ListResourceMappingsResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="ListResourceMappings", + service_name="policy.resourcemapping.ResourceMappingService", + input=policy_dot_resourcemapping_dot_resource__mapping__pb2.ListResourceMappingsRequest, + output=policy_dot_resourcemapping_dot_resource__mapping__pb2.ListResourceMappingsResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + headers=headers, + timeout_ms=timeout_ms, + use_get=use_get, + ) + + async def list_resource_mappings_by_group_fqns( + self, + request: policy_dot_resourcemapping_dot_resource__mapping__pb2.ListResourceMappingsByGroupFqnsRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + use_get: bool = False, + ) -> policy_dot_resourcemapping_dot_resource__mapping__pb2.ListResourceMappingsByGroupFqnsResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="ListResourceMappingsByGroupFqns", + service_name="policy.resourcemapping.ResourceMappingService", + input=policy_dot_resourcemapping_dot_resource__mapping__pb2.ListResourceMappingsByGroupFqnsRequest, + output=policy_dot_resourcemapping_dot_resource__mapping__pb2.ListResourceMappingsByGroupFqnsResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + headers=headers, + timeout_ms=timeout_ms, + use_get=use_get, + ) + + async def get_resource_mapping( + self, + request: policy_dot_resourcemapping_dot_resource__mapping__pb2.GetResourceMappingRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + use_get: bool = False, + ) -> policy_dot_resourcemapping_dot_resource__mapping__pb2.GetResourceMappingResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="GetResourceMapping", + service_name="policy.resourcemapping.ResourceMappingService", + input=policy_dot_resourcemapping_dot_resource__mapping__pb2.GetResourceMappingRequest, + output=policy_dot_resourcemapping_dot_resource__mapping__pb2.GetResourceMappingResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + headers=headers, + timeout_ms=timeout_ms, + use_get=use_get, + ) + + async def create_resource_mapping( + self, + request: policy_dot_resourcemapping_dot_resource__mapping__pb2.CreateResourceMappingRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_resourcemapping_dot_resource__mapping__pb2.CreateResourceMappingResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="CreateResourceMapping", + service_name="policy.resourcemapping.ResourceMappingService", + input=policy_dot_resourcemapping_dot_resource__mapping__pb2.CreateResourceMappingRequest, + output=policy_dot_resourcemapping_dot_resource__mapping__pb2.CreateResourceMappingResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def update_resource_mapping( + self, + request: policy_dot_resourcemapping_dot_resource__mapping__pb2.UpdateResourceMappingRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_resourcemapping_dot_resource__mapping__pb2.UpdateResourceMappingResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="UpdateResourceMapping", + service_name="policy.resourcemapping.ResourceMappingService", + input=policy_dot_resourcemapping_dot_resource__mapping__pb2.UpdateResourceMappingRequest, + output=policy_dot_resourcemapping_dot_resource__mapping__pb2.UpdateResourceMappingResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def delete_resource_mapping( + self, + request: policy_dot_resourcemapping_dot_resource__mapping__pb2.DeleteResourceMappingRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_resourcemapping_dot_resource__mapping__pb2.DeleteResourceMappingResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="DeleteResourceMapping", + service_name="policy.resourcemapping.ResourceMappingService", + input=policy_dot_resourcemapping_dot_resource__mapping__pb2.DeleteResourceMappingRequest, + output=policy_dot_resourcemapping_dot_resource__mapping__pb2.DeleteResourceMappingResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + +class ResourceMappingServiceSync(Protocol): + def list_resource_mapping_groups(self, request: policy_dot_resourcemapping_dot_resource__mapping__pb2.ListResourceMappingGroupsRequest, ctx: RequestContext) -> policy_dot_resourcemapping_dot_resource__mapping__pb2.ListResourceMappingGroupsResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def get_resource_mapping_group(self, request: policy_dot_resourcemapping_dot_resource__mapping__pb2.GetResourceMappingGroupRequest, ctx: RequestContext) -> policy_dot_resourcemapping_dot_resource__mapping__pb2.GetResourceMappingGroupResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def create_resource_mapping_group(self, request: policy_dot_resourcemapping_dot_resource__mapping__pb2.CreateResourceMappingGroupRequest, ctx: RequestContext) -> policy_dot_resourcemapping_dot_resource__mapping__pb2.CreateResourceMappingGroupResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def update_resource_mapping_group(self, request: policy_dot_resourcemapping_dot_resource__mapping__pb2.UpdateResourceMappingGroupRequest, ctx: RequestContext) -> policy_dot_resourcemapping_dot_resource__mapping__pb2.UpdateResourceMappingGroupResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def delete_resource_mapping_group(self, request: policy_dot_resourcemapping_dot_resource__mapping__pb2.DeleteResourceMappingGroupRequest, ctx: RequestContext) -> policy_dot_resourcemapping_dot_resource__mapping__pb2.DeleteResourceMappingGroupResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def list_resource_mappings(self, request: policy_dot_resourcemapping_dot_resource__mapping__pb2.ListResourceMappingsRequest, ctx: RequestContext) -> policy_dot_resourcemapping_dot_resource__mapping__pb2.ListResourceMappingsResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def list_resource_mappings_by_group_fqns(self, request: policy_dot_resourcemapping_dot_resource__mapping__pb2.ListResourceMappingsByGroupFqnsRequest, ctx: RequestContext) -> policy_dot_resourcemapping_dot_resource__mapping__pb2.ListResourceMappingsByGroupFqnsResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def get_resource_mapping(self, request: policy_dot_resourcemapping_dot_resource__mapping__pb2.GetResourceMappingRequest, ctx: RequestContext) -> policy_dot_resourcemapping_dot_resource__mapping__pb2.GetResourceMappingResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def create_resource_mapping(self, request: policy_dot_resourcemapping_dot_resource__mapping__pb2.CreateResourceMappingRequest, ctx: RequestContext) -> policy_dot_resourcemapping_dot_resource__mapping__pb2.CreateResourceMappingResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def update_resource_mapping(self, request: policy_dot_resourcemapping_dot_resource__mapping__pb2.UpdateResourceMappingRequest, ctx: RequestContext) -> policy_dot_resourcemapping_dot_resource__mapping__pb2.UpdateResourceMappingResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def delete_resource_mapping(self, request: policy_dot_resourcemapping_dot_resource__mapping__pb2.DeleteResourceMappingRequest, ctx: RequestContext) -> policy_dot_resourcemapping_dot_resource__mapping__pb2.DeleteResourceMappingResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + +class ResourceMappingServiceWSGIApplication(ConnectWSGIApplication): + def __init__(self, service: ResourceMappingServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None) -> None: + super().__init__( + endpoints={ + "/policy.resourcemapping.ResourceMappingService/ListResourceMappingGroups": EndpointSync.unary( + method=MethodInfo( + name="ListResourceMappingGroups", + service_name="policy.resourcemapping.ResourceMappingService", + input=policy_dot_resourcemapping_dot_resource__mapping__pb2.ListResourceMappingGroupsRequest, + output=policy_dot_resourcemapping_dot_resource__mapping__pb2.ListResourceMappingGroupsResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + function=service.list_resource_mapping_groups, + ), + "/policy.resourcemapping.ResourceMappingService/GetResourceMappingGroup": EndpointSync.unary( + method=MethodInfo( + name="GetResourceMappingGroup", + service_name="policy.resourcemapping.ResourceMappingService", + input=policy_dot_resourcemapping_dot_resource__mapping__pb2.GetResourceMappingGroupRequest, + output=policy_dot_resourcemapping_dot_resource__mapping__pb2.GetResourceMappingGroupResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + function=service.get_resource_mapping_group, + ), + "/policy.resourcemapping.ResourceMappingService/CreateResourceMappingGroup": EndpointSync.unary( + method=MethodInfo( + name="CreateResourceMappingGroup", + service_name="policy.resourcemapping.ResourceMappingService", + input=policy_dot_resourcemapping_dot_resource__mapping__pb2.CreateResourceMappingGroupRequest, + output=policy_dot_resourcemapping_dot_resource__mapping__pb2.CreateResourceMappingGroupResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.create_resource_mapping_group, + ), + "/policy.resourcemapping.ResourceMappingService/UpdateResourceMappingGroup": EndpointSync.unary( + method=MethodInfo( + name="UpdateResourceMappingGroup", + service_name="policy.resourcemapping.ResourceMappingService", + input=policy_dot_resourcemapping_dot_resource__mapping__pb2.UpdateResourceMappingGroupRequest, + output=policy_dot_resourcemapping_dot_resource__mapping__pb2.UpdateResourceMappingGroupResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.update_resource_mapping_group, + ), + "/policy.resourcemapping.ResourceMappingService/DeleteResourceMappingGroup": EndpointSync.unary( + method=MethodInfo( + name="DeleteResourceMappingGroup", + service_name="policy.resourcemapping.ResourceMappingService", + input=policy_dot_resourcemapping_dot_resource__mapping__pb2.DeleteResourceMappingGroupRequest, + output=policy_dot_resourcemapping_dot_resource__mapping__pb2.DeleteResourceMappingGroupResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.delete_resource_mapping_group, + ), + "/policy.resourcemapping.ResourceMappingService/ListResourceMappings": EndpointSync.unary( + method=MethodInfo( + name="ListResourceMappings", + service_name="policy.resourcemapping.ResourceMappingService", + input=policy_dot_resourcemapping_dot_resource__mapping__pb2.ListResourceMappingsRequest, + output=policy_dot_resourcemapping_dot_resource__mapping__pb2.ListResourceMappingsResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + function=service.list_resource_mappings, + ), + "/policy.resourcemapping.ResourceMappingService/ListResourceMappingsByGroupFqns": EndpointSync.unary( + method=MethodInfo( + name="ListResourceMappingsByGroupFqns", + service_name="policy.resourcemapping.ResourceMappingService", + input=policy_dot_resourcemapping_dot_resource__mapping__pb2.ListResourceMappingsByGroupFqnsRequest, + output=policy_dot_resourcemapping_dot_resource__mapping__pb2.ListResourceMappingsByGroupFqnsResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + function=service.list_resource_mappings_by_group_fqns, + ), + "/policy.resourcemapping.ResourceMappingService/GetResourceMapping": EndpointSync.unary( + method=MethodInfo( + name="GetResourceMapping", + service_name="policy.resourcemapping.ResourceMappingService", + input=policy_dot_resourcemapping_dot_resource__mapping__pb2.GetResourceMappingRequest, + output=policy_dot_resourcemapping_dot_resource__mapping__pb2.GetResourceMappingResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + function=service.get_resource_mapping, + ), + "/policy.resourcemapping.ResourceMappingService/CreateResourceMapping": EndpointSync.unary( + method=MethodInfo( + name="CreateResourceMapping", + service_name="policy.resourcemapping.ResourceMappingService", + input=policy_dot_resourcemapping_dot_resource__mapping__pb2.CreateResourceMappingRequest, + output=policy_dot_resourcemapping_dot_resource__mapping__pb2.CreateResourceMappingResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.create_resource_mapping, + ), + "/policy.resourcemapping.ResourceMappingService/UpdateResourceMapping": EndpointSync.unary( + method=MethodInfo( + name="UpdateResourceMapping", + service_name="policy.resourcemapping.ResourceMappingService", + input=policy_dot_resourcemapping_dot_resource__mapping__pb2.UpdateResourceMappingRequest, + output=policy_dot_resourcemapping_dot_resource__mapping__pb2.UpdateResourceMappingResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.update_resource_mapping, + ), + "/policy.resourcemapping.ResourceMappingService/DeleteResourceMapping": EndpointSync.unary( + method=MethodInfo( + name="DeleteResourceMapping", + service_name="policy.resourcemapping.ResourceMappingService", + input=policy_dot_resourcemapping_dot_resource__mapping__pb2.DeleteResourceMappingRequest, + output=policy_dot_resourcemapping_dot_resource__mapping__pb2.DeleteResourceMappingResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.delete_resource_mapping, + ), + }, + interceptors=interceptors, + read_max_bytes=read_max_bytes, + ) + + @property + def path(self) -> str: + """Returns the URL path to mount the application to when serving multiple applications.""" + return "/policy.resourcemapping.ResourceMappingService" + + +class ResourceMappingServiceClientSync(ConnectClientSync): + def list_resource_mapping_groups( + self, + request: policy_dot_resourcemapping_dot_resource__mapping__pb2.ListResourceMappingGroupsRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + use_get: bool = False, + ) -> policy_dot_resourcemapping_dot_resource__mapping__pb2.ListResourceMappingGroupsResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="ListResourceMappingGroups", + service_name="policy.resourcemapping.ResourceMappingService", + input=policy_dot_resourcemapping_dot_resource__mapping__pb2.ListResourceMappingGroupsRequest, + output=policy_dot_resourcemapping_dot_resource__mapping__pb2.ListResourceMappingGroupsResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + headers=headers, + timeout_ms=timeout_ms, + use_get=use_get, + ) + + def get_resource_mapping_group( + self, + request: policy_dot_resourcemapping_dot_resource__mapping__pb2.GetResourceMappingGroupRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + use_get: bool = False, + ) -> policy_dot_resourcemapping_dot_resource__mapping__pb2.GetResourceMappingGroupResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="GetResourceMappingGroup", + service_name="policy.resourcemapping.ResourceMappingService", + input=policy_dot_resourcemapping_dot_resource__mapping__pb2.GetResourceMappingGroupRequest, + output=policy_dot_resourcemapping_dot_resource__mapping__pb2.GetResourceMappingGroupResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + headers=headers, + timeout_ms=timeout_ms, + use_get=use_get, + ) + + def create_resource_mapping_group( + self, + request: policy_dot_resourcemapping_dot_resource__mapping__pb2.CreateResourceMappingGroupRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_resourcemapping_dot_resource__mapping__pb2.CreateResourceMappingGroupResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="CreateResourceMappingGroup", + service_name="policy.resourcemapping.ResourceMappingService", + input=policy_dot_resourcemapping_dot_resource__mapping__pb2.CreateResourceMappingGroupRequest, + output=policy_dot_resourcemapping_dot_resource__mapping__pb2.CreateResourceMappingGroupResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def update_resource_mapping_group( + self, + request: policy_dot_resourcemapping_dot_resource__mapping__pb2.UpdateResourceMappingGroupRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_resourcemapping_dot_resource__mapping__pb2.UpdateResourceMappingGroupResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="UpdateResourceMappingGroup", + service_name="policy.resourcemapping.ResourceMappingService", + input=policy_dot_resourcemapping_dot_resource__mapping__pb2.UpdateResourceMappingGroupRequest, + output=policy_dot_resourcemapping_dot_resource__mapping__pb2.UpdateResourceMappingGroupResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def delete_resource_mapping_group( + self, + request: policy_dot_resourcemapping_dot_resource__mapping__pb2.DeleteResourceMappingGroupRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_resourcemapping_dot_resource__mapping__pb2.DeleteResourceMappingGroupResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="DeleteResourceMappingGroup", + service_name="policy.resourcemapping.ResourceMappingService", + input=policy_dot_resourcemapping_dot_resource__mapping__pb2.DeleteResourceMappingGroupRequest, + output=policy_dot_resourcemapping_dot_resource__mapping__pb2.DeleteResourceMappingGroupResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def list_resource_mappings( + self, + request: policy_dot_resourcemapping_dot_resource__mapping__pb2.ListResourceMappingsRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + use_get: bool = False, + ) -> policy_dot_resourcemapping_dot_resource__mapping__pb2.ListResourceMappingsResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="ListResourceMappings", + service_name="policy.resourcemapping.ResourceMappingService", + input=policy_dot_resourcemapping_dot_resource__mapping__pb2.ListResourceMappingsRequest, + output=policy_dot_resourcemapping_dot_resource__mapping__pb2.ListResourceMappingsResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + headers=headers, + timeout_ms=timeout_ms, + use_get=use_get, + ) + + def list_resource_mappings_by_group_fqns( + self, + request: policy_dot_resourcemapping_dot_resource__mapping__pb2.ListResourceMappingsByGroupFqnsRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + use_get: bool = False, + ) -> policy_dot_resourcemapping_dot_resource__mapping__pb2.ListResourceMappingsByGroupFqnsResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="ListResourceMappingsByGroupFqns", + service_name="policy.resourcemapping.ResourceMappingService", + input=policy_dot_resourcemapping_dot_resource__mapping__pb2.ListResourceMappingsByGroupFqnsRequest, + output=policy_dot_resourcemapping_dot_resource__mapping__pb2.ListResourceMappingsByGroupFqnsResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + headers=headers, + timeout_ms=timeout_ms, + use_get=use_get, + ) + + def get_resource_mapping( + self, + request: policy_dot_resourcemapping_dot_resource__mapping__pb2.GetResourceMappingRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + use_get: bool = False, + ) -> policy_dot_resourcemapping_dot_resource__mapping__pb2.GetResourceMappingResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="GetResourceMapping", + service_name="policy.resourcemapping.ResourceMappingService", + input=policy_dot_resourcemapping_dot_resource__mapping__pb2.GetResourceMappingRequest, + output=policy_dot_resourcemapping_dot_resource__mapping__pb2.GetResourceMappingResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + headers=headers, + timeout_ms=timeout_ms, + use_get=use_get, + ) + + def create_resource_mapping( + self, + request: policy_dot_resourcemapping_dot_resource__mapping__pb2.CreateResourceMappingRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_resourcemapping_dot_resource__mapping__pb2.CreateResourceMappingResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="CreateResourceMapping", + service_name="policy.resourcemapping.ResourceMappingService", + input=policy_dot_resourcemapping_dot_resource__mapping__pb2.CreateResourceMappingRequest, + output=policy_dot_resourcemapping_dot_resource__mapping__pb2.CreateResourceMappingResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def update_resource_mapping( + self, + request: policy_dot_resourcemapping_dot_resource__mapping__pb2.UpdateResourceMappingRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_resourcemapping_dot_resource__mapping__pb2.UpdateResourceMappingResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="UpdateResourceMapping", + service_name="policy.resourcemapping.ResourceMappingService", + input=policy_dot_resourcemapping_dot_resource__mapping__pb2.UpdateResourceMappingRequest, + output=policy_dot_resourcemapping_dot_resource__mapping__pb2.UpdateResourceMappingResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def delete_resource_mapping( + self, + request: policy_dot_resourcemapping_dot_resource__mapping__pb2.DeleteResourceMappingRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_resourcemapping_dot_resource__mapping__pb2.DeleteResourceMappingResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="DeleteResourceMapping", + service_name="policy.resourcemapping.ResourceMappingService", + input=policy_dot_resourcemapping_dot_resource__mapping__pb2.DeleteResourceMappingRequest, + output=policy_dot_resourcemapping_dot_resource__mapping__pb2.DeleteResourceMappingResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) diff --git a/otdf-python-proto/src/otdf_python_proto/policy/resourcemapping/resource_mapping_pb2_connect.py b/otdf-python-proto/src/otdf_python_proto/policy/resourcemapping/resource_mapping_pb2_connect.py deleted file mode 100644 index 8576975..0000000 --- a/otdf-python-proto/src/otdf_python_proto/policy/resourcemapping/resource_mapping_pb2_connect.py +++ /dev/null @@ -1,527 +0,0 @@ -# Generated Connect client code - -from __future__ import annotations -from collections.abc import AsyncIterator -from collections.abc import Iterator -from collections.abc import Iterable -import aiohttp -import urllib3 -import typing -import sys - -from connectrpc.client_async import AsyncConnectClient -from connectrpc.client_sync import ConnectClient -from connectrpc.client_protocol import ConnectProtocol -from connectrpc.client_connect import ConnectProtocolError -from connectrpc.headers import HeaderInput -from connectrpc.server import ClientRequest -from connectrpc.server import ClientStream -from connectrpc.server import ServerResponse -from connectrpc.server import ServerStream -from connectrpc.server_sync import ConnectWSGI -from connectrpc.streams import StreamInput -from connectrpc.streams import AsyncStreamOutput -from connectrpc.streams import StreamOutput -from connectrpc.unary import UnaryOutput -from connectrpc.unary import ClientStreamingOutput - -if typing.TYPE_CHECKING: - # wsgiref.types was added in Python 3.11. - if sys.version_info >= (3, 11): - from wsgiref.types import WSGIApplication - else: - from _typeshed.wsgi import WSGIApplication - -import policy.resourcemapping.resource_mapping_pb2 - -class ResourceMappingServiceClient: - def __init__( - self, - base_url: str, - http_client: urllib3.PoolManager | None = None, - protocol: ConnectProtocol = ConnectProtocol.CONNECT_PROTOBUF, - ): - self.base_url = base_url - self._connect_client = ConnectClient(http_client, protocol) - def call_list_resource_mapping_groups( - self, req: policy.resourcemapping.resource_mapping_pb2.ListResourceMappingGroupsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.resourcemapping.resource_mapping_pb2.ListResourceMappingGroupsResponse]: - """Low-level method to call ListResourceMappingGroups, granting access to errors and metadata""" - url = self.base_url + "/policy.resourcemapping.ResourceMappingService/ListResourceMappingGroups" - return self._connect_client.call_unary(url, req, policy.resourcemapping.resource_mapping_pb2.ListResourceMappingGroupsResponse,extra_headers, timeout_seconds) - - - def list_resource_mapping_groups( - self, req: policy.resourcemapping.resource_mapping_pb2.ListResourceMappingGroupsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.resourcemapping.resource_mapping_pb2.ListResourceMappingGroupsResponse: - response = self.call_list_resource_mapping_groups(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_get_resource_mapping_group( - self, req: policy.resourcemapping.resource_mapping_pb2.GetResourceMappingGroupRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.resourcemapping.resource_mapping_pb2.GetResourceMappingGroupResponse]: - """Low-level method to call GetResourceMappingGroup, granting access to errors and metadata""" - url = self.base_url + "/policy.resourcemapping.ResourceMappingService/GetResourceMappingGroup" - return self._connect_client.call_unary(url, req, policy.resourcemapping.resource_mapping_pb2.GetResourceMappingGroupResponse,extra_headers, timeout_seconds) - - - def get_resource_mapping_group( - self, req: policy.resourcemapping.resource_mapping_pb2.GetResourceMappingGroupRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.resourcemapping.resource_mapping_pb2.GetResourceMappingGroupResponse: - response = self.call_get_resource_mapping_group(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_create_resource_mapping_group( - self, req: policy.resourcemapping.resource_mapping_pb2.CreateResourceMappingGroupRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.resourcemapping.resource_mapping_pb2.CreateResourceMappingGroupResponse]: - """Low-level method to call CreateResourceMappingGroup, granting access to errors and metadata""" - url = self.base_url + "/policy.resourcemapping.ResourceMappingService/CreateResourceMappingGroup" - return self._connect_client.call_unary(url, req, policy.resourcemapping.resource_mapping_pb2.CreateResourceMappingGroupResponse,extra_headers, timeout_seconds) - - - def create_resource_mapping_group( - self, req: policy.resourcemapping.resource_mapping_pb2.CreateResourceMappingGroupRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.resourcemapping.resource_mapping_pb2.CreateResourceMappingGroupResponse: - response = self.call_create_resource_mapping_group(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_update_resource_mapping_group( - self, req: policy.resourcemapping.resource_mapping_pb2.UpdateResourceMappingGroupRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.resourcemapping.resource_mapping_pb2.UpdateResourceMappingGroupResponse]: - """Low-level method to call UpdateResourceMappingGroup, granting access to errors and metadata""" - url = self.base_url + "/policy.resourcemapping.ResourceMappingService/UpdateResourceMappingGroup" - return self._connect_client.call_unary(url, req, policy.resourcemapping.resource_mapping_pb2.UpdateResourceMappingGroupResponse,extra_headers, timeout_seconds) - - - def update_resource_mapping_group( - self, req: policy.resourcemapping.resource_mapping_pb2.UpdateResourceMappingGroupRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.resourcemapping.resource_mapping_pb2.UpdateResourceMappingGroupResponse: - response = self.call_update_resource_mapping_group(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_delete_resource_mapping_group( - self, req: policy.resourcemapping.resource_mapping_pb2.DeleteResourceMappingGroupRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.resourcemapping.resource_mapping_pb2.DeleteResourceMappingGroupResponse]: - """Low-level method to call DeleteResourceMappingGroup, granting access to errors and metadata""" - url = self.base_url + "/policy.resourcemapping.ResourceMappingService/DeleteResourceMappingGroup" - return self._connect_client.call_unary(url, req, policy.resourcemapping.resource_mapping_pb2.DeleteResourceMappingGroupResponse,extra_headers, timeout_seconds) - - - def delete_resource_mapping_group( - self, req: policy.resourcemapping.resource_mapping_pb2.DeleteResourceMappingGroupRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.resourcemapping.resource_mapping_pb2.DeleteResourceMappingGroupResponse: - response = self.call_delete_resource_mapping_group(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_list_resource_mappings( - self, req: policy.resourcemapping.resource_mapping_pb2.ListResourceMappingsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.resourcemapping.resource_mapping_pb2.ListResourceMappingsResponse]: - """Low-level method to call ListResourceMappings, granting access to errors and metadata""" - url = self.base_url + "/policy.resourcemapping.ResourceMappingService/ListResourceMappings" - return self._connect_client.call_unary(url, req, policy.resourcemapping.resource_mapping_pb2.ListResourceMappingsResponse,extra_headers, timeout_seconds) - - - def list_resource_mappings( - self, req: policy.resourcemapping.resource_mapping_pb2.ListResourceMappingsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.resourcemapping.resource_mapping_pb2.ListResourceMappingsResponse: - response = self.call_list_resource_mappings(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_list_resource_mappings_by_group_fqns( - self, req: policy.resourcemapping.resource_mapping_pb2.ListResourceMappingsByGroupFqnsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.resourcemapping.resource_mapping_pb2.ListResourceMappingsByGroupFqnsResponse]: - """Low-level method to call ListResourceMappingsByGroupFqns, granting access to errors and metadata""" - url = self.base_url + "/policy.resourcemapping.ResourceMappingService/ListResourceMappingsByGroupFqns" - return self._connect_client.call_unary(url, req, policy.resourcemapping.resource_mapping_pb2.ListResourceMappingsByGroupFqnsResponse,extra_headers, timeout_seconds) - - - def list_resource_mappings_by_group_fqns( - self, req: policy.resourcemapping.resource_mapping_pb2.ListResourceMappingsByGroupFqnsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.resourcemapping.resource_mapping_pb2.ListResourceMappingsByGroupFqnsResponse: - response = self.call_list_resource_mappings_by_group_fqns(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_get_resource_mapping( - self, req: policy.resourcemapping.resource_mapping_pb2.GetResourceMappingRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.resourcemapping.resource_mapping_pb2.GetResourceMappingResponse]: - """Low-level method to call GetResourceMapping, granting access to errors and metadata""" - url = self.base_url + "/policy.resourcemapping.ResourceMappingService/GetResourceMapping" - return self._connect_client.call_unary(url, req, policy.resourcemapping.resource_mapping_pb2.GetResourceMappingResponse,extra_headers, timeout_seconds) - - - def get_resource_mapping( - self, req: policy.resourcemapping.resource_mapping_pb2.GetResourceMappingRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.resourcemapping.resource_mapping_pb2.GetResourceMappingResponse: - response = self.call_get_resource_mapping(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_create_resource_mapping( - self, req: policy.resourcemapping.resource_mapping_pb2.CreateResourceMappingRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.resourcemapping.resource_mapping_pb2.CreateResourceMappingResponse]: - """Low-level method to call CreateResourceMapping, granting access to errors and metadata""" - url = self.base_url + "/policy.resourcemapping.ResourceMappingService/CreateResourceMapping" - return self._connect_client.call_unary(url, req, policy.resourcemapping.resource_mapping_pb2.CreateResourceMappingResponse,extra_headers, timeout_seconds) - - - def create_resource_mapping( - self, req: policy.resourcemapping.resource_mapping_pb2.CreateResourceMappingRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.resourcemapping.resource_mapping_pb2.CreateResourceMappingResponse: - response = self.call_create_resource_mapping(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_update_resource_mapping( - self, req: policy.resourcemapping.resource_mapping_pb2.UpdateResourceMappingRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.resourcemapping.resource_mapping_pb2.UpdateResourceMappingResponse]: - """Low-level method to call UpdateResourceMapping, granting access to errors and metadata""" - url = self.base_url + "/policy.resourcemapping.ResourceMappingService/UpdateResourceMapping" - return self._connect_client.call_unary(url, req, policy.resourcemapping.resource_mapping_pb2.UpdateResourceMappingResponse,extra_headers, timeout_seconds) - - - def update_resource_mapping( - self, req: policy.resourcemapping.resource_mapping_pb2.UpdateResourceMappingRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.resourcemapping.resource_mapping_pb2.UpdateResourceMappingResponse: - response = self.call_update_resource_mapping(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_delete_resource_mapping( - self, req: policy.resourcemapping.resource_mapping_pb2.DeleteResourceMappingRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.resourcemapping.resource_mapping_pb2.DeleteResourceMappingResponse]: - """Low-level method to call DeleteResourceMapping, granting access to errors and metadata""" - url = self.base_url + "/policy.resourcemapping.ResourceMappingService/DeleteResourceMapping" - return self._connect_client.call_unary(url, req, policy.resourcemapping.resource_mapping_pb2.DeleteResourceMappingResponse,extra_headers, timeout_seconds) - - - def delete_resource_mapping( - self, req: policy.resourcemapping.resource_mapping_pb2.DeleteResourceMappingRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.resourcemapping.resource_mapping_pb2.DeleteResourceMappingResponse: - response = self.call_delete_resource_mapping(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - -class AsyncResourceMappingServiceClient: - def __init__( - self, - base_url: str, - http_client: aiohttp.ClientSession, - protocol: ConnectProtocol = ConnectProtocol.CONNECT_PROTOBUF, - ): - self.base_url = base_url - self._connect_client = AsyncConnectClient(http_client, protocol) - - async def call_list_resource_mapping_groups( - self, req: policy.resourcemapping.resource_mapping_pb2.ListResourceMappingGroupsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.resourcemapping.resource_mapping_pb2.ListResourceMappingGroupsResponse]: - """Low-level method to call ListResourceMappingGroups, granting access to errors and metadata""" - url = self.base_url + "/policy.resourcemapping.ResourceMappingService/ListResourceMappingGroups" - return await self._connect_client.call_unary(url, req, policy.resourcemapping.resource_mapping_pb2.ListResourceMappingGroupsResponse,extra_headers, timeout_seconds) - - async def list_resource_mapping_groups( - self, req: policy.resourcemapping.resource_mapping_pb2.ListResourceMappingGroupsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.resourcemapping.resource_mapping_pb2.ListResourceMappingGroupsResponse: - response = await self.call_list_resource_mapping_groups(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_get_resource_mapping_group( - self, req: policy.resourcemapping.resource_mapping_pb2.GetResourceMappingGroupRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.resourcemapping.resource_mapping_pb2.GetResourceMappingGroupResponse]: - """Low-level method to call GetResourceMappingGroup, granting access to errors and metadata""" - url = self.base_url + "/policy.resourcemapping.ResourceMappingService/GetResourceMappingGroup" - return await self._connect_client.call_unary(url, req, policy.resourcemapping.resource_mapping_pb2.GetResourceMappingGroupResponse,extra_headers, timeout_seconds) - - async def get_resource_mapping_group( - self, req: policy.resourcemapping.resource_mapping_pb2.GetResourceMappingGroupRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.resourcemapping.resource_mapping_pb2.GetResourceMappingGroupResponse: - response = await self.call_get_resource_mapping_group(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_create_resource_mapping_group( - self, req: policy.resourcemapping.resource_mapping_pb2.CreateResourceMappingGroupRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.resourcemapping.resource_mapping_pb2.CreateResourceMappingGroupResponse]: - """Low-level method to call CreateResourceMappingGroup, granting access to errors and metadata""" - url = self.base_url + "/policy.resourcemapping.ResourceMappingService/CreateResourceMappingGroup" - return await self._connect_client.call_unary(url, req, policy.resourcemapping.resource_mapping_pb2.CreateResourceMappingGroupResponse,extra_headers, timeout_seconds) - - async def create_resource_mapping_group( - self, req: policy.resourcemapping.resource_mapping_pb2.CreateResourceMappingGroupRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.resourcemapping.resource_mapping_pb2.CreateResourceMappingGroupResponse: - response = await self.call_create_resource_mapping_group(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_update_resource_mapping_group( - self, req: policy.resourcemapping.resource_mapping_pb2.UpdateResourceMappingGroupRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.resourcemapping.resource_mapping_pb2.UpdateResourceMappingGroupResponse]: - """Low-level method to call UpdateResourceMappingGroup, granting access to errors and metadata""" - url = self.base_url + "/policy.resourcemapping.ResourceMappingService/UpdateResourceMappingGroup" - return await self._connect_client.call_unary(url, req, policy.resourcemapping.resource_mapping_pb2.UpdateResourceMappingGroupResponse,extra_headers, timeout_seconds) - - async def update_resource_mapping_group( - self, req: policy.resourcemapping.resource_mapping_pb2.UpdateResourceMappingGroupRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.resourcemapping.resource_mapping_pb2.UpdateResourceMappingGroupResponse: - response = await self.call_update_resource_mapping_group(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_delete_resource_mapping_group( - self, req: policy.resourcemapping.resource_mapping_pb2.DeleteResourceMappingGroupRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.resourcemapping.resource_mapping_pb2.DeleteResourceMappingGroupResponse]: - """Low-level method to call DeleteResourceMappingGroup, granting access to errors and metadata""" - url = self.base_url + "/policy.resourcemapping.ResourceMappingService/DeleteResourceMappingGroup" - return await self._connect_client.call_unary(url, req, policy.resourcemapping.resource_mapping_pb2.DeleteResourceMappingGroupResponse,extra_headers, timeout_seconds) - - async def delete_resource_mapping_group( - self, req: policy.resourcemapping.resource_mapping_pb2.DeleteResourceMappingGroupRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.resourcemapping.resource_mapping_pb2.DeleteResourceMappingGroupResponse: - response = await self.call_delete_resource_mapping_group(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_list_resource_mappings( - self, req: policy.resourcemapping.resource_mapping_pb2.ListResourceMappingsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.resourcemapping.resource_mapping_pb2.ListResourceMappingsResponse]: - """Low-level method to call ListResourceMappings, granting access to errors and metadata""" - url = self.base_url + "/policy.resourcemapping.ResourceMappingService/ListResourceMappings" - return await self._connect_client.call_unary(url, req, policy.resourcemapping.resource_mapping_pb2.ListResourceMappingsResponse,extra_headers, timeout_seconds) - - async def list_resource_mappings( - self, req: policy.resourcemapping.resource_mapping_pb2.ListResourceMappingsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.resourcemapping.resource_mapping_pb2.ListResourceMappingsResponse: - response = await self.call_list_resource_mappings(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_list_resource_mappings_by_group_fqns( - self, req: policy.resourcemapping.resource_mapping_pb2.ListResourceMappingsByGroupFqnsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.resourcemapping.resource_mapping_pb2.ListResourceMappingsByGroupFqnsResponse]: - """Low-level method to call ListResourceMappingsByGroupFqns, granting access to errors and metadata""" - url = self.base_url + "/policy.resourcemapping.ResourceMappingService/ListResourceMappingsByGroupFqns" - return await self._connect_client.call_unary(url, req, policy.resourcemapping.resource_mapping_pb2.ListResourceMappingsByGroupFqnsResponse,extra_headers, timeout_seconds) - - async def list_resource_mappings_by_group_fqns( - self, req: policy.resourcemapping.resource_mapping_pb2.ListResourceMappingsByGroupFqnsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.resourcemapping.resource_mapping_pb2.ListResourceMappingsByGroupFqnsResponse: - response = await self.call_list_resource_mappings_by_group_fqns(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_get_resource_mapping( - self, req: policy.resourcemapping.resource_mapping_pb2.GetResourceMappingRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.resourcemapping.resource_mapping_pb2.GetResourceMappingResponse]: - """Low-level method to call GetResourceMapping, granting access to errors and metadata""" - url = self.base_url + "/policy.resourcemapping.ResourceMappingService/GetResourceMapping" - return await self._connect_client.call_unary(url, req, policy.resourcemapping.resource_mapping_pb2.GetResourceMappingResponse,extra_headers, timeout_seconds) - - async def get_resource_mapping( - self, req: policy.resourcemapping.resource_mapping_pb2.GetResourceMappingRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.resourcemapping.resource_mapping_pb2.GetResourceMappingResponse: - response = await self.call_get_resource_mapping(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_create_resource_mapping( - self, req: policy.resourcemapping.resource_mapping_pb2.CreateResourceMappingRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.resourcemapping.resource_mapping_pb2.CreateResourceMappingResponse]: - """Low-level method to call CreateResourceMapping, granting access to errors and metadata""" - url = self.base_url + "/policy.resourcemapping.ResourceMappingService/CreateResourceMapping" - return await self._connect_client.call_unary(url, req, policy.resourcemapping.resource_mapping_pb2.CreateResourceMappingResponse,extra_headers, timeout_seconds) - - async def create_resource_mapping( - self, req: policy.resourcemapping.resource_mapping_pb2.CreateResourceMappingRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.resourcemapping.resource_mapping_pb2.CreateResourceMappingResponse: - response = await self.call_create_resource_mapping(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_update_resource_mapping( - self, req: policy.resourcemapping.resource_mapping_pb2.UpdateResourceMappingRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.resourcemapping.resource_mapping_pb2.UpdateResourceMappingResponse]: - """Low-level method to call UpdateResourceMapping, granting access to errors and metadata""" - url = self.base_url + "/policy.resourcemapping.ResourceMappingService/UpdateResourceMapping" - return await self._connect_client.call_unary(url, req, policy.resourcemapping.resource_mapping_pb2.UpdateResourceMappingResponse,extra_headers, timeout_seconds) - - async def update_resource_mapping( - self, req: policy.resourcemapping.resource_mapping_pb2.UpdateResourceMappingRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.resourcemapping.resource_mapping_pb2.UpdateResourceMappingResponse: - response = await self.call_update_resource_mapping(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_delete_resource_mapping( - self, req: policy.resourcemapping.resource_mapping_pb2.DeleteResourceMappingRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.resourcemapping.resource_mapping_pb2.DeleteResourceMappingResponse]: - """Low-level method to call DeleteResourceMapping, granting access to errors and metadata""" - url = self.base_url + "/policy.resourcemapping.ResourceMappingService/DeleteResourceMapping" - return await self._connect_client.call_unary(url, req, policy.resourcemapping.resource_mapping_pb2.DeleteResourceMappingResponse,extra_headers, timeout_seconds) - - async def delete_resource_mapping( - self, req: policy.resourcemapping.resource_mapping_pb2.DeleteResourceMappingRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.resourcemapping.resource_mapping_pb2.DeleteResourceMappingResponse: - response = await self.call_delete_resource_mapping(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - -@typing.runtime_checkable -class ResourceMappingServiceProtocol(typing.Protocol): - def list_resource_mapping_groups(self, req: ClientRequest[policy.resourcemapping.resource_mapping_pb2.ListResourceMappingGroupsRequest]) -> ServerResponse[policy.resourcemapping.resource_mapping_pb2.ListResourceMappingGroupsResponse]: - ... - def get_resource_mapping_group(self, req: ClientRequest[policy.resourcemapping.resource_mapping_pb2.GetResourceMappingGroupRequest]) -> ServerResponse[policy.resourcemapping.resource_mapping_pb2.GetResourceMappingGroupResponse]: - ... - def create_resource_mapping_group(self, req: ClientRequest[policy.resourcemapping.resource_mapping_pb2.CreateResourceMappingGroupRequest]) -> ServerResponse[policy.resourcemapping.resource_mapping_pb2.CreateResourceMappingGroupResponse]: - ... - def update_resource_mapping_group(self, req: ClientRequest[policy.resourcemapping.resource_mapping_pb2.UpdateResourceMappingGroupRequest]) -> ServerResponse[policy.resourcemapping.resource_mapping_pb2.UpdateResourceMappingGroupResponse]: - ... - def delete_resource_mapping_group(self, req: ClientRequest[policy.resourcemapping.resource_mapping_pb2.DeleteResourceMappingGroupRequest]) -> ServerResponse[policy.resourcemapping.resource_mapping_pb2.DeleteResourceMappingGroupResponse]: - ... - def list_resource_mappings(self, req: ClientRequest[policy.resourcemapping.resource_mapping_pb2.ListResourceMappingsRequest]) -> ServerResponse[policy.resourcemapping.resource_mapping_pb2.ListResourceMappingsResponse]: - ... - def list_resource_mappings_by_group_fqns(self, req: ClientRequest[policy.resourcemapping.resource_mapping_pb2.ListResourceMappingsByGroupFqnsRequest]) -> ServerResponse[policy.resourcemapping.resource_mapping_pb2.ListResourceMappingsByGroupFqnsResponse]: - ... - def get_resource_mapping(self, req: ClientRequest[policy.resourcemapping.resource_mapping_pb2.GetResourceMappingRequest]) -> ServerResponse[policy.resourcemapping.resource_mapping_pb2.GetResourceMappingResponse]: - ... - def create_resource_mapping(self, req: ClientRequest[policy.resourcemapping.resource_mapping_pb2.CreateResourceMappingRequest]) -> ServerResponse[policy.resourcemapping.resource_mapping_pb2.CreateResourceMappingResponse]: - ... - def update_resource_mapping(self, req: ClientRequest[policy.resourcemapping.resource_mapping_pb2.UpdateResourceMappingRequest]) -> ServerResponse[policy.resourcemapping.resource_mapping_pb2.UpdateResourceMappingResponse]: - ... - def delete_resource_mapping(self, req: ClientRequest[policy.resourcemapping.resource_mapping_pb2.DeleteResourceMappingRequest]) -> ServerResponse[policy.resourcemapping.resource_mapping_pb2.DeleteResourceMappingResponse]: - ... - -RESOURCE_MAPPING_SERVICE_PATH_PREFIX = "/policy.resourcemapping.ResourceMappingService" - -def wsgi_resource_mapping_service(implementation: ResourceMappingServiceProtocol) -> WSGIApplication: - app = ConnectWSGI() - app.register_unary_rpc("/policy.resourcemapping.ResourceMappingService/ListResourceMappingGroups", implementation.list_resource_mapping_groups, policy.resourcemapping.resource_mapping_pb2.ListResourceMappingGroupsRequest) - app.register_unary_rpc("/policy.resourcemapping.ResourceMappingService/GetResourceMappingGroup", implementation.get_resource_mapping_group, policy.resourcemapping.resource_mapping_pb2.GetResourceMappingGroupRequest) - app.register_unary_rpc("/policy.resourcemapping.ResourceMappingService/CreateResourceMappingGroup", implementation.create_resource_mapping_group, policy.resourcemapping.resource_mapping_pb2.CreateResourceMappingGroupRequest) - app.register_unary_rpc("/policy.resourcemapping.ResourceMappingService/UpdateResourceMappingGroup", implementation.update_resource_mapping_group, policy.resourcemapping.resource_mapping_pb2.UpdateResourceMappingGroupRequest) - app.register_unary_rpc("/policy.resourcemapping.ResourceMappingService/DeleteResourceMappingGroup", implementation.delete_resource_mapping_group, policy.resourcemapping.resource_mapping_pb2.DeleteResourceMappingGroupRequest) - app.register_unary_rpc("/policy.resourcemapping.ResourceMappingService/ListResourceMappings", implementation.list_resource_mappings, policy.resourcemapping.resource_mapping_pb2.ListResourceMappingsRequest) - app.register_unary_rpc("/policy.resourcemapping.ResourceMappingService/ListResourceMappingsByGroupFqns", implementation.list_resource_mappings_by_group_fqns, policy.resourcemapping.resource_mapping_pb2.ListResourceMappingsByGroupFqnsRequest) - app.register_unary_rpc("/policy.resourcemapping.ResourceMappingService/GetResourceMapping", implementation.get_resource_mapping, policy.resourcemapping.resource_mapping_pb2.GetResourceMappingRequest) - app.register_unary_rpc("/policy.resourcemapping.ResourceMappingService/CreateResourceMapping", implementation.create_resource_mapping, policy.resourcemapping.resource_mapping_pb2.CreateResourceMappingRequest) - app.register_unary_rpc("/policy.resourcemapping.ResourceMappingService/UpdateResourceMapping", implementation.update_resource_mapping, policy.resourcemapping.resource_mapping_pb2.UpdateResourceMappingRequest) - app.register_unary_rpc("/policy.resourcemapping.ResourceMappingService/DeleteResourceMapping", implementation.delete_resource_mapping, policy.resourcemapping.resource_mapping_pb2.DeleteResourceMappingRequest) - return app diff --git a/otdf-python-proto/src/otdf_python_proto/policy/subjectmapping/__init__.py b/otdf-python-proto/src/otdf_python_proto/policy/subjectmapping/__init__.py new file mode 100644 index 0000000..89ad00a --- /dev/null +++ b/otdf-python-proto/src/otdf_python_proto/policy/subjectmapping/__init__.py @@ -0,0 +1,11 @@ +"""policy.subjectmapping protobuf definitions.""" + +from .subject_mapping_connect import ( + SubjectMappingServiceClient, + SubjectMappingServiceClientSync, +) + +__all__ = [ + "SubjectMappingServiceClient", + "SubjectMappingServiceClientSync", +] diff --git a/otdf-python-proto/src/otdf_python_proto/policy/subjectmapping/subject_mapping_connect.py b/otdf-python-proto/src/otdf_python_proto/policy/subjectmapping/subject_mapping_connect.py new file mode 100644 index 0000000..5a3ea3c --- /dev/null +++ b/otdf-python-proto/src/otdf_python_proto/policy/subjectmapping/subject_mapping_connect.py @@ -0,0 +1,851 @@ +# -*- coding: utf-8 -*- +# Generated by https://github.com/connectrpc/connect-python. DO NOT EDIT! +# source: policy/subjectmapping/subject_mapping.proto + +from collections.abc import AsyncGenerator, AsyncIterator, Iterable, Iterator, Mapping +from typing import Protocol + +from connectrpc.client import ConnectClient, ConnectClientSync +from connectrpc.code import Code +from connectrpc.errors import ConnectError +from connectrpc.interceptor import Interceptor, InterceptorSync +from connectrpc.method import IdempotencyLevel, MethodInfo +from connectrpc.request import Headers, RequestContext +from connectrpc.server import ConnectASGIApplication, ConnectWSGIApplication, Endpoint, EndpointSync +import policy.subjectmapping.subject_mapping_pb2 as policy_dot_subjectmapping_dot_subject__mapping__pb2 + + +class SubjectMappingService(Protocol): + async def match_subject_mappings(self, request: policy_dot_subjectmapping_dot_subject__mapping__pb2.MatchSubjectMappingsRequest, ctx: RequestContext) -> policy_dot_subjectmapping_dot_subject__mapping__pb2.MatchSubjectMappingsResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def list_subject_mappings(self, request: policy_dot_subjectmapping_dot_subject__mapping__pb2.ListSubjectMappingsRequest, ctx: RequestContext) -> policy_dot_subjectmapping_dot_subject__mapping__pb2.ListSubjectMappingsResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def get_subject_mapping(self, request: policy_dot_subjectmapping_dot_subject__mapping__pb2.GetSubjectMappingRequest, ctx: RequestContext) -> policy_dot_subjectmapping_dot_subject__mapping__pb2.GetSubjectMappingResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def create_subject_mapping(self, request: policy_dot_subjectmapping_dot_subject__mapping__pb2.CreateSubjectMappingRequest, ctx: RequestContext) -> policy_dot_subjectmapping_dot_subject__mapping__pb2.CreateSubjectMappingResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def update_subject_mapping(self, request: policy_dot_subjectmapping_dot_subject__mapping__pb2.UpdateSubjectMappingRequest, ctx: RequestContext) -> policy_dot_subjectmapping_dot_subject__mapping__pb2.UpdateSubjectMappingResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def delete_subject_mapping(self, request: policy_dot_subjectmapping_dot_subject__mapping__pb2.DeleteSubjectMappingRequest, ctx: RequestContext) -> policy_dot_subjectmapping_dot_subject__mapping__pb2.DeleteSubjectMappingResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def list_subject_condition_sets(self, request: policy_dot_subjectmapping_dot_subject__mapping__pb2.ListSubjectConditionSetsRequest, ctx: RequestContext) -> policy_dot_subjectmapping_dot_subject__mapping__pb2.ListSubjectConditionSetsResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def get_subject_condition_set(self, request: policy_dot_subjectmapping_dot_subject__mapping__pb2.GetSubjectConditionSetRequest, ctx: RequestContext) -> policy_dot_subjectmapping_dot_subject__mapping__pb2.GetSubjectConditionSetResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def create_subject_condition_set(self, request: policy_dot_subjectmapping_dot_subject__mapping__pb2.CreateSubjectConditionSetRequest, ctx: RequestContext) -> policy_dot_subjectmapping_dot_subject__mapping__pb2.CreateSubjectConditionSetResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def update_subject_condition_set(self, request: policy_dot_subjectmapping_dot_subject__mapping__pb2.UpdateSubjectConditionSetRequest, ctx: RequestContext) -> policy_dot_subjectmapping_dot_subject__mapping__pb2.UpdateSubjectConditionSetResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def delete_subject_condition_set(self, request: policy_dot_subjectmapping_dot_subject__mapping__pb2.DeleteSubjectConditionSetRequest, ctx: RequestContext) -> policy_dot_subjectmapping_dot_subject__mapping__pb2.DeleteSubjectConditionSetResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def delete_all_unmapped_subject_condition_sets(self, request: policy_dot_subjectmapping_dot_subject__mapping__pb2.DeleteAllUnmappedSubjectConditionSetsRequest, ctx: RequestContext) -> policy_dot_subjectmapping_dot_subject__mapping__pb2.DeleteAllUnmappedSubjectConditionSetsResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + +class SubjectMappingServiceASGIApplication(ConnectASGIApplication[SubjectMappingService]): + def __init__(self, service: SubjectMappingService | AsyncGenerator[SubjectMappingService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None) -> None: + super().__init__( + service=service, + endpoints=lambda svc: { + "/policy.subjectmapping.SubjectMappingService/MatchSubjectMappings": Endpoint.unary( + method=MethodInfo( + name="MatchSubjectMappings", + service_name="policy.subjectmapping.SubjectMappingService", + input=policy_dot_subjectmapping_dot_subject__mapping__pb2.MatchSubjectMappingsRequest, + output=policy_dot_subjectmapping_dot_subject__mapping__pb2.MatchSubjectMappingsResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.match_subject_mappings, + ), + "/policy.subjectmapping.SubjectMappingService/ListSubjectMappings": Endpoint.unary( + method=MethodInfo( + name="ListSubjectMappings", + service_name="policy.subjectmapping.SubjectMappingService", + input=policy_dot_subjectmapping_dot_subject__mapping__pb2.ListSubjectMappingsRequest, + output=policy_dot_subjectmapping_dot_subject__mapping__pb2.ListSubjectMappingsResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + function=svc.list_subject_mappings, + ), + "/policy.subjectmapping.SubjectMappingService/GetSubjectMapping": Endpoint.unary( + method=MethodInfo( + name="GetSubjectMapping", + service_name="policy.subjectmapping.SubjectMappingService", + input=policy_dot_subjectmapping_dot_subject__mapping__pb2.GetSubjectMappingRequest, + output=policy_dot_subjectmapping_dot_subject__mapping__pb2.GetSubjectMappingResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + function=svc.get_subject_mapping, + ), + "/policy.subjectmapping.SubjectMappingService/CreateSubjectMapping": Endpoint.unary( + method=MethodInfo( + name="CreateSubjectMapping", + service_name="policy.subjectmapping.SubjectMappingService", + input=policy_dot_subjectmapping_dot_subject__mapping__pb2.CreateSubjectMappingRequest, + output=policy_dot_subjectmapping_dot_subject__mapping__pb2.CreateSubjectMappingResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.create_subject_mapping, + ), + "/policy.subjectmapping.SubjectMappingService/UpdateSubjectMapping": Endpoint.unary( + method=MethodInfo( + name="UpdateSubjectMapping", + service_name="policy.subjectmapping.SubjectMappingService", + input=policy_dot_subjectmapping_dot_subject__mapping__pb2.UpdateSubjectMappingRequest, + output=policy_dot_subjectmapping_dot_subject__mapping__pb2.UpdateSubjectMappingResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.update_subject_mapping, + ), + "/policy.subjectmapping.SubjectMappingService/DeleteSubjectMapping": Endpoint.unary( + method=MethodInfo( + name="DeleteSubjectMapping", + service_name="policy.subjectmapping.SubjectMappingService", + input=policy_dot_subjectmapping_dot_subject__mapping__pb2.DeleteSubjectMappingRequest, + output=policy_dot_subjectmapping_dot_subject__mapping__pb2.DeleteSubjectMappingResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.delete_subject_mapping, + ), + "/policy.subjectmapping.SubjectMappingService/ListSubjectConditionSets": Endpoint.unary( + method=MethodInfo( + name="ListSubjectConditionSets", + service_name="policy.subjectmapping.SubjectMappingService", + input=policy_dot_subjectmapping_dot_subject__mapping__pb2.ListSubjectConditionSetsRequest, + output=policy_dot_subjectmapping_dot_subject__mapping__pb2.ListSubjectConditionSetsResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + function=svc.list_subject_condition_sets, + ), + "/policy.subjectmapping.SubjectMappingService/GetSubjectConditionSet": Endpoint.unary( + method=MethodInfo( + name="GetSubjectConditionSet", + service_name="policy.subjectmapping.SubjectMappingService", + input=policy_dot_subjectmapping_dot_subject__mapping__pb2.GetSubjectConditionSetRequest, + output=policy_dot_subjectmapping_dot_subject__mapping__pb2.GetSubjectConditionSetResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + function=svc.get_subject_condition_set, + ), + "/policy.subjectmapping.SubjectMappingService/CreateSubjectConditionSet": Endpoint.unary( + method=MethodInfo( + name="CreateSubjectConditionSet", + service_name="policy.subjectmapping.SubjectMappingService", + input=policy_dot_subjectmapping_dot_subject__mapping__pb2.CreateSubjectConditionSetRequest, + output=policy_dot_subjectmapping_dot_subject__mapping__pb2.CreateSubjectConditionSetResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.create_subject_condition_set, + ), + "/policy.subjectmapping.SubjectMappingService/UpdateSubjectConditionSet": Endpoint.unary( + method=MethodInfo( + name="UpdateSubjectConditionSet", + service_name="policy.subjectmapping.SubjectMappingService", + input=policy_dot_subjectmapping_dot_subject__mapping__pb2.UpdateSubjectConditionSetRequest, + output=policy_dot_subjectmapping_dot_subject__mapping__pb2.UpdateSubjectConditionSetResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.update_subject_condition_set, + ), + "/policy.subjectmapping.SubjectMappingService/DeleteSubjectConditionSet": Endpoint.unary( + method=MethodInfo( + name="DeleteSubjectConditionSet", + service_name="policy.subjectmapping.SubjectMappingService", + input=policy_dot_subjectmapping_dot_subject__mapping__pb2.DeleteSubjectConditionSetRequest, + output=policy_dot_subjectmapping_dot_subject__mapping__pb2.DeleteSubjectConditionSetResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.delete_subject_condition_set, + ), + "/policy.subjectmapping.SubjectMappingService/DeleteAllUnmappedSubjectConditionSets": Endpoint.unary( + method=MethodInfo( + name="DeleteAllUnmappedSubjectConditionSets", + service_name="policy.subjectmapping.SubjectMappingService", + input=policy_dot_subjectmapping_dot_subject__mapping__pb2.DeleteAllUnmappedSubjectConditionSetsRequest, + output=policy_dot_subjectmapping_dot_subject__mapping__pb2.DeleteAllUnmappedSubjectConditionSetsResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.delete_all_unmapped_subject_condition_sets, + ), + }, + interceptors=interceptors, + read_max_bytes=read_max_bytes, + ) + + @property + def path(self) -> str: + """Returns the URL path to mount the application to when serving multiple applications.""" + return "/policy.subjectmapping.SubjectMappingService" + + +class SubjectMappingServiceClient(ConnectClient): + async def match_subject_mappings( + self, + request: policy_dot_subjectmapping_dot_subject__mapping__pb2.MatchSubjectMappingsRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_subjectmapping_dot_subject__mapping__pb2.MatchSubjectMappingsResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="MatchSubjectMappings", + service_name="policy.subjectmapping.SubjectMappingService", + input=policy_dot_subjectmapping_dot_subject__mapping__pb2.MatchSubjectMappingsRequest, + output=policy_dot_subjectmapping_dot_subject__mapping__pb2.MatchSubjectMappingsResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def list_subject_mappings( + self, + request: policy_dot_subjectmapping_dot_subject__mapping__pb2.ListSubjectMappingsRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + use_get: bool = False, + ) -> policy_dot_subjectmapping_dot_subject__mapping__pb2.ListSubjectMappingsResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="ListSubjectMappings", + service_name="policy.subjectmapping.SubjectMappingService", + input=policy_dot_subjectmapping_dot_subject__mapping__pb2.ListSubjectMappingsRequest, + output=policy_dot_subjectmapping_dot_subject__mapping__pb2.ListSubjectMappingsResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + headers=headers, + timeout_ms=timeout_ms, + use_get=use_get, + ) + + async def get_subject_mapping( + self, + request: policy_dot_subjectmapping_dot_subject__mapping__pb2.GetSubjectMappingRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + use_get: bool = False, + ) -> policy_dot_subjectmapping_dot_subject__mapping__pb2.GetSubjectMappingResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="GetSubjectMapping", + service_name="policy.subjectmapping.SubjectMappingService", + input=policy_dot_subjectmapping_dot_subject__mapping__pb2.GetSubjectMappingRequest, + output=policy_dot_subjectmapping_dot_subject__mapping__pb2.GetSubjectMappingResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + headers=headers, + timeout_ms=timeout_ms, + use_get=use_get, + ) + + async def create_subject_mapping( + self, + request: policy_dot_subjectmapping_dot_subject__mapping__pb2.CreateSubjectMappingRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_subjectmapping_dot_subject__mapping__pb2.CreateSubjectMappingResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="CreateSubjectMapping", + service_name="policy.subjectmapping.SubjectMappingService", + input=policy_dot_subjectmapping_dot_subject__mapping__pb2.CreateSubjectMappingRequest, + output=policy_dot_subjectmapping_dot_subject__mapping__pb2.CreateSubjectMappingResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def update_subject_mapping( + self, + request: policy_dot_subjectmapping_dot_subject__mapping__pb2.UpdateSubjectMappingRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_subjectmapping_dot_subject__mapping__pb2.UpdateSubjectMappingResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="UpdateSubjectMapping", + service_name="policy.subjectmapping.SubjectMappingService", + input=policy_dot_subjectmapping_dot_subject__mapping__pb2.UpdateSubjectMappingRequest, + output=policy_dot_subjectmapping_dot_subject__mapping__pb2.UpdateSubjectMappingResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def delete_subject_mapping( + self, + request: policy_dot_subjectmapping_dot_subject__mapping__pb2.DeleteSubjectMappingRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_subjectmapping_dot_subject__mapping__pb2.DeleteSubjectMappingResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="DeleteSubjectMapping", + service_name="policy.subjectmapping.SubjectMappingService", + input=policy_dot_subjectmapping_dot_subject__mapping__pb2.DeleteSubjectMappingRequest, + output=policy_dot_subjectmapping_dot_subject__mapping__pb2.DeleteSubjectMappingResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def list_subject_condition_sets( + self, + request: policy_dot_subjectmapping_dot_subject__mapping__pb2.ListSubjectConditionSetsRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + use_get: bool = False, + ) -> policy_dot_subjectmapping_dot_subject__mapping__pb2.ListSubjectConditionSetsResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="ListSubjectConditionSets", + service_name="policy.subjectmapping.SubjectMappingService", + input=policy_dot_subjectmapping_dot_subject__mapping__pb2.ListSubjectConditionSetsRequest, + output=policy_dot_subjectmapping_dot_subject__mapping__pb2.ListSubjectConditionSetsResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + headers=headers, + timeout_ms=timeout_ms, + use_get=use_get, + ) + + async def get_subject_condition_set( + self, + request: policy_dot_subjectmapping_dot_subject__mapping__pb2.GetSubjectConditionSetRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + use_get: bool = False, + ) -> policy_dot_subjectmapping_dot_subject__mapping__pb2.GetSubjectConditionSetResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="GetSubjectConditionSet", + service_name="policy.subjectmapping.SubjectMappingService", + input=policy_dot_subjectmapping_dot_subject__mapping__pb2.GetSubjectConditionSetRequest, + output=policy_dot_subjectmapping_dot_subject__mapping__pb2.GetSubjectConditionSetResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + headers=headers, + timeout_ms=timeout_ms, + use_get=use_get, + ) + + async def create_subject_condition_set( + self, + request: policy_dot_subjectmapping_dot_subject__mapping__pb2.CreateSubjectConditionSetRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_subjectmapping_dot_subject__mapping__pb2.CreateSubjectConditionSetResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="CreateSubjectConditionSet", + service_name="policy.subjectmapping.SubjectMappingService", + input=policy_dot_subjectmapping_dot_subject__mapping__pb2.CreateSubjectConditionSetRequest, + output=policy_dot_subjectmapping_dot_subject__mapping__pb2.CreateSubjectConditionSetResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def update_subject_condition_set( + self, + request: policy_dot_subjectmapping_dot_subject__mapping__pb2.UpdateSubjectConditionSetRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_subjectmapping_dot_subject__mapping__pb2.UpdateSubjectConditionSetResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="UpdateSubjectConditionSet", + service_name="policy.subjectmapping.SubjectMappingService", + input=policy_dot_subjectmapping_dot_subject__mapping__pb2.UpdateSubjectConditionSetRequest, + output=policy_dot_subjectmapping_dot_subject__mapping__pb2.UpdateSubjectConditionSetResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def delete_subject_condition_set( + self, + request: policy_dot_subjectmapping_dot_subject__mapping__pb2.DeleteSubjectConditionSetRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_subjectmapping_dot_subject__mapping__pb2.DeleteSubjectConditionSetResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="DeleteSubjectConditionSet", + service_name="policy.subjectmapping.SubjectMappingService", + input=policy_dot_subjectmapping_dot_subject__mapping__pb2.DeleteSubjectConditionSetRequest, + output=policy_dot_subjectmapping_dot_subject__mapping__pb2.DeleteSubjectConditionSetResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def delete_all_unmapped_subject_condition_sets( + self, + request: policy_dot_subjectmapping_dot_subject__mapping__pb2.DeleteAllUnmappedSubjectConditionSetsRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_subjectmapping_dot_subject__mapping__pb2.DeleteAllUnmappedSubjectConditionSetsResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="DeleteAllUnmappedSubjectConditionSets", + service_name="policy.subjectmapping.SubjectMappingService", + input=policy_dot_subjectmapping_dot_subject__mapping__pb2.DeleteAllUnmappedSubjectConditionSetsRequest, + output=policy_dot_subjectmapping_dot_subject__mapping__pb2.DeleteAllUnmappedSubjectConditionSetsResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + +class SubjectMappingServiceSync(Protocol): + def match_subject_mappings(self, request: policy_dot_subjectmapping_dot_subject__mapping__pb2.MatchSubjectMappingsRequest, ctx: RequestContext) -> policy_dot_subjectmapping_dot_subject__mapping__pb2.MatchSubjectMappingsResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def list_subject_mappings(self, request: policy_dot_subjectmapping_dot_subject__mapping__pb2.ListSubjectMappingsRequest, ctx: RequestContext) -> policy_dot_subjectmapping_dot_subject__mapping__pb2.ListSubjectMappingsResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def get_subject_mapping(self, request: policy_dot_subjectmapping_dot_subject__mapping__pb2.GetSubjectMappingRequest, ctx: RequestContext) -> policy_dot_subjectmapping_dot_subject__mapping__pb2.GetSubjectMappingResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def create_subject_mapping(self, request: policy_dot_subjectmapping_dot_subject__mapping__pb2.CreateSubjectMappingRequest, ctx: RequestContext) -> policy_dot_subjectmapping_dot_subject__mapping__pb2.CreateSubjectMappingResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def update_subject_mapping(self, request: policy_dot_subjectmapping_dot_subject__mapping__pb2.UpdateSubjectMappingRequest, ctx: RequestContext) -> policy_dot_subjectmapping_dot_subject__mapping__pb2.UpdateSubjectMappingResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def delete_subject_mapping(self, request: policy_dot_subjectmapping_dot_subject__mapping__pb2.DeleteSubjectMappingRequest, ctx: RequestContext) -> policy_dot_subjectmapping_dot_subject__mapping__pb2.DeleteSubjectMappingResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def list_subject_condition_sets(self, request: policy_dot_subjectmapping_dot_subject__mapping__pb2.ListSubjectConditionSetsRequest, ctx: RequestContext) -> policy_dot_subjectmapping_dot_subject__mapping__pb2.ListSubjectConditionSetsResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def get_subject_condition_set(self, request: policy_dot_subjectmapping_dot_subject__mapping__pb2.GetSubjectConditionSetRequest, ctx: RequestContext) -> policy_dot_subjectmapping_dot_subject__mapping__pb2.GetSubjectConditionSetResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def create_subject_condition_set(self, request: policy_dot_subjectmapping_dot_subject__mapping__pb2.CreateSubjectConditionSetRequest, ctx: RequestContext) -> policy_dot_subjectmapping_dot_subject__mapping__pb2.CreateSubjectConditionSetResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def update_subject_condition_set(self, request: policy_dot_subjectmapping_dot_subject__mapping__pb2.UpdateSubjectConditionSetRequest, ctx: RequestContext) -> policy_dot_subjectmapping_dot_subject__mapping__pb2.UpdateSubjectConditionSetResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def delete_subject_condition_set(self, request: policy_dot_subjectmapping_dot_subject__mapping__pb2.DeleteSubjectConditionSetRequest, ctx: RequestContext) -> policy_dot_subjectmapping_dot_subject__mapping__pb2.DeleteSubjectConditionSetResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def delete_all_unmapped_subject_condition_sets(self, request: policy_dot_subjectmapping_dot_subject__mapping__pb2.DeleteAllUnmappedSubjectConditionSetsRequest, ctx: RequestContext) -> policy_dot_subjectmapping_dot_subject__mapping__pb2.DeleteAllUnmappedSubjectConditionSetsResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + +class SubjectMappingServiceWSGIApplication(ConnectWSGIApplication): + def __init__(self, service: SubjectMappingServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None) -> None: + super().__init__( + endpoints={ + "/policy.subjectmapping.SubjectMappingService/MatchSubjectMappings": EndpointSync.unary( + method=MethodInfo( + name="MatchSubjectMappings", + service_name="policy.subjectmapping.SubjectMappingService", + input=policy_dot_subjectmapping_dot_subject__mapping__pb2.MatchSubjectMappingsRequest, + output=policy_dot_subjectmapping_dot_subject__mapping__pb2.MatchSubjectMappingsResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.match_subject_mappings, + ), + "/policy.subjectmapping.SubjectMappingService/ListSubjectMappings": EndpointSync.unary( + method=MethodInfo( + name="ListSubjectMappings", + service_name="policy.subjectmapping.SubjectMappingService", + input=policy_dot_subjectmapping_dot_subject__mapping__pb2.ListSubjectMappingsRequest, + output=policy_dot_subjectmapping_dot_subject__mapping__pb2.ListSubjectMappingsResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + function=service.list_subject_mappings, + ), + "/policy.subjectmapping.SubjectMappingService/GetSubjectMapping": EndpointSync.unary( + method=MethodInfo( + name="GetSubjectMapping", + service_name="policy.subjectmapping.SubjectMappingService", + input=policy_dot_subjectmapping_dot_subject__mapping__pb2.GetSubjectMappingRequest, + output=policy_dot_subjectmapping_dot_subject__mapping__pb2.GetSubjectMappingResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + function=service.get_subject_mapping, + ), + "/policy.subjectmapping.SubjectMappingService/CreateSubjectMapping": EndpointSync.unary( + method=MethodInfo( + name="CreateSubjectMapping", + service_name="policy.subjectmapping.SubjectMappingService", + input=policy_dot_subjectmapping_dot_subject__mapping__pb2.CreateSubjectMappingRequest, + output=policy_dot_subjectmapping_dot_subject__mapping__pb2.CreateSubjectMappingResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.create_subject_mapping, + ), + "/policy.subjectmapping.SubjectMappingService/UpdateSubjectMapping": EndpointSync.unary( + method=MethodInfo( + name="UpdateSubjectMapping", + service_name="policy.subjectmapping.SubjectMappingService", + input=policy_dot_subjectmapping_dot_subject__mapping__pb2.UpdateSubjectMappingRequest, + output=policy_dot_subjectmapping_dot_subject__mapping__pb2.UpdateSubjectMappingResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.update_subject_mapping, + ), + "/policy.subjectmapping.SubjectMappingService/DeleteSubjectMapping": EndpointSync.unary( + method=MethodInfo( + name="DeleteSubjectMapping", + service_name="policy.subjectmapping.SubjectMappingService", + input=policy_dot_subjectmapping_dot_subject__mapping__pb2.DeleteSubjectMappingRequest, + output=policy_dot_subjectmapping_dot_subject__mapping__pb2.DeleteSubjectMappingResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.delete_subject_mapping, + ), + "/policy.subjectmapping.SubjectMappingService/ListSubjectConditionSets": EndpointSync.unary( + method=MethodInfo( + name="ListSubjectConditionSets", + service_name="policy.subjectmapping.SubjectMappingService", + input=policy_dot_subjectmapping_dot_subject__mapping__pb2.ListSubjectConditionSetsRequest, + output=policy_dot_subjectmapping_dot_subject__mapping__pb2.ListSubjectConditionSetsResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + function=service.list_subject_condition_sets, + ), + "/policy.subjectmapping.SubjectMappingService/GetSubjectConditionSet": EndpointSync.unary( + method=MethodInfo( + name="GetSubjectConditionSet", + service_name="policy.subjectmapping.SubjectMappingService", + input=policy_dot_subjectmapping_dot_subject__mapping__pb2.GetSubjectConditionSetRequest, + output=policy_dot_subjectmapping_dot_subject__mapping__pb2.GetSubjectConditionSetResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + function=service.get_subject_condition_set, + ), + "/policy.subjectmapping.SubjectMappingService/CreateSubjectConditionSet": EndpointSync.unary( + method=MethodInfo( + name="CreateSubjectConditionSet", + service_name="policy.subjectmapping.SubjectMappingService", + input=policy_dot_subjectmapping_dot_subject__mapping__pb2.CreateSubjectConditionSetRequest, + output=policy_dot_subjectmapping_dot_subject__mapping__pb2.CreateSubjectConditionSetResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.create_subject_condition_set, + ), + "/policy.subjectmapping.SubjectMappingService/UpdateSubjectConditionSet": EndpointSync.unary( + method=MethodInfo( + name="UpdateSubjectConditionSet", + service_name="policy.subjectmapping.SubjectMappingService", + input=policy_dot_subjectmapping_dot_subject__mapping__pb2.UpdateSubjectConditionSetRequest, + output=policy_dot_subjectmapping_dot_subject__mapping__pb2.UpdateSubjectConditionSetResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.update_subject_condition_set, + ), + "/policy.subjectmapping.SubjectMappingService/DeleteSubjectConditionSet": EndpointSync.unary( + method=MethodInfo( + name="DeleteSubjectConditionSet", + service_name="policy.subjectmapping.SubjectMappingService", + input=policy_dot_subjectmapping_dot_subject__mapping__pb2.DeleteSubjectConditionSetRequest, + output=policy_dot_subjectmapping_dot_subject__mapping__pb2.DeleteSubjectConditionSetResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.delete_subject_condition_set, + ), + "/policy.subjectmapping.SubjectMappingService/DeleteAllUnmappedSubjectConditionSets": EndpointSync.unary( + method=MethodInfo( + name="DeleteAllUnmappedSubjectConditionSets", + service_name="policy.subjectmapping.SubjectMappingService", + input=policy_dot_subjectmapping_dot_subject__mapping__pb2.DeleteAllUnmappedSubjectConditionSetsRequest, + output=policy_dot_subjectmapping_dot_subject__mapping__pb2.DeleteAllUnmappedSubjectConditionSetsResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.delete_all_unmapped_subject_condition_sets, + ), + }, + interceptors=interceptors, + read_max_bytes=read_max_bytes, + ) + + @property + def path(self) -> str: + """Returns the URL path to mount the application to when serving multiple applications.""" + return "/policy.subjectmapping.SubjectMappingService" + + +class SubjectMappingServiceClientSync(ConnectClientSync): + def match_subject_mappings( + self, + request: policy_dot_subjectmapping_dot_subject__mapping__pb2.MatchSubjectMappingsRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_subjectmapping_dot_subject__mapping__pb2.MatchSubjectMappingsResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="MatchSubjectMappings", + service_name="policy.subjectmapping.SubjectMappingService", + input=policy_dot_subjectmapping_dot_subject__mapping__pb2.MatchSubjectMappingsRequest, + output=policy_dot_subjectmapping_dot_subject__mapping__pb2.MatchSubjectMappingsResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def list_subject_mappings( + self, + request: policy_dot_subjectmapping_dot_subject__mapping__pb2.ListSubjectMappingsRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + use_get: bool = False, + ) -> policy_dot_subjectmapping_dot_subject__mapping__pb2.ListSubjectMappingsResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="ListSubjectMappings", + service_name="policy.subjectmapping.SubjectMappingService", + input=policy_dot_subjectmapping_dot_subject__mapping__pb2.ListSubjectMappingsRequest, + output=policy_dot_subjectmapping_dot_subject__mapping__pb2.ListSubjectMappingsResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + headers=headers, + timeout_ms=timeout_ms, + use_get=use_get, + ) + + def get_subject_mapping( + self, + request: policy_dot_subjectmapping_dot_subject__mapping__pb2.GetSubjectMappingRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + use_get: bool = False, + ) -> policy_dot_subjectmapping_dot_subject__mapping__pb2.GetSubjectMappingResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="GetSubjectMapping", + service_name="policy.subjectmapping.SubjectMappingService", + input=policy_dot_subjectmapping_dot_subject__mapping__pb2.GetSubjectMappingRequest, + output=policy_dot_subjectmapping_dot_subject__mapping__pb2.GetSubjectMappingResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + headers=headers, + timeout_ms=timeout_ms, + use_get=use_get, + ) + + def create_subject_mapping( + self, + request: policy_dot_subjectmapping_dot_subject__mapping__pb2.CreateSubjectMappingRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_subjectmapping_dot_subject__mapping__pb2.CreateSubjectMappingResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="CreateSubjectMapping", + service_name="policy.subjectmapping.SubjectMappingService", + input=policy_dot_subjectmapping_dot_subject__mapping__pb2.CreateSubjectMappingRequest, + output=policy_dot_subjectmapping_dot_subject__mapping__pb2.CreateSubjectMappingResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def update_subject_mapping( + self, + request: policy_dot_subjectmapping_dot_subject__mapping__pb2.UpdateSubjectMappingRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_subjectmapping_dot_subject__mapping__pb2.UpdateSubjectMappingResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="UpdateSubjectMapping", + service_name="policy.subjectmapping.SubjectMappingService", + input=policy_dot_subjectmapping_dot_subject__mapping__pb2.UpdateSubjectMappingRequest, + output=policy_dot_subjectmapping_dot_subject__mapping__pb2.UpdateSubjectMappingResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def delete_subject_mapping( + self, + request: policy_dot_subjectmapping_dot_subject__mapping__pb2.DeleteSubjectMappingRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_subjectmapping_dot_subject__mapping__pb2.DeleteSubjectMappingResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="DeleteSubjectMapping", + service_name="policy.subjectmapping.SubjectMappingService", + input=policy_dot_subjectmapping_dot_subject__mapping__pb2.DeleteSubjectMappingRequest, + output=policy_dot_subjectmapping_dot_subject__mapping__pb2.DeleteSubjectMappingResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def list_subject_condition_sets( + self, + request: policy_dot_subjectmapping_dot_subject__mapping__pb2.ListSubjectConditionSetsRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + use_get: bool = False, + ) -> policy_dot_subjectmapping_dot_subject__mapping__pb2.ListSubjectConditionSetsResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="ListSubjectConditionSets", + service_name="policy.subjectmapping.SubjectMappingService", + input=policy_dot_subjectmapping_dot_subject__mapping__pb2.ListSubjectConditionSetsRequest, + output=policy_dot_subjectmapping_dot_subject__mapping__pb2.ListSubjectConditionSetsResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + headers=headers, + timeout_ms=timeout_ms, + use_get=use_get, + ) + + def get_subject_condition_set( + self, + request: policy_dot_subjectmapping_dot_subject__mapping__pb2.GetSubjectConditionSetRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + use_get: bool = False, + ) -> policy_dot_subjectmapping_dot_subject__mapping__pb2.GetSubjectConditionSetResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="GetSubjectConditionSet", + service_name="policy.subjectmapping.SubjectMappingService", + input=policy_dot_subjectmapping_dot_subject__mapping__pb2.GetSubjectConditionSetRequest, + output=policy_dot_subjectmapping_dot_subject__mapping__pb2.GetSubjectConditionSetResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + headers=headers, + timeout_ms=timeout_ms, + use_get=use_get, + ) + + def create_subject_condition_set( + self, + request: policy_dot_subjectmapping_dot_subject__mapping__pb2.CreateSubjectConditionSetRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_subjectmapping_dot_subject__mapping__pb2.CreateSubjectConditionSetResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="CreateSubjectConditionSet", + service_name="policy.subjectmapping.SubjectMappingService", + input=policy_dot_subjectmapping_dot_subject__mapping__pb2.CreateSubjectConditionSetRequest, + output=policy_dot_subjectmapping_dot_subject__mapping__pb2.CreateSubjectConditionSetResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def update_subject_condition_set( + self, + request: policy_dot_subjectmapping_dot_subject__mapping__pb2.UpdateSubjectConditionSetRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_subjectmapping_dot_subject__mapping__pb2.UpdateSubjectConditionSetResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="UpdateSubjectConditionSet", + service_name="policy.subjectmapping.SubjectMappingService", + input=policy_dot_subjectmapping_dot_subject__mapping__pb2.UpdateSubjectConditionSetRequest, + output=policy_dot_subjectmapping_dot_subject__mapping__pb2.UpdateSubjectConditionSetResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def delete_subject_condition_set( + self, + request: policy_dot_subjectmapping_dot_subject__mapping__pb2.DeleteSubjectConditionSetRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_subjectmapping_dot_subject__mapping__pb2.DeleteSubjectConditionSetResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="DeleteSubjectConditionSet", + service_name="policy.subjectmapping.SubjectMappingService", + input=policy_dot_subjectmapping_dot_subject__mapping__pb2.DeleteSubjectConditionSetRequest, + output=policy_dot_subjectmapping_dot_subject__mapping__pb2.DeleteSubjectConditionSetResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def delete_all_unmapped_subject_condition_sets( + self, + request: policy_dot_subjectmapping_dot_subject__mapping__pb2.DeleteAllUnmappedSubjectConditionSetsRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_subjectmapping_dot_subject__mapping__pb2.DeleteAllUnmappedSubjectConditionSetsResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="DeleteAllUnmappedSubjectConditionSets", + service_name="policy.subjectmapping.SubjectMappingService", + input=policy_dot_subjectmapping_dot_subject__mapping__pb2.DeleteAllUnmappedSubjectConditionSetsRequest, + output=policy_dot_subjectmapping_dot_subject__mapping__pb2.DeleteAllUnmappedSubjectConditionSetsResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) diff --git a/otdf-python-proto/src/otdf_python_proto/policy/subjectmapping/subject_mapping_pb2_connect.py b/otdf-python-proto/src/otdf_python_proto/policy/subjectmapping/subject_mapping_pb2_connect.py deleted file mode 100644 index b5c8ef8..0000000 --- a/otdf-python-proto/src/otdf_python_proto/policy/subjectmapping/subject_mapping_pb2_connect.py +++ /dev/null @@ -1,569 +0,0 @@ -# Generated Connect client code - -from __future__ import annotations -from collections.abc import AsyncIterator -from collections.abc import Iterator -from collections.abc import Iterable -import aiohttp -import urllib3 -import typing -import sys - -from connectrpc.client_async import AsyncConnectClient -from connectrpc.client_sync import ConnectClient -from connectrpc.client_protocol import ConnectProtocol -from connectrpc.client_connect import ConnectProtocolError -from connectrpc.headers import HeaderInput -from connectrpc.server import ClientRequest -from connectrpc.server import ClientStream -from connectrpc.server import ServerResponse -from connectrpc.server import ServerStream -from connectrpc.server_sync import ConnectWSGI -from connectrpc.streams import StreamInput -from connectrpc.streams import AsyncStreamOutput -from connectrpc.streams import StreamOutput -from connectrpc.unary import UnaryOutput -from connectrpc.unary import ClientStreamingOutput - -if typing.TYPE_CHECKING: - # wsgiref.types was added in Python 3.11. - if sys.version_info >= (3, 11): - from wsgiref.types import WSGIApplication - else: - from _typeshed.wsgi import WSGIApplication - -import policy.subjectmapping.subject_mapping_pb2 - -class SubjectMappingServiceClient: - def __init__( - self, - base_url: str, - http_client: urllib3.PoolManager | None = None, - protocol: ConnectProtocol = ConnectProtocol.CONNECT_PROTOBUF, - ): - self.base_url = base_url - self._connect_client = ConnectClient(http_client, protocol) - def call_match_subject_mappings( - self, req: policy.subjectmapping.subject_mapping_pb2.MatchSubjectMappingsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.subjectmapping.subject_mapping_pb2.MatchSubjectMappingsResponse]: - """Low-level method to call MatchSubjectMappings, granting access to errors and metadata""" - url = self.base_url + "/policy.subjectmapping.SubjectMappingService/MatchSubjectMappings" - return self._connect_client.call_unary(url, req, policy.subjectmapping.subject_mapping_pb2.MatchSubjectMappingsResponse,extra_headers, timeout_seconds) - - - def match_subject_mappings( - self, req: policy.subjectmapping.subject_mapping_pb2.MatchSubjectMappingsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.subjectmapping.subject_mapping_pb2.MatchSubjectMappingsResponse: - response = self.call_match_subject_mappings(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_list_subject_mappings( - self, req: policy.subjectmapping.subject_mapping_pb2.ListSubjectMappingsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.subjectmapping.subject_mapping_pb2.ListSubjectMappingsResponse]: - """Low-level method to call ListSubjectMappings, granting access to errors and metadata""" - url = self.base_url + "/policy.subjectmapping.SubjectMappingService/ListSubjectMappings" - return self._connect_client.call_unary(url, req, policy.subjectmapping.subject_mapping_pb2.ListSubjectMappingsResponse,extra_headers, timeout_seconds) - - - def list_subject_mappings( - self, req: policy.subjectmapping.subject_mapping_pb2.ListSubjectMappingsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.subjectmapping.subject_mapping_pb2.ListSubjectMappingsResponse: - response = self.call_list_subject_mappings(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_get_subject_mapping( - self, req: policy.subjectmapping.subject_mapping_pb2.GetSubjectMappingRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.subjectmapping.subject_mapping_pb2.GetSubjectMappingResponse]: - """Low-level method to call GetSubjectMapping, granting access to errors and metadata""" - url = self.base_url + "/policy.subjectmapping.SubjectMappingService/GetSubjectMapping" - return self._connect_client.call_unary(url, req, policy.subjectmapping.subject_mapping_pb2.GetSubjectMappingResponse,extra_headers, timeout_seconds) - - - def get_subject_mapping( - self, req: policy.subjectmapping.subject_mapping_pb2.GetSubjectMappingRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.subjectmapping.subject_mapping_pb2.GetSubjectMappingResponse: - response = self.call_get_subject_mapping(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_create_subject_mapping( - self, req: policy.subjectmapping.subject_mapping_pb2.CreateSubjectMappingRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.subjectmapping.subject_mapping_pb2.CreateSubjectMappingResponse]: - """Low-level method to call CreateSubjectMapping, granting access to errors and metadata""" - url = self.base_url + "/policy.subjectmapping.SubjectMappingService/CreateSubjectMapping" - return self._connect_client.call_unary(url, req, policy.subjectmapping.subject_mapping_pb2.CreateSubjectMappingResponse,extra_headers, timeout_seconds) - - - def create_subject_mapping( - self, req: policy.subjectmapping.subject_mapping_pb2.CreateSubjectMappingRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.subjectmapping.subject_mapping_pb2.CreateSubjectMappingResponse: - response = self.call_create_subject_mapping(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_update_subject_mapping( - self, req: policy.subjectmapping.subject_mapping_pb2.UpdateSubjectMappingRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.subjectmapping.subject_mapping_pb2.UpdateSubjectMappingResponse]: - """Low-level method to call UpdateSubjectMapping, granting access to errors and metadata""" - url = self.base_url + "/policy.subjectmapping.SubjectMappingService/UpdateSubjectMapping" - return self._connect_client.call_unary(url, req, policy.subjectmapping.subject_mapping_pb2.UpdateSubjectMappingResponse,extra_headers, timeout_seconds) - - - def update_subject_mapping( - self, req: policy.subjectmapping.subject_mapping_pb2.UpdateSubjectMappingRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.subjectmapping.subject_mapping_pb2.UpdateSubjectMappingResponse: - response = self.call_update_subject_mapping(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_delete_subject_mapping( - self, req: policy.subjectmapping.subject_mapping_pb2.DeleteSubjectMappingRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.subjectmapping.subject_mapping_pb2.DeleteSubjectMappingResponse]: - """Low-level method to call DeleteSubjectMapping, granting access to errors and metadata""" - url = self.base_url + "/policy.subjectmapping.SubjectMappingService/DeleteSubjectMapping" - return self._connect_client.call_unary(url, req, policy.subjectmapping.subject_mapping_pb2.DeleteSubjectMappingResponse,extra_headers, timeout_seconds) - - - def delete_subject_mapping( - self, req: policy.subjectmapping.subject_mapping_pb2.DeleteSubjectMappingRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.subjectmapping.subject_mapping_pb2.DeleteSubjectMappingResponse: - response = self.call_delete_subject_mapping(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_list_subject_condition_sets( - self, req: policy.subjectmapping.subject_mapping_pb2.ListSubjectConditionSetsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.subjectmapping.subject_mapping_pb2.ListSubjectConditionSetsResponse]: - """Low-level method to call ListSubjectConditionSets, granting access to errors and metadata""" - url = self.base_url + "/policy.subjectmapping.SubjectMappingService/ListSubjectConditionSets" - return self._connect_client.call_unary(url, req, policy.subjectmapping.subject_mapping_pb2.ListSubjectConditionSetsResponse,extra_headers, timeout_seconds) - - - def list_subject_condition_sets( - self, req: policy.subjectmapping.subject_mapping_pb2.ListSubjectConditionSetsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.subjectmapping.subject_mapping_pb2.ListSubjectConditionSetsResponse: - response = self.call_list_subject_condition_sets(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_get_subject_condition_set( - self, req: policy.subjectmapping.subject_mapping_pb2.GetSubjectConditionSetRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.subjectmapping.subject_mapping_pb2.GetSubjectConditionSetResponse]: - """Low-level method to call GetSubjectConditionSet, granting access to errors and metadata""" - url = self.base_url + "/policy.subjectmapping.SubjectMappingService/GetSubjectConditionSet" - return self._connect_client.call_unary(url, req, policy.subjectmapping.subject_mapping_pb2.GetSubjectConditionSetResponse,extra_headers, timeout_seconds) - - - def get_subject_condition_set( - self, req: policy.subjectmapping.subject_mapping_pb2.GetSubjectConditionSetRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.subjectmapping.subject_mapping_pb2.GetSubjectConditionSetResponse: - response = self.call_get_subject_condition_set(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_create_subject_condition_set( - self, req: policy.subjectmapping.subject_mapping_pb2.CreateSubjectConditionSetRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.subjectmapping.subject_mapping_pb2.CreateSubjectConditionSetResponse]: - """Low-level method to call CreateSubjectConditionSet, granting access to errors and metadata""" - url = self.base_url + "/policy.subjectmapping.SubjectMappingService/CreateSubjectConditionSet" - return self._connect_client.call_unary(url, req, policy.subjectmapping.subject_mapping_pb2.CreateSubjectConditionSetResponse,extra_headers, timeout_seconds) - - - def create_subject_condition_set( - self, req: policy.subjectmapping.subject_mapping_pb2.CreateSubjectConditionSetRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.subjectmapping.subject_mapping_pb2.CreateSubjectConditionSetResponse: - response = self.call_create_subject_condition_set(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_update_subject_condition_set( - self, req: policy.subjectmapping.subject_mapping_pb2.UpdateSubjectConditionSetRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.subjectmapping.subject_mapping_pb2.UpdateSubjectConditionSetResponse]: - """Low-level method to call UpdateSubjectConditionSet, granting access to errors and metadata""" - url = self.base_url + "/policy.subjectmapping.SubjectMappingService/UpdateSubjectConditionSet" - return self._connect_client.call_unary(url, req, policy.subjectmapping.subject_mapping_pb2.UpdateSubjectConditionSetResponse,extra_headers, timeout_seconds) - - - def update_subject_condition_set( - self, req: policy.subjectmapping.subject_mapping_pb2.UpdateSubjectConditionSetRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.subjectmapping.subject_mapping_pb2.UpdateSubjectConditionSetResponse: - response = self.call_update_subject_condition_set(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_delete_subject_condition_set( - self, req: policy.subjectmapping.subject_mapping_pb2.DeleteSubjectConditionSetRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.subjectmapping.subject_mapping_pb2.DeleteSubjectConditionSetResponse]: - """Low-level method to call DeleteSubjectConditionSet, granting access to errors and metadata""" - url = self.base_url + "/policy.subjectmapping.SubjectMappingService/DeleteSubjectConditionSet" - return self._connect_client.call_unary(url, req, policy.subjectmapping.subject_mapping_pb2.DeleteSubjectConditionSetResponse,extra_headers, timeout_seconds) - - - def delete_subject_condition_set( - self, req: policy.subjectmapping.subject_mapping_pb2.DeleteSubjectConditionSetRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.subjectmapping.subject_mapping_pb2.DeleteSubjectConditionSetResponse: - response = self.call_delete_subject_condition_set(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_delete_all_unmapped_subject_condition_sets( - self, req: policy.subjectmapping.subject_mapping_pb2.DeleteAllUnmappedSubjectConditionSetsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.subjectmapping.subject_mapping_pb2.DeleteAllUnmappedSubjectConditionSetsResponse]: - """Low-level method to call DeleteAllUnmappedSubjectConditionSets, granting access to errors and metadata""" - url = self.base_url + "/policy.subjectmapping.SubjectMappingService/DeleteAllUnmappedSubjectConditionSets" - return self._connect_client.call_unary(url, req, policy.subjectmapping.subject_mapping_pb2.DeleteAllUnmappedSubjectConditionSetsResponse,extra_headers, timeout_seconds) - - - def delete_all_unmapped_subject_condition_sets( - self, req: policy.subjectmapping.subject_mapping_pb2.DeleteAllUnmappedSubjectConditionSetsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.subjectmapping.subject_mapping_pb2.DeleteAllUnmappedSubjectConditionSetsResponse: - response = self.call_delete_all_unmapped_subject_condition_sets(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - -class AsyncSubjectMappingServiceClient: - def __init__( - self, - base_url: str, - http_client: aiohttp.ClientSession, - protocol: ConnectProtocol = ConnectProtocol.CONNECT_PROTOBUF, - ): - self.base_url = base_url - self._connect_client = AsyncConnectClient(http_client, protocol) - - async def call_match_subject_mappings( - self, req: policy.subjectmapping.subject_mapping_pb2.MatchSubjectMappingsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.subjectmapping.subject_mapping_pb2.MatchSubjectMappingsResponse]: - """Low-level method to call MatchSubjectMappings, granting access to errors and metadata""" - url = self.base_url + "/policy.subjectmapping.SubjectMappingService/MatchSubjectMappings" - return await self._connect_client.call_unary(url, req, policy.subjectmapping.subject_mapping_pb2.MatchSubjectMappingsResponse,extra_headers, timeout_seconds) - - async def match_subject_mappings( - self, req: policy.subjectmapping.subject_mapping_pb2.MatchSubjectMappingsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.subjectmapping.subject_mapping_pb2.MatchSubjectMappingsResponse: - response = await self.call_match_subject_mappings(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_list_subject_mappings( - self, req: policy.subjectmapping.subject_mapping_pb2.ListSubjectMappingsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.subjectmapping.subject_mapping_pb2.ListSubjectMappingsResponse]: - """Low-level method to call ListSubjectMappings, granting access to errors and metadata""" - url = self.base_url + "/policy.subjectmapping.SubjectMappingService/ListSubjectMappings" - return await self._connect_client.call_unary(url, req, policy.subjectmapping.subject_mapping_pb2.ListSubjectMappingsResponse,extra_headers, timeout_seconds) - - async def list_subject_mappings( - self, req: policy.subjectmapping.subject_mapping_pb2.ListSubjectMappingsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.subjectmapping.subject_mapping_pb2.ListSubjectMappingsResponse: - response = await self.call_list_subject_mappings(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_get_subject_mapping( - self, req: policy.subjectmapping.subject_mapping_pb2.GetSubjectMappingRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.subjectmapping.subject_mapping_pb2.GetSubjectMappingResponse]: - """Low-level method to call GetSubjectMapping, granting access to errors and metadata""" - url = self.base_url + "/policy.subjectmapping.SubjectMappingService/GetSubjectMapping" - return await self._connect_client.call_unary(url, req, policy.subjectmapping.subject_mapping_pb2.GetSubjectMappingResponse,extra_headers, timeout_seconds) - - async def get_subject_mapping( - self, req: policy.subjectmapping.subject_mapping_pb2.GetSubjectMappingRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.subjectmapping.subject_mapping_pb2.GetSubjectMappingResponse: - response = await self.call_get_subject_mapping(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_create_subject_mapping( - self, req: policy.subjectmapping.subject_mapping_pb2.CreateSubjectMappingRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.subjectmapping.subject_mapping_pb2.CreateSubjectMappingResponse]: - """Low-level method to call CreateSubjectMapping, granting access to errors and metadata""" - url = self.base_url + "/policy.subjectmapping.SubjectMappingService/CreateSubjectMapping" - return await self._connect_client.call_unary(url, req, policy.subjectmapping.subject_mapping_pb2.CreateSubjectMappingResponse,extra_headers, timeout_seconds) - - async def create_subject_mapping( - self, req: policy.subjectmapping.subject_mapping_pb2.CreateSubjectMappingRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.subjectmapping.subject_mapping_pb2.CreateSubjectMappingResponse: - response = await self.call_create_subject_mapping(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_update_subject_mapping( - self, req: policy.subjectmapping.subject_mapping_pb2.UpdateSubjectMappingRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.subjectmapping.subject_mapping_pb2.UpdateSubjectMappingResponse]: - """Low-level method to call UpdateSubjectMapping, granting access to errors and metadata""" - url = self.base_url + "/policy.subjectmapping.SubjectMappingService/UpdateSubjectMapping" - return await self._connect_client.call_unary(url, req, policy.subjectmapping.subject_mapping_pb2.UpdateSubjectMappingResponse,extra_headers, timeout_seconds) - - async def update_subject_mapping( - self, req: policy.subjectmapping.subject_mapping_pb2.UpdateSubjectMappingRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.subjectmapping.subject_mapping_pb2.UpdateSubjectMappingResponse: - response = await self.call_update_subject_mapping(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_delete_subject_mapping( - self, req: policy.subjectmapping.subject_mapping_pb2.DeleteSubjectMappingRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.subjectmapping.subject_mapping_pb2.DeleteSubjectMappingResponse]: - """Low-level method to call DeleteSubjectMapping, granting access to errors and metadata""" - url = self.base_url + "/policy.subjectmapping.SubjectMappingService/DeleteSubjectMapping" - return await self._connect_client.call_unary(url, req, policy.subjectmapping.subject_mapping_pb2.DeleteSubjectMappingResponse,extra_headers, timeout_seconds) - - async def delete_subject_mapping( - self, req: policy.subjectmapping.subject_mapping_pb2.DeleteSubjectMappingRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.subjectmapping.subject_mapping_pb2.DeleteSubjectMappingResponse: - response = await self.call_delete_subject_mapping(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_list_subject_condition_sets( - self, req: policy.subjectmapping.subject_mapping_pb2.ListSubjectConditionSetsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.subjectmapping.subject_mapping_pb2.ListSubjectConditionSetsResponse]: - """Low-level method to call ListSubjectConditionSets, granting access to errors and metadata""" - url = self.base_url + "/policy.subjectmapping.SubjectMappingService/ListSubjectConditionSets" - return await self._connect_client.call_unary(url, req, policy.subjectmapping.subject_mapping_pb2.ListSubjectConditionSetsResponse,extra_headers, timeout_seconds) - - async def list_subject_condition_sets( - self, req: policy.subjectmapping.subject_mapping_pb2.ListSubjectConditionSetsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.subjectmapping.subject_mapping_pb2.ListSubjectConditionSetsResponse: - response = await self.call_list_subject_condition_sets(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_get_subject_condition_set( - self, req: policy.subjectmapping.subject_mapping_pb2.GetSubjectConditionSetRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.subjectmapping.subject_mapping_pb2.GetSubjectConditionSetResponse]: - """Low-level method to call GetSubjectConditionSet, granting access to errors and metadata""" - url = self.base_url + "/policy.subjectmapping.SubjectMappingService/GetSubjectConditionSet" - return await self._connect_client.call_unary(url, req, policy.subjectmapping.subject_mapping_pb2.GetSubjectConditionSetResponse,extra_headers, timeout_seconds) - - async def get_subject_condition_set( - self, req: policy.subjectmapping.subject_mapping_pb2.GetSubjectConditionSetRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.subjectmapping.subject_mapping_pb2.GetSubjectConditionSetResponse: - response = await self.call_get_subject_condition_set(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_create_subject_condition_set( - self, req: policy.subjectmapping.subject_mapping_pb2.CreateSubjectConditionSetRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.subjectmapping.subject_mapping_pb2.CreateSubjectConditionSetResponse]: - """Low-level method to call CreateSubjectConditionSet, granting access to errors and metadata""" - url = self.base_url + "/policy.subjectmapping.SubjectMappingService/CreateSubjectConditionSet" - return await self._connect_client.call_unary(url, req, policy.subjectmapping.subject_mapping_pb2.CreateSubjectConditionSetResponse,extra_headers, timeout_seconds) - - async def create_subject_condition_set( - self, req: policy.subjectmapping.subject_mapping_pb2.CreateSubjectConditionSetRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.subjectmapping.subject_mapping_pb2.CreateSubjectConditionSetResponse: - response = await self.call_create_subject_condition_set(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_update_subject_condition_set( - self, req: policy.subjectmapping.subject_mapping_pb2.UpdateSubjectConditionSetRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.subjectmapping.subject_mapping_pb2.UpdateSubjectConditionSetResponse]: - """Low-level method to call UpdateSubjectConditionSet, granting access to errors and metadata""" - url = self.base_url + "/policy.subjectmapping.SubjectMappingService/UpdateSubjectConditionSet" - return await self._connect_client.call_unary(url, req, policy.subjectmapping.subject_mapping_pb2.UpdateSubjectConditionSetResponse,extra_headers, timeout_seconds) - - async def update_subject_condition_set( - self, req: policy.subjectmapping.subject_mapping_pb2.UpdateSubjectConditionSetRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.subjectmapping.subject_mapping_pb2.UpdateSubjectConditionSetResponse: - response = await self.call_update_subject_condition_set(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_delete_subject_condition_set( - self, req: policy.subjectmapping.subject_mapping_pb2.DeleteSubjectConditionSetRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.subjectmapping.subject_mapping_pb2.DeleteSubjectConditionSetResponse]: - """Low-level method to call DeleteSubjectConditionSet, granting access to errors and metadata""" - url = self.base_url + "/policy.subjectmapping.SubjectMappingService/DeleteSubjectConditionSet" - return await self._connect_client.call_unary(url, req, policy.subjectmapping.subject_mapping_pb2.DeleteSubjectConditionSetResponse,extra_headers, timeout_seconds) - - async def delete_subject_condition_set( - self, req: policy.subjectmapping.subject_mapping_pb2.DeleteSubjectConditionSetRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.subjectmapping.subject_mapping_pb2.DeleteSubjectConditionSetResponse: - response = await self.call_delete_subject_condition_set(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_delete_all_unmapped_subject_condition_sets( - self, req: policy.subjectmapping.subject_mapping_pb2.DeleteAllUnmappedSubjectConditionSetsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.subjectmapping.subject_mapping_pb2.DeleteAllUnmappedSubjectConditionSetsResponse]: - """Low-level method to call DeleteAllUnmappedSubjectConditionSets, granting access to errors and metadata""" - url = self.base_url + "/policy.subjectmapping.SubjectMappingService/DeleteAllUnmappedSubjectConditionSets" - return await self._connect_client.call_unary(url, req, policy.subjectmapping.subject_mapping_pb2.DeleteAllUnmappedSubjectConditionSetsResponse,extra_headers, timeout_seconds) - - async def delete_all_unmapped_subject_condition_sets( - self, req: policy.subjectmapping.subject_mapping_pb2.DeleteAllUnmappedSubjectConditionSetsRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.subjectmapping.subject_mapping_pb2.DeleteAllUnmappedSubjectConditionSetsResponse: - response = await self.call_delete_all_unmapped_subject_condition_sets(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - -@typing.runtime_checkable -class SubjectMappingServiceProtocol(typing.Protocol): - def match_subject_mappings(self, req: ClientRequest[policy.subjectmapping.subject_mapping_pb2.MatchSubjectMappingsRequest]) -> ServerResponse[policy.subjectmapping.subject_mapping_pb2.MatchSubjectMappingsResponse]: - ... - def list_subject_mappings(self, req: ClientRequest[policy.subjectmapping.subject_mapping_pb2.ListSubjectMappingsRequest]) -> ServerResponse[policy.subjectmapping.subject_mapping_pb2.ListSubjectMappingsResponse]: - ... - def get_subject_mapping(self, req: ClientRequest[policy.subjectmapping.subject_mapping_pb2.GetSubjectMappingRequest]) -> ServerResponse[policy.subjectmapping.subject_mapping_pb2.GetSubjectMappingResponse]: - ... - def create_subject_mapping(self, req: ClientRequest[policy.subjectmapping.subject_mapping_pb2.CreateSubjectMappingRequest]) -> ServerResponse[policy.subjectmapping.subject_mapping_pb2.CreateSubjectMappingResponse]: - ... - def update_subject_mapping(self, req: ClientRequest[policy.subjectmapping.subject_mapping_pb2.UpdateSubjectMappingRequest]) -> ServerResponse[policy.subjectmapping.subject_mapping_pb2.UpdateSubjectMappingResponse]: - ... - def delete_subject_mapping(self, req: ClientRequest[policy.subjectmapping.subject_mapping_pb2.DeleteSubjectMappingRequest]) -> ServerResponse[policy.subjectmapping.subject_mapping_pb2.DeleteSubjectMappingResponse]: - ... - def list_subject_condition_sets(self, req: ClientRequest[policy.subjectmapping.subject_mapping_pb2.ListSubjectConditionSetsRequest]) -> ServerResponse[policy.subjectmapping.subject_mapping_pb2.ListSubjectConditionSetsResponse]: - ... - def get_subject_condition_set(self, req: ClientRequest[policy.subjectmapping.subject_mapping_pb2.GetSubjectConditionSetRequest]) -> ServerResponse[policy.subjectmapping.subject_mapping_pb2.GetSubjectConditionSetResponse]: - ... - def create_subject_condition_set(self, req: ClientRequest[policy.subjectmapping.subject_mapping_pb2.CreateSubjectConditionSetRequest]) -> ServerResponse[policy.subjectmapping.subject_mapping_pb2.CreateSubjectConditionSetResponse]: - ... - def update_subject_condition_set(self, req: ClientRequest[policy.subjectmapping.subject_mapping_pb2.UpdateSubjectConditionSetRequest]) -> ServerResponse[policy.subjectmapping.subject_mapping_pb2.UpdateSubjectConditionSetResponse]: - ... - def delete_subject_condition_set(self, req: ClientRequest[policy.subjectmapping.subject_mapping_pb2.DeleteSubjectConditionSetRequest]) -> ServerResponse[policy.subjectmapping.subject_mapping_pb2.DeleteSubjectConditionSetResponse]: - ... - def delete_all_unmapped_subject_condition_sets(self, req: ClientRequest[policy.subjectmapping.subject_mapping_pb2.DeleteAllUnmappedSubjectConditionSetsRequest]) -> ServerResponse[policy.subjectmapping.subject_mapping_pb2.DeleteAllUnmappedSubjectConditionSetsResponse]: - ... - -SUBJECT_MAPPING_SERVICE_PATH_PREFIX = "/policy.subjectmapping.SubjectMappingService" - -def wsgi_subject_mapping_service(implementation: SubjectMappingServiceProtocol) -> WSGIApplication: - app = ConnectWSGI() - app.register_unary_rpc("/policy.subjectmapping.SubjectMappingService/MatchSubjectMappings", implementation.match_subject_mappings, policy.subjectmapping.subject_mapping_pb2.MatchSubjectMappingsRequest) - app.register_unary_rpc("/policy.subjectmapping.SubjectMappingService/ListSubjectMappings", implementation.list_subject_mappings, policy.subjectmapping.subject_mapping_pb2.ListSubjectMappingsRequest) - app.register_unary_rpc("/policy.subjectmapping.SubjectMappingService/GetSubjectMapping", implementation.get_subject_mapping, policy.subjectmapping.subject_mapping_pb2.GetSubjectMappingRequest) - app.register_unary_rpc("/policy.subjectmapping.SubjectMappingService/CreateSubjectMapping", implementation.create_subject_mapping, policy.subjectmapping.subject_mapping_pb2.CreateSubjectMappingRequest) - app.register_unary_rpc("/policy.subjectmapping.SubjectMappingService/UpdateSubjectMapping", implementation.update_subject_mapping, policy.subjectmapping.subject_mapping_pb2.UpdateSubjectMappingRequest) - app.register_unary_rpc("/policy.subjectmapping.SubjectMappingService/DeleteSubjectMapping", implementation.delete_subject_mapping, policy.subjectmapping.subject_mapping_pb2.DeleteSubjectMappingRequest) - app.register_unary_rpc("/policy.subjectmapping.SubjectMappingService/ListSubjectConditionSets", implementation.list_subject_condition_sets, policy.subjectmapping.subject_mapping_pb2.ListSubjectConditionSetsRequest) - app.register_unary_rpc("/policy.subjectmapping.SubjectMappingService/GetSubjectConditionSet", implementation.get_subject_condition_set, policy.subjectmapping.subject_mapping_pb2.GetSubjectConditionSetRequest) - app.register_unary_rpc("/policy.subjectmapping.SubjectMappingService/CreateSubjectConditionSet", implementation.create_subject_condition_set, policy.subjectmapping.subject_mapping_pb2.CreateSubjectConditionSetRequest) - app.register_unary_rpc("/policy.subjectmapping.SubjectMappingService/UpdateSubjectConditionSet", implementation.update_subject_condition_set, policy.subjectmapping.subject_mapping_pb2.UpdateSubjectConditionSetRequest) - app.register_unary_rpc("/policy.subjectmapping.SubjectMappingService/DeleteSubjectConditionSet", implementation.delete_subject_condition_set, policy.subjectmapping.subject_mapping_pb2.DeleteSubjectConditionSetRequest) - app.register_unary_rpc("/policy.subjectmapping.SubjectMappingService/DeleteAllUnmappedSubjectConditionSets", implementation.delete_all_unmapped_subject_condition_sets, policy.subjectmapping.subject_mapping_pb2.DeleteAllUnmappedSubjectConditionSetsRequest) - return app diff --git a/otdf-python-proto/src/otdf_python_proto/policy/unsafe/__init__.py b/otdf-python-proto/src/otdf_python_proto/policy/unsafe/__init__.py new file mode 100644 index 0000000..bb8cb4f --- /dev/null +++ b/otdf-python-proto/src/otdf_python_proto/policy/unsafe/__init__.py @@ -0,0 +1,11 @@ +"""policy.unsafe protobuf definitions.""" + +from .unsafe_connect import ( + UnsafeServiceClient, + UnsafeServiceClientSync, +) + +__all__ = [ + "UnsafeServiceClient", + "UnsafeServiceClientSync", +] diff --git a/otdf-python-proto/src/otdf_python_proto/policy/unsafe/unsafe_connect.py b/otdf-python-proto/src/otdf_python_proto/policy/unsafe/unsafe_connect.py new file mode 100644 index 0000000..f173f2d --- /dev/null +++ b/otdf-python-proto/src/otdf_python_proto/policy/unsafe/unsafe_connect.py @@ -0,0 +1,705 @@ +# -*- coding: utf-8 -*- +# Generated by https://github.com/connectrpc/connect-python. DO NOT EDIT! +# source: policy/unsafe/unsafe.proto + +from collections.abc import AsyncGenerator, AsyncIterator, Iterable, Iterator, Mapping +from typing import Protocol + +from connectrpc.client import ConnectClient, ConnectClientSync +from connectrpc.code import Code +from connectrpc.errors import ConnectError +from connectrpc.interceptor import Interceptor, InterceptorSync +from connectrpc.method import IdempotencyLevel, MethodInfo +from connectrpc.request import Headers, RequestContext +from connectrpc.server import ConnectASGIApplication, ConnectWSGIApplication, Endpoint, EndpointSync +import policy.unsafe.unsafe_pb2 as policy_dot_unsafe_dot_unsafe__pb2 + + +class UnsafeService(Protocol): + async def unsafe_update_namespace(self, request: policy_dot_unsafe_dot_unsafe__pb2.UnsafeUpdateNamespaceRequest, ctx: RequestContext) -> policy_dot_unsafe_dot_unsafe__pb2.UnsafeUpdateNamespaceResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def unsafe_reactivate_namespace(self, request: policy_dot_unsafe_dot_unsafe__pb2.UnsafeReactivateNamespaceRequest, ctx: RequestContext) -> policy_dot_unsafe_dot_unsafe__pb2.UnsafeReactivateNamespaceResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def unsafe_delete_namespace(self, request: policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteNamespaceRequest, ctx: RequestContext) -> policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteNamespaceResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def unsafe_update_attribute(self, request: policy_dot_unsafe_dot_unsafe__pb2.UnsafeUpdateAttributeRequest, ctx: RequestContext) -> policy_dot_unsafe_dot_unsafe__pb2.UnsafeUpdateAttributeResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def unsafe_reactivate_attribute(self, request: policy_dot_unsafe_dot_unsafe__pb2.UnsafeReactivateAttributeRequest, ctx: RequestContext) -> policy_dot_unsafe_dot_unsafe__pb2.UnsafeReactivateAttributeResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def unsafe_delete_attribute(self, request: policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteAttributeRequest, ctx: RequestContext) -> policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteAttributeResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def unsafe_update_attribute_value(self, request: policy_dot_unsafe_dot_unsafe__pb2.UnsafeUpdateAttributeValueRequest, ctx: RequestContext) -> policy_dot_unsafe_dot_unsafe__pb2.UnsafeUpdateAttributeValueResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def unsafe_reactivate_attribute_value(self, request: policy_dot_unsafe_dot_unsafe__pb2.UnsafeReactivateAttributeValueRequest, ctx: RequestContext) -> policy_dot_unsafe_dot_unsafe__pb2.UnsafeReactivateAttributeValueResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def unsafe_delete_attribute_value(self, request: policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteAttributeValueRequest, ctx: RequestContext) -> policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteAttributeValueResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + async def unsafe_delete_kas_key(self, request: policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteKasKeyRequest, ctx: RequestContext) -> policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteKasKeyResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + +class UnsafeServiceASGIApplication(ConnectASGIApplication[UnsafeService]): + def __init__(self, service: UnsafeService | AsyncGenerator[UnsafeService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None) -> None: + super().__init__( + service=service, + endpoints=lambda svc: { + "/policy.unsafe.UnsafeService/UnsafeUpdateNamespace": Endpoint.unary( + method=MethodInfo( + name="UnsafeUpdateNamespace", + service_name="policy.unsafe.UnsafeService", + input=policy_dot_unsafe_dot_unsafe__pb2.UnsafeUpdateNamespaceRequest, + output=policy_dot_unsafe_dot_unsafe__pb2.UnsafeUpdateNamespaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.unsafe_update_namespace, + ), + "/policy.unsafe.UnsafeService/UnsafeReactivateNamespace": Endpoint.unary( + method=MethodInfo( + name="UnsafeReactivateNamespace", + service_name="policy.unsafe.UnsafeService", + input=policy_dot_unsafe_dot_unsafe__pb2.UnsafeReactivateNamespaceRequest, + output=policy_dot_unsafe_dot_unsafe__pb2.UnsafeReactivateNamespaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.unsafe_reactivate_namespace, + ), + "/policy.unsafe.UnsafeService/UnsafeDeleteNamespace": Endpoint.unary( + method=MethodInfo( + name="UnsafeDeleteNamespace", + service_name="policy.unsafe.UnsafeService", + input=policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteNamespaceRequest, + output=policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteNamespaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.unsafe_delete_namespace, + ), + "/policy.unsafe.UnsafeService/UnsafeUpdateAttribute": Endpoint.unary( + method=MethodInfo( + name="UnsafeUpdateAttribute", + service_name="policy.unsafe.UnsafeService", + input=policy_dot_unsafe_dot_unsafe__pb2.UnsafeUpdateAttributeRequest, + output=policy_dot_unsafe_dot_unsafe__pb2.UnsafeUpdateAttributeResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.unsafe_update_attribute, + ), + "/policy.unsafe.UnsafeService/UnsafeReactivateAttribute": Endpoint.unary( + method=MethodInfo( + name="UnsafeReactivateAttribute", + service_name="policy.unsafe.UnsafeService", + input=policy_dot_unsafe_dot_unsafe__pb2.UnsafeReactivateAttributeRequest, + output=policy_dot_unsafe_dot_unsafe__pb2.UnsafeReactivateAttributeResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.unsafe_reactivate_attribute, + ), + "/policy.unsafe.UnsafeService/UnsafeDeleteAttribute": Endpoint.unary( + method=MethodInfo( + name="UnsafeDeleteAttribute", + service_name="policy.unsafe.UnsafeService", + input=policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteAttributeRequest, + output=policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteAttributeResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.unsafe_delete_attribute, + ), + "/policy.unsafe.UnsafeService/UnsafeUpdateAttributeValue": Endpoint.unary( + method=MethodInfo( + name="UnsafeUpdateAttributeValue", + service_name="policy.unsafe.UnsafeService", + input=policy_dot_unsafe_dot_unsafe__pb2.UnsafeUpdateAttributeValueRequest, + output=policy_dot_unsafe_dot_unsafe__pb2.UnsafeUpdateAttributeValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.unsafe_update_attribute_value, + ), + "/policy.unsafe.UnsafeService/UnsafeReactivateAttributeValue": Endpoint.unary( + method=MethodInfo( + name="UnsafeReactivateAttributeValue", + service_name="policy.unsafe.UnsafeService", + input=policy_dot_unsafe_dot_unsafe__pb2.UnsafeReactivateAttributeValueRequest, + output=policy_dot_unsafe_dot_unsafe__pb2.UnsafeReactivateAttributeValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.unsafe_reactivate_attribute_value, + ), + "/policy.unsafe.UnsafeService/UnsafeDeleteAttributeValue": Endpoint.unary( + method=MethodInfo( + name="UnsafeDeleteAttributeValue", + service_name="policy.unsafe.UnsafeService", + input=policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteAttributeValueRequest, + output=policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteAttributeValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.unsafe_delete_attribute_value, + ), + "/policy.unsafe.UnsafeService/UnsafeDeleteKasKey": Endpoint.unary( + method=MethodInfo( + name="UnsafeDeleteKasKey", + service_name="policy.unsafe.UnsafeService", + input=policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteKasKeyRequest, + output=policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteKasKeyResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=svc.unsafe_delete_kas_key, + ), + }, + interceptors=interceptors, + read_max_bytes=read_max_bytes, + ) + + @property + def path(self) -> str: + """Returns the URL path to mount the application to when serving multiple applications.""" + return "/policy.unsafe.UnsafeService" + + +class UnsafeServiceClient(ConnectClient): + async def unsafe_update_namespace( + self, + request: policy_dot_unsafe_dot_unsafe__pb2.UnsafeUpdateNamespaceRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_unsafe_dot_unsafe__pb2.UnsafeUpdateNamespaceResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="UnsafeUpdateNamespace", + service_name="policy.unsafe.UnsafeService", + input=policy_dot_unsafe_dot_unsafe__pb2.UnsafeUpdateNamespaceRequest, + output=policy_dot_unsafe_dot_unsafe__pb2.UnsafeUpdateNamespaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def unsafe_reactivate_namespace( + self, + request: policy_dot_unsafe_dot_unsafe__pb2.UnsafeReactivateNamespaceRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_unsafe_dot_unsafe__pb2.UnsafeReactivateNamespaceResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="UnsafeReactivateNamespace", + service_name="policy.unsafe.UnsafeService", + input=policy_dot_unsafe_dot_unsafe__pb2.UnsafeReactivateNamespaceRequest, + output=policy_dot_unsafe_dot_unsafe__pb2.UnsafeReactivateNamespaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def unsafe_delete_namespace( + self, + request: policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteNamespaceRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteNamespaceResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="UnsafeDeleteNamespace", + service_name="policy.unsafe.UnsafeService", + input=policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteNamespaceRequest, + output=policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteNamespaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def unsafe_update_attribute( + self, + request: policy_dot_unsafe_dot_unsafe__pb2.UnsafeUpdateAttributeRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_unsafe_dot_unsafe__pb2.UnsafeUpdateAttributeResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="UnsafeUpdateAttribute", + service_name="policy.unsafe.UnsafeService", + input=policy_dot_unsafe_dot_unsafe__pb2.UnsafeUpdateAttributeRequest, + output=policy_dot_unsafe_dot_unsafe__pb2.UnsafeUpdateAttributeResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def unsafe_reactivate_attribute( + self, + request: policy_dot_unsafe_dot_unsafe__pb2.UnsafeReactivateAttributeRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_unsafe_dot_unsafe__pb2.UnsafeReactivateAttributeResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="UnsafeReactivateAttribute", + service_name="policy.unsafe.UnsafeService", + input=policy_dot_unsafe_dot_unsafe__pb2.UnsafeReactivateAttributeRequest, + output=policy_dot_unsafe_dot_unsafe__pb2.UnsafeReactivateAttributeResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def unsafe_delete_attribute( + self, + request: policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteAttributeRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteAttributeResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="UnsafeDeleteAttribute", + service_name="policy.unsafe.UnsafeService", + input=policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteAttributeRequest, + output=policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteAttributeResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def unsafe_update_attribute_value( + self, + request: policy_dot_unsafe_dot_unsafe__pb2.UnsafeUpdateAttributeValueRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_unsafe_dot_unsafe__pb2.UnsafeUpdateAttributeValueResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="UnsafeUpdateAttributeValue", + service_name="policy.unsafe.UnsafeService", + input=policy_dot_unsafe_dot_unsafe__pb2.UnsafeUpdateAttributeValueRequest, + output=policy_dot_unsafe_dot_unsafe__pb2.UnsafeUpdateAttributeValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def unsafe_reactivate_attribute_value( + self, + request: policy_dot_unsafe_dot_unsafe__pb2.UnsafeReactivateAttributeValueRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_unsafe_dot_unsafe__pb2.UnsafeReactivateAttributeValueResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="UnsafeReactivateAttributeValue", + service_name="policy.unsafe.UnsafeService", + input=policy_dot_unsafe_dot_unsafe__pb2.UnsafeReactivateAttributeValueRequest, + output=policy_dot_unsafe_dot_unsafe__pb2.UnsafeReactivateAttributeValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def unsafe_delete_attribute_value( + self, + request: policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteAttributeValueRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteAttributeValueResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="UnsafeDeleteAttributeValue", + service_name="policy.unsafe.UnsafeService", + input=policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteAttributeValueRequest, + output=policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteAttributeValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + async def unsafe_delete_kas_key( + self, + request: policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteKasKeyRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteKasKeyResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="UnsafeDeleteKasKey", + service_name="policy.unsafe.UnsafeService", + input=policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteKasKeyRequest, + output=policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteKasKeyResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + +class UnsafeServiceSync(Protocol): + def unsafe_update_namespace(self, request: policy_dot_unsafe_dot_unsafe__pb2.UnsafeUpdateNamespaceRequest, ctx: RequestContext) -> policy_dot_unsafe_dot_unsafe__pb2.UnsafeUpdateNamespaceResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def unsafe_reactivate_namespace(self, request: policy_dot_unsafe_dot_unsafe__pb2.UnsafeReactivateNamespaceRequest, ctx: RequestContext) -> policy_dot_unsafe_dot_unsafe__pb2.UnsafeReactivateNamespaceResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def unsafe_delete_namespace(self, request: policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteNamespaceRequest, ctx: RequestContext) -> policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteNamespaceResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def unsafe_update_attribute(self, request: policy_dot_unsafe_dot_unsafe__pb2.UnsafeUpdateAttributeRequest, ctx: RequestContext) -> policy_dot_unsafe_dot_unsafe__pb2.UnsafeUpdateAttributeResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def unsafe_reactivate_attribute(self, request: policy_dot_unsafe_dot_unsafe__pb2.UnsafeReactivateAttributeRequest, ctx: RequestContext) -> policy_dot_unsafe_dot_unsafe__pb2.UnsafeReactivateAttributeResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def unsafe_delete_attribute(self, request: policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteAttributeRequest, ctx: RequestContext) -> policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteAttributeResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def unsafe_update_attribute_value(self, request: policy_dot_unsafe_dot_unsafe__pb2.UnsafeUpdateAttributeValueRequest, ctx: RequestContext) -> policy_dot_unsafe_dot_unsafe__pb2.UnsafeUpdateAttributeValueResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def unsafe_reactivate_attribute_value(self, request: policy_dot_unsafe_dot_unsafe__pb2.UnsafeReactivateAttributeValueRequest, ctx: RequestContext) -> policy_dot_unsafe_dot_unsafe__pb2.UnsafeReactivateAttributeValueResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def unsafe_delete_attribute_value(self, request: policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteAttributeValueRequest, ctx: RequestContext) -> policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteAttributeValueResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + def unsafe_delete_kas_key(self, request: policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteKasKeyRequest, ctx: RequestContext) -> policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteKasKeyResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + +class UnsafeServiceWSGIApplication(ConnectWSGIApplication): + def __init__(self, service: UnsafeServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None) -> None: + super().__init__( + endpoints={ + "/policy.unsafe.UnsafeService/UnsafeUpdateNamespace": EndpointSync.unary( + method=MethodInfo( + name="UnsafeUpdateNamespace", + service_name="policy.unsafe.UnsafeService", + input=policy_dot_unsafe_dot_unsafe__pb2.UnsafeUpdateNamespaceRequest, + output=policy_dot_unsafe_dot_unsafe__pb2.UnsafeUpdateNamespaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.unsafe_update_namespace, + ), + "/policy.unsafe.UnsafeService/UnsafeReactivateNamespace": EndpointSync.unary( + method=MethodInfo( + name="UnsafeReactivateNamespace", + service_name="policy.unsafe.UnsafeService", + input=policy_dot_unsafe_dot_unsafe__pb2.UnsafeReactivateNamespaceRequest, + output=policy_dot_unsafe_dot_unsafe__pb2.UnsafeReactivateNamespaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.unsafe_reactivate_namespace, + ), + "/policy.unsafe.UnsafeService/UnsafeDeleteNamespace": EndpointSync.unary( + method=MethodInfo( + name="UnsafeDeleteNamespace", + service_name="policy.unsafe.UnsafeService", + input=policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteNamespaceRequest, + output=policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteNamespaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.unsafe_delete_namespace, + ), + "/policy.unsafe.UnsafeService/UnsafeUpdateAttribute": EndpointSync.unary( + method=MethodInfo( + name="UnsafeUpdateAttribute", + service_name="policy.unsafe.UnsafeService", + input=policy_dot_unsafe_dot_unsafe__pb2.UnsafeUpdateAttributeRequest, + output=policy_dot_unsafe_dot_unsafe__pb2.UnsafeUpdateAttributeResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.unsafe_update_attribute, + ), + "/policy.unsafe.UnsafeService/UnsafeReactivateAttribute": EndpointSync.unary( + method=MethodInfo( + name="UnsafeReactivateAttribute", + service_name="policy.unsafe.UnsafeService", + input=policy_dot_unsafe_dot_unsafe__pb2.UnsafeReactivateAttributeRequest, + output=policy_dot_unsafe_dot_unsafe__pb2.UnsafeReactivateAttributeResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.unsafe_reactivate_attribute, + ), + "/policy.unsafe.UnsafeService/UnsafeDeleteAttribute": EndpointSync.unary( + method=MethodInfo( + name="UnsafeDeleteAttribute", + service_name="policy.unsafe.UnsafeService", + input=policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteAttributeRequest, + output=policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteAttributeResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.unsafe_delete_attribute, + ), + "/policy.unsafe.UnsafeService/UnsafeUpdateAttributeValue": EndpointSync.unary( + method=MethodInfo( + name="UnsafeUpdateAttributeValue", + service_name="policy.unsafe.UnsafeService", + input=policy_dot_unsafe_dot_unsafe__pb2.UnsafeUpdateAttributeValueRequest, + output=policy_dot_unsafe_dot_unsafe__pb2.UnsafeUpdateAttributeValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.unsafe_update_attribute_value, + ), + "/policy.unsafe.UnsafeService/UnsafeReactivateAttributeValue": EndpointSync.unary( + method=MethodInfo( + name="UnsafeReactivateAttributeValue", + service_name="policy.unsafe.UnsafeService", + input=policy_dot_unsafe_dot_unsafe__pb2.UnsafeReactivateAttributeValueRequest, + output=policy_dot_unsafe_dot_unsafe__pb2.UnsafeReactivateAttributeValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.unsafe_reactivate_attribute_value, + ), + "/policy.unsafe.UnsafeService/UnsafeDeleteAttributeValue": EndpointSync.unary( + method=MethodInfo( + name="UnsafeDeleteAttributeValue", + service_name="policy.unsafe.UnsafeService", + input=policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteAttributeValueRequest, + output=policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteAttributeValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.unsafe_delete_attribute_value, + ), + "/policy.unsafe.UnsafeService/UnsafeDeleteKasKey": EndpointSync.unary( + method=MethodInfo( + name="UnsafeDeleteKasKey", + service_name="policy.unsafe.UnsafeService", + input=policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteKasKeyRequest, + output=policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteKasKeyResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + function=service.unsafe_delete_kas_key, + ), + }, + interceptors=interceptors, + read_max_bytes=read_max_bytes, + ) + + @property + def path(self) -> str: + """Returns the URL path to mount the application to when serving multiple applications.""" + return "/policy.unsafe.UnsafeService" + + +class UnsafeServiceClientSync(ConnectClientSync): + def unsafe_update_namespace( + self, + request: policy_dot_unsafe_dot_unsafe__pb2.UnsafeUpdateNamespaceRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_unsafe_dot_unsafe__pb2.UnsafeUpdateNamespaceResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="UnsafeUpdateNamespace", + service_name="policy.unsafe.UnsafeService", + input=policy_dot_unsafe_dot_unsafe__pb2.UnsafeUpdateNamespaceRequest, + output=policy_dot_unsafe_dot_unsafe__pb2.UnsafeUpdateNamespaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def unsafe_reactivate_namespace( + self, + request: policy_dot_unsafe_dot_unsafe__pb2.UnsafeReactivateNamespaceRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_unsafe_dot_unsafe__pb2.UnsafeReactivateNamespaceResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="UnsafeReactivateNamespace", + service_name="policy.unsafe.UnsafeService", + input=policy_dot_unsafe_dot_unsafe__pb2.UnsafeReactivateNamespaceRequest, + output=policy_dot_unsafe_dot_unsafe__pb2.UnsafeReactivateNamespaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def unsafe_delete_namespace( + self, + request: policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteNamespaceRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteNamespaceResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="UnsafeDeleteNamespace", + service_name="policy.unsafe.UnsafeService", + input=policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteNamespaceRequest, + output=policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteNamespaceResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def unsafe_update_attribute( + self, + request: policy_dot_unsafe_dot_unsafe__pb2.UnsafeUpdateAttributeRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_unsafe_dot_unsafe__pb2.UnsafeUpdateAttributeResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="UnsafeUpdateAttribute", + service_name="policy.unsafe.UnsafeService", + input=policy_dot_unsafe_dot_unsafe__pb2.UnsafeUpdateAttributeRequest, + output=policy_dot_unsafe_dot_unsafe__pb2.UnsafeUpdateAttributeResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def unsafe_reactivate_attribute( + self, + request: policy_dot_unsafe_dot_unsafe__pb2.UnsafeReactivateAttributeRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_unsafe_dot_unsafe__pb2.UnsafeReactivateAttributeResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="UnsafeReactivateAttribute", + service_name="policy.unsafe.UnsafeService", + input=policy_dot_unsafe_dot_unsafe__pb2.UnsafeReactivateAttributeRequest, + output=policy_dot_unsafe_dot_unsafe__pb2.UnsafeReactivateAttributeResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def unsafe_delete_attribute( + self, + request: policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteAttributeRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteAttributeResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="UnsafeDeleteAttribute", + service_name="policy.unsafe.UnsafeService", + input=policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteAttributeRequest, + output=policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteAttributeResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def unsafe_update_attribute_value( + self, + request: policy_dot_unsafe_dot_unsafe__pb2.UnsafeUpdateAttributeValueRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_unsafe_dot_unsafe__pb2.UnsafeUpdateAttributeValueResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="UnsafeUpdateAttributeValue", + service_name="policy.unsafe.UnsafeService", + input=policy_dot_unsafe_dot_unsafe__pb2.UnsafeUpdateAttributeValueRequest, + output=policy_dot_unsafe_dot_unsafe__pb2.UnsafeUpdateAttributeValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def unsafe_reactivate_attribute_value( + self, + request: policy_dot_unsafe_dot_unsafe__pb2.UnsafeReactivateAttributeValueRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_unsafe_dot_unsafe__pb2.UnsafeReactivateAttributeValueResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="UnsafeReactivateAttributeValue", + service_name="policy.unsafe.UnsafeService", + input=policy_dot_unsafe_dot_unsafe__pb2.UnsafeReactivateAttributeValueRequest, + output=policy_dot_unsafe_dot_unsafe__pb2.UnsafeReactivateAttributeValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def unsafe_delete_attribute_value( + self, + request: policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteAttributeValueRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteAttributeValueResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="UnsafeDeleteAttributeValue", + service_name="policy.unsafe.UnsafeService", + input=policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteAttributeValueRequest, + output=policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteAttributeValueResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) + + def unsafe_delete_kas_key( + self, + request: policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteKasKeyRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + ) -> policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteKasKeyResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="UnsafeDeleteKasKey", + service_name="policy.unsafe.UnsafeService", + input=policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteKasKeyRequest, + output=policy_dot_unsafe_dot_unsafe__pb2.UnsafeDeleteKasKeyResponse, + idempotency_level=IdempotencyLevel.UNKNOWN, + ), + headers=headers, + timeout_ms=timeout_ms, + ) diff --git a/otdf-python-proto/src/otdf_python_proto/policy/unsafe/unsafe_pb2_connect.py b/otdf-python-proto/src/otdf_python_proto/policy/unsafe/unsafe_pb2_connect.py deleted file mode 100644 index 8fb44e6..0000000 --- a/otdf-python-proto/src/otdf_python_proto/policy/unsafe/unsafe_pb2_connect.py +++ /dev/null @@ -1,485 +0,0 @@ -# Generated Connect client code - -from __future__ import annotations -from collections.abc import AsyncIterator -from collections.abc import Iterator -from collections.abc import Iterable -import aiohttp -import urllib3 -import typing -import sys - -from connectrpc.client_async import AsyncConnectClient -from connectrpc.client_sync import ConnectClient -from connectrpc.client_protocol import ConnectProtocol -from connectrpc.client_connect import ConnectProtocolError -from connectrpc.headers import HeaderInput -from connectrpc.server import ClientRequest -from connectrpc.server import ClientStream -from connectrpc.server import ServerResponse -from connectrpc.server import ServerStream -from connectrpc.server_sync import ConnectWSGI -from connectrpc.streams import StreamInput -from connectrpc.streams import AsyncStreamOutput -from connectrpc.streams import StreamOutput -from connectrpc.unary import UnaryOutput -from connectrpc.unary import ClientStreamingOutput - -if typing.TYPE_CHECKING: - # wsgiref.types was added in Python 3.11. - if sys.version_info >= (3, 11): - from wsgiref.types import WSGIApplication - else: - from _typeshed.wsgi import WSGIApplication - -import policy.unsafe.unsafe_pb2 - -class UnsafeServiceClient: - def __init__( - self, - base_url: str, - http_client: urllib3.PoolManager | None = None, - protocol: ConnectProtocol = ConnectProtocol.CONNECT_PROTOBUF, - ): - self.base_url = base_url - self._connect_client = ConnectClient(http_client, protocol) - def call_unsafe_update_namespace( - self, req: policy.unsafe.unsafe_pb2.UnsafeUpdateNamespaceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.unsafe.unsafe_pb2.UnsafeUpdateNamespaceResponse]: - """Low-level method to call UnsafeUpdateNamespace, granting access to errors and metadata""" - url = self.base_url + "/policy.unsafe.UnsafeService/UnsafeUpdateNamespace" - return self._connect_client.call_unary(url, req, policy.unsafe.unsafe_pb2.UnsafeUpdateNamespaceResponse,extra_headers, timeout_seconds) - - - def unsafe_update_namespace( - self, req: policy.unsafe.unsafe_pb2.UnsafeUpdateNamespaceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.unsafe.unsafe_pb2.UnsafeUpdateNamespaceResponse: - response = self.call_unsafe_update_namespace(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_unsafe_reactivate_namespace( - self, req: policy.unsafe.unsafe_pb2.UnsafeReactivateNamespaceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.unsafe.unsafe_pb2.UnsafeReactivateNamespaceResponse]: - """Low-level method to call UnsafeReactivateNamespace, granting access to errors and metadata""" - url = self.base_url + "/policy.unsafe.UnsafeService/UnsafeReactivateNamespace" - return self._connect_client.call_unary(url, req, policy.unsafe.unsafe_pb2.UnsafeReactivateNamespaceResponse,extra_headers, timeout_seconds) - - - def unsafe_reactivate_namespace( - self, req: policy.unsafe.unsafe_pb2.UnsafeReactivateNamespaceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.unsafe.unsafe_pb2.UnsafeReactivateNamespaceResponse: - response = self.call_unsafe_reactivate_namespace(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_unsafe_delete_namespace( - self, req: policy.unsafe.unsafe_pb2.UnsafeDeleteNamespaceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.unsafe.unsafe_pb2.UnsafeDeleteNamespaceResponse]: - """Low-level method to call UnsafeDeleteNamespace, granting access to errors and metadata""" - url = self.base_url + "/policy.unsafe.UnsafeService/UnsafeDeleteNamespace" - return self._connect_client.call_unary(url, req, policy.unsafe.unsafe_pb2.UnsafeDeleteNamespaceResponse,extra_headers, timeout_seconds) - - - def unsafe_delete_namespace( - self, req: policy.unsafe.unsafe_pb2.UnsafeDeleteNamespaceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.unsafe.unsafe_pb2.UnsafeDeleteNamespaceResponse: - response = self.call_unsafe_delete_namespace(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_unsafe_update_attribute( - self, req: policy.unsafe.unsafe_pb2.UnsafeUpdateAttributeRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.unsafe.unsafe_pb2.UnsafeUpdateAttributeResponse]: - """Low-level method to call UnsafeUpdateAttribute, granting access to errors and metadata""" - url = self.base_url + "/policy.unsafe.UnsafeService/UnsafeUpdateAttribute" - return self._connect_client.call_unary(url, req, policy.unsafe.unsafe_pb2.UnsafeUpdateAttributeResponse,extra_headers, timeout_seconds) - - - def unsafe_update_attribute( - self, req: policy.unsafe.unsafe_pb2.UnsafeUpdateAttributeRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.unsafe.unsafe_pb2.UnsafeUpdateAttributeResponse: - response = self.call_unsafe_update_attribute(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_unsafe_reactivate_attribute( - self, req: policy.unsafe.unsafe_pb2.UnsafeReactivateAttributeRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.unsafe.unsafe_pb2.UnsafeReactivateAttributeResponse]: - """Low-level method to call UnsafeReactivateAttribute, granting access to errors and metadata""" - url = self.base_url + "/policy.unsafe.UnsafeService/UnsafeReactivateAttribute" - return self._connect_client.call_unary(url, req, policy.unsafe.unsafe_pb2.UnsafeReactivateAttributeResponse,extra_headers, timeout_seconds) - - - def unsafe_reactivate_attribute( - self, req: policy.unsafe.unsafe_pb2.UnsafeReactivateAttributeRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.unsafe.unsafe_pb2.UnsafeReactivateAttributeResponse: - response = self.call_unsafe_reactivate_attribute(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_unsafe_delete_attribute( - self, req: policy.unsafe.unsafe_pb2.UnsafeDeleteAttributeRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.unsafe.unsafe_pb2.UnsafeDeleteAttributeResponse]: - """Low-level method to call UnsafeDeleteAttribute, granting access to errors and metadata""" - url = self.base_url + "/policy.unsafe.UnsafeService/UnsafeDeleteAttribute" - return self._connect_client.call_unary(url, req, policy.unsafe.unsafe_pb2.UnsafeDeleteAttributeResponse,extra_headers, timeout_seconds) - - - def unsafe_delete_attribute( - self, req: policy.unsafe.unsafe_pb2.UnsafeDeleteAttributeRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.unsafe.unsafe_pb2.UnsafeDeleteAttributeResponse: - response = self.call_unsafe_delete_attribute(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_unsafe_update_attribute_value( - self, req: policy.unsafe.unsafe_pb2.UnsafeUpdateAttributeValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.unsafe.unsafe_pb2.UnsafeUpdateAttributeValueResponse]: - """Low-level method to call UnsafeUpdateAttributeValue, granting access to errors and metadata""" - url = self.base_url + "/policy.unsafe.UnsafeService/UnsafeUpdateAttributeValue" - return self._connect_client.call_unary(url, req, policy.unsafe.unsafe_pb2.UnsafeUpdateAttributeValueResponse,extra_headers, timeout_seconds) - - - def unsafe_update_attribute_value( - self, req: policy.unsafe.unsafe_pb2.UnsafeUpdateAttributeValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.unsafe.unsafe_pb2.UnsafeUpdateAttributeValueResponse: - response = self.call_unsafe_update_attribute_value(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_unsafe_reactivate_attribute_value( - self, req: policy.unsafe.unsafe_pb2.UnsafeReactivateAttributeValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.unsafe.unsafe_pb2.UnsafeReactivateAttributeValueResponse]: - """Low-level method to call UnsafeReactivateAttributeValue, granting access to errors and metadata""" - url = self.base_url + "/policy.unsafe.UnsafeService/UnsafeReactivateAttributeValue" - return self._connect_client.call_unary(url, req, policy.unsafe.unsafe_pb2.UnsafeReactivateAttributeValueResponse,extra_headers, timeout_seconds) - - - def unsafe_reactivate_attribute_value( - self, req: policy.unsafe.unsafe_pb2.UnsafeReactivateAttributeValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.unsafe.unsafe_pb2.UnsafeReactivateAttributeValueResponse: - response = self.call_unsafe_reactivate_attribute_value(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_unsafe_delete_attribute_value( - self, req: policy.unsafe.unsafe_pb2.UnsafeDeleteAttributeValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.unsafe.unsafe_pb2.UnsafeDeleteAttributeValueResponse]: - """Low-level method to call UnsafeDeleteAttributeValue, granting access to errors and metadata""" - url = self.base_url + "/policy.unsafe.UnsafeService/UnsafeDeleteAttributeValue" - return self._connect_client.call_unary(url, req, policy.unsafe.unsafe_pb2.UnsafeDeleteAttributeValueResponse,extra_headers, timeout_seconds) - - - def unsafe_delete_attribute_value( - self, req: policy.unsafe.unsafe_pb2.UnsafeDeleteAttributeValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.unsafe.unsafe_pb2.UnsafeDeleteAttributeValueResponse: - response = self.call_unsafe_delete_attribute_value(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - def call_unsafe_delete_kas_key( - self, req: policy.unsafe.unsafe_pb2.UnsafeDeleteKasKeyRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.unsafe.unsafe_pb2.UnsafeDeleteKasKeyResponse]: - """Low-level method to call UnsafeDeleteKasKey, granting access to errors and metadata""" - url = self.base_url + "/policy.unsafe.UnsafeService/UnsafeDeleteKasKey" - return self._connect_client.call_unary(url, req, policy.unsafe.unsafe_pb2.UnsafeDeleteKasKeyResponse,extra_headers, timeout_seconds) - - - def unsafe_delete_kas_key( - self, req: policy.unsafe.unsafe_pb2.UnsafeDeleteKasKeyRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.unsafe.unsafe_pb2.UnsafeDeleteKasKeyResponse: - response = self.call_unsafe_delete_kas_key(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - -class AsyncUnsafeServiceClient: - def __init__( - self, - base_url: str, - http_client: aiohttp.ClientSession, - protocol: ConnectProtocol = ConnectProtocol.CONNECT_PROTOBUF, - ): - self.base_url = base_url - self._connect_client = AsyncConnectClient(http_client, protocol) - - async def call_unsafe_update_namespace( - self, req: policy.unsafe.unsafe_pb2.UnsafeUpdateNamespaceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.unsafe.unsafe_pb2.UnsafeUpdateNamespaceResponse]: - """Low-level method to call UnsafeUpdateNamespace, granting access to errors and metadata""" - url = self.base_url + "/policy.unsafe.UnsafeService/UnsafeUpdateNamespace" - return await self._connect_client.call_unary(url, req, policy.unsafe.unsafe_pb2.UnsafeUpdateNamespaceResponse,extra_headers, timeout_seconds) - - async def unsafe_update_namespace( - self, req: policy.unsafe.unsafe_pb2.UnsafeUpdateNamespaceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.unsafe.unsafe_pb2.UnsafeUpdateNamespaceResponse: - response = await self.call_unsafe_update_namespace(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_unsafe_reactivate_namespace( - self, req: policy.unsafe.unsafe_pb2.UnsafeReactivateNamespaceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.unsafe.unsafe_pb2.UnsafeReactivateNamespaceResponse]: - """Low-level method to call UnsafeReactivateNamespace, granting access to errors and metadata""" - url = self.base_url + "/policy.unsafe.UnsafeService/UnsafeReactivateNamespace" - return await self._connect_client.call_unary(url, req, policy.unsafe.unsafe_pb2.UnsafeReactivateNamespaceResponse,extra_headers, timeout_seconds) - - async def unsafe_reactivate_namespace( - self, req: policy.unsafe.unsafe_pb2.UnsafeReactivateNamespaceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.unsafe.unsafe_pb2.UnsafeReactivateNamespaceResponse: - response = await self.call_unsafe_reactivate_namespace(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_unsafe_delete_namespace( - self, req: policy.unsafe.unsafe_pb2.UnsafeDeleteNamespaceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.unsafe.unsafe_pb2.UnsafeDeleteNamespaceResponse]: - """Low-level method to call UnsafeDeleteNamespace, granting access to errors and metadata""" - url = self.base_url + "/policy.unsafe.UnsafeService/UnsafeDeleteNamespace" - return await self._connect_client.call_unary(url, req, policy.unsafe.unsafe_pb2.UnsafeDeleteNamespaceResponse,extra_headers, timeout_seconds) - - async def unsafe_delete_namespace( - self, req: policy.unsafe.unsafe_pb2.UnsafeDeleteNamespaceRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.unsafe.unsafe_pb2.UnsafeDeleteNamespaceResponse: - response = await self.call_unsafe_delete_namespace(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_unsafe_update_attribute( - self, req: policy.unsafe.unsafe_pb2.UnsafeUpdateAttributeRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.unsafe.unsafe_pb2.UnsafeUpdateAttributeResponse]: - """Low-level method to call UnsafeUpdateAttribute, granting access to errors and metadata""" - url = self.base_url + "/policy.unsafe.UnsafeService/UnsafeUpdateAttribute" - return await self._connect_client.call_unary(url, req, policy.unsafe.unsafe_pb2.UnsafeUpdateAttributeResponse,extra_headers, timeout_seconds) - - async def unsafe_update_attribute( - self, req: policy.unsafe.unsafe_pb2.UnsafeUpdateAttributeRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.unsafe.unsafe_pb2.UnsafeUpdateAttributeResponse: - response = await self.call_unsafe_update_attribute(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_unsafe_reactivate_attribute( - self, req: policy.unsafe.unsafe_pb2.UnsafeReactivateAttributeRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.unsafe.unsafe_pb2.UnsafeReactivateAttributeResponse]: - """Low-level method to call UnsafeReactivateAttribute, granting access to errors and metadata""" - url = self.base_url + "/policy.unsafe.UnsafeService/UnsafeReactivateAttribute" - return await self._connect_client.call_unary(url, req, policy.unsafe.unsafe_pb2.UnsafeReactivateAttributeResponse,extra_headers, timeout_seconds) - - async def unsafe_reactivate_attribute( - self, req: policy.unsafe.unsafe_pb2.UnsafeReactivateAttributeRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.unsafe.unsafe_pb2.UnsafeReactivateAttributeResponse: - response = await self.call_unsafe_reactivate_attribute(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_unsafe_delete_attribute( - self, req: policy.unsafe.unsafe_pb2.UnsafeDeleteAttributeRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.unsafe.unsafe_pb2.UnsafeDeleteAttributeResponse]: - """Low-level method to call UnsafeDeleteAttribute, granting access to errors and metadata""" - url = self.base_url + "/policy.unsafe.UnsafeService/UnsafeDeleteAttribute" - return await self._connect_client.call_unary(url, req, policy.unsafe.unsafe_pb2.UnsafeDeleteAttributeResponse,extra_headers, timeout_seconds) - - async def unsafe_delete_attribute( - self, req: policy.unsafe.unsafe_pb2.UnsafeDeleteAttributeRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.unsafe.unsafe_pb2.UnsafeDeleteAttributeResponse: - response = await self.call_unsafe_delete_attribute(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_unsafe_update_attribute_value( - self, req: policy.unsafe.unsafe_pb2.UnsafeUpdateAttributeValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.unsafe.unsafe_pb2.UnsafeUpdateAttributeValueResponse]: - """Low-level method to call UnsafeUpdateAttributeValue, granting access to errors and metadata""" - url = self.base_url + "/policy.unsafe.UnsafeService/UnsafeUpdateAttributeValue" - return await self._connect_client.call_unary(url, req, policy.unsafe.unsafe_pb2.UnsafeUpdateAttributeValueResponse,extra_headers, timeout_seconds) - - async def unsafe_update_attribute_value( - self, req: policy.unsafe.unsafe_pb2.UnsafeUpdateAttributeValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.unsafe.unsafe_pb2.UnsafeUpdateAttributeValueResponse: - response = await self.call_unsafe_update_attribute_value(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_unsafe_reactivate_attribute_value( - self, req: policy.unsafe.unsafe_pb2.UnsafeReactivateAttributeValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.unsafe.unsafe_pb2.UnsafeReactivateAttributeValueResponse]: - """Low-level method to call UnsafeReactivateAttributeValue, granting access to errors and metadata""" - url = self.base_url + "/policy.unsafe.UnsafeService/UnsafeReactivateAttributeValue" - return await self._connect_client.call_unary(url, req, policy.unsafe.unsafe_pb2.UnsafeReactivateAttributeValueResponse,extra_headers, timeout_seconds) - - async def unsafe_reactivate_attribute_value( - self, req: policy.unsafe.unsafe_pb2.UnsafeReactivateAttributeValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.unsafe.unsafe_pb2.UnsafeReactivateAttributeValueResponse: - response = await self.call_unsafe_reactivate_attribute_value(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_unsafe_delete_attribute_value( - self, req: policy.unsafe.unsafe_pb2.UnsafeDeleteAttributeValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.unsafe.unsafe_pb2.UnsafeDeleteAttributeValueResponse]: - """Low-level method to call UnsafeDeleteAttributeValue, granting access to errors and metadata""" - url = self.base_url + "/policy.unsafe.UnsafeService/UnsafeDeleteAttributeValue" - return await self._connect_client.call_unary(url, req, policy.unsafe.unsafe_pb2.UnsafeDeleteAttributeValueResponse,extra_headers, timeout_seconds) - - async def unsafe_delete_attribute_value( - self, req: policy.unsafe.unsafe_pb2.UnsafeDeleteAttributeValueRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.unsafe.unsafe_pb2.UnsafeDeleteAttributeValueResponse: - response = await self.call_unsafe_delete_attribute_value(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - async def call_unsafe_delete_kas_key( - self, req: policy.unsafe.unsafe_pb2.UnsafeDeleteKasKeyRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[policy.unsafe.unsafe_pb2.UnsafeDeleteKasKeyResponse]: - """Low-level method to call UnsafeDeleteKasKey, granting access to errors and metadata""" - url = self.base_url + "/policy.unsafe.UnsafeService/UnsafeDeleteKasKey" - return await self._connect_client.call_unary(url, req, policy.unsafe.unsafe_pb2.UnsafeDeleteKasKeyResponse,extra_headers, timeout_seconds) - - async def unsafe_delete_kas_key( - self, req: policy.unsafe.unsafe_pb2.UnsafeDeleteKasKeyRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> policy.unsafe.unsafe_pb2.UnsafeDeleteKasKeyResponse: - response = await self.call_unsafe_delete_kas_key(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - -@typing.runtime_checkable -class UnsafeServiceProtocol(typing.Protocol): - def unsafe_update_namespace(self, req: ClientRequest[policy.unsafe.unsafe_pb2.UnsafeUpdateNamespaceRequest]) -> ServerResponse[policy.unsafe.unsafe_pb2.UnsafeUpdateNamespaceResponse]: - ... - def unsafe_reactivate_namespace(self, req: ClientRequest[policy.unsafe.unsafe_pb2.UnsafeReactivateNamespaceRequest]) -> ServerResponse[policy.unsafe.unsafe_pb2.UnsafeReactivateNamespaceResponse]: - ... - def unsafe_delete_namespace(self, req: ClientRequest[policy.unsafe.unsafe_pb2.UnsafeDeleteNamespaceRequest]) -> ServerResponse[policy.unsafe.unsafe_pb2.UnsafeDeleteNamespaceResponse]: - ... - def unsafe_update_attribute(self, req: ClientRequest[policy.unsafe.unsafe_pb2.UnsafeUpdateAttributeRequest]) -> ServerResponse[policy.unsafe.unsafe_pb2.UnsafeUpdateAttributeResponse]: - ... - def unsafe_reactivate_attribute(self, req: ClientRequest[policy.unsafe.unsafe_pb2.UnsafeReactivateAttributeRequest]) -> ServerResponse[policy.unsafe.unsafe_pb2.UnsafeReactivateAttributeResponse]: - ... - def unsafe_delete_attribute(self, req: ClientRequest[policy.unsafe.unsafe_pb2.UnsafeDeleteAttributeRequest]) -> ServerResponse[policy.unsafe.unsafe_pb2.UnsafeDeleteAttributeResponse]: - ... - def unsafe_update_attribute_value(self, req: ClientRequest[policy.unsafe.unsafe_pb2.UnsafeUpdateAttributeValueRequest]) -> ServerResponse[policy.unsafe.unsafe_pb2.UnsafeUpdateAttributeValueResponse]: - ... - def unsafe_reactivate_attribute_value(self, req: ClientRequest[policy.unsafe.unsafe_pb2.UnsafeReactivateAttributeValueRequest]) -> ServerResponse[policy.unsafe.unsafe_pb2.UnsafeReactivateAttributeValueResponse]: - ... - def unsafe_delete_attribute_value(self, req: ClientRequest[policy.unsafe.unsafe_pb2.UnsafeDeleteAttributeValueRequest]) -> ServerResponse[policy.unsafe.unsafe_pb2.UnsafeDeleteAttributeValueResponse]: - ... - def unsafe_delete_kas_key(self, req: ClientRequest[policy.unsafe.unsafe_pb2.UnsafeDeleteKasKeyRequest]) -> ServerResponse[policy.unsafe.unsafe_pb2.UnsafeDeleteKasKeyResponse]: - ... - -UNSAFE_SERVICE_PATH_PREFIX = "/policy.unsafe.UnsafeService" - -def wsgi_unsafe_service(implementation: UnsafeServiceProtocol) -> WSGIApplication: - app = ConnectWSGI() - app.register_unary_rpc("/policy.unsafe.UnsafeService/UnsafeUpdateNamespace", implementation.unsafe_update_namespace, policy.unsafe.unsafe_pb2.UnsafeUpdateNamespaceRequest) - app.register_unary_rpc("/policy.unsafe.UnsafeService/UnsafeReactivateNamespace", implementation.unsafe_reactivate_namespace, policy.unsafe.unsafe_pb2.UnsafeReactivateNamespaceRequest) - app.register_unary_rpc("/policy.unsafe.UnsafeService/UnsafeDeleteNamespace", implementation.unsafe_delete_namespace, policy.unsafe.unsafe_pb2.UnsafeDeleteNamespaceRequest) - app.register_unary_rpc("/policy.unsafe.UnsafeService/UnsafeUpdateAttribute", implementation.unsafe_update_attribute, policy.unsafe.unsafe_pb2.UnsafeUpdateAttributeRequest) - app.register_unary_rpc("/policy.unsafe.UnsafeService/UnsafeReactivateAttribute", implementation.unsafe_reactivate_attribute, policy.unsafe.unsafe_pb2.UnsafeReactivateAttributeRequest) - app.register_unary_rpc("/policy.unsafe.UnsafeService/UnsafeDeleteAttribute", implementation.unsafe_delete_attribute, policy.unsafe.unsafe_pb2.UnsafeDeleteAttributeRequest) - app.register_unary_rpc("/policy.unsafe.UnsafeService/UnsafeUpdateAttributeValue", implementation.unsafe_update_attribute_value, policy.unsafe.unsafe_pb2.UnsafeUpdateAttributeValueRequest) - app.register_unary_rpc("/policy.unsafe.UnsafeService/UnsafeReactivateAttributeValue", implementation.unsafe_reactivate_attribute_value, policy.unsafe.unsafe_pb2.UnsafeReactivateAttributeValueRequest) - app.register_unary_rpc("/policy.unsafe.UnsafeService/UnsafeDeleteAttributeValue", implementation.unsafe_delete_attribute_value, policy.unsafe.unsafe_pb2.UnsafeDeleteAttributeValueRequest) - app.register_unary_rpc("/policy.unsafe.UnsafeService/UnsafeDeleteKasKey", implementation.unsafe_delete_kas_key, policy.unsafe.unsafe_pb2.UnsafeDeleteKasKeyRequest) - return app diff --git a/otdf-python-proto/src/otdf_python_proto/wellknownconfiguration/__init__.py b/otdf-python-proto/src/otdf_python_proto/wellknownconfiguration/__init__.py index 5a45106..bd90027 100644 --- a/otdf-python-proto/src/otdf_python_proto/wellknownconfiguration/__init__.py +++ b/otdf-python-proto/src/otdf_python_proto/wellknownconfiguration/__init__.py @@ -1 +1,11 @@ """wellknownconfiguration protobuf definitions.""" + +from .wellknown_configuration_connect import ( + WellKnownServiceClient, + WellKnownServiceClientSync, +) + +__all__ = [ + "WellKnownServiceClient", + "WellKnownServiceClientSync", +] diff --git a/otdf-python-proto/src/otdf_python_proto/wellknownconfiguration/wellknown_configuration_connect.py b/otdf-python-proto/src/otdf_python_proto/wellknownconfiguration/wellknown_configuration_connect.py new file mode 100644 index 0000000..1082134 --- /dev/null +++ b/otdf-python-proto/src/otdf_python_proto/wellknownconfiguration/wellknown_configuration_connect.py @@ -0,0 +1,124 @@ +# -*- coding: utf-8 -*- +# Generated by https://github.com/connectrpc/connect-python. DO NOT EDIT! +# source: wellknownconfiguration/wellknown_configuration.proto + +from collections.abc import AsyncGenerator, AsyncIterator, Iterable, Iterator, Mapping +from typing import Protocol + +from connectrpc.client import ConnectClient, ConnectClientSync +from connectrpc.code import Code +from connectrpc.errors import ConnectError +from connectrpc.interceptor import Interceptor, InterceptorSync +from connectrpc.method import IdempotencyLevel, MethodInfo +from connectrpc.request import Headers, RequestContext +from connectrpc.server import ConnectASGIApplication, ConnectWSGIApplication, Endpoint, EndpointSync +from . import wellknown_configuration_pb2 as wellknownconfiguration_dot_wellknown__configuration__pb2 + + +class WellKnownService(Protocol): + async def get_well_known_configuration(self, request: wellknownconfiguration_dot_wellknown__configuration__pb2.GetWellKnownConfigurationRequest, ctx: RequestContext) -> wellknownconfiguration_dot_wellknown__configuration__pb2.GetWellKnownConfigurationResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + +class WellKnownServiceASGIApplication(ConnectASGIApplication[WellKnownService]): + def __init__(self, service: WellKnownService | AsyncGenerator[WellKnownService], *, interceptors: Iterable[Interceptor]=(), read_max_bytes: int | None = None) -> None: + super().__init__( + service=service, + endpoints=lambda svc: { + "/wellknownconfiguration.WellKnownService/GetWellKnownConfiguration": Endpoint.unary( + method=MethodInfo( + name="GetWellKnownConfiguration", + service_name="wellknownconfiguration.WellKnownService", + input=wellknownconfiguration_dot_wellknown__configuration__pb2.GetWellKnownConfigurationRequest, + output=wellknownconfiguration_dot_wellknown__configuration__pb2.GetWellKnownConfigurationResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + function=svc.get_well_known_configuration, + ), + }, + interceptors=interceptors, + read_max_bytes=read_max_bytes, + ) + + @property + def path(self) -> str: + """Returns the URL path to mount the application to when serving multiple applications.""" + return "/wellknownconfiguration.WellKnownService" + + +class WellKnownServiceClient(ConnectClient): + async def get_well_known_configuration( + self, + request: wellknownconfiguration_dot_wellknown__configuration__pb2.GetWellKnownConfigurationRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + use_get: bool = False, + ) -> wellknownconfiguration_dot_wellknown__configuration__pb2.GetWellKnownConfigurationResponse: + return await self.execute_unary( + request=request, + method=MethodInfo( + name="GetWellKnownConfiguration", + service_name="wellknownconfiguration.WellKnownService", + input=wellknownconfiguration_dot_wellknown__configuration__pb2.GetWellKnownConfigurationRequest, + output=wellknownconfiguration_dot_wellknown__configuration__pb2.GetWellKnownConfigurationResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + headers=headers, + timeout_ms=timeout_ms, + use_get=use_get, + ) + + +class WellKnownServiceSync(Protocol): + def get_well_known_configuration(self, request: wellknownconfiguration_dot_wellknown__configuration__pb2.GetWellKnownConfigurationRequest, ctx: RequestContext) -> wellknownconfiguration_dot_wellknown__configuration__pb2.GetWellKnownConfigurationResponse: + raise ConnectError(Code.UNIMPLEMENTED, "Not implemented") + + +class WellKnownServiceWSGIApplication(ConnectWSGIApplication): + def __init__(self, service: WellKnownServiceSync, interceptors: Iterable[InterceptorSync]=(), read_max_bytes: int | None = None) -> None: + super().__init__( + endpoints={ + "/wellknownconfiguration.WellKnownService/GetWellKnownConfiguration": EndpointSync.unary( + method=MethodInfo( + name="GetWellKnownConfiguration", + service_name="wellknownconfiguration.WellKnownService", + input=wellknownconfiguration_dot_wellknown__configuration__pb2.GetWellKnownConfigurationRequest, + output=wellknownconfiguration_dot_wellknown__configuration__pb2.GetWellKnownConfigurationResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + function=service.get_well_known_configuration, + ), + }, + interceptors=interceptors, + read_max_bytes=read_max_bytes, + ) + + @property + def path(self) -> str: + """Returns the URL path to mount the application to when serving multiple applications.""" + return "/wellknownconfiguration.WellKnownService" + + +class WellKnownServiceClientSync(ConnectClientSync): + def get_well_known_configuration( + self, + request: wellknownconfiguration_dot_wellknown__configuration__pb2.GetWellKnownConfigurationRequest, + *, + headers: Headers | Mapping[str, str] | None = None, + timeout_ms: int | None = None, + use_get: bool = False, + ) -> wellknownconfiguration_dot_wellknown__configuration__pb2.GetWellKnownConfigurationResponse: + return self.execute_unary( + request=request, + method=MethodInfo( + name="GetWellKnownConfiguration", + service_name="wellknownconfiguration.WellKnownService", + input=wellknownconfiguration_dot_wellknown__configuration__pb2.GetWellKnownConfigurationRequest, + output=wellknownconfiguration_dot_wellknown__configuration__pb2.GetWellKnownConfigurationResponse, + idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, + ), + headers=headers, + timeout_ms=timeout_ms, + use_get=use_get, + ) diff --git a/otdf-python-proto/src/otdf_python_proto/wellknownconfiguration/wellknown_configuration_pb2_connect.py b/otdf-python-proto/src/otdf_python_proto/wellknownconfiguration/wellknown_configuration_pb2_connect.py deleted file mode 100644 index 351d54a..0000000 --- a/otdf-python-proto/src/otdf_python_proto/wellknownconfiguration/wellknown_configuration_pb2_connect.py +++ /dev/null @@ -1,107 +0,0 @@ -# Generated Connect client code - -from __future__ import annotations -from collections.abc import AsyncIterator -from collections.abc import Iterator -from collections.abc import Iterable -import aiohttp -import urllib3 -import typing -import sys - -from connectrpc.client_async import AsyncConnectClient -from connectrpc.client_sync import ConnectClient -from connectrpc.client_protocol import ConnectProtocol -from connectrpc.client_connect import ConnectProtocolError -from connectrpc.headers import HeaderInput -from connectrpc.server import ClientRequest -from connectrpc.server import ClientStream -from connectrpc.server import ServerResponse -from connectrpc.server import ServerStream -from connectrpc.server_sync import ConnectWSGI -from connectrpc.streams import StreamInput -from connectrpc.streams import AsyncStreamOutput -from connectrpc.streams import StreamOutput -from connectrpc.unary import UnaryOutput -from connectrpc.unary import ClientStreamingOutput - -if typing.TYPE_CHECKING: - # wsgiref.types was added in Python 3.11. - if sys.version_info >= (3, 11): - from wsgiref.types import WSGIApplication - else: - from _typeshed.wsgi import WSGIApplication - -import wellknownconfiguration.wellknown_configuration_pb2 - -class WellKnownServiceClient: - def __init__( - self, - base_url: str, - http_client: urllib3.PoolManager | None = None, - protocol: ConnectProtocol = ConnectProtocol.CONNECT_PROTOBUF, - ): - self.base_url = base_url - self._connect_client = ConnectClient(http_client, protocol) - def call_get_well_known_configuration( - self, req: wellknownconfiguration.wellknown_configuration_pb2.GetWellKnownConfigurationRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[wellknownconfiguration.wellknown_configuration_pb2.GetWellKnownConfigurationResponse]: - """Low-level method to call GetWellKnownConfiguration, granting access to errors and metadata""" - url = self.base_url + "/wellknownconfiguration.WellKnownService/GetWellKnownConfiguration" - return self._connect_client.call_unary(url, req, wellknownconfiguration.wellknown_configuration_pb2.GetWellKnownConfigurationResponse,extra_headers, timeout_seconds) - - - def get_well_known_configuration( - self, req: wellknownconfiguration.wellknown_configuration_pb2.GetWellKnownConfigurationRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> wellknownconfiguration.wellknown_configuration_pb2.GetWellKnownConfigurationResponse: - response = self.call_get_well_known_configuration(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - -class AsyncWellKnownServiceClient: - def __init__( - self, - base_url: str, - http_client: aiohttp.ClientSession, - protocol: ConnectProtocol = ConnectProtocol.CONNECT_PROTOBUF, - ): - self.base_url = base_url - self._connect_client = AsyncConnectClient(http_client, protocol) - - async def call_get_well_known_configuration( - self, req: wellknownconfiguration.wellknown_configuration_pb2.GetWellKnownConfigurationRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> UnaryOutput[wellknownconfiguration.wellknown_configuration_pb2.GetWellKnownConfigurationResponse]: - """Low-level method to call GetWellKnownConfiguration, granting access to errors and metadata""" - url = self.base_url + "/wellknownconfiguration.WellKnownService/GetWellKnownConfiguration" - return await self._connect_client.call_unary(url, req, wellknownconfiguration.wellknown_configuration_pb2.GetWellKnownConfigurationResponse,extra_headers, timeout_seconds) - - async def get_well_known_configuration( - self, req: wellknownconfiguration.wellknown_configuration_pb2.GetWellKnownConfigurationRequest,extra_headers: HeaderInput | None=None, timeout_seconds: float | None=None - ) -> wellknownconfiguration.wellknown_configuration_pb2.GetWellKnownConfigurationResponse: - response = await self.call_get_well_known_configuration(req, extra_headers, timeout_seconds) - err = response.error() - if err is not None: - raise err - msg = response.message() - if msg is None: - raise ConnectProtocolError('missing response message') - return msg - - -@typing.runtime_checkable -class WellKnownServiceProtocol(typing.Protocol): - def get_well_known_configuration(self, req: ClientRequest[wellknownconfiguration.wellknown_configuration_pb2.GetWellKnownConfigurationRequest]) -> ServerResponse[wellknownconfiguration.wellknown_configuration_pb2.GetWellKnownConfigurationResponse]: - ... - -WELL_KNOWN_SERVICE_PATH_PREFIX = "/wellknownconfiguration.WellKnownService" - -def wsgi_well_known_service(implementation: WellKnownServiceProtocol) -> WSGIApplication: - app = ConnectWSGI() - app.register_unary_rpc("/wellknownconfiguration.WellKnownService/GetWellKnownConfiguration", implementation.get_well_known_configuration, wellknownconfiguration.wellknown_configuration_pb2.GetWellKnownConfigurationRequest) - return app diff --git a/otdf-python-proto/uv.lock b/otdf-python-proto/uv.lock index 3161d77..353bdb2 100644 --- a/otdf-python-proto/uv.lock +++ b/otdf-python-proto/uv.lock @@ -13,7 +13,7 @@ wheels = [ [[package]] name = "aiohttp" -version = "3.13.2" +version = "3.13.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiohappyeyeballs" }, @@ -25,110 +25,110 @@ dependencies = [ { name = "propcache" }, { name = "yarl" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/1c/ce/3b83ebba6b3207a7135e5fcaba49706f8a4b6008153b4e30540c982fae26/aiohttp-3.13.2.tar.gz", hash = "sha256:40176a52c186aefef6eb3cad2cdd30cd06e3afbe88fe8ab2af9c0b90f228daca", size = 7837994, upload-time = "2025-10-28T20:59:39.937Z" } +sdist = { url = "https://files.pythonhosted.org/packages/50/42/32cf8e7704ceb4481406eb87161349abb46a57fee3f008ba9cb610968646/aiohttp-3.13.3.tar.gz", hash = "sha256:a949eee43d3782f2daae4f4a2819b2cb9b0c5d3b7f7a927067cc84dafdbb9f88", size = 7844556, upload-time = "2026-01-03T17:33:05.204Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6d/34/939730e66b716b76046dedfe0842995842fa906ccc4964bba414ff69e429/aiohttp-3.13.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2372b15a5f62ed37789a6b383ff7344fc5b9f243999b0cd9b629d8bc5f5b4155", size = 736471, upload-time = "2025-10-28T20:55:27.924Z" }, - { url = "https://files.pythonhosted.org/packages/fd/cf/dcbdf2df7f6ca72b0bb4c0b4509701f2d8942cf54e29ca197389c214c07f/aiohttp-3.13.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e7f8659a48995edee7229522984bd1009c1213929c769c2daa80b40fe49a180c", size = 493985, upload-time = "2025-10-28T20:55:29.456Z" }, - { url = "https://files.pythonhosted.org/packages/9d/87/71c8867e0a1d0882dcbc94af767784c3cb381c1c4db0943ab4aae4fed65e/aiohttp-3.13.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:939ced4a7add92296b0ad38892ce62b98c619288a081170695c6babe4f50e636", size = 489274, upload-time = "2025-10-28T20:55:31.134Z" }, - { url = "https://files.pythonhosted.org/packages/38/0f/46c24e8dae237295eaadd113edd56dee96ef6462adf19b88592d44891dc5/aiohttp-3.13.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6315fb6977f1d0dd41a107c527fee2ed5ab0550b7d885bc15fee20ccb17891da", size = 1668171, upload-time = "2025-10-28T20:55:36.065Z" }, - { url = "https://files.pythonhosted.org/packages/eb/c6/4cdfb4440d0e28483681a48f69841fa5e39366347d66ef808cbdadddb20e/aiohttp-3.13.2-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6e7352512f763f760baaed2637055c49134fd1d35b37c2dedfac35bfe5cf8725", size = 1636036, upload-time = "2025-10-28T20:55:37.576Z" }, - { url = "https://files.pythonhosted.org/packages/84/37/8708cf678628216fb678ab327a4e1711c576d6673998f4f43e86e9ae90dd/aiohttp-3.13.2-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e09a0a06348a2dd73e7213353c90d709502d9786219f69b731f6caa0efeb46f5", size = 1727975, upload-time = "2025-10-28T20:55:39.457Z" }, - { url = "https://files.pythonhosted.org/packages/e6/2e/3ebfe12fdcb9b5f66e8a0a42dffcd7636844c8a018f261efb2419f68220b/aiohttp-3.13.2-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a09a6d073fb5789456545bdee2474d14395792faa0527887f2f4ec1a486a59d3", size = 1815823, upload-time = "2025-10-28T20:55:40.958Z" }, - { url = "https://files.pythonhosted.org/packages/a1/4f/ca2ef819488cbb41844c6cf92ca6dd15b9441e6207c58e5ae0e0fc8d70ad/aiohttp-3.13.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b59d13c443f8e049d9e94099c7e412e34610f1f49be0f230ec656a10692a5802", size = 1669374, upload-time = "2025-10-28T20:55:42.745Z" }, - { url = "https://files.pythonhosted.org/packages/f8/fe/1fe2e1179a0d91ce09c99069684aab619bf2ccde9b20bd6ca44f8837203e/aiohttp-3.13.2-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:20db2d67985d71ca033443a1ba2001c4b5693fe09b0e29f6d9358a99d4d62a8a", size = 1555315, upload-time = "2025-10-28T20:55:44.264Z" }, - { url = "https://files.pythonhosted.org/packages/5a/2b/f3781899b81c45d7cbc7140cddb8a3481c195e7cbff8e36374759d2ab5a5/aiohttp-3.13.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:960c2fc686ba27b535f9fd2b52d87ecd7e4fd1cf877f6a5cba8afb5b4a8bd204", size = 1639140, upload-time = "2025-10-28T20:55:46.626Z" }, - { url = "https://files.pythonhosted.org/packages/72/27/c37e85cd3ece6f6c772e549bd5a253d0c122557b25855fb274224811e4f2/aiohttp-3.13.2-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:6c00dbcf5f0d88796151e264a8eab23de2997c9303dd7c0bf622e23b24d3ce22", size = 1645496, upload-time = "2025-10-28T20:55:48.933Z" }, - { url = "https://files.pythonhosted.org/packages/66/20/3af1ab663151bd3780b123e907761cdb86ec2c4e44b2d9b195ebc91fbe37/aiohttp-3.13.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fed38a5edb7945f4d1bcabe2fcd05db4f6ec7e0e82560088b754f7e08d93772d", size = 1697625, upload-time = "2025-10-28T20:55:50.377Z" }, - { url = "https://files.pythonhosted.org/packages/95/eb/ae5cab15efa365e13d56b31b0d085a62600298bf398a7986f8388f73b598/aiohttp-3.13.2-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:b395bbca716c38bef3c764f187860e88c724b342c26275bc03e906142fc5964f", size = 1542025, upload-time = "2025-10-28T20:55:51.861Z" }, - { url = "https://files.pythonhosted.org/packages/e9/2d/1683e8d67ec72d911397fe4e575688d2a9b8f6a6e03c8fdc9f3fd3d4c03f/aiohttp-3.13.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:204ffff2426c25dfda401ba08da85f9c59525cdc42bda26660463dd1cbcfec6f", size = 1714918, upload-time = "2025-10-28T20:55:53.515Z" }, - { url = "https://files.pythonhosted.org/packages/99/a2/ffe8e0e1c57c5e542d47ffa1fcf95ef2b3ea573bf7c4d2ee877252431efc/aiohttp-3.13.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:05c4dd3c48fb5f15db31f57eb35374cb0c09afdde532e7fb70a75aede0ed30f6", size = 1656113, upload-time = "2025-10-28T20:55:55.438Z" }, - { url = "https://files.pythonhosted.org/packages/0d/42/d511aff5c3a2b06c09d7d214f508a4ad8ac7799817f7c3d23e7336b5e896/aiohttp-3.13.2-cp310-cp310-win32.whl", hash = "sha256:e574a7d61cf10351d734bcddabbe15ede0eaa8a02070d85446875dc11189a251", size = 432290, upload-time = "2025-10-28T20:55:56.96Z" }, - { url = "https://files.pythonhosted.org/packages/8b/ea/1c2eb7098b5bad4532994f2b7a8228d27674035c9b3234fe02c37469ef14/aiohttp-3.13.2-cp310-cp310-win_amd64.whl", hash = "sha256:364f55663085d658b8462a1c3f17b2b84a5c2e1ba858e1b79bff7b2e24ad1514", size = 455075, upload-time = "2025-10-28T20:55:58.373Z" }, - { url = "https://files.pythonhosted.org/packages/35/74/b321e7d7ca762638cdf8cdeceb39755d9c745aff7a64c8789be96ddf6e96/aiohttp-3.13.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4647d02df098f6434bafd7f32ad14942f05a9caa06c7016fdcc816f343997dd0", size = 743409, upload-time = "2025-10-28T20:56:00.354Z" }, - { url = "https://files.pythonhosted.org/packages/99/3d/91524b905ec473beaf35158d17f82ef5a38033e5809fe8742e3657cdbb97/aiohttp-3.13.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e3403f24bcb9c3b29113611c3c16a2a447c3953ecf86b79775e7be06f7ae7ccb", size = 497006, upload-time = "2025-10-28T20:56:01.85Z" }, - { url = "https://files.pythonhosted.org/packages/eb/d3/7f68bc02a67716fe80f063e19adbd80a642e30682ce74071269e17d2dba1/aiohttp-3.13.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:43dff14e35aba17e3d6d5ba628858fb8cb51e30f44724a2d2f0c75be492c55e9", size = 493195, upload-time = "2025-10-28T20:56:03.314Z" }, - { url = "https://files.pythonhosted.org/packages/98/31/913f774a4708775433b7375c4f867d58ba58ead833af96c8af3621a0d243/aiohttp-3.13.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e2a9ea08e8c58bb17655630198833109227dea914cd20be660f52215f6de5613", size = 1747759, upload-time = "2025-10-28T20:56:04.904Z" }, - { url = "https://files.pythonhosted.org/packages/e8/63/04efe156f4326f31c7c4a97144f82132c3bb21859b7bb84748d452ccc17c/aiohttp-3.13.2-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:53b07472f235eb80e826ad038c9d106c2f653584753f3ddab907c83f49eedead", size = 1704456, upload-time = "2025-10-28T20:56:06.986Z" }, - { url = "https://files.pythonhosted.org/packages/8e/02/4e16154d8e0a9cf4ae76f692941fd52543bbb148f02f098ca73cab9b1c1b/aiohttp-3.13.2-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e736c93e9c274fce6419af4aac199984d866e55f8a4cec9114671d0ea9688780", size = 1807572, upload-time = "2025-10-28T20:56:08.558Z" }, - { url = "https://files.pythonhosted.org/packages/34/58/b0583defb38689e7f06798f0285b1ffb3a6fb371f38363ce5fd772112724/aiohttp-3.13.2-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ff5e771f5dcbc81c64898c597a434f7682f2259e0cd666932a913d53d1341d1a", size = 1895954, upload-time = "2025-10-28T20:56:10.545Z" }, - { url = "https://files.pythonhosted.org/packages/6b/f3/083907ee3437425b4e376aa58b2c915eb1a33703ec0dc30040f7ae3368c6/aiohttp-3.13.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a3b6fb0c207cc661fa0bf8c66d8d9b657331ccc814f4719468af61034b478592", size = 1747092, upload-time = "2025-10-28T20:56:12.118Z" }, - { url = "https://files.pythonhosted.org/packages/ac/61/98a47319b4e425cc134e05e5f3fc512bf9a04bf65aafd9fdcda5d57ec693/aiohttp-3.13.2-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:97a0895a8e840ab3520e2288db7cace3a1981300d48babeb50e7425609e2e0ab", size = 1606815, upload-time = "2025-10-28T20:56:14.191Z" }, - { url = "https://files.pythonhosted.org/packages/97/4b/e78b854d82f66bb974189135d31fce265dee0f5344f64dd0d345158a5973/aiohttp-3.13.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9e8f8afb552297aca127c90cb840e9a1d4bfd6a10d7d8f2d9176e1acc69bad30", size = 1723789, upload-time = "2025-10-28T20:56:16.101Z" }, - { url = "https://files.pythonhosted.org/packages/ed/fc/9d2ccc794fc9b9acd1379d625c3a8c64a45508b5091c546dea273a41929e/aiohttp-3.13.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:ed2f9c7216e53c3df02264f25d824b079cc5914f9e2deba94155190ef648ee40", size = 1718104, upload-time = "2025-10-28T20:56:17.655Z" }, - { url = "https://files.pythonhosted.org/packages/66/65/34564b8765ea5c7d79d23c9113135d1dd3609173da13084830f1507d56cf/aiohttp-3.13.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:99c5280a329d5fa18ef30fd10c793a190d996567667908bef8a7f81f8202b948", size = 1785584, upload-time = "2025-10-28T20:56:19.238Z" }, - { url = "https://files.pythonhosted.org/packages/30/be/f6a7a426e02fc82781afd62016417b3948e2207426d90a0e478790d1c8a4/aiohttp-3.13.2-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:2ca6ffef405fc9c09a746cb5d019c1672cd7f402542e379afc66b370833170cf", size = 1595126, upload-time = "2025-10-28T20:56:20.836Z" }, - { url = "https://files.pythonhosted.org/packages/e5/c7/8e22d5d28f94f67d2af496f14a83b3c155d915d1fe53d94b66d425ec5b42/aiohttp-3.13.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:47f438b1a28e926c37632bff3c44df7d27c9b57aaf4e34b1def3c07111fdb782", size = 1800665, upload-time = "2025-10-28T20:56:22.922Z" }, - { url = "https://files.pythonhosted.org/packages/d1/11/91133c8b68b1da9fc16555706aa7276fdf781ae2bb0876c838dd86b8116e/aiohttp-3.13.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9acda8604a57bb60544e4646a4615c1866ee6c04a8edef9b8ee6fd1d8fa2ddc8", size = 1739532, upload-time = "2025-10-28T20:56:25.924Z" }, - { url = "https://files.pythonhosted.org/packages/17/6b/3747644d26a998774b21a616016620293ddefa4d63af6286f389aedac844/aiohttp-3.13.2-cp311-cp311-win32.whl", hash = "sha256:868e195e39b24aaa930b063c08bb0c17924899c16c672a28a65afded9c46c6ec", size = 431876, upload-time = "2025-10-28T20:56:27.524Z" }, - { url = "https://files.pythonhosted.org/packages/c3/63/688462108c1a00eb9f05765331c107f95ae86f6b197b865d29e930b7e462/aiohttp-3.13.2-cp311-cp311-win_amd64.whl", hash = "sha256:7fd19df530c292542636c2a9a85854fab93474396a52f1695e799186bbd7f24c", size = 456205, upload-time = "2025-10-28T20:56:29.062Z" }, - { url = "https://files.pythonhosted.org/packages/29/9b/01f00e9856d0a73260e86dd8ed0c2234a466c5c1712ce1c281548df39777/aiohttp-3.13.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:b1e56bab2e12b2b9ed300218c351ee2a3d8c8fdab5b1ec6193e11a817767e47b", size = 737623, upload-time = "2025-10-28T20:56:30.797Z" }, - { url = "https://files.pythonhosted.org/packages/5a/1b/4be39c445e2b2bd0aab4ba736deb649fabf14f6757f405f0c9685019b9e9/aiohttp-3.13.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:364e25edaabd3d37b1db1f0cbcee8c73c9a3727bfa262b83e5e4cf3489a2a9dc", size = 492664, upload-time = "2025-10-28T20:56:32.708Z" }, - { url = "https://files.pythonhosted.org/packages/28/66/d35dcfea8050e131cdd731dff36434390479b4045a8d0b9d7111b0a968f1/aiohttp-3.13.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c5c94825f744694c4b8db20b71dba9a257cd2ba8e010a803042123f3a25d50d7", size = 491808, upload-time = "2025-10-28T20:56:34.57Z" }, - { url = "https://files.pythonhosted.org/packages/00/29/8e4609b93e10a853b65f8291e64985de66d4f5848c5637cddc70e98f01f8/aiohttp-3.13.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ba2715d842ffa787be87cbfce150d5e88c87a98e0b62e0f5aa489169a393dbbb", size = 1738863, upload-time = "2025-10-28T20:56:36.377Z" }, - { url = "https://files.pythonhosted.org/packages/9d/fa/4ebdf4adcc0def75ced1a0d2d227577cd7b1b85beb7edad85fcc87693c75/aiohttp-3.13.2-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:585542825c4bc662221fb257889e011a5aa00f1ae4d75d1d246a5225289183e3", size = 1700586, upload-time = "2025-10-28T20:56:38.034Z" }, - { url = "https://files.pythonhosted.org/packages/da/04/73f5f02ff348a3558763ff6abe99c223381b0bace05cd4530a0258e52597/aiohttp-3.13.2-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:39d02cb6025fe1aabca329c5632f48c9532a3dabccd859e7e2f110668972331f", size = 1768625, upload-time = "2025-10-28T20:56:39.75Z" }, - { url = "https://files.pythonhosted.org/packages/f8/49/a825b79ffec124317265ca7d2344a86bcffeb960743487cb11988ffb3494/aiohttp-3.13.2-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e67446b19e014d37342f7195f592a2a948141d15a312fe0e700c2fd2f03124f6", size = 1867281, upload-time = "2025-10-28T20:56:41.471Z" }, - { url = "https://files.pythonhosted.org/packages/b9/48/adf56e05f81eac31edcfae45c90928f4ad50ef2e3ea72cb8376162a368f8/aiohttp-3.13.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4356474ad6333e41ccefd39eae869ba15a6c5299c9c01dfdcfdd5c107be4363e", size = 1752431, upload-time = "2025-10-28T20:56:43.162Z" }, - { url = "https://files.pythonhosted.org/packages/30/ab/593855356eead019a74e862f21523db09c27f12fd24af72dbc3555b9bfd9/aiohttp-3.13.2-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:eeacf451c99b4525f700f078becff32c32ec327b10dcf31306a8a52d78166de7", size = 1562846, upload-time = "2025-10-28T20:56:44.85Z" }, - { url = "https://files.pythonhosted.org/packages/39/0f/9f3d32271aa8dc35036e9668e31870a9d3b9542dd6b3e2c8a30931cb27ae/aiohttp-3.13.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d8a9b889aeabd7a4e9af0b7f4ab5ad94d42e7ff679aaec6d0db21e3b639ad58d", size = 1699606, upload-time = "2025-10-28T20:56:46.519Z" }, - { url = "https://files.pythonhosted.org/packages/2c/3c/52d2658c5699b6ef7692a3f7128b2d2d4d9775f2a68093f74bca06cf01e1/aiohttp-3.13.2-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:fa89cb11bc71a63b69568d5b8a25c3ca25b6d54c15f907ca1c130d72f320b76b", size = 1720663, upload-time = "2025-10-28T20:56:48.528Z" }, - { url = "https://files.pythonhosted.org/packages/9b/d4/8f8f3ff1fb7fb9e3f04fcad4e89d8a1cd8fc7d05de67e3de5b15b33008ff/aiohttp-3.13.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:8aa7c807df234f693fed0ecd507192fc97692e61fee5702cdc11155d2e5cadc8", size = 1737939, upload-time = "2025-10-28T20:56:50.77Z" }, - { url = "https://files.pythonhosted.org/packages/03/d3/ddd348f8a27a634daae39a1b8e291ff19c77867af438af844bf8b7e3231b/aiohttp-3.13.2-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:9eb3e33fdbe43f88c3c75fa608c25e7c47bbd80f48d012763cb67c47f39a7e16", size = 1555132, upload-time = "2025-10-28T20:56:52.568Z" }, - { url = "https://files.pythonhosted.org/packages/39/b8/46790692dc46218406f94374903ba47552f2f9f90dad554eed61bfb7b64c/aiohttp-3.13.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9434bc0d80076138ea986833156c5a48c9c7a8abb0c96039ddbb4afc93184169", size = 1764802, upload-time = "2025-10-28T20:56:54.292Z" }, - { url = "https://files.pythonhosted.org/packages/ba/e4/19ce547b58ab2a385e5f0b8aa3db38674785085abcf79b6e0edd1632b12f/aiohttp-3.13.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ff15c147b2ad66da1f2cbb0622313f2242d8e6e8f9b79b5206c84523a4473248", size = 1719512, upload-time = "2025-10-28T20:56:56.428Z" }, - { url = "https://files.pythonhosted.org/packages/70/30/6355a737fed29dcb6dfdd48682d5790cb5eab050f7b4e01f49b121d3acad/aiohttp-3.13.2-cp312-cp312-win32.whl", hash = "sha256:27e569eb9d9e95dbd55c0fc3ec3a9335defbf1d8bc1d20171a49f3c4c607b93e", size = 426690, upload-time = "2025-10-28T20:56:58.736Z" }, - { url = "https://files.pythonhosted.org/packages/0a/0d/b10ac09069973d112de6ef980c1f6bb31cb7dcd0bc363acbdad58f927873/aiohttp-3.13.2-cp312-cp312-win_amd64.whl", hash = "sha256:8709a0f05d59a71f33fd05c17fc11fcb8c30140506e13c2f5e8ee1b8964e1b45", size = 453465, upload-time = "2025-10-28T20:57:00.795Z" }, - { url = "https://files.pythonhosted.org/packages/bf/78/7e90ca79e5aa39f9694dcfd74f4720782d3c6828113bb1f3197f7e7c4a56/aiohttp-3.13.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:7519bdc7dfc1940d201651b52bf5e03f5503bda45ad6eacf64dda98be5b2b6be", size = 732139, upload-time = "2025-10-28T20:57:02.455Z" }, - { url = "https://files.pythonhosted.org/packages/db/ed/1f59215ab6853fbaa5c8495fa6cbc39edfc93553426152b75d82a5f32b76/aiohttp-3.13.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:088912a78b4d4f547a1f19c099d5a506df17eacec3c6f4375e2831ec1d995742", size = 490082, upload-time = "2025-10-28T20:57:04.784Z" }, - { url = "https://files.pythonhosted.org/packages/68/7b/fe0fe0f5e05e13629d893c760465173a15ad0039c0a5b0d0040995c8075e/aiohttp-3.13.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5276807b9de9092af38ed23ce120539ab0ac955547b38563a9ba4f5b07b95293", size = 489035, upload-time = "2025-10-28T20:57:06.894Z" }, - { url = "https://files.pythonhosted.org/packages/d2/04/db5279e38471b7ac801d7d36a57d1230feeee130bbe2a74f72731b23c2b1/aiohttp-3.13.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1237c1375eaef0db4dcd7c2559f42e8af7b87ea7d295b118c60c36a6e61cb811", size = 1720387, upload-time = "2025-10-28T20:57:08.685Z" }, - { url = "https://files.pythonhosted.org/packages/31/07/8ea4326bd7dae2bd59828f69d7fdc6e04523caa55e4a70f4a8725a7e4ed2/aiohttp-3.13.2-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:96581619c57419c3d7d78703d5b78c1e5e5fc0172d60f555bdebaced82ded19a", size = 1688314, upload-time = "2025-10-28T20:57:10.693Z" }, - { url = "https://files.pythonhosted.org/packages/48/ab/3d98007b5b87ffd519d065225438cc3b668b2f245572a8cb53da5dd2b1bc/aiohttp-3.13.2-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a2713a95b47374169409d18103366de1050fe0ea73db358fc7a7acb2880422d4", size = 1756317, upload-time = "2025-10-28T20:57:12.563Z" }, - { url = "https://files.pythonhosted.org/packages/97/3d/801ca172b3d857fafb7b50c7c03f91b72b867a13abca982ed6b3081774ef/aiohttp-3.13.2-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:228a1cd556b3caca590e9511a89444925da87d35219a49ab5da0c36d2d943a6a", size = 1858539, upload-time = "2025-10-28T20:57:14.623Z" }, - { url = "https://files.pythonhosted.org/packages/f7/0d/4764669bdf47bd472899b3d3db91fffbe925c8e3038ec591a2fd2ad6a14d/aiohttp-3.13.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ac6cde5fba8d7d8c6ac963dbb0256a9854e9fafff52fbcc58fdf819357892c3e", size = 1739597, upload-time = "2025-10-28T20:57:16.399Z" }, - { url = "https://files.pythonhosted.org/packages/c4/52/7bd3c6693da58ba16e657eb904a5b6decfc48ecd06e9ac098591653b1566/aiohttp-3.13.2-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f2bef8237544f4e42878c61cef4e2839fee6346dc60f5739f876a9c50be7fcdb", size = 1555006, upload-time = "2025-10-28T20:57:18.288Z" }, - { url = "https://files.pythonhosted.org/packages/48/30/9586667acec5993b6f41d2ebcf96e97a1255a85f62f3c653110a5de4d346/aiohttp-3.13.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:16f15a4eac3bc2d76c45f7ebdd48a65d41b242eb6c31c2245463b40b34584ded", size = 1683220, upload-time = "2025-10-28T20:57:20.241Z" }, - { url = "https://files.pythonhosted.org/packages/71/01/3afe4c96854cfd7b30d78333852e8e851dceaec1c40fd00fec90c6402dd2/aiohttp-3.13.2-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:bb7fb776645af5cc58ab804c58d7eba545a97e047254a52ce89c157b5af6cd0b", size = 1712570, upload-time = "2025-10-28T20:57:22.253Z" }, - { url = "https://files.pythonhosted.org/packages/11/2c/22799d8e720f4697a9e66fd9c02479e40a49de3de2f0bbe7f9f78a987808/aiohttp-3.13.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:e1b4951125ec10c70802f2cb09736c895861cd39fd9dcb35107b4dc8ae6220b8", size = 1733407, upload-time = "2025-10-28T20:57:24.37Z" }, - { url = "https://files.pythonhosted.org/packages/34/cb/90f15dd029f07cebbd91f8238a8b363978b530cd128488085b5703683594/aiohttp-3.13.2-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:550bf765101ae721ee1d37d8095f47b1f220650f85fe1af37a90ce75bab89d04", size = 1550093, upload-time = "2025-10-28T20:57:26.257Z" }, - { url = "https://files.pythonhosted.org/packages/69/46/12dce9be9d3303ecbf4d30ad45a7683dc63d90733c2d9fe512be6716cd40/aiohttp-3.13.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:fe91b87fc295973096251e2d25a811388e7d8adf3bd2b97ef6ae78bc4ac6c476", size = 1758084, upload-time = "2025-10-28T20:57:28.349Z" }, - { url = "https://files.pythonhosted.org/packages/f9/c8/0932b558da0c302ffd639fc6362a313b98fdf235dc417bc2493da8394df7/aiohttp-3.13.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e0c8e31cfcc4592cb200160344b2fb6ae0f9e4effe06c644b5a125d4ae5ebe23", size = 1716987, upload-time = "2025-10-28T20:57:30.233Z" }, - { url = "https://files.pythonhosted.org/packages/5d/8b/f5bd1a75003daed099baec373aed678f2e9b34f2ad40d85baa1368556396/aiohttp-3.13.2-cp313-cp313-win32.whl", hash = "sha256:0740f31a60848d6edb296a0df827473eede90c689b8f9f2a4cdde74889eb2254", size = 425859, upload-time = "2025-10-28T20:57:32.105Z" }, - { url = "https://files.pythonhosted.org/packages/5d/28/a8a9fc6957b2cee8902414e41816b5ab5536ecf43c3b1843c10e82c559b2/aiohttp-3.13.2-cp313-cp313-win_amd64.whl", hash = "sha256:a88d13e7ca367394908f8a276b89d04a3652044612b9a408a0bb22a5ed976a1a", size = 452192, upload-time = "2025-10-28T20:57:34.166Z" }, - { url = "https://files.pythonhosted.org/packages/9b/36/e2abae1bd815f01c957cbf7be817b3043304e1c87bad526292a0410fdcf9/aiohttp-3.13.2-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:2475391c29230e063ef53a66669b7b691c9bfc3f1426a0f7bcdf1216bdbac38b", size = 735234, upload-time = "2025-10-28T20:57:36.415Z" }, - { url = "https://files.pythonhosted.org/packages/ca/e3/1ee62dde9b335e4ed41db6bba02613295a0d5b41f74a783c142745a12763/aiohttp-3.13.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:f33c8748abef4d8717bb20e8fb1b3e07c6adacb7fd6beaae971a764cf5f30d61", size = 490733, upload-time = "2025-10-28T20:57:38.205Z" }, - { url = "https://files.pythonhosted.org/packages/1a/aa/7a451b1d6a04e8d15a362af3e9b897de71d86feac3babf8894545d08d537/aiohttp-3.13.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ae32f24bbfb7dbb485a24b30b1149e2f200be94777232aeadba3eecece4d0aa4", size = 491303, upload-time = "2025-10-28T20:57:40.122Z" }, - { url = "https://files.pythonhosted.org/packages/57/1e/209958dbb9b01174870f6a7538cd1f3f28274fdbc88a750c238e2c456295/aiohttp-3.13.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5d7f02042c1f009ffb70067326ef183a047425bb2ff3bc434ead4dd4a4a66a2b", size = 1717965, upload-time = "2025-10-28T20:57:42.28Z" }, - { url = "https://files.pythonhosted.org/packages/08/aa/6a01848d6432f241416bc4866cae8dc03f05a5a884d2311280f6a09c73d6/aiohttp-3.13.2-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:93655083005d71cd6c072cdab54c886e6570ad2c4592139c3fb967bfc19e4694", size = 1667221, upload-time = "2025-10-28T20:57:44.869Z" }, - { url = "https://files.pythonhosted.org/packages/87/4f/36c1992432d31bbc789fa0b93c768d2e9047ec8c7177e5cd84ea85155f36/aiohttp-3.13.2-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0db1e24b852f5f664cd728db140cf11ea0e82450471232a394b3d1a540b0f906", size = 1757178, upload-time = "2025-10-28T20:57:47.216Z" }, - { url = "https://files.pythonhosted.org/packages/ac/b4/8e940dfb03b7e0f68a82b88fd182b9be0a65cb3f35612fe38c038c3112cf/aiohttp-3.13.2-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b009194665bcd128e23eaddef362e745601afa4641930848af4c8559e88f18f9", size = 1838001, upload-time = "2025-10-28T20:57:49.337Z" }, - { url = "https://files.pythonhosted.org/packages/d7/ef/39f3448795499c440ab66084a9db7d20ca7662e94305f175a80f5b7e0072/aiohttp-3.13.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c038a8fdc8103cd51dbd986ecdce141473ffd9775a7a8057a6ed9c3653478011", size = 1716325, upload-time = "2025-10-28T20:57:51.327Z" }, - { url = "https://files.pythonhosted.org/packages/d7/51/b311500ffc860b181c05d91c59a1313bdd05c82960fdd4035a15740d431e/aiohttp-3.13.2-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:66bac29b95a00db411cd758fea0e4b9bdba6d549dfe333f9a945430f5f2cc5a6", size = 1547978, upload-time = "2025-10-28T20:57:53.554Z" }, - { url = "https://files.pythonhosted.org/packages/31/64/b9d733296ef79815226dab8c586ff9e3df41c6aff2e16c06697b2d2e6775/aiohttp-3.13.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4ebf9cfc9ba24a74cf0718f04aac2a3bbe745902cc7c5ebc55c0f3b5777ef213", size = 1682042, upload-time = "2025-10-28T20:57:55.617Z" }, - { url = "https://files.pythonhosted.org/packages/3f/30/43d3e0f9d6473a6db7d472104c4eff4417b1e9df01774cb930338806d36b/aiohttp-3.13.2-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:a4b88ebe35ce54205c7074f7302bd08a4cb83256a3e0870c72d6f68a3aaf8e49", size = 1680085, upload-time = "2025-10-28T20:57:57.59Z" }, - { url = "https://files.pythonhosted.org/packages/16/51/c709f352c911b1864cfd1087577760ced64b3e5bee2aa88b8c0c8e2e4972/aiohttp-3.13.2-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:98c4fb90bb82b70a4ed79ca35f656f4281885be076f3f970ce315402b53099ae", size = 1728238, upload-time = "2025-10-28T20:57:59.525Z" }, - { url = "https://files.pythonhosted.org/packages/19/e2/19bd4c547092b773caeb48ff5ae4b1ae86756a0ee76c16727fcfd281404b/aiohttp-3.13.2-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:ec7534e63ae0f3759df3a1ed4fa6bc8f75082a924b590619c0dd2f76d7043caa", size = 1544395, upload-time = "2025-10-28T20:58:01.914Z" }, - { url = "https://files.pythonhosted.org/packages/cf/87/860f2803b27dfc5ed7be532832a3498e4919da61299b4a1f8eb89b8ff44d/aiohttp-3.13.2-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:5b927cf9b935a13e33644cbed6c8c4b2d0f25b713d838743f8fe7191b33829c4", size = 1742965, upload-time = "2025-10-28T20:58:03.972Z" }, - { url = "https://files.pythonhosted.org/packages/67/7f/db2fc7618925e8c7a601094d5cbe539f732df4fb570740be88ed9e40e99a/aiohttp-3.13.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:88d6c017966a78c5265d996c19cdb79235be5e6412268d7e2ce7dee339471b7a", size = 1697585, upload-time = "2025-10-28T20:58:06.189Z" }, - { url = "https://files.pythonhosted.org/packages/0c/07/9127916cb09bb38284db5036036042b7b2c514c8ebaeee79da550c43a6d6/aiohttp-3.13.2-cp314-cp314-win32.whl", hash = "sha256:f7c183e786e299b5d6c49fb43a769f8eb8e04a2726a2bd5887b98b5cc2d67940", size = 431621, upload-time = "2025-10-28T20:58:08.636Z" }, - { url = "https://files.pythonhosted.org/packages/fb/41/554a8a380df6d3a2bba8a7726429a23f4ac62aaf38de43bb6d6cde7b4d4d/aiohttp-3.13.2-cp314-cp314-win_amd64.whl", hash = "sha256:fe242cd381e0fb65758faf5ad96c2e460df6ee5b2de1072fe97e4127927e00b4", size = 457627, upload-time = "2025-10-28T20:58:11Z" }, - { url = "https://files.pythonhosted.org/packages/c7/8e/3824ef98c039d3951cb65b9205a96dd2b20f22241ee17d89c5701557c826/aiohttp-3.13.2-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:f10d9c0b0188fe85398c61147bbd2a657d616c876863bfeff43376e0e3134673", size = 767360, upload-time = "2025-10-28T20:58:13.358Z" }, - { url = "https://files.pythonhosted.org/packages/a4/0f/6a03e3fc7595421274fa34122c973bde2d89344f8a881b728fa8c774e4f1/aiohttp-3.13.2-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:e7c952aefdf2460f4ae55c5e9c3e80aa72f706a6317e06020f80e96253b1accd", size = 504616, upload-time = "2025-10-28T20:58:15.339Z" }, - { url = "https://files.pythonhosted.org/packages/c6/aa/ed341b670f1bc8a6f2c6a718353d13b9546e2cef3544f573c6a1ff0da711/aiohttp-3.13.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c20423ce14771d98353d2e25e83591fa75dfa90a3c1848f3d7c68243b4fbded3", size = 509131, upload-time = "2025-10-28T20:58:17.693Z" }, - { url = "https://files.pythonhosted.org/packages/7f/f0/c68dac234189dae5c4bbccc0f96ce0cc16b76632cfc3a08fff180045cfa4/aiohttp-3.13.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e96eb1a34396e9430c19d8338d2ec33015e4a87ef2b4449db94c22412e25ccdf", size = 1864168, upload-time = "2025-10-28T20:58:20.113Z" }, - { url = "https://files.pythonhosted.org/packages/8f/65/75a9a76db8364b5d0e52a0c20eabc5d52297385d9af9c35335b924fafdee/aiohttp-3.13.2-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:23fb0783bc1a33640036465019d3bba069942616a6a2353c6907d7fe1ccdaf4e", size = 1719200, upload-time = "2025-10-28T20:58:22.583Z" }, - { url = "https://files.pythonhosted.org/packages/f5/55/8df2ed78d7f41d232f6bd3ff866b6f617026551aa1d07e2f03458f964575/aiohttp-3.13.2-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2e1a9bea6244a1d05a4e57c295d69e159a5c50d8ef16aa390948ee873478d9a5", size = 1843497, upload-time = "2025-10-28T20:58:24.672Z" }, - { url = "https://files.pythonhosted.org/packages/e9/e0/94d7215e405c5a02ccb6a35c7a3a6cfff242f457a00196496935f700cde5/aiohttp-3.13.2-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0a3d54e822688b56e9f6b5816fb3de3a3a64660efac64e4c2dc435230ad23bad", size = 1935703, upload-time = "2025-10-28T20:58:26.758Z" }, - { url = "https://files.pythonhosted.org/packages/0b/78/1eeb63c3f9b2d1015a4c02788fb543141aad0a03ae3f7a7b669b2483f8d4/aiohttp-3.13.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7a653d872afe9f33497215745da7a943d1dc15b728a9c8da1c3ac423af35178e", size = 1792738, upload-time = "2025-10-28T20:58:29.787Z" }, - { url = "https://files.pythonhosted.org/packages/41/75/aaf1eea4c188e51538c04cc568040e3082db263a57086ea74a7d38c39e42/aiohttp-3.13.2-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:56d36e80d2003fa3fc0207fac644216d8532e9504a785ef9a8fd013f84a42c61", size = 1624061, upload-time = "2025-10-28T20:58:32.529Z" }, - { url = "https://files.pythonhosted.org/packages/9b/c2/3b6034de81fbcc43de8aeb209073a2286dfb50b86e927b4efd81cf848197/aiohttp-3.13.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:78cd586d8331fb8e241c2dd6b2f4061778cc69e150514b39a9e28dd050475661", size = 1789201, upload-time = "2025-10-28T20:58:34.618Z" }, - { url = "https://files.pythonhosted.org/packages/c9/38/c15dcf6d4d890217dae79d7213988f4e5fe6183d43893a9cf2fe9e84ca8d/aiohttp-3.13.2-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:20b10bbfbff766294fe99987f7bb3b74fdd2f1a2905f2562132641ad434dcf98", size = 1776868, upload-time = "2025-10-28T20:58:38.835Z" }, - { url = "https://files.pythonhosted.org/packages/04/75/f74fd178ac81adf4f283a74847807ade5150e48feda6aef024403716c30c/aiohttp-3.13.2-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:9ec49dff7e2b3c85cdeaa412e9d438f0ecd71676fde61ec57027dd392f00c693", size = 1790660, upload-time = "2025-10-28T20:58:41.507Z" }, - { url = "https://files.pythonhosted.org/packages/e7/80/7368bd0d06b16b3aba358c16b919e9c46cf11587dc572091031b0e9e3ef0/aiohttp-3.13.2-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:94f05348c4406450f9d73d38efb41d669ad6cd90c7ee194810d0eefbfa875a7a", size = 1617548, upload-time = "2025-10-28T20:58:43.674Z" }, - { url = "https://files.pythonhosted.org/packages/7d/4b/a6212790c50483cb3212e507378fbe26b5086d73941e1ec4b56a30439688/aiohttp-3.13.2-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:fa4dcb605c6f82a80c7f95713c2b11c3b8e9893b3ebd2bc9bde93165ed6107be", size = 1817240, upload-time = "2025-10-28T20:58:45.787Z" }, - { url = "https://files.pythonhosted.org/packages/ff/f7/ba5f0ba4ea8d8f3c32850912944532b933acbf0f3a75546b89269b9b7dde/aiohttp-3.13.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cf00e5db968c3f67eccd2778574cf64d8b27d95b237770aa32400bd7a1ca4f6c", size = 1762334, upload-time = "2025-10-28T20:58:47.936Z" }, - { url = "https://files.pythonhosted.org/packages/7e/83/1a5a1856574588b1cad63609ea9ad75b32a8353ac995d830bf5da9357364/aiohttp-3.13.2-cp314-cp314t-win32.whl", hash = "sha256:d23b5fe492b0805a50d3371e8a728a9134d8de5447dce4c885f5587294750734", size = 464685, upload-time = "2025-10-28T20:58:50.642Z" }, - { url = "https://files.pythonhosted.org/packages/9f/4d/d22668674122c08f4d56972297c51a624e64b3ed1efaa40187607a7cb66e/aiohttp-3.13.2-cp314-cp314t-win_amd64.whl", hash = "sha256:ff0a7b0a82a7ab905cbda74006318d1b12e37c797eb1b0d4eb3e316cf47f658f", size = 498093, upload-time = "2025-10-28T20:58:52.782Z" }, + { url = "https://files.pythonhosted.org/packages/36/d6/5aec9313ee6ea9c7cde8b891b69f4ff4001416867104580670a31daeba5b/aiohttp-3.13.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d5a372fd5afd301b3a89582817fdcdb6c34124787c70dbcc616f259013e7eef7", size = 738950, upload-time = "2026-01-03T17:29:13.002Z" }, + { url = "https://files.pythonhosted.org/packages/68/03/8fa90a7e6d11ff20a18837a8e2b5dd23db01aabc475aa9271c8ad33299f5/aiohttp-3.13.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:147e422fd1223005c22b4fe080f5d93ced44460f5f9c105406b753612b587821", size = 496099, upload-time = "2026-01-03T17:29:15.268Z" }, + { url = "https://files.pythonhosted.org/packages/d2/23/b81f744d402510a8366b74eb420fc0cc1170d0c43daca12d10814df85f10/aiohttp-3.13.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:859bd3f2156e81dd01432f5849fc73e2243d4a487c4fd26609b1299534ee1845", size = 491072, upload-time = "2026-01-03T17:29:16.922Z" }, + { url = "https://files.pythonhosted.org/packages/d5/e1/56d1d1c0dd334cd203dd97706ce004c1aa24b34a813b0b8daf3383039706/aiohttp-3.13.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dca68018bf48c251ba17c72ed479f4dafe9dbd5a73707ad8d28a38d11f3d42af", size = 1671588, upload-time = "2026-01-03T17:29:18.539Z" }, + { url = "https://files.pythonhosted.org/packages/5f/34/8d7f962604f4bc2b4e39eb1220dac7d4e4cba91fb9ba0474b4ecd67db165/aiohttp-3.13.3-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:fee0c6bc7db1de362252affec009707a17478a00ec69f797d23ca256e36d5940", size = 1640334, upload-time = "2026-01-03T17:29:21.028Z" }, + { url = "https://files.pythonhosted.org/packages/94/1d/fcccf2c668d87337ddeef9881537baee13c58d8f01f12ba8a24215f2b804/aiohttp-3.13.3-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c048058117fd649334d81b4b526e94bde3ccaddb20463a815ced6ecbb7d11160", size = 1722656, upload-time = "2026-01-03T17:29:22.531Z" }, + { url = "https://files.pythonhosted.org/packages/aa/98/c6f3b081c4c606bc1e5f2ec102e87d6411c73a9ef3616fea6f2d5c98c062/aiohttp-3.13.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:215a685b6fbbfcf71dfe96e3eba7a6f58f10da1dfdf4889c7dd856abe430dca7", size = 1817625, upload-time = "2026-01-03T17:29:24.276Z" }, + { url = "https://files.pythonhosted.org/packages/2c/c0/cfcc3d2e11b477f86e1af2863f3858c8850d751ce8dc39c4058a072c9e54/aiohttp-3.13.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:de2c184bb1fe2cbd2cefba613e9db29a5ab559323f994b6737e370d3da0ac455", size = 1672604, upload-time = "2026-01-03T17:29:26.099Z" }, + { url = "https://files.pythonhosted.org/packages/1e/77/6b4ffcbcac4c6a5d041343a756f34a6dd26174ae07f977a64fe028dda5b0/aiohttp-3.13.3-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:75ca857eba4e20ce9f546cd59c7007b33906a4cd48f2ff6ccf1ccfc3b646f279", size = 1554370, upload-time = "2026-01-03T17:29:28.121Z" }, + { url = "https://files.pythonhosted.org/packages/f2/f0/e3ddfa93f17d689dbe014ba048f18e0c9f9b456033b70e94349a2e9048be/aiohttp-3.13.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:81e97251d9298386c2b7dbeb490d3d1badbdc69107fb8c9299dd04eb39bddc0e", size = 1642023, upload-time = "2026-01-03T17:29:30.002Z" }, + { url = "https://files.pythonhosted.org/packages/eb/45/c14019c9ec60a8e243d06d601b33dcc4fd92379424bde3021725859d7f99/aiohttp-3.13.3-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:c0e2d366af265797506f0283487223146af57815b388623f0357ef7eac9b209d", size = 1649680, upload-time = "2026-01-03T17:29:31.782Z" }, + { url = "https://files.pythonhosted.org/packages/9c/fd/09c9451dae5aa5c5ed756df95ff9ef549d45d4be663bafd1e4954fd836f0/aiohttp-3.13.3-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4e239d501f73d6db1522599e14b9b321a7e3b1de66ce33d53a765d975e9f4808", size = 1692407, upload-time = "2026-01-03T17:29:33.392Z" }, + { url = "https://files.pythonhosted.org/packages/a6/81/938bc2ec33c10efd6637ccb3d22f9f3160d08e8f3aa2587a2c2d5ab578eb/aiohttp-3.13.3-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:0db318f7a6f065d84cb1e02662c526294450b314a02bd9e2a8e67f0d8564ce40", size = 1543047, upload-time = "2026-01-03T17:29:34.855Z" }, + { url = "https://files.pythonhosted.org/packages/f7/23/80488ee21c8d567c83045e412e1d9b7077d27171591a4eb7822586e8c06a/aiohttp-3.13.3-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:bfc1cc2fe31a6026a8a88e4ecfb98d7f6b1fec150cfd708adbfd1d2f42257c29", size = 1715264, upload-time = "2026-01-03T17:29:36.389Z" }, + { url = "https://files.pythonhosted.org/packages/e2/83/259a8da6683182768200b368120ab3deff5370bed93880fb9a3a86299f34/aiohttp-3.13.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:af71fff7bac6bb7508956696dce8f6eec2bbb045eceb40343944b1ae62b5ef11", size = 1657275, upload-time = "2026-01-03T17:29:38.162Z" }, + { url = "https://files.pythonhosted.org/packages/3f/4f/2c41f800a0b560785c10fb316216ac058c105f9be50bdc6a285de88db625/aiohttp-3.13.3-cp310-cp310-win32.whl", hash = "sha256:37da61e244d1749798c151421602884db5270faf479cf0ef03af0ff68954c9dd", size = 434053, upload-time = "2026-01-03T17:29:40.074Z" }, + { url = "https://files.pythonhosted.org/packages/80/df/29cd63c7ecfdb65ccc12f7d808cac4fa2a19544660c06c61a4a48462de0c/aiohttp-3.13.3-cp310-cp310-win_amd64.whl", hash = "sha256:7e63f210bc1b57ef699035f2b4b6d9ce096b5914414a49b0997c839b2bd2223c", size = 456687, upload-time = "2026-01-03T17:29:41.819Z" }, + { url = "https://files.pythonhosted.org/packages/f1/4c/a164164834f03924d9a29dc3acd9e7ee58f95857e0b467f6d04298594ebb/aiohttp-3.13.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5b6073099fb654e0a068ae678b10feff95c5cae95bbfcbfa7af669d361a8aa6b", size = 746051, upload-time = "2026-01-03T17:29:43.287Z" }, + { url = "https://files.pythonhosted.org/packages/82/71/d5c31390d18d4f58115037c432b7e0348c60f6f53b727cad33172144a112/aiohttp-3.13.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1cb93e166e6c28716c8c6aeb5f99dfb6d5ccf482d29fe9bf9a794110e6d0ab64", size = 499234, upload-time = "2026-01-03T17:29:44.822Z" }, + { url = "https://files.pythonhosted.org/packages/0e/c9/741f8ac91e14b1d2e7100690425a5b2b919a87a5075406582991fb7de920/aiohttp-3.13.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:28e027cf2f6b641693a09f631759b4d9ce9165099d2b5d92af9bd4e197690eea", size = 494979, upload-time = "2026-01-03T17:29:46.405Z" }, + { url = "https://files.pythonhosted.org/packages/75/b5/31d4d2e802dfd59f74ed47eba48869c1c21552c586d5e81a9d0d5c2ad640/aiohttp-3.13.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3b61b7169ababd7802f9568ed96142616a9118dd2be0d1866e920e77ec8fa92a", size = 1748297, upload-time = "2026-01-03T17:29:48.083Z" }, + { url = "https://files.pythonhosted.org/packages/1a/3e/eefad0ad42959f226bb79664826883f2687d602a9ae2941a18e0484a74d3/aiohttp-3.13.3-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:80dd4c21b0f6237676449c6baaa1039abae86b91636b6c91a7f8e61c87f89540", size = 1707172, upload-time = "2026-01-03T17:29:49.648Z" }, + { url = "https://files.pythonhosted.org/packages/c5/3a/54a64299fac2891c346cdcf2aa6803f994a2e4beeaf2e5a09dcc54acc842/aiohttp-3.13.3-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:65d2ccb7eabee90ce0503c17716fc77226be026dcc3e65cce859a30db715025b", size = 1805405, upload-time = "2026-01-03T17:29:51.244Z" }, + { url = "https://files.pythonhosted.org/packages/6c/70/ddc1b7169cf64075e864f64595a14b147a895a868394a48f6a8031979038/aiohttp-3.13.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5b179331a481cb5529fca8b432d8d3c7001cb217513c94cd72d668d1248688a3", size = 1899449, upload-time = "2026-01-03T17:29:53.938Z" }, + { url = "https://files.pythonhosted.org/packages/a1/7e/6815aab7d3a56610891c76ef79095677b8b5be6646aaf00f69b221765021/aiohttp-3.13.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d4c940f02f49483b18b079d1c27ab948721852b281f8b015c058100e9421dd1", size = 1748444, upload-time = "2026-01-03T17:29:55.484Z" }, + { url = "https://files.pythonhosted.org/packages/6b/f2/073b145c4100da5511f457dc0f7558e99b2987cf72600d42b559db856fbc/aiohttp-3.13.3-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f9444f105664c4ce47a2a7171a2418bce5b7bae45fb610f4e2c36045d85911d3", size = 1606038, upload-time = "2026-01-03T17:29:57.179Z" }, + { url = "https://files.pythonhosted.org/packages/0a/c1/778d011920cae03ae01424ec202c513dc69243cf2db303965615b81deeea/aiohttp-3.13.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:694976222c711d1d00ba131904beb60534f93966562f64440d0c9d41b8cdb440", size = 1724156, upload-time = "2026-01-03T17:29:58.914Z" }, + { url = "https://files.pythonhosted.org/packages/0e/cb/3419eabf4ec1e9ec6f242c32b689248365a1cf621891f6f0386632525494/aiohttp-3.13.3-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:f33ed1a2bf1997a36661874b017f5c4b760f41266341af36febaf271d179f6d7", size = 1722340, upload-time = "2026-01-03T17:30:01.962Z" }, + { url = "https://files.pythonhosted.org/packages/7a/e5/76cf77bdbc435bf233c1f114edad39ed4177ccbfab7c329482b179cff4f4/aiohttp-3.13.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e636b3c5f61da31a92bf0d91da83e58fdfa96f178ba682f11d24f31944cdd28c", size = 1783041, upload-time = "2026-01-03T17:30:03.609Z" }, + { url = "https://files.pythonhosted.org/packages/9d/d4/dd1ca234c794fd29c057ce8c0566b8ef7fd6a51069de5f06fa84b9a1971c/aiohttp-3.13.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:5d2d94f1f5fcbe40838ac51a6ab5704a6f9ea42e72ceda48de5e6b898521da51", size = 1596024, upload-time = "2026-01-03T17:30:05.132Z" }, + { url = "https://files.pythonhosted.org/packages/55/58/4345b5f26661a6180afa686c473620c30a66afdf120ed3dd545bbc809e85/aiohttp-3.13.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:2be0e9ccf23e8a94f6f0650ce06042cefc6ac703d0d7ab6c7a917289f2539ad4", size = 1804590, upload-time = "2026-01-03T17:30:07.135Z" }, + { url = "https://files.pythonhosted.org/packages/7b/06/05950619af6c2df7e0a431d889ba2813c9f0129cec76f663e547a5ad56f2/aiohttp-3.13.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9af5e68ee47d6534d36791bbe9b646d2a7c7deb6fc24d7943628edfbb3581f29", size = 1740355, upload-time = "2026-01-03T17:30:09.083Z" }, + { url = "https://files.pythonhosted.org/packages/3e/80/958f16de79ba0422d7c1e284b2abd0c84bc03394fbe631d0a39ffa10e1eb/aiohttp-3.13.3-cp311-cp311-win32.whl", hash = "sha256:a2212ad43c0833a873d0fb3c63fa1bacedd4cf6af2fee62bf4b739ceec3ab239", size = 433701, upload-time = "2026-01-03T17:30:10.869Z" }, + { url = "https://files.pythonhosted.org/packages/dc/f2/27cdf04c9851712d6c1b99df6821a6623c3c9e55956d4b1e318c337b5a48/aiohttp-3.13.3-cp311-cp311-win_amd64.whl", hash = "sha256:642f752c3eb117b105acbd87e2c143de710987e09860d674e068c4c2c441034f", size = 457678, upload-time = "2026-01-03T17:30:12.719Z" }, + { url = "https://files.pythonhosted.org/packages/a0/be/4fc11f202955a69e0db803a12a062b8379c970c7c84f4882b6da17337cc1/aiohttp-3.13.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:b903a4dfee7d347e2d87697d0713be59e0b87925be030c9178c5faa58ea58d5c", size = 739732, upload-time = "2026-01-03T17:30:14.23Z" }, + { url = "https://files.pythonhosted.org/packages/97/2c/621d5b851f94fa0bb7430d6089b3aa970a9d9b75196bc93bb624b0db237a/aiohttp-3.13.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a45530014d7a1e09f4a55f4f43097ba0fd155089372e105e4bff4ca76cb1b168", size = 494293, upload-time = "2026-01-03T17:30:15.96Z" }, + { url = "https://files.pythonhosted.org/packages/5d/43/4be01406b78e1be8320bb8316dc9c42dbab553d281c40364e0f862d5661c/aiohttp-3.13.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:27234ef6d85c914f9efeb77ff616dbf4ad2380be0cda40b4db086ffc7ddd1b7d", size = 493533, upload-time = "2026-01-03T17:30:17.431Z" }, + { url = "https://files.pythonhosted.org/packages/8d/a8/5a35dc56a06a2c90d4742cbf35294396907027f80eea696637945a106f25/aiohttp-3.13.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d32764c6c9aafb7fb55366a224756387cd50bfa720f32b88e0e6fa45b27dcf29", size = 1737839, upload-time = "2026-01-03T17:30:19.422Z" }, + { url = "https://files.pythonhosted.org/packages/bf/62/4b9eeb331da56530bf2e198a297e5303e1c1ebdceeb00fe9b568a65c5a0c/aiohttp-3.13.3-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:b1a6102b4d3ebc07dad44fbf07b45bb600300f15b552ddf1851b5390202ea2e3", size = 1703932, upload-time = "2026-01-03T17:30:21.756Z" }, + { url = "https://files.pythonhosted.org/packages/7c/f6/af16887b5d419e6a367095994c0b1332d154f647e7dc2bd50e61876e8e3d/aiohttp-3.13.3-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c014c7ea7fb775dd015b2d3137378b7be0249a448a1612268b5a90c2d81de04d", size = 1771906, upload-time = "2026-01-03T17:30:23.932Z" }, + { url = "https://files.pythonhosted.org/packages/ce/83/397c634b1bcc24292fa1e0c7822800f9f6569e32934bdeef09dae7992dfb/aiohttp-3.13.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2b8d8ddba8f95ba17582226f80e2de99c7a7948e66490ef8d947e272a93e9463", size = 1871020, upload-time = "2026-01-03T17:30:26Z" }, + { url = "https://files.pythonhosted.org/packages/86/f6/a62cbbf13f0ac80a70f71b1672feba90fdb21fd7abd8dbf25c0105fb6fa3/aiohttp-3.13.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9ae8dd55c8e6c4257eae3a20fd2c8f41edaea5992ed67156642493b8daf3cecc", size = 1755181, upload-time = "2026-01-03T17:30:27.554Z" }, + { url = "https://files.pythonhosted.org/packages/0a/87/20a35ad487efdd3fba93d5843efdfaa62d2f1479eaafa7453398a44faf13/aiohttp-3.13.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:01ad2529d4b5035578f5081606a465f3b814c542882804e2e8cda61adf5c71bf", size = 1561794, upload-time = "2026-01-03T17:30:29.254Z" }, + { url = "https://files.pythonhosted.org/packages/de/95/8fd69a66682012f6716e1bc09ef8a1a2a91922c5725cb904689f112309c4/aiohttp-3.13.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:bb4f7475e359992b580559e008c598091c45b5088f28614e855e42d39c2f1033", size = 1697900, upload-time = "2026-01-03T17:30:31.033Z" }, + { url = "https://files.pythonhosted.org/packages/e5/66/7b94b3b5ba70e955ff597672dad1691333080e37f50280178967aff68657/aiohttp-3.13.3-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:c19b90316ad3b24c69cd78d5c9b4f3aa4497643685901185b65166293d36a00f", size = 1728239, upload-time = "2026-01-03T17:30:32.703Z" }, + { url = "https://files.pythonhosted.org/packages/47/71/6f72f77f9f7d74719692ab65a2a0252584bf8d5f301e2ecb4c0da734530a/aiohttp-3.13.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:96d604498a7c782cb15a51c406acaea70d8c027ee6b90c569baa6e7b93073679", size = 1740527, upload-time = "2026-01-03T17:30:34.695Z" }, + { url = "https://files.pythonhosted.org/packages/fa/b4/75ec16cbbd5c01bdaf4a05b19e103e78d7ce1ef7c80867eb0ace42ff4488/aiohttp-3.13.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:084911a532763e9d3dd95adf78a78f4096cd5f58cdc18e6fdbc1b58417a45423", size = 1554489, upload-time = "2026-01-03T17:30:36.864Z" }, + { url = "https://files.pythonhosted.org/packages/52/8f/bc518c0eea29f8406dcf7ed1f96c9b48e3bc3995a96159b3fc11f9e08321/aiohttp-3.13.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:7a4a94eb787e606d0a09404b9c38c113d3b099d508021faa615d70a0131907ce", size = 1767852, upload-time = "2026-01-03T17:30:39.433Z" }, + { url = "https://files.pythonhosted.org/packages/9d/f2/a07a75173124f31f11ea6f863dc44e6f09afe2bca45dd4e64979490deab1/aiohttp-3.13.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:87797e645d9d8e222e04160ee32aa06bc5c163e8499f24db719e7852ec23093a", size = 1722379, upload-time = "2026-01-03T17:30:41.081Z" }, + { url = "https://files.pythonhosted.org/packages/3c/4a/1a3fee7c21350cac78e5c5cef711bac1b94feca07399f3d406972e2d8fcd/aiohttp-3.13.3-cp312-cp312-win32.whl", hash = "sha256:b04be762396457bef43f3597c991e192ee7da460a4953d7e647ee4b1c28e7046", size = 428253, upload-time = "2026-01-03T17:30:42.644Z" }, + { url = "https://files.pythonhosted.org/packages/d9/b7/76175c7cb4eb73d91ad63c34e29fc4f77c9386bba4a65b53ba8e05ee3c39/aiohttp-3.13.3-cp312-cp312-win_amd64.whl", hash = "sha256:e3531d63d3bdfa7e3ac5e9b27b2dd7ec9df3206a98e0b3445fa906f233264c57", size = 455407, upload-time = "2026-01-03T17:30:44.195Z" }, + { url = "https://files.pythonhosted.org/packages/97/8a/12ca489246ca1faaf5432844adbfce7ff2cc4997733e0af120869345643a/aiohttp-3.13.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:5dff64413671b0d3e7d5918ea490bdccb97a4ad29b3f311ed423200b2203e01c", size = 734190, upload-time = "2026-01-03T17:30:45.832Z" }, + { url = "https://files.pythonhosted.org/packages/32/08/de43984c74ed1fca5c014808963cc83cb00d7bb06af228f132d33862ca76/aiohttp-3.13.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:87b9aab6d6ed88235aa2970294f496ff1a1f9adcd724d800e9b952395a80ffd9", size = 491783, upload-time = "2026-01-03T17:30:47.466Z" }, + { url = "https://files.pythonhosted.org/packages/17/f8/8dd2cf6112a5a76f81f81a5130c57ca829d101ad583ce57f889179accdda/aiohttp-3.13.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:425c126c0dc43861e22cb1c14ba4c8e45d09516d0a3ae0a3f7494b79f5f233a3", size = 490704, upload-time = "2026-01-03T17:30:49.373Z" }, + { url = "https://files.pythonhosted.org/packages/6d/40/a46b03ca03936f832bc7eaa47cfbb1ad012ba1be4790122ee4f4f8cba074/aiohttp-3.13.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7f9120f7093c2a32d9647abcaf21e6ad275b4fbec5b55969f978b1a97c7c86bf", size = 1720652, upload-time = "2026-01-03T17:30:50.974Z" }, + { url = "https://files.pythonhosted.org/packages/f7/7e/917fe18e3607af92657e4285498f500dca797ff8c918bd7d90b05abf6c2a/aiohttp-3.13.3-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:697753042d57f4bf7122cab985bf15d0cef23c770864580f5af4f52023a56bd6", size = 1692014, upload-time = "2026-01-03T17:30:52.729Z" }, + { url = "https://files.pythonhosted.org/packages/71/b6/cefa4cbc00d315d68973b671cf105b21a609c12b82d52e5d0c9ae61d2a09/aiohttp-3.13.3-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6de499a1a44e7de70735d0b39f67c8f25eb3d91eb3103be99ca0fa882cdd987d", size = 1759777, upload-time = "2026-01-03T17:30:54.537Z" }, + { url = "https://files.pythonhosted.org/packages/fb/e3/e06ee07b45e59e6d81498b591fc589629be1553abb2a82ce33efe2a7b068/aiohttp-3.13.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:37239e9f9a7ea9ac5bf6b92b0260b01f8a22281996da609206a84df860bc1261", size = 1861276, upload-time = "2026-01-03T17:30:56.512Z" }, + { url = "https://files.pythonhosted.org/packages/7c/24/75d274228acf35ceeb2850b8ce04de9dd7355ff7a0b49d607ee60c29c518/aiohttp-3.13.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f76c1e3fe7d7c8afad7ed193f89a292e1999608170dcc9751a7462a87dfd5bc0", size = 1743131, upload-time = "2026-01-03T17:30:58.256Z" }, + { url = "https://files.pythonhosted.org/packages/04/98/3d21dde21889b17ca2eea54fdcff21b27b93f45b7bb94ca029c31ab59dc3/aiohttp-3.13.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fc290605db2a917f6e81b0e1e0796469871f5af381ce15c604a3c5c7e51cb730", size = 1556863, upload-time = "2026-01-03T17:31:00.445Z" }, + { url = "https://files.pythonhosted.org/packages/9e/84/da0c3ab1192eaf64782b03971ab4055b475d0db07b17eff925e8c93b3aa5/aiohttp-3.13.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4021b51936308aeea0367b8f006dc999ca02bc118a0cc78c303f50a2ff6afb91", size = 1682793, upload-time = "2026-01-03T17:31:03.024Z" }, + { url = "https://files.pythonhosted.org/packages/ff/0f/5802ada182f575afa02cbd0ec5180d7e13a402afb7c2c03a9aa5e5d49060/aiohttp-3.13.3-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:49a03727c1bba9a97d3e93c9f93ca03a57300f484b6e935463099841261195d3", size = 1716676, upload-time = "2026-01-03T17:31:04.842Z" }, + { url = "https://files.pythonhosted.org/packages/3f/8c/714d53bd8b5a4560667f7bbbb06b20c2382f9c7847d198370ec6526af39c/aiohttp-3.13.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3d9908a48eb7416dc1f4524e69f1d32e5d90e3981e4e37eb0aa1cd18f9cfa2a4", size = 1733217, upload-time = "2026-01-03T17:31:06.868Z" }, + { url = "https://files.pythonhosted.org/packages/7d/79/e2176f46d2e963facea939f5be2d26368ce543622be6f00a12844d3c991f/aiohttp-3.13.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:2712039939ec963c237286113c68dbad80a82a4281543f3abf766d9d73228998", size = 1552303, upload-time = "2026-01-03T17:31:08.958Z" }, + { url = "https://files.pythonhosted.org/packages/ab/6a/28ed4dea1759916090587d1fe57087b03e6c784a642b85ef48217b0277ae/aiohttp-3.13.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:7bfdc049127717581866fa4708791220970ce291c23e28ccf3922c700740fdc0", size = 1763673, upload-time = "2026-01-03T17:31:10.676Z" }, + { url = "https://files.pythonhosted.org/packages/e8/35/4a3daeb8b9fab49240d21c04d50732313295e4bd813a465d840236dd0ce1/aiohttp-3.13.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8057c98e0c8472d8846b9c79f56766bcc57e3e8ac7bfd510482332366c56c591", size = 1721120, upload-time = "2026-01-03T17:31:12.575Z" }, + { url = "https://files.pythonhosted.org/packages/bc/9f/d643bb3c5fb99547323e635e251c609fbbc660d983144cfebec529e09264/aiohttp-3.13.3-cp313-cp313-win32.whl", hash = "sha256:1449ceddcdbcf2e0446957863af03ebaaa03f94c090f945411b61269e2cb5daf", size = 427383, upload-time = "2026-01-03T17:31:14.382Z" }, + { url = "https://files.pythonhosted.org/packages/4e/f1/ab0395f8a79933577cdd996dd2f9aa6014af9535f65dddcf88204682fe62/aiohttp-3.13.3-cp313-cp313-win_amd64.whl", hash = "sha256:693781c45a4033d31d4187d2436f5ac701e7bbfe5df40d917736108c1cc7436e", size = 453899, upload-time = "2026-01-03T17:31:15.958Z" }, + { url = "https://files.pythonhosted.org/packages/99/36/5b6514a9f5d66f4e2597e40dea2e3db271e023eb7a5d22defe96ba560996/aiohttp-3.13.3-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:ea37047c6b367fd4bd632bff8077449b8fa034b69e812a18e0132a00fae6e808", size = 737238, upload-time = "2026-01-03T17:31:17.909Z" }, + { url = "https://files.pythonhosted.org/packages/f7/49/459327f0d5bcd8c6c9ca69e60fdeebc3622861e696490d8674a6d0cb90a6/aiohttp-3.13.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:6fc0e2337d1a4c3e6acafda6a78a39d4c14caea625124817420abceed36e2415", size = 492292, upload-time = "2026-01-03T17:31:19.919Z" }, + { url = "https://files.pythonhosted.org/packages/e8/0b/b97660c5fd05d3495b4eb27f2d0ef18dc1dc4eff7511a9bf371397ff0264/aiohttp-3.13.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c685f2d80bb67ca8c3837823ad76196b3694b0159d232206d1e461d3d434666f", size = 493021, upload-time = "2026-01-03T17:31:21.636Z" }, + { url = "https://files.pythonhosted.org/packages/54/d4/438efabdf74e30aeceb890c3290bbaa449780583b1270b00661126b8aae4/aiohttp-3.13.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:48e377758516d262bde50c2584fc6c578af272559c409eecbdd2bae1601184d6", size = 1717263, upload-time = "2026-01-03T17:31:23.296Z" }, + { url = "https://files.pythonhosted.org/packages/71/f2/7bddc7fd612367d1459c5bcf598a9e8f7092d6580d98de0e057eb42697ad/aiohttp-3.13.3-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:34749271508078b261c4abb1767d42b8d0c0cc9449c73a4df494777dc55f0687", size = 1669107, upload-time = "2026-01-03T17:31:25.334Z" }, + { url = "https://files.pythonhosted.org/packages/00/5a/1aeaecca40e22560f97610a329e0e5efef5e0b5afdf9f857f0d93839ab2e/aiohttp-3.13.3-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:82611aeec80eb144416956ec85b6ca45a64d76429c1ed46ae1b5f86c6e0c9a26", size = 1760196, upload-time = "2026-01-03T17:31:27.394Z" }, + { url = "https://files.pythonhosted.org/packages/f8/f8/0ff6992bea7bd560fc510ea1c815f87eedd745fe035589c71ce05612a19a/aiohttp-3.13.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2fff83cfc93f18f215896e3a190e8e5cb413ce01553901aca925176e7568963a", size = 1843591, upload-time = "2026-01-03T17:31:29.238Z" }, + { url = "https://files.pythonhosted.org/packages/e3/d1/e30e537a15f53485b61f5be525f2157da719819e8377298502aebac45536/aiohttp-3.13.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bbe7d4cecacb439e2e2a8a1a7b935c25b812af7a5fd26503a66dadf428e79ec1", size = 1720277, upload-time = "2026-01-03T17:31:31.053Z" }, + { url = "https://files.pythonhosted.org/packages/84/45/23f4c451d8192f553d38d838831ebbc156907ea6e05557f39563101b7717/aiohttp-3.13.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b928f30fe49574253644b1ca44b1b8adbd903aa0da4b9054a6c20fc7f4092a25", size = 1548575, upload-time = "2026-01-03T17:31:32.87Z" }, + { url = "https://files.pythonhosted.org/packages/6a/ed/0a42b127a43712eda7807e7892c083eadfaf8429ca8fb619662a530a3aab/aiohttp-3.13.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7b5e8fe4de30df199155baaf64f2fcd604f4c678ed20910db8e2c66dc4b11603", size = 1679455, upload-time = "2026-01-03T17:31:34.76Z" }, + { url = "https://files.pythonhosted.org/packages/2e/b5/c05f0c2b4b4fe2c9d55e73b6d3ed4fd6c9dc2684b1d81cbdf77e7fad9adb/aiohttp-3.13.3-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:8542f41a62bcc58fc7f11cf7c90e0ec324ce44950003feb70640fc2a9092c32a", size = 1687417, upload-time = "2026-01-03T17:31:36.699Z" }, + { url = "https://files.pythonhosted.org/packages/c9/6b/915bc5dad66aef602b9e459b5a973529304d4e89ca86999d9d75d80cbd0b/aiohttp-3.13.3-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:5e1d8c8b8f1d91cd08d8f4a3c2b067bfca6ec043d3ff36de0f3a715feeedf926", size = 1729968, upload-time = "2026-01-03T17:31:38.622Z" }, + { url = "https://files.pythonhosted.org/packages/11/3b/e84581290a9520024a08640b63d07673057aec5ca548177a82026187ba73/aiohttp-3.13.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:90455115e5da1c3c51ab619ac57f877da8fd6d73c05aacd125c5ae9819582aba", size = 1545690, upload-time = "2026-01-03T17:31:40.57Z" }, + { url = "https://files.pythonhosted.org/packages/f5/04/0c3655a566c43fd647c81b895dfe361b9f9ad6d58c19309d45cff52d6c3b/aiohttp-3.13.3-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:042e9e0bcb5fba81886c8b4fbb9a09d6b8a00245fd8d88e4d989c1f96c74164c", size = 1746390, upload-time = "2026-01-03T17:31:42.857Z" }, + { url = "https://files.pythonhosted.org/packages/1f/53/71165b26978f719c3419381514c9690bd5980e764a09440a10bb816ea4ab/aiohttp-3.13.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2eb752b102b12a76ca02dff751a801f028b4ffbbc478840b473597fc91a9ed43", size = 1702188, upload-time = "2026-01-03T17:31:44.984Z" }, + { url = "https://files.pythonhosted.org/packages/29/a7/cbe6c9e8e136314fa1980da388a59d2f35f35395948a08b6747baebb6aa6/aiohttp-3.13.3-cp314-cp314-win32.whl", hash = "sha256:b556c85915d8efaed322bf1bdae9486aa0f3f764195a0fb6ee962e5c71ef5ce1", size = 433126, upload-time = "2026-01-03T17:31:47.463Z" }, + { url = "https://files.pythonhosted.org/packages/de/56/982704adea7d3b16614fc5936014e9af85c0e34b58f9046655817f04306e/aiohttp-3.13.3-cp314-cp314-win_amd64.whl", hash = "sha256:9bf9f7a65e7aa20dd764151fb3d616c81088f91f8df39c3893a536e279b4b984", size = 459128, upload-time = "2026-01-03T17:31:49.2Z" }, + { url = "https://files.pythonhosted.org/packages/6c/2a/3c79b638a9c3d4658d345339d22070241ea341ed4e07b5ac60fb0f418003/aiohttp-3.13.3-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:05861afbbec40650d8a07ea324367cb93e9e8cc7762e04dd4405df99fa65159c", size = 769512, upload-time = "2026-01-03T17:31:51.134Z" }, + { url = "https://files.pythonhosted.org/packages/29/b9/3e5014d46c0ab0db8707e0ac2711ed28c4da0218c358a4e7c17bae0d8722/aiohttp-3.13.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2fc82186fadc4a8316768d61f3722c230e2c1dcab4200d52d2ebdf2482e47592", size = 506444, upload-time = "2026-01-03T17:31:52.85Z" }, + { url = "https://files.pythonhosted.org/packages/90/03/c1d4ef9a054e151cd7839cdc497f2638f00b93cbe8043983986630d7a80c/aiohttp-3.13.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0add0900ff220d1d5c5ebbf99ed88b0c1bbf87aa7e4262300ed1376a6b13414f", size = 510798, upload-time = "2026-01-03T17:31:54.91Z" }, + { url = "https://files.pythonhosted.org/packages/ea/76/8c1e5abbfe8e127c893fe7ead569148a4d5a799f7cf958d8c09f3eedf097/aiohttp-3.13.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:568f416a4072fbfae453dcf9a99194bbb8bdeab718e08ee13dfa2ba0e4bebf29", size = 1868835, upload-time = "2026-01-03T17:31:56.733Z" }, + { url = "https://files.pythonhosted.org/packages/8e/ac/984c5a6f74c363b01ff97adc96a3976d9c98940b8969a1881575b279ac5d/aiohttp-3.13.3-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:add1da70de90a2569c5e15249ff76a631ccacfe198375eead4aadf3b8dc849dc", size = 1720486, upload-time = "2026-01-03T17:31:58.65Z" }, + { url = "https://files.pythonhosted.org/packages/b2/9a/b7039c5f099c4eb632138728828b33428585031a1e658d693d41d07d89d1/aiohttp-3.13.3-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:10b47b7ba335d2e9b1239fa571131a87e2d8ec96b333e68b2a305e7a98b0bae2", size = 1847951, upload-time = "2026-01-03T17:32:00.989Z" }, + { url = "https://files.pythonhosted.org/packages/3c/02/3bec2b9a1ba3c19ff89a43a19324202b8eb187ca1e928d8bdac9bbdddebd/aiohttp-3.13.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3dd4dce1c718e38081c8f35f323209d4c1df7d4db4bab1b5c88a6b4d12b74587", size = 1941001, upload-time = "2026-01-03T17:32:03.122Z" }, + { url = "https://files.pythonhosted.org/packages/37/df/d879401cedeef27ac4717f6426c8c36c3091c6e9f08a9178cc87549c537f/aiohttp-3.13.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:34bac00a67a812570d4a460447e1e9e06fae622946955f939051e7cc895cfab8", size = 1797246, upload-time = "2026-01-03T17:32:05.255Z" }, + { url = "https://files.pythonhosted.org/packages/8d/15/be122de1f67e6953add23335c8ece6d314ab67c8bebb3f181063010795a7/aiohttp-3.13.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a19884d2ee70b06d9204b2727a7b9f983d0c684c650254679e716b0b77920632", size = 1627131, upload-time = "2026-01-03T17:32:07.607Z" }, + { url = "https://files.pythonhosted.org/packages/12/12/70eedcac9134cfa3219ab7af31ea56bc877395b1ac30d65b1bc4b27d0438/aiohttp-3.13.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5f8ca7f2bb6ba8348a3614c7918cc4bb73268c5ac2a207576b7afea19d3d9f64", size = 1795196, upload-time = "2026-01-03T17:32:09.59Z" }, + { url = "https://files.pythonhosted.org/packages/32/11/b30e1b1cd1f3054af86ebe60df96989c6a414dd87e27ad16950eee420bea/aiohttp-3.13.3-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:b0d95340658b9d2f11d9697f59b3814a9d3bb4b7a7c20b131df4bcef464037c0", size = 1782841, upload-time = "2026-01-03T17:32:11.445Z" }, + { url = "https://files.pythonhosted.org/packages/88/0d/d98a9367b38912384a17e287850f5695c528cff0f14f791ce8ee2e4f7796/aiohttp-3.13.3-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:a1e53262fd202e4b40b70c3aff944a8155059beedc8a89bba9dc1f9ef06a1b56", size = 1795193, upload-time = "2026-01-03T17:32:13.705Z" }, + { url = "https://files.pythonhosted.org/packages/43/a5/a2dfd1f5ff5581632c7f6a30e1744deda03808974f94f6534241ef60c751/aiohttp-3.13.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:d60ac9663f44168038586cab2157e122e46bdef09e9368b37f2d82d354c23f72", size = 1621979, upload-time = "2026-01-03T17:32:15.965Z" }, + { url = "https://files.pythonhosted.org/packages/fa/f0/12973c382ae7c1cccbc4417e129c5bf54c374dfb85af70893646e1f0e749/aiohttp-3.13.3-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:90751b8eed69435bac9ff4e3d2f6b3af1f57e37ecb0fbeee59c0174c9e2d41df", size = 1822193, upload-time = "2026-01-03T17:32:18.219Z" }, + { url = "https://files.pythonhosted.org/packages/3c/5f/24155e30ba7f8c96918af1350eb0663e2430aad9e001c0489d89cd708ab1/aiohttp-3.13.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:fc353029f176fd2b3ec6cfc71be166aba1936fe5d73dd1992ce289ca6647a9aa", size = 1769801, upload-time = "2026-01-03T17:32:20.25Z" }, + { url = "https://files.pythonhosted.org/packages/eb/f8/7314031ff5c10e6ece114da79b338ec17eeff3a079e53151f7e9f43c4723/aiohttp-3.13.3-cp314-cp314t-win32.whl", hash = "sha256:2e41b18a58da1e474a057b3d35248d8320029f61d70a37629535b16a0c8f3767", size = 466523, upload-time = "2026-01-03T17:32:22.215Z" }, + { url = "https://files.pythonhosted.org/packages/b4/63/278a98c715ae467624eafe375542d8ba9b4383a016df8fdefe0ae28382a7/aiohttp-3.13.3-cp314-cp314t-win_amd64.whl", hash = "sha256:44531a36aa2264a1860089ffd4dce7baf875ee5a6079d5fb42e261c704ef7344", size = 499694, upload-time = "2026-01-03T17:32:24.546Z" }, ] [[package]] @@ -588,15 +588,15 @@ wheels = [ [[package]] name = "mypy-protobuf" -version = "3.7.0" +version = "4.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "protobuf" }, { name = "types-protobuf" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/99/bd/92ee9e7d2ff30cb57b36bd6f61ee4da8a05acf32f6a6121883b58720e9d4/mypy_protobuf-3.7.0.tar.gz", hash = "sha256:912fb281f7c7b3e3a7c9b8695712618a716fddbab70f6ad63eaf68eda80c5efe", size = 25690, upload-time = "2025-11-17T22:11:12.809Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f9/95/afd552608fc8b112dd39c99d22ddb1b2da147dfd58c8c74c919e14ae99cd/mypy_protobuf-4.0.0.tar.gz", hash = "sha256:e200c833645dcfdfe8aa47f4a33d3a4b01b6be5b9a58ddbfc441329d5b679274", size = 29538, upload-time = "2025-12-21T05:35:20.57Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/69/32/709df4390d155bd72e75f2a9bce6004c2958a21f31817f3a2c7750299f70/mypy_protobuf-3.7.0-py3-none-any.whl", hash = "sha256:85256e9d4da935722ce8fbaa8d19397e1a2989aa8075c96577987de9fe7cea4d", size = 17488, upload-time = "2025-11-17T22:11:11.62Z" }, + { url = "https://files.pythonhosted.org/packages/cd/78/44d4cfdc39d61a606b8747ca9542fc4f91477098c911295e45af17b1d72a/mypy_protobuf-4.0.0-py3-none-any.whl", hash = "sha256:b859286891c51e420aef711b3e6616444e81c64723c12110d1dda809fad105f6", size = 18609, upload-time = "2025-12-21T05:35:18.956Z" }, ] [[package]] @@ -744,17 +744,17 @@ wheels = [ [[package]] name = "protobuf" -version = "6.33.1" +version = "6.33.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0a/03/a1440979a3f74f16cab3b75b0da1a1a7f922d56a8ddea96092391998edc0/protobuf-6.33.1.tar.gz", hash = "sha256:97f65757e8d09870de6fd973aeddb92f85435607235d20b2dfed93405d00c85b", size = 443432, upload-time = "2025-11-13T16:44:18.895Z" } +sdist = { url = "https://files.pythonhosted.org/packages/34/44/e49ecff446afeec9d1a66d6bbf9adc21e3c7cea7803a920ca3773379d4f6/protobuf-6.33.2.tar.gz", hash = "sha256:56dc370c91fbb8ac85bc13582c9e373569668a290aa2e66a590c2a0d35ddb9e4", size = 444296, upload-time = "2025-12-06T00:17:53.311Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/06/f1/446a9bbd2c60772ca36556bac8bfde40eceb28d9cc7838755bc41e001d8f/protobuf-6.33.1-cp310-abi3-win32.whl", hash = "sha256:f8d3fdbc966aaab1d05046d0240dd94d40f2a8c62856d41eaa141ff64a79de6b", size = 425593, upload-time = "2025-11-13T16:44:06.275Z" }, - { url = "https://files.pythonhosted.org/packages/a6/79/8780a378c650e3df849b73de8b13cf5412f521ca2ff9b78a45c247029440/protobuf-6.33.1-cp310-abi3-win_amd64.whl", hash = "sha256:923aa6d27a92bf44394f6abf7ea0500f38769d4b07f4be41cb52bd8b1123b9ed", size = 436883, upload-time = "2025-11-13T16:44:09.222Z" }, - { url = "https://files.pythonhosted.org/packages/cd/93/26213ff72b103ae55bb0d73e7fb91ea570ef407c3ab4fd2f1f27cac16044/protobuf-6.33.1-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:fe34575f2bdde76ac429ec7b570235bf0c788883e70aee90068e9981806f2490", size = 427522, upload-time = "2025-11-13T16:44:10.475Z" }, - { url = "https://files.pythonhosted.org/packages/c2/32/df4a35247923393aa6b887c3b3244a8c941c32a25681775f96e2b418f90e/protobuf-6.33.1-cp39-abi3-manylinux2014_aarch64.whl", hash = "sha256:f8adba2e44cde2d7618996b3fc02341f03f5bc3f2748be72dc7b063319276178", size = 324445, upload-time = "2025-11-13T16:44:11.869Z" }, - { url = "https://files.pythonhosted.org/packages/8e/d0/d796e419e2ec93d2f3fa44888861c3f88f722cde02b7c3488fcc6a166820/protobuf-6.33.1-cp39-abi3-manylinux2014_s390x.whl", hash = "sha256:0f4cf01222c0d959c2b399142deb526de420be8236f22c71356e2a544e153c53", size = 339161, upload-time = "2025-11-13T16:44:12.778Z" }, - { url = "https://files.pythonhosted.org/packages/1d/2a/3c5f05a4af06649547027d288747f68525755de692a26a7720dced3652c0/protobuf-6.33.1-cp39-abi3-manylinux2014_x86_64.whl", hash = "sha256:8fd7d5e0eb08cd5b87fd3df49bc193f5cfd778701f47e11d127d0afc6c39f1d1", size = 323171, upload-time = "2025-11-13T16:44:14.035Z" }, - { url = "https://files.pythonhosted.org/packages/08/b4/46310463b4f6ceef310f8348786f3cff181cea671578e3d9743ba61a459e/protobuf-6.33.1-py3-none-any.whl", hash = "sha256:d595a9fd694fdeb061a62fbe10eb039cc1e444df81ec9bb70c7fc59ebcb1eafa", size = 170477, upload-time = "2025-11-13T16:44:17.633Z" }, + { url = "https://files.pythonhosted.org/packages/bc/91/1e3a34881a88697a7354ffd177e8746e97a722e5e8db101544b47e84afb1/protobuf-6.33.2-cp310-abi3-win32.whl", hash = "sha256:87eb388bd2d0f78febd8f4c8779c79247b26a5befad525008e49a6955787ff3d", size = 425603, upload-time = "2025-12-06T00:17:41.114Z" }, + { url = "https://files.pythonhosted.org/packages/64/20/4d50191997e917ae13ad0a235c8b42d8c1ab9c3e6fd455ca16d416944355/protobuf-6.33.2-cp310-abi3-win_amd64.whl", hash = "sha256:fc2a0e8b05b180e5fc0dd1559fe8ebdae21a27e81ac77728fb6c42b12c7419b4", size = 436930, upload-time = "2025-12-06T00:17:43.278Z" }, + { url = "https://files.pythonhosted.org/packages/b2/ca/7e485da88ba45c920fb3f50ae78de29ab925d9e54ef0de678306abfbb497/protobuf-6.33.2-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:d9b19771ca75935b3a4422957bc518b0cecb978b31d1dd12037b088f6bcc0e43", size = 427621, upload-time = "2025-12-06T00:17:44.445Z" }, + { url = "https://files.pythonhosted.org/packages/7d/4f/f743761e41d3b2b2566748eb76bbff2b43e14d5fcab694f494a16458b05f/protobuf-6.33.2-cp39-abi3-manylinux2014_aarch64.whl", hash = "sha256:b5d3b5625192214066d99b2b605f5783483575656784de223f00a8d00754fc0e", size = 324460, upload-time = "2025-12-06T00:17:45.678Z" }, + { url = "https://files.pythonhosted.org/packages/b1/fa/26468d00a92824020f6f2090d827078c09c9c587e34cbfd2d0c7911221f8/protobuf-6.33.2-cp39-abi3-manylinux2014_s390x.whl", hash = "sha256:8cd7640aee0b7828b6d03ae518b5b4806fdfc1afe8de82f79c3454f8aef29872", size = 339168, upload-time = "2025-12-06T00:17:46.813Z" }, + { url = "https://files.pythonhosted.org/packages/56/13/333b8f421738f149d4fe5e49553bc2a2ab75235486259f689b4b91f96cec/protobuf-6.33.2-cp39-abi3-manylinux2014_x86_64.whl", hash = "sha256:1f8017c48c07ec5859106533b682260ba3d7c5567b1ca1f24297ce03384d1b4f", size = 323270, upload-time = "2025-12-06T00:17:48.253Z" }, + { url = "https://files.pythonhosted.org/packages/0e/15/4f02896cc3df04fc465010a4c6a0cd89810f54617a32a70ef531ed75d61c/protobuf-6.33.2-py3-none-any.whl", hash = "sha256:7636aad9bb01768870266de5dc009de2d1b936771b38a793f73cbbf279c91c5c", size = 170501, upload-time = "2025-12-06T00:17:52.211Z" }, ] [[package]] @@ -780,11 +780,11 @@ wheels = [ [[package]] name = "types-protobuf" -version = "6.32.1.20251105" +version = "6.32.1.20251210" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f3/ab/0dce6a9841b5ebf3e37401879bb8cc20724ad9c770a7649bee997696cc75/types_protobuf-6.32.1.20251105.tar.gz", hash = "sha256:641002611ff87dd9fedc38a39a29cacb9907ae5ce61489b53e99ca2074bef764", size = 63846, upload-time = "2025-11-05T03:04:43.456Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c2/59/c743a842911887cd96d56aa8936522b0cd5f7a7f228c96e81b59fced45be/types_protobuf-6.32.1.20251210.tar.gz", hash = "sha256:c698bb3f020274b1a2798ae09dc773728ce3f75209a35187bd11916ebfde6763", size = 63900, upload-time = "2025-12-10T03:14:25.451Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ed/57/3a0d89b33b7485b7ffd99ec7cf53b0c5c89194c481f0bd673fd67e5f273f/types_protobuf-6.32.1.20251105-py3-none-any.whl", hash = "sha256:a15109d38f7cfefd2539ef86d3f93a6a41c7cad53924f8aa1a51eaddbb72a660", size = 77890, upload-time = "2025-11-05T03:04:42.067Z" }, + { url = "https://files.pythonhosted.org/packages/aa/43/58e75bac4219cbafee83179505ff44cae3153ec279be0e30583a73b8f108/types_protobuf-6.32.1.20251210-py3-none-any.whl", hash = "sha256:2641f78f3696822a048cfb8d0ff42ccd85c25f12f871fbebe86da63793692140", size = 77921, upload-time = "2025-12-10T03:14:24.477Z" }, ] [[package]] @@ -798,11 +798,11 @@ wheels = [ [[package]] name = "urllib3" -version = "2.5.0" +version = "2.6.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/15/22/9ee70a2574a4f4599c47dd506532914ce044817c7752a79b6a51286319bc/urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760", size = 393185, upload-time = "2025-06-18T14:07:41.644Z" } +sdist = { url = "https://files.pythonhosted.org/packages/1e/24/a2a2ed9addd907787d7aa0355ba36a6cadf1768b934c652ea78acbd59dcd/urllib3-2.6.2.tar.gz", hash = "sha256:016f9c98bb7e98085cb2b4b17b87d2c702975664e4f060c6532e64d1c1a5e797", size = 432930, upload-time = "2025-12-11T15:56:40.252Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795, upload-time = "2025-06-18T14:07:40.39Z" }, + { url = "https://files.pythonhosted.org/packages/6d/b9/4095b668ea3678bf6a0af005527f39de12fb026516fb3df17495a733b7f8/urllib3-2.6.2-py3-none-any.whl", hash = "sha256:ec21cddfe7724fc7cb4ba4bea7aa8e2ef36f607a4bab81aa6ce42a13dc3f03dd", size = 131182, upload-time = "2025-12-11T15:56:38.584Z" }, ] [[package]] diff --git a/pyproject.toml b/pyproject.toml index 1ba828f..e746f57 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -26,7 +26,8 @@ classifiers = [ dependencies = [ "cryptography>=45.0.4", - "connect-python[compiler]>=0.4.2,<0.5", + "connect-python>=0.6.0,<0.7", + "protoc-gen-connect-python>=0.6.0,<0.7", "httpx>=0.28.1", "protobuf>=6.31.1", "pyjwt>=2.10.1", diff --git a/src/otdf_python/kas_client.py b/src/otdf_python/kas_client.py index f0400ba..61b1a45 100644 --- a/src/otdf_python/kas_client.py +++ b/src/otdf_python/kas_client.py @@ -65,6 +65,24 @@ def __init__( self._dpop_public_key ) + def __enter__(self): + """Enter context manager.""" + return self + + def __exit__(self, exc_type, exc_val, exc_tb): + """Exit context manager and clean up resources.""" + self.close() + + def close(self): + """Close the KAS client and release resources. + + This method should be called when the client is no longer needed + to properly clean up resources. It's also called automatically + when using the client as a context manager. + """ + if self.connect_rpc_client: + self.connect_rpc_client.close() + def _normalize_kas_url(self, url: str) -> str: """Normalize KAS URLs based on client security settings. diff --git a/src/otdf_python/kas_connect_rpc_client.py b/src/otdf_python/kas_connect_rpc_client.py index 50397d0..5da5283 100644 --- a/src/otdf_python/kas_connect_rpc_client.py +++ b/src/otdf_python/kas_connect_rpc_client.py @@ -4,9 +4,9 @@ import logging -import urllib3 +import httpx from otdf_python_proto.kas import kas_pb2 -from otdf_python_proto.kas.kas_pb2_connect import AccessServiceClient +from otdf_python_proto.kas.kas_connect import AccessServiceClientSync from otdf_python.auth_headers import AuthHeaders @@ -26,21 +26,56 @@ def __init__(self, use_plaintext=False, verify_ssl=True): """ self.use_plaintext = use_plaintext self.verify_ssl = verify_ssl + self._http_client = None + + def __enter__(self): + """Enter context manager and create HTTP client.""" + self._http_client = self._create_http_client() + return self + + def __exit__(self, exc_type, exc_val, exc_tb): + """Exit context manager and close HTTP client.""" + self.close() + + def close(self): + """Close HTTP client and release resources. + + This method should be called when the client is no longer needed + to properly clean up resources. It's also called automatically + when using the client as a context manager. + """ + if self._http_client is not None: + self._http_client.close() + self._http_client = None def _create_http_client(self): """Create HTTP client with SSL verification configuration. Returns: - urllib3.PoolManager configured for SSL verification settings + httpx.Client configured for SSL verification settings """ if self.verify_ssl: logging.info("Using SSL verification enabled HTTP client") - return urllib3.PoolManager() + return httpx.Client() else: logging.info("Using SSL verification disabled HTTP client") - urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) - return urllib3.PoolManager(cert_reqs="CERT_NONE") + return httpx.Client(verify=False) + + def _get_http_client(self): + """Get HTTP client, creating one if needed for backward compatibility. + + Returns: + httpx.Client instance + + """ + if self._http_client is None: + logging.warning( + "KASConnectRPCClient is being used without a context manager. " + "Consider using 'with KASConnectRPCClient(...) as client:' to ensure proper resource cleanup." + ) + self._http_client = self._create_http_client() + return self._http_client def _prepare_connect_rpc_url(self, kas_url): """Prepare the base URL for Connect RPC client. @@ -93,8 +128,6 @@ def get_public_key(self, normalized_kas_url, kas_info, access_token=None): f"kas_url={kas_info.url}" ) - http_client = self._create_http_client() - try: connect_rpc_base_url = self._prepare_connect_rpc_url(normalized_kas_url) @@ -103,9 +136,13 @@ def get_public_key(self, normalized_kas_url, kas_info, access_token=None): f"for public key retrieval" ) - # Create Connect RPC client with configured HTTP client using Connect protocol - # Note: gRPC protocol is not supported with urllib3, use default Connect protocol - client = AccessServiceClient(connect_rpc_base_url, http_client=http_client) + # Get or create HTTP client + http_client = self._get_http_client() + + # Create Connect RPC client with configured HTTP client + client = AccessServiceClientSync( + address=connect_rpc_base_url, session=http_client + ) # Create public key request algorithm = getattr(kas_info, "algorithm", "") or "" @@ -116,10 +153,10 @@ def get_public_key(self, normalized_kas_url, kas_info, access_token=None): ) # Prepare headers with authentication if available - extra_headers = self._prepare_auth_headers(access_token) + headers = self._prepare_auth_headers(access_token) # Make the public key call with authentication headers - response = client.public_key(request, extra_headers=extra_headers) + response = client.public_key(request, headers=headers) # Update kas_info with response kas_info.public_key = response.public_key @@ -158,8 +195,6 @@ def unwrap_key( f"kas_url={key_access.url}" ) - http_client = self._create_http_client() - try: kas_service_url = self._prepare_connect_rpc_url(normalized_kas_url) @@ -167,8 +202,13 @@ def unwrap_key( f"Creating Connect RPC client for base URL: {kas_service_url}, for unwrap" ) - # Note: gRPC protocol is not supported with urllib3, use default Connect protocol - client = AccessServiceClient(kas_service_url, http_client=http_client) + # Get or create HTTP client + http_client = self._get_http_client() + + # Create Connect RPC client with configured HTTP client + client = AccessServiceClientSync( + address=kas_service_url, session=http_client + ) # Create rewrap request request = kas_pb2.RewrapRequest( @@ -179,10 +219,10 @@ def unwrap_key( logging.info(f"Connect RPC signed token: {signed_token}") # Prepare headers with authentication if available - extra_headers = self._prepare_auth_headers(access_token) + headers = self._prepare_auth_headers(access_token) # Make the rewrap call with authentication headers - response = client.rewrap(request, extra_headers=extra_headers) + response = client.rewrap(request, headers=headers) # Extract the entity wrapped key from v2 response structure # The v2 response has responses[] array with results[] for each policy diff --git a/src/otdf_python/sdk.py b/src/otdf_python/sdk.py index df4c823..98ed3ff 100644 --- a/src/otdf_python/sdk.py +++ b/src/otdf_python/sdk.py @@ -134,6 +134,8 @@ def get_key_cache(self) -> Any: def close(self): """Close resources associated with KAS interface.""" + if self._kas_client: + self._kas_client.close() def __exit__(self, exc_type, exc_val, exc_tb): self.close() diff --git a/tests/test_kas_client.py b/tests/test_kas_client.py index 3591699..b8df028 100644 --- a/tests/test_kas_client.py +++ b/tests/test_kas_client.py @@ -51,31 +51,23 @@ def test_get_public_key_uses_cache(): assert client.get_public_key(MockKasInfo(url="http://kas")) == kas_info -@patch("urllib3.PoolManager") -@patch("otdf_python.kas_connect_rpc_client.AccessServiceClient") +@patch("httpx.Client") +@patch("otdf_python.kas_connect_rpc_client.AccessServiceClientSync") def test_get_public_key_fetches_and_caches( - mock_access_service_client, mock_pool_manager + mock_access_service_client, mock_http_client ): """Test that get_public_key fetches and caches public key.""" cache = KASKeyCache() client = KASClient("http://kas", cache=cache) - # Mock urllib3.PoolManager to prevent real network calls - mock_pool_instance = MagicMock() - mock_pool_manager.return_value = mock_pool_instance - - # Setup a successful HTTP response that bypasses error handling - mock_response = MagicMock() - mock_response.status = 200 - mock_response.headers = {"Content-Type": "application/proto"} - mock_response.read.return_value = ( - b"" # Empty protobuf data since we're mocking the client layer - ) - mock_pool_instance.request.return_value = mock_response + # Mock httpx.Client to prevent real network calls + # Note: We're using lazy initialization, so return the mock directly (not via context manager) + mock_client_instance = MagicMock() + mock_http_client.return_value = mock_client_instance # Mock the Connect RPC client directly since it expects protobuf responses - mock_client_instance = MagicMock() - mock_access_service_client.return_value = mock_client_instance + mock_rpc_client_instance = MagicMock() + mock_access_service_client.return_value = mock_rpc_client_instance # Mock the public key response using protobuf structure mock_rpc_response = MagicMock() @@ -85,7 +77,7 @@ def test_get_public_key_fetches_and_caches( def mock_public_key_call(*args, **kwargs): return mock_rpc_response - mock_client_instance.public_key = mock_public_key_call + mock_rpc_client_instance.public_key = mock_public_key_call # Create KASInfo with URL but no KID or public key from otdf_python.config import KASInfo @@ -105,8 +97,8 @@ def mock_public_key_call(*args, **kwargs): assert cached.public_key == "public-key-data" -@patch("urllib3.PoolManager") -@patch("otdf_python.kas_connect_rpc_client.AccessServiceClient") +@patch("httpx.Client") +@patch("otdf_python.kas_connect_rpc_client.AccessServiceClientSync") @patch("otdf_python.kas_client.CryptoUtils") @patch("otdf_python.kas_client.AsymDecryption") @patch("otdf_python.kas_client.jwt.encode") # Mock JWT encoding directly @@ -115,7 +107,7 @@ def test_unwrap_success( mock_asym_decryption, mock_crypto_utils, mock_access_service_client, - mock_pool_manager, + mock_http_client, ): """Test successful key unwrap operation.""" # Setup mocks for RSA key pair generation and decryption @@ -138,29 +130,21 @@ def test_unwrap_success( mock_decryptor.decrypt.return_value = b"decrypted_key" mock_asym_decryption.return_value = mock_decryptor - # Mock urllib3.PoolManager to prevent real network calls - mock_pool_instance = MagicMock() - mock_pool_manager.return_value = mock_pool_instance - - # Setup a successful HTTP response that bypasses error handling - mock_response = MagicMock() - mock_response.status = 200 - mock_response.headers = {"Content-Type": "application/proto"} - mock_response.read.return_value = ( - b"" # Empty protobuf data since we're mocking the client layer - ) - mock_pool_instance.request.return_value = mock_response + # Mock httpx.Client to prevent real network calls + # Note: We're using lazy initialization, so return the mock directly (not via context manager) + mock_http_client_instance = MagicMock() + mock_http_client.return_value = mock_http_client_instance # Mock Connect RPC client directly instead of HTTP layer - mock_client_instance = MagicMock() - mock_access_service_client.return_value = mock_client_instance + mock_rpc_client_instance = MagicMock() + mock_access_service_client.return_value = mock_rpc_client_instance mock_rpc_response = MagicMock() mock_rpc_response.entity_wrapped_key = b64decode( "d2VsY29tZQ==" ) # "welcome" decoded mock_rpc_response.responses = [] # Empty to test fallback to legacy field - mock_client_instance.rewrap.return_value = mock_rpc_response + mock_rpc_client_instance.rewrap.return_value = mock_rpc_response # Create client and test unwrap # We need to patch the DPoP proof creation method to avoid RSA key access @@ -173,24 +157,19 @@ def test_unwrap_success( assert result == b"decrypted_key" # Verify the Connect RPC client was called correctly mock_access_service_client.assert_called_once() - mock_client_instance.rewrap.assert_called_once() + mock_rpc_client_instance.rewrap.assert_called_once() # Verify the decryptor was called mock_decryptor.decrypt.assert_called_once() -@patch("urllib3.PoolManager") -@patch("otdf_python_proto.kas.kas_pb2_connect.AccessServiceClient") -def test_unwrap_failure(mock_access_service_client, mock_pool_manager): +@patch("httpx.Client") +@patch("otdf_python.kas_connect_rpc_client.AccessServiceClientSync") +def test_unwrap_failure(mock_access_service_client, mock_http_client): """Test key unwrap failure handling.""" - # Setup realistic HTTP response mock for PoolManager - mock_response = MagicMock() - mock_response.status = 500 - mock_response.read.return_value = b'{"error": "fail"}' - mock_response.headers = {"content-type": "application/json"} - - mock_pool_instance = MagicMock() - mock_pool_instance.request.return_value = mock_response - mock_pool_manager.return_value = mock_pool_instance + # Mock httpx.Client to prevent real network calls + # Note: We're using lazy initialization, so return the mock directly (not via context manager) + mock_http_client_instance = MagicMock() + mock_http_client.return_value = mock_http_client_instance # Mock the Connect RPC client to raise an exception mock_access_service_client.side_effect = Exception("fail") @@ -434,10 +413,10 @@ def test_kas_url_normalization_error_handling_with_kasinfo(): client._normalize_kas_url(kas_info.url) -@patch("urllib3.PoolManager") -@patch("otdf_python.kas_connect_rpc_client.AccessServiceClient") +@patch("httpx.Client") +@patch("otdf_python.kas_connect_rpc_client.AccessServiceClientSync") def test_jwt_signature_verification_in_unwrap_request( - mock_access_service_client, mock_pool_manager, collect_server_logs + mock_access_service_client, mock_http_client, collect_server_logs ): """Test that JWT signature is properly created and can be verified. @@ -447,22 +426,14 @@ def test_jwt_signature_verification_in_unwrap_request( """ import jwt - # Mock urllib3.PoolManager to prevent real network calls - mock_pool_instance = MagicMock() - mock_pool_manager.return_value = mock_pool_instance - - # Setup a successful HTTP response that bypasses error handling - mock_response = MagicMock() - mock_response.status = 200 - mock_response.headers = {"Content-Type": "application/proto"} - mock_response.read.return_value = ( - b"" # Empty protobuf data since we're mocking the client layer - ) - mock_pool_instance.request.return_value = mock_response + # Mock httpx.Client to prevent real network calls + # Note: We're using lazy initialization, so return the mock directly (not via context manager) + mock_http_client_instance = MagicMock() + mock_http_client.return_value = mock_http_client_instance # Mock Connect RPC client directly for protobuf compatibility - mock_client_instance = MagicMock() - mock_access_service_client.return_value = mock_client_instance + mock_rpc_client_instance = MagicMock() + mock_access_service_client.return_value = mock_rpc_client_instance # Create a mock successful response mock_rpc_response = MagicMock() @@ -470,7 +441,7 @@ def test_jwt_signature_verification_in_unwrap_request( "d2VsY29tZQ==" ) # "welcome" decoded mock_rpc_response.responses = [] # Empty to test fallback to legacy field - mock_client_instance.rewrap.return_value = mock_rpc_response + mock_rpc_client_instance.rewrap.return_value = mock_rpc_response # Create client with known DPoP keys for verification client = KASClient("http://kas", token_source=lambda: "test_token") @@ -504,10 +475,10 @@ def test_jwt_signature_verification_in_unwrap_request( client.unwrap(key_access, '{"test": "policy"}') # Verify the Connect RPC client was called - assert mock_client_instance.rewrap.called + assert mock_rpc_client_instance.rewrap.called # Extract the request to verify JWT structure - call_args = mock_client_instance.rewrap.call_args + call_args = mock_rpc_client_instance.rewrap.call_args if call_args and len(call_args) > 0: request = call_args[0][0] # First positional argument (the request) signed_token = request.signed_request_token diff --git a/uv.lock b/uv.lock index a4ebae8..e0915e6 100644 --- a/uv.lock +++ b/uv.lock @@ -2,148 +2,6 @@ version = 1 revision = 3 requires-python = ">=3.10" -[[package]] -name = "aiohappyeyeballs" -version = "2.6.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/26/30/f84a107a9c4331c14b2b586036f40965c128aa4fee4dda5d3d51cb14ad54/aiohappyeyeballs-2.6.1.tar.gz", hash = "sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558", size = 22760, upload-time = "2025-03-12T01:42:48.764Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl", hash = "sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8", size = 15265, upload-time = "2025-03-12T01:42:47.083Z" }, -] - -[[package]] -name = "aiohttp" -version = "3.13.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "aiohappyeyeballs" }, - { name = "aiosignal" }, - { name = "async-timeout", marker = "python_full_version < '3.11'" }, - { name = "attrs" }, - { name = "frozenlist" }, - { name = "multidict" }, - { name = "propcache" }, - { name = "yarl" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/1c/ce/3b83ebba6b3207a7135e5fcaba49706f8a4b6008153b4e30540c982fae26/aiohttp-3.13.2.tar.gz", hash = "sha256:40176a52c186aefef6eb3cad2cdd30cd06e3afbe88fe8ab2af9c0b90f228daca", size = 7837994, upload-time = "2025-10-28T20:59:39.937Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6d/34/939730e66b716b76046dedfe0842995842fa906ccc4964bba414ff69e429/aiohttp-3.13.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2372b15a5f62ed37789a6b383ff7344fc5b9f243999b0cd9b629d8bc5f5b4155", size = 736471, upload-time = "2025-10-28T20:55:27.924Z" }, - { url = "https://files.pythonhosted.org/packages/fd/cf/dcbdf2df7f6ca72b0bb4c0b4509701f2d8942cf54e29ca197389c214c07f/aiohttp-3.13.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e7f8659a48995edee7229522984bd1009c1213929c769c2daa80b40fe49a180c", size = 493985, upload-time = "2025-10-28T20:55:29.456Z" }, - { url = "https://files.pythonhosted.org/packages/9d/87/71c8867e0a1d0882dcbc94af767784c3cb381c1c4db0943ab4aae4fed65e/aiohttp-3.13.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:939ced4a7add92296b0ad38892ce62b98c619288a081170695c6babe4f50e636", size = 489274, upload-time = "2025-10-28T20:55:31.134Z" }, - { url = "https://files.pythonhosted.org/packages/38/0f/46c24e8dae237295eaadd113edd56dee96ef6462adf19b88592d44891dc5/aiohttp-3.13.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6315fb6977f1d0dd41a107c527fee2ed5ab0550b7d885bc15fee20ccb17891da", size = 1668171, upload-time = "2025-10-28T20:55:36.065Z" }, - { url = "https://files.pythonhosted.org/packages/eb/c6/4cdfb4440d0e28483681a48f69841fa5e39366347d66ef808cbdadddb20e/aiohttp-3.13.2-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6e7352512f763f760baaed2637055c49134fd1d35b37c2dedfac35bfe5cf8725", size = 1636036, upload-time = "2025-10-28T20:55:37.576Z" }, - { url = "https://files.pythonhosted.org/packages/84/37/8708cf678628216fb678ab327a4e1711c576d6673998f4f43e86e9ae90dd/aiohttp-3.13.2-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e09a0a06348a2dd73e7213353c90d709502d9786219f69b731f6caa0efeb46f5", size = 1727975, upload-time = "2025-10-28T20:55:39.457Z" }, - { url = "https://files.pythonhosted.org/packages/e6/2e/3ebfe12fdcb9b5f66e8a0a42dffcd7636844c8a018f261efb2419f68220b/aiohttp-3.13.2-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a09a6d073fb5789456545bdee2474d14395792faa0527887f2f4ec1a486a59d3", size = 1815823, upload-time = "2025-10-28T20:55:40.958Z" }, - { url = "https://files.pythonhosted.org/packages/a1/4f/ca2ef819488cbb41844c6cf92ca6dd15b9441e6207c58e5ae0e0fc8d70ad/aiohttp-3.13.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b59d13c443f8e049d9e94099c7e412e34610f1f49be0f230ec656a10692a5802", size = 1669374, upload-time = "2025-10-28T20:55:42.745Z" }, - { url = "https://files.pythonhosted.org/packages/f8/fe/1fe2e1179a0d91ce09c99069684aab619bf2ccde9b20bd6ca44f8837203e/aiohttp-3.13.2-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:20db2d67985d71ca033443a1ba2001c4b5693fe09b0e29f6d9358a99d4d62a8a", size = 1555315, upload-time = "2025-10-28T20:55:44.264Z" }, - { url = "https://files.pythonhosted.org/packages/5a/2b/f3781899b81c45d7cbc7140cddb8a3481c195e7cbff8e36374759d2ab5a5/aiohttp-3.13.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:960c2fc686ba27b535f9fd2b52d87ecd7e4fd1cf877f6a5cba8afb5b4a8bd204", size = 1639140, upload-time = "2025-10-28T20:55:46.626Z" }, - { url = "https://files.pythonhosted.org/packages/72/27/c37e85cd3ece6f6c772e549bd5a253d0c122557b25855fb274224811e4f2/aiohttp-3.13.2-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:6c00dbcf5f0d88796151e264a8eab23de2997c9303dd7c0bf622e23b24d3ce22", size = 1645496, upload-time = "2025-10-28T20:55:48.933Z" }, - { url = "https://files.pythonhosted.org/packages/66/20/3af1ab663151bd3780b123e907761cdb86ec2c4e44b2d9b195ebc91fbe37/aiohttp-3.13.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fed38a5edb7945f4d1bcabe2fcd05db4f6ec7e0e82560088b754f7e08d93772d", size = 1697625, upload-time = "2025-10-28T20:55:50.377Z" }, - { url = "https://files.pythonhosted.org/packages/95/eb/ae5cab15efa365e13d56b31b0d085a62600298bf398a7986f8388f73b598/aiohttp-3.13.2-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:b395bbca716c38bef3c764f187860e88c724b342c26275bc03e906142fc5964f", size = 1542025, upload-time = "2025-10-28T20:55:51.861Z" }, - { url = "https://files.pythonhosted.org/packages/e9/2d/1683e8d67ec72d911397fe4e575688d2a9b8f6a6e03c8fdc9f3fd3d4c03f/aiohttp-3.13.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:204ffff2426c25dfda401ba08da85f9c59525cdc42bda26660463dd1cbcfec6f", size = 1714918, upload-time = "2025-10-28T20:55:53.515Z" }, - { url = "https://files.pythonhosted.org/packages/99/a2/ffe8e0e1c57c5e542d47ffa1fcf95ef2b3ea573bf7c4d2ee877252431efc/aiohttp-3.13.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:05c4dd3c48fb5f15db31f57eb35374cb0c09afdde532e7fb70a75aede0ed30f6", size = 1656113, upload-time = "2025-10-28T20:55:55.438Z" }, - { url = "https://files.pythonhosted.org/packages/0d/42/d511aff5c3a2b06c09d7d214f508a4ad8ac7799817f7c3d23e7336b5e896/aiohttp-3.13.2-cp310-cp310-win32.whl", hash = "sha256:e574a7d61cf10351d734bcddabbe15ede0eaa8a02070d85446875dc11189a251", size = 432290, upload-time = "2025-10-28T20:55:56.96Z" }, - { url = "https://files.pythonhosted.org/packages/8b/ea/1c2eb7098b5bad4532994f2b7a8228d27674035c9b3234fe02c37469ef14/aiohttp-3.13.2-cp310-cp310-win_amd64.whl", hash = "sha256:364f55663085d658b8462a1c3f17b2b84a5c2e1ba858e1b79bff7b2e24ad1514", size = 455075, upload-time = "2025-10-28T20:55:58.373Z" }, - { url = "https://files.pythonhosted.org/packages/35/74/b321e7d7ca762638cdf8cdeceb39755d9c745aff7a64c8789be96ddf6e96/aiohttp-3.13.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4647d02df098f6434bafd7f32ad14942f05a9caa06c7016fdcc816f343997dd0", size = 743409, upload-time = "2025-10-28T20:56:00.354Z" }, - { url = "https://files.pythonhosted.org/packages/99/3d/91524b905ec473beaf35158d17f82ef5a38033e5809fe8742e3657cdbb97/aiohttp-3.13.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e3403f24bcb9c3b29113611c3c16a2a447c3953ecf86b79775e7be06f7ae7ccb", size = 497006, upload-time = "2025-10-28T20:56:01.85Z" }, - { url = "https://files.pythonhosted.org/packages/eb/d3/7f68bc02a67716fe80f063e19adbd80a642e30682ce74071269e17d2dba1/aiohttp-3.13.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:43dff14e35aba17e3d6d5ba628858fb8cb51e30f44724a2d2f0c75be492c55e9", size = 493195, upload-time = "2025-10-28T20:56:03.314Z" }, - { url = "https://files.pythonhosted.org/packages/98/31/913f774a4708775433b7375c4f867d58ba58ead833af96c8af3621a0d243/aiohttp-3.13.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e2a9ea08e8c58bb17655630198833109227dea914cd20be660f52215f6de5613", size = 1747759, upload-time = "2025-10-28T20:56:04.904Z" }, - { url = "https://files.pythonhosted.org/packages/e8/63/04efe156f4326f31c7c4a97144f82132c3bb21859b7bb84748d452ccc17c/aiohttp-3.13.2-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:53b07472f235eb80e826ad038c9d106c2f653584753f3ddab907c83f49eedead", size = 1704456, upload-time = "2025-10-28T20:56:06.986Z" }, - { url = "https://files.pythonhosted.org/packages/8e/02/4e16154d8e0a9cf4ae76f692941fd52543bbb148f02f098ca73cab9b1c1b/aiohttp-3.13.2-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e736c93e9c274fce6419af4aac199984d866e55f8a4cec9114671d0ea9688780", size = 1807572, upload-time = "2025-10-28T20:56:08.558Z" }, - { url = "https://files.pythonhosted.org/packages/34/58/b0583defb38689e7f06798f0285b1ffb3a6fb371f38363ce5fd772112724/aiohttp-3.13.2-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ff5e771f5dcbc81c64898c597a434f7682f2259e0cd666932a913d53d1341d1a", size = 1895954, upload-time = "2025-10-28T20:56:10.545Z" }, - { url = "https://files.pythonhosted.org/packages/6b/f3/083907ee3437425b4e376aa58b2c915eb1a33703ec0dc30040f7ae3368c6/aiohttp-3.13.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a3b6fb0c207cc661fa0bf8c66d8d9b657331ccc814f4719468af61034b478592", size = 1747092, upload-time = "2025-10-28T20:56:12.118Z" }, - { url = "https://files.pythonhosted.org/packages/ac/61/98a47319b4e425cc134e05e5f3fc512bf9a04bf65aafd9fdcda5d57ec693/aiohttp-3.13.2-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:97a0895a8e840ab3520e2288db7cace3a1981300d48babeb50e7425609e2e0ab", size = 1606815, upload-time = "2025-10-28T20:56:14.191Z" }, - { url = "https://files.pythonhosted.org/packages/97/4b/e78b854d82f66bb974189135d31fce265dee0f5344f64dd0d345158a5973/aiohttp-3.13.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9e8f8afb552297aca127c90cb840e9a1d4bfd6a10d7d8f2d9176e1acc69bad30", size = 1723789, upload-time = "2025-10-28T20:56:16.101Z" }, - { url = "https://files.pythonhosted.org/packages/ed/fc/9d2ccc794fc9b9acd1379d625c3a8c64a45508b5091c546dea273a41929e/aiohttp-3.13.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:ed2f9c7216e53c3df02264f25d824b079cc5914f9e2deba94155190ef648ee40", size = 1718104, upload-time = "2025-10-28T20:56:17.655Z" }, - { url = "https://files.pythonhosted.org/packages/66/65/34564b8765ea5c7d79d23c9113135d1dd3609173da13084830f1507d56cf/aiohttp-3.13.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:99c5280a329d5fa18ef30fd10c793a190d996567667908bef8a7f81f8202b948", size = 1785584, upload-time = "2025-10-28T20:56:19.238Z" }, - { url = "https://files.pythonhosted.org/packages/30/be/f6a7a426e02fc82781afd62016417b3948e2207426d90a0e478790d1c8a4/aiohttp-3.13.2-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:2ca6ffef405fc9c09a746cb5d019c1672cd7f402542e379afc66b370833170cf", size = 1595126, upload-time = "2025-10-28T20:56:20.836Z" }, - { url = "https://files.pythonhosted.org/packages/e5/c7/8e22d5d28f94f67d2af496f14a83b3c155d915d1fe53d94b66d425ec5b42/aiohttp-3.13.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:47f438b1a28e926c37632bff3c44df7d27c9b57aaf4e34b1def3c07111fdb782", size = 1800665, upload-time = "2025-10-28T20:56:22.922Z" }, - { url = "https://files.pythonhosted.org/packages/d1/11/91133c8b68b1da9fc16555706aa7276fdf781ae2bb0876c838dd86b8116e/aiohttp-3.13.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9acda8604a57bb60544e4646a4615c1866ee6c04a8edef9b8ee6fd1d8fa2ddc8", size = 1739532, upload-time = "2025-10-28T20:56:25.924Z" }, - { url = "https://files.pythonhosted.org/packages/17/6b/3747644d26a998774b21a616016620293ddefa4d63af6286f389aedac844/aiohttp-3.13.2-cp311-cp311-win32.whl", hash = "sha256:868e195e39b24aaa930b063c08bb0c17924899c16c672a28a65afded9c46c6ec", size = 431876, upload-time = "2025-10-28T20:56:27.524Z" }, - { url = "https://files.pythonhosted.org/packages/c3/63/688462108c1a00eb9f05765331c107f95ae86f6b197b865d29e930b7e462/aiohttp-3.13.2-cp311-cp311-win_amd64.whl", hash = "sha256:7fd19df530c292542636c2a9a85854fab93474396a52f1695e799186bbd7f24c", size = 456205, upload-time = "2025-10-28T20:56:29.062Z" }, - { url = "https://files.pythonhosted.org/packages/29/9b/01f00e9856d0a73260e86dd8ed0c2234a466c5c1712ce1c281548df39777/aiohttp-3.13.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:b1e56bab2e12b2b9ed300218c351ee2a3d8c8fdab5b1ec6193e11a817767e47b", size = 737623, upload-time = "2025-10-28T20:56:30.797Z" }, - { url = "https://files.pythonhosted.org/packages/5a/1b/4be39c445e2b2bd0aab4ba736deb649fabf14f6757f405f0c9685019b9e9/aiohttp-3.13.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:364e25edaabd3d37b1db1f0cbcee8c73c9a3727bfa262b83e5e4cf3489a2a9dc", size = 492664, upload-time = "2025-10-28T20:56:32.708Z" }, - { url = "https://files.pythonhosted.org/packages/28/66/d35dcfea8050e131cdd731dff36434390479b4045a8d0b9d7111b0a968f1/aiohttp-3.13.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c5c94825f744694c4b8db20b71dba9a257cd2ba8e010a803042123f3a25d50d7", size = 491808, upload-time = "2025-10-28T20:56:34.57Z" }, - { url = "https://files.pythonhosted.org/packages/00/29/8e4609b93e10a853b65f8291e64985de66d4f5848c5637cddc70e98f01f8/aiohttp-3.13.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ba2715d842ffa787be87cbfce150d5e88c87a98e0b62e0f5aa489169a393dbbb", size = 1738863, upload-time = "2025-10-28T20:56:36.377Z" }, - { url = "https://files.pythonhosted.org/packages/9d/fa/4ebdf4adcc0def75ced1a0d2d227577cd7b1b85beb7edad85fcc87693c75/aiohttp-3.13.2-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:585542825c4bc662221fb257889e011a5aa00f1ae4d75d1d246a5225289183e3", size = 1700586, upload-time = "2025-10-28T20:56:38.034Z" }, - { url = "https://files.pythonhosted.org/packages/da/04/73f5f02ff348a3558763ff6abe99c223381b0bace05cd4530a0258e52597/aiohttp-3.13.2-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:39d02cb6025fe1aabca329c5632f48c9532a3dabccd859e7e2f110668972331f", size = 1768625, upload-time = "2025-10-28T20:56:39.75Z" }, - { url = "https://files.pythonhosted.org/packages/f8/49/a825b79ffec124317265ca7d2344a86bcffeb960743487cb11988ffb3494/aiohttp-3.13.2-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e67446b19e014d37342f7195f592a2a948141d15a312fe0e700c2fd2f03124f6", size = 1867281, upload-time = "2025-10-28T20:56:41.471Z" }, - { url = "https://files.pythonhosted.org/packages/b9/48/adf56e05f81eac31edcfae45c90928f4ad50ef2e3ea72cb8376162a368f8/aiohttp-3.13.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4356474ad6333e41ccefd39eae869ba15a6c5299c9c01dfdcfdd5c107be4363e", size = 1752431, upload-time = "2025-10-28T20:56:43.162Z" }, - { url = "https://files.pythonhosted.org/packages/30/ab/593855356eead019a74e862f21523db09c27f12fd24af72dbc3555b9bfd9/aiohttp-3.13.2-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:eeacf451c99b4525f700f078becff32c32ec327b10dcf31306a8a52d78166de7", size = 1562846, upload-time = "2025-10-28T20:56:44.85Z" }, - { url = "https://files.pythonhosted.org/packages/39/0f/9f3d32271aa8dc35036e9668e31870a9d3b9542dd6b3e2c8a30931cb27ae/aiohttp-3.13.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d8a9b889aeabd7a4e9af0b7f4ab5ad94d42e7ff679aaec6d0db21e3b639ad58d", size = 1699606, upload-time = "2025-10-28T20:56:46.519Z" }, - { url = "https://files.pythonhosted.org/packages/2c/3c/52d2658c5699b6ef7692a3f7128b2d2d4d9775f2a68093f74bca06cf01e1/aiohttp-3.13.2-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:fa89cb11bc71a63b69568d5b8a25c3ca25b6d54c15f907ca1c130d72f320b76b", size = 1720663, upload-time = "2025-10-28T20:56:48.528Z" }, - { url = "https://files.pythonhosted.org/packages/9b/d4/8f8f3ff1fb7fb9e3f04fcad4e89d8a1cd8fc7d05de67e3de5b15b33008ff/aiohttp-3.13.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:8aa7c807df234f693fed0ecd507192fc97692e61fee5702cdc11155d2e5cadc8", size = 1737939, upload-time = "2025-10-28T20:56:50.77Z" }, - { url = "https://files.pythonhosted.org/packages/03/d3/ddd348f8a27a634daae39a1b8e291ff19c77867af438af844bf8b7e3231b/aiohttp-3.13.2-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:9eb3e33fdbe43f88c3c75fa608c25e7c47bbd80f48d012763cb67c47f39a7e16", size = 1555132, upload-time = "2025-10-28T20:56:52.568Z" }, - { url = "https://files.pythonhosted.org/packages/39/b8/46790692dc46218406f94374903ba47552f2f9f90dad554eed61bfb7b64c/aiohttp-3.13.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9434bc0d80076138ea986833156c5a48c9c7a8abb0c96039ddbb4afc93184169", size = 1764802, upload-time = "2025-10-28T20:56:54.292Z" }, - { url = "https://files.pythonhosted.org/packages/ba/e4/19ce547b58ab2a385e5f0b8aa3db38674785085abcf79b6e0edd1632b12f/aiohttp-3.13.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ff15c147b2ad66da1f2cbb0622313f2242d8e6e8f9b79b5206c84523a4473248", size = 1719512, upload-time = "2025-10-28T20:56:56.428Z" }, - { url = "https://files.pythonhosted.org/packages/70/30/6355a737fed29dcb6dfdd48682d5790cb5eab050f7b4e01f49b121d3acad/aiohttp-3.13.2-cp312-cp312-win32.whl", hash = "sha256:27e569eb9d9e95dbd55c0fc3ec3a9335defbf1d8bc1d20171a49f3c4c607b93e", size = 426690, upload-time = "2025-10-28T20:56:58.736Z" }, - { url = "https://files.pythonhosted.org/packages/0a/0d/b10ac09069973d112de6ef980c1f6bb31cb7dcd0bc363acbdad58f927873/aiohttp-3.13.2-cp312-cp312-win_amd64.whl", hash = "sha256:8709a0f05d59a71f33fd05c17fc11fcb8c30140506e13c2f5e8ee1b8964e1b45", size = 453465, upload-time = "2025-10-28T20:57:00.795Z" }, - { url = "https://files.pythonhosted.org/packages/bf/78/7e90ca79e5aa39f9694dcfd74f4720782d3c6828113bb1f3197f7e7c4a56/aiohttp-3.13.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:7519bdc7dfc1940d201651b52bf5e03f5503bda45ad6eacf64dda98be5b2b6be", size = 732139, upload-time = "2025-10-28T20:57:02.455Z" }, - { url = "https://files.pythonhosted.org/packages/db/ed/1f59215ab6853fbaa5c8495fa6cbc39edfc93553426152b75d82a5f32b76/aiohttp-3.13.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:088912a78b4d4f547a1f19c099d5a506df17eacec3c6f4375e2831ec1d995742", size = 490082, upload-time = "2025-10-28T20:57:04.784Z" }, - { url = "https://files.pythonhosted.org/packages/68/7b/fe0fe0f5e05e13629d893c760465173a15ad0039c0a5b0d0040995c8075e/aiohttp-3.13.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5276807b9de9092af38ed23ce120539ab0ac955547b38563a9ba4f5b07b95293", size = 489035, upload-time = "2025-10-28T20:57:06.894Z" }, - { url = "https://files.pythonhosted.org/packages/d2/04/db5279e38471b7ac801d7d36a57d1230feeee130bbe2a74f72731b23c2b1/aiohttp-3.13.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1237c1375eaef0db4dcd7c2559f42e8af7b87ea7d295b118c60c36a6e61cb811", size = 1720387, upload-time = "2025-10-28T20:57:08.685Z" }, - { url = "https://files.pythonhosted.org/packages/31/07/8ea4326bd7dae2bd59828f69d7fdc6e04523caa55e4a70f4a8725a7e4ed2/aiohttp-3.13.2-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:96581619c57419c3d7d78703d5b78c1e5e5fc0172d60f555bdebaced82ded19a", size = 1688314, upload-time = "2025-10-28T20:57:10.693Z" }, - { url = "https://files.pythonhosted.org/packages/48/ab/3d98007b5b87ffd519d065225438cc3b668b2f245572a8cb53da5dd2b1bc/aiohttp-3.13.2-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a2713a95b47374169409d18103366de1050fe0ea73db358fc7a7acb2880422d4", size = 1756317, upload-time = "2025-10-28T20:57:12.563Z" }, - { url = "https://files.pythonhosted.org/packages/97/3d/801ca172b3d857fafb7b50c7c03f91b72b867a13abca982ed6b3081774ef/aiohttp-3.13.2-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:228a1cd556b3caca590e9511a89444925da87d35219a49ab5da0c36d2d943a6a", size = 1858539, upload-time = "2025-10-28T20:57:14.623Z" }, - { url = "https://files.pythonhosted.org/packages/f7/0d/4764669bdf47bd472899b3d3db91fffbe925c8e3038ec591a2fd2ad6a14d/aiohttp-3.13.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ac6cde5fba8d7d8c6ac963dbb0256a9854e9fafff52fbcc58fdf819357892c3e", size = 1739597, upload-time = "2025-10-28T20:57:16.399Z" }, - { url = "https://files.pythonhosted.org/packages/c4/52/7bd3c6693da58ba16e657eb904a5b6decfc48ecd06e9ac098591653b1566/aiohttp-3.13.2-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f2bef8237544f4e42878c61cef4e2839fee6346dc60f5739f876a9c50be7fcdb", size = 1555006, upload-time = "2025-10-28T20:57:18.288Z" }, - { url = "https://files.pythonhosted.org/packages/48/30/9586667acec5993b6f41d2ebcf96e97a1255a85f62f3c653110a5de4d346/aiohttp-3.13.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:16f15a4eac3bc2d76c45f7ebdd48a65d41b242eb6c31c2245463b40b34584ded", size = 1683220, upload-time = "2025-10-28T20:57:20.241Z" }, - { url = "https://files.pythonhosted.org/packages/71/01/3afe4c96854cfd7b30d78333852e8e851dceaec1c40fd00fec90c6402dd2/aiohttp-3.13.2-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:bb7fb776645af5cc58ab804c58d7eba545a97e047254a52ce89c157b5af6cd0b", size = 1712570, upload-time = "2025-10-28T20:57:22.253Z" }, - { url = "https://files.pythonhosted.org/packages/11/2c/22799d8e720f4697a9e66fd9c02479e40a49de3de2f0bbe7f9f78a987808/aiohttp-3.13.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:e1b4951125ec10c70802f2cb09736c895861cd39fd9dcb35107b4dc8ae6220b8", size = 1733407, upload-time = "2025-10-28T20:57:24.37Z" }, - { url = "https://files.pythonhosted.org/packages/34/cb/90f15dd029f07cebbd91f8238a8b363978b530cd128488085b5703683594/aiohttp-3.13.2-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:550bf765101ae721ee1d37d8095f47b1f220650f85fe1af37a90ce75bab89d04", size = 1550093, upload-time = "2025-10-28T20:57:26.257Z" }, - { url = "https://files.pythonhosted.org/packages/69/46/12dce9be9d3303ecbf4d30ad45a7683dc63d90733c2d9fe512be6716cd40/aiohttp-3.13.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:fe91b87fc295973096251e2d25a811388e7d8adf3bd2b97ef6ae78bc4ac6c476", size = 1758084, upload-time = "2025-10-28T20:57:28.349Z" }, - { url = "https://files.pythonhosted.org/packages/f9/c8/0932b558da0c302ffd639fc6362a313b98fdf235dc417bc2493da8394df7/aiohttp-3.13.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e0c8e31cfcc4592cb200160344b2fb6ae0f9e4effe06c644b5a125d4ae5ebe23", size = 1716987, upload-time = "2025-10-28T20:57:30.233Z" }, - { url = "https://files.pythonhosted.org/packages/5d/8b/f5bd1a75003daed099baec373aed678f2e9b34f2ad40d85baa1368556396/aiohttp-3.13.2-cp313-cp313-win32.whl", hash = "sha256:0740f31a60848d6edb296a0df827473eede90c689b8f9f2a4cdde74889eb2254", size = 425859, upload-time = "2025-10-28T20:57:32.105Z" }, - { url = "https://files.pythonhosted.org/packages/5d/28/a8a9fc6957b2cee8902414e41816b5ab5536ecf43c3b1843c10e82c559b2/aiohttp-3.13.2-cp313-cp313-win_amd64.whl", hash = "sha256:a88d13e7ca367394908f8a276b89d04a3652044612b9a408a0bb22a5ed976a1a", size = 452192, upload-time = "2025-10-28T20:57:34.166Z" }, - { url = "https://files.pythonhosted.org/packages/9b/36/e2abae1bd815f01c957cbf7be817b3043304e1c87bad526292a0410fdcf9/aiohttp-3.13.2-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:2475391c29230e063ef53a66669b7b691c9bfc3f1426a0f7bcdf1216bdbac38b", size = 735234, upload-time = "2025-10-28T20:57:36.415Z" }, - { url = "https://files.pythonhosted.org/packages/ca/e3/1ee62dde9b335e4ed41db6bba02613295a0d5b41f74a783c142745a12763/aiohttp-3.13.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:f33c8748abef4d8717bb20e8fb1b3e07c6adacb7fd6beaae971a764cf5f30d61", size = 490733, upload-time = "2025-10-28T20:57:38.205Z" }, - { url = "https://files.pythonhosted.org/packages/1a/aa/7a451b1d6a04e8d15a362af3e9b897de71d86feac3babf8894545d08d537/aiohttp-3.13.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ae32f24bbfb7dbb485a24b30b1149e2f200be94777232aeadba3eecece4d0aa4", size = 491303, upload-time = "2025-10-28T20:57:40.122Z" }, - { url = "https://files.pythonhosted.org/packages/57/1e/209958dbb9b01174870f6a7538cd1f3f28274fdbc88a750c238e2c456295/aiohttp-3.13.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5d7f02042c1f009ffb70067326ef183a047425bb2ff3bc434ead4dd4a4a66a2b", size = 1717965, upload-time = "2025-10-28T20:57:42.28Z" }, - { url = "https://files.pythonhosted.org/packages/08/aa/6a01848d6432f241416bc4866cae8dc03f05a5a884d2311280f6a09c73d6/aiohttp-3.13.2-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:93655083005d71cd6c072cdab54c886e6570ad2c4592139c3fb967bfc19e4694", size = 1667221, upload-time = "2025-10-28T20:57:44.869Z" }, - { url = "https://files.pythonhosted.org/packages/87/4f/36c1992432d31bbc789fa0b93c768d2e9047ec8c7177e5cd84ea85155f36/aiohttp-3.13.2-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0db1e24b852f5f664cd728db140cf11ea0e82450471232a394b3d1a540b0f906", size = 1757178, upload-time = "2025-10-28T20:57:47.216Z" }, - { url = "https://files.pythonhosted.org/packages/ac/b4/8e940dfb03b7e0f68a82b88fd182b9be0a65cb3f35612fe38c038c3112cf/aiohttp-3.13.2-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b009194665bcd128e23eaddef362e745601afa4641930848af4c8559e88f18f9", size = 1838001, upload-time = "2025-10-28T20:57:49.337Z" }, - { url = "https://files.pythonhosted.org/packages/d7/ef/39f3448795499c440ab66084a9db7d20ca7662e94305f175a80f5b7e0072/aiohttp-3.13.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c038a8fdc8103cd51dbd986ecdce141473ffd9775a7a8057a6ed9c3653478011", size = 1716325, upload-time = "2025-10-28T20:57:51.327Z" }, - { url = "https://files.pythonhosted.org/packages/d7/51/b311500ffc860b181c05d91c59a1313bdd05c82960fdd4035a15740d431e/aiohttp-3.13.2-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:66bac29b95a00db411cd758fea0e4b9bdba6d549dfe333f9a945430f5f2cc5a6", size = 1547978, upload-time = "2025-10-28T20:57:53.554Z" }, - { url = "https://files.pythonhosted.org/packages/31/64/b9d733296ef79815226dab8c586ff9e3df41c6aff2e16c06697b2d2e6775/aiohttp-3.13.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4ebf9cfc9ba24a74cf0718f04aac2a3bbe745902cc7c5ebc55c0f3b5777ef213", size = 1682042, upload-time = "2025-10-28T20:57:55.617Z" }, - { url = "https://files.pythonhosted.org/packages/3f/30/43d3e0f9d6473a6db7d472104c4eff4417b1e9df01774cb930338806d36b/aiohttp-3.13.2-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:a4b88ebe35ce54205c7074f7302bd08a4cb83256a3e0870c72d6f68a3aaf8e49", size = 1680085, upload-time = "2025-10-28T20:57:57.59Z" }, - { url = "https://files.pythonhosted.org/packages/16/51/c709f352c911b1864cfd1087577760ced64b3e5bee2aa88b8c0c8e2e4972/aiohttp-3.13.2-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:98c4fb90bb82b70a4ed79ca35f656f4281885be076f3f970ce315402b53099ae", size = 1728238, upload-time = "2025-10-28T20:57:59.525Z" }, - { url = "https://files.pythonhosted.org/packages/19/e2/19bd4c547092b773caeb48ff5ae4b1ae86756a0ee76c16727fcfd281404b/aiohttp-3.13.2-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:ec7534e63ae0f3759df3a1ed4fa6bc8f75082a924b590619c0dd2f76d7043caa", size = 1544395, upload-time = "2025-10-28T20:58:01.914Z" }, - { url = "https://files.pythonhosted.org/packages/cf/87/860f2803b27dfc5ed7be532832a3498e4919da61299b4a1f8eb89b8ff44d/aiohttp-3.13.2-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:5b927cf9b935a13e33644cbed6c8c4b2d0f25b713d838743f8fe7191b33829c4", size = 1742965, upload-time = "2025-10-28T20:58:03.972Z" }, - { url = "https://files.pythonhosted.org/packages/67/7f/db2fc7618925e8c7a601094d5cbe539f732df4fb570740be88ed9e40e99a/aiohttp-3.13.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:88d6c017966a78c5265d996c19cdb79235be5e6412268d7e2ce7dee339471b7a", size = 1697585, upload-time = "2025-10-28T20:58:06.189Z" }, - { url = "https://files.pythonhosted.org/packages/0c/07/9127916cb09bb38284db5036036042b7b2c514c8ebaeee79da550c43a6d6/aiohttp-3.13.2-cp314-cp314-win32.whl", hash = "sha256:f7c183e786e299b5d6c49fb43a769f8eb8e04a2726a2bd5887b98b5cc2d67940", size = 431621, upload-time = "2025-10-28T20:58:08.636Z" }, - { url = "https://files.pythonhosted.org/packages/fb/41/554a8a380df6d3a2bba8a7726429a23f4ac62aaf38de43bb6d6cde7b4d4d/aiohttp-3.13.2-cp314-cp314-win_amd64.whl", hash = "sha256:fe242cd381e0fb65758faf5ad96c2e460df6ee5b2de1072fe97e4127927e00b4", size = 457627, upload-time = "2025-10-28T20:58:11Z" }, - { url = "https://files.pythonhosted.org/packages/c7/8e/3824ef98c039d3951cb65b9205a96dd2b20f22241ee17d89c5701557c826/aiohttp-3.13.2-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:f10d9c0b0188fe85398c61147bbd2a657d616c876863bfeff43376e0e3134673", size = 767360, upload-time = "2025-10-28T20:58:13.358Z" }, - { url = "https://files.pythonhosted.org/packages/a4/0f/6a03e3fc7595421274fa34122c973bde2d89344f8a881b728fa8c774e4f1/aiohttp-3.13.2-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:e7c952aefdf2460f4ae55c5e9c3e80aa72f706a6317e06020f80e96253b1accd", size = 504616, upload-time = "2025-10-28T20:58:15.339Z" }, - { url = "https://files.pythonhosted.org/packages/c6/aa/ed341b670f1bc8a6f2c6a718353d13b9546e2cef3544f573c6a1ff0da711/aiohttp-3.13.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c20423ce14771d98353d2e25e83591fa75dfa90a3c1848f3d7c68243b4fbded3", size = 509131, upload-time = "2025-10-28T20:58:17.693Z" }, - { url = "https://files.pythonhosted.org/packages/7f/f0/c68dac234189dae5c4bbccc0f96ce0cc16b76632cfc3a08fff180045cfa4/aiohttp-3.13.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e96eb1a34396e9430c19d8338d2ec33015e4a87ef2b4449db94c22412e25ccdf", size = 1864168, upload-time = "2025-10-28T20:58:20.113Z" }, - { url = "https://files.pythonhosted.org/packages/8f/65/75a9a76db8364b5d0e52a0c20eabc5d52297385d9af9c35335b924fafdee/aiohttp-3.13.2-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:23fb0783bc1a33640036465019d3bba069942616a6a2353c6907d7fe1ccdaf4e", size = 1719200, upload-time = "2025-10-28T20:58:22.583Z" }, - { url = "https://files.pythonhosted.org/packages/f5/55/8df2ed78d7f41d232f6bd3ff866b6f617026551aa1d07e2f03458f964575/aiohttp-3.13.2-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2e1a9bea6244a1d05a4e57c295d69e159a5c50d8ef16aa390948ee873478d9a5", size = 1843497, upload-time = "2025-10-28T20:58:24.672Z" }, - { url = "https://files.pythonhosted.org/packages/e9/e0/94d7215e405c5a02ccb6a35c7a3a6cfff242f457a00196496935f700cde5/aiohttp-3.13.2-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0a3d54e822688b56e9f6b5816fb3de3a3a64660efac64e4c2dc435230ad23bad", size = 1935703, upload-time = "2025-10-28T20:58:26.758Z" }, - { url = "https://files.pythonhosted.org/packages/0b/78/1eeb63c3f9b2d1015a4c02788fb543141aad0a03ae3f7a7b669b2483f8d4/aiohttp-3.13.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7a653d872afe9f33497215745da7a943d1dc15b728a9c8da1c3ac423af35178e", size = 1792738, upload-time = "2025-10-28T20:58:29.787Z" }, - { url = "https://files.pythonhosted.org/packages/41/75/aaf1eea4c188e51538c04cc568040e3082db263a57086ea74a7d38c39e42/aiohttp-3.13.2-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:56d36e80d2003fa3fc0207fac644216d8532e9504a785ef9a8fd013f84a42c61", size = 1624061, upload-time = "2025-10-28T20:58:32.529Z" }, - { url = "https://files.pythonhosted.org/packages/9b/c2/3b6034de81fbcc43de8aeb209073a2286dfb50b86e927b4efd81cf848197/aiohttp-3.13.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:78cd586d8331fb8e241c2dd6b2f4061778cc69e150514b39a9e28dd050475661", size = 1789201, upload-time = "2025-10-28T20:58:34.618Z" }, - { url = "https://files.pythonhosted.org/packages/c9/38/c15dcf6d4d890217dae79d7213988f4e5fe6183d43893a9cf2fe9e84ca8d/aiohttp-3.13.2-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:20b10bbfbff766294fe99987f7bb3b74fdd2f1a2905f2562132641ad434dcf98", size = 1776868, upload-time = "2025-10-28T20:58:38.835Z" }, - { url = "https://files.pythonhosted.org/packages/04/75/f74fd178ac81adf4f283a74847807ade5150e48feda6aef024403716c30c/aiohttp-3.13.2-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:9ec49dff7e2b3c85cdeaa412e9d438f0ecd71676fde61ec57027dd392f00c693", size = 1790660, upload-time = "2025-10-28T20:58:41.507Z" }, - { url = "https://files.pythonhosted.org/packages/e7/80/7368bd0d06b16b3aba358c16b919e9c46cf11587dc572091031b0e9e3ef0/aiohttp-3.13.2-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:94f05348c4406450f9d73d38efb41d669ad6cd90c7ee194810d0eefbfa875a7a", size = 1617548, upload-time = "2025-10-28T20:58:43.674Z" }, - { url = "https://files.pythonhosted.org/packages/7d/4b/a6212790c50483cb3212e507378fbe26b5086d73941e1ec4b56a30439688/aiohttp-3.13.2-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:fa4dcb605c6f82a80c7f95713c2b11c3b8e9893b3ebd2bc9bde93165ed6107be", size = 1817240, upload-time = "2025-10-28T20:58:45.787Z" }, - { url = "https://files.pythonhosted.org/packages/ff/f7/ba5f0ba4ea8d8f3c32850912944532b933acbf0f3a75546b89269b9b7dde/aiohttp-3.13.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cf00e5db968c3f67eccd2778574cf64d8b27d95b237770aa32400bd7a1ca4f6c", size = 1762334, upload-time = "2025-10-28T20:58:47.936Z" }, - { url = "https://files.pythonhosted.org/packages/7e/83/1a5a1856574588b1cad63609ea9ad75b32a8353ac995d830bf5da9357364/aiohttp-3.13.2-cp314-cp314t-win32.whl", hash = "sha256:d23b5fe492b0805a50d3371e8a728a9134d8de5447dce4c885f5587294750734", size = 464685, upload-time = "2025-10-28T20:58:50.642Z" }, - { url = "https://files.pythonhosted.org/packages/9f/4d/d22668674122c08f4d56972297c51a624e64b3ed1efaa40187607a7cb66e/aiohttp-3.13.2-cp314-cp314t-win_amd64.whl", hash = "sha256:ff0a7b0a82a7ab905cbda74006318d1b12e37c797eb1b0d4eb3e316cf47f658f", size = 498093, upload-time = "2025-10-28T20:58:52.782Z" }, -] - -[[package]] -name = "aiosignal" -version = "1.4.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "frozenlist" }, - { name = "typing-extensions", marker = "python_full_version < '3.13'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/61/62/06741b579156360248d1ec624842ad0edf697050bbaf7c3e46394e106ad1/aiosignal-1.4.0.tar.gz", hash = "sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7", size = 25007, upload-time = "2025-07-03T22:54:43.528Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl", hash = "sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e", size = 7490, upload-time = "2025-07-03T22:54:42.156Z" }, -] - [[package]] name = "annotated-types" version = "0.7.0" @@ -155,44 +13,25 @@ wheels = [ [[package]] name = "anyio" -version = "4.11.0" +version = "4.12.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, { name = "idna" }, - { name = "sniffio" }, { name = "typing-extensions", marker = "python_full_version < '3.13'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c6/78/7d432127c41b50bccba979505f272c16cbcadcc33645d5fa3a738110ae75/anyio-4.11.0.tar.gz", hash = "sha256:82a8d0b81e318cc5ce71a5f1f8b5c4e63619620b63141ef8c995fa0db95a57c4", size = 219094, upload-time = "2025-09-23T09:19:12.58Z" } +sdist = { url = "https://files.pythonhosted.org/packages/96/f0/5eb65b2bb0d09ac6776f2eb54adee6abe8228ea05b20a5ad0e4945de8aac/anyio-4.12.1.tar.gz", hash = "sha256:41cfcc3a4c85d3f05c932da7c26d0201ac36f72abd4435ba90d0464a3ffed703", size = 228685, upload-time = "2026-01-06T11:45:21.246Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/15/b3/9b1a8074496371342ec1e796a96f99c82c945a339cd81a8e73de28b4cf9e/anyio-4.11.0-py3-none-any.whl", hash = "sha256:0287e96f4d26d4149305414d4e3bc32f0dcd0862365a4bddea19d7a1ec38c4fc", size = 109097, upload-time = "2025-09-23T09:19:10.601Z" }, -] - -[[package]] -name = "async-timeout" -version = "5.0.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a5/ae/136395dfbfe00dfc94da3f3e136d0b13f394cba8f4841120e34226265780/async_timeout-5.0.1.tar.gz", hash = "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3", size = 9274, upload-time = "2024-11-06T16:41:39.6Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fe/ba/e2081de779ca30d473f21f5b30e0e737c438205440784c7dfc81efc2b029/async_timeout-5.0.1-py3-none-any.whl", hash = "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c", size = 6233, upload-time = "2024-11-06T16:41:37.9Z" }, -] - -[[package]] -name = "attrs" -version = "25.4.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6b/5c/685e6633917e101e5dcb62b9dd76946cbb57c26e133bae9e0cd36033c0a9/attrs-25.4.0.tar.gz", hash = "sha256:16d5969b87f0859ef33a48b35d55ac1be6e42ae49d5e853b597db70c35c57e11", size = 934251, upload-time = "2025-10-06T13:54:44.725Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl", hash = "sha256:adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373", size = 67615, upload-time = "2025-10-06T13:54:43.17Z" }, + { url = "https://files.pythonhosted.org/packages/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-py3-none-any.whl", hash = "sha256:d405828884fc140aa80a3c667b8beed277f1dfedec42ba031bd6ac3db606ab6c", size = 113592, upload-time = "2026-01-06T11:45:19.497Z" }, ] [[package]] name = "certifi" -version = "2025.11.12" +version = "2026.1.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a2/8c/58f469717fa48465e4a50c014a0400602d3c437d7c0c468e17ada824da3a/certifi-2025.11.12.tar.gz", hash = "sha256:d8ab5478f2ecd78af242878415affce761ca6bc54a22a27e026d7c25357c3316", size = 160538, upload-time = "2025-11-12T02:54:51.517Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e0/2d/a891ca51311197f6ad14a7ef42e2399f36cf2f9bd44752b3dc4eab60fdc5/certifi-2026.1.4.tar.gz", hash = "sha256:ac726dd470482006e014ad384921ed6438c457018f4b3d204aea4281258b2120", size = 154268, upload-time = "2026-01-04T02:42:41.825Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/70/7d/9bc192684cea499815ff478dfcdc13835ddf401365057044fb721ec6bddb/certifi-2025.11.12-py3-none-any.whl", hash = "sha256:97de8790030bbd5c2d96b7ec782fc2f7820ef8dba6db909ccf95449f2d062d4b", size = 159438, upload-time = "2025-11-12T02:54:49.735Z" }, + { url = "https://files.pythonhosted.org/packages/e6/ad/3cc14f097111b4de0040c83a525973216457bbeeb63739ef1ed275c1c021/certifi-2026.1.4-py3-none-any.whl", hash = "sha256:9943707519e4add1115f44c2bc244f782c0249876bf51b6599fee1ffbedd685c", size = 152900, upload-time = "2026-01-04T02:42:40.15Z" }, ] [[package]] @@ -288,22 +127,15 @@ wheels = [ [[package]] name = "connect-python" -version = "0.4.2" +version = "0.6.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "aiohttp" }, - { name = "multidict" }, + { name = "httpx" }, { name = "protobuf" }, - { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/dd/3c/3ab5feddb807e2c6cab38e2b81dd3f82d853c4ba1b0dd66b1fd3d29f664e/connect_python-0.4.2.tar.gz", hash = "sha256:8b0a49b9c5caf82776e8577fbb2a3acae1d0b6b9ab925dace43418ad1fb6002d", size = 178600, upload-time = "2025-07-01T06:44:49.126Z" } +sdist = { url = "https://files.pythonhosted.org/packages/17/92/f50ef15f6f793a3ea18abc7ce378cd3d16d7f65f0dbc2827bcc139be440a/connect_python-0.6.0.tar.gz", hash = "sha256:88f159d0b3ccc0d52cec9937b8bfc654793a47f24825697e1d25c5779097aa24", size = 37265, upload-time = "2025-12-08T04:45:45.718Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ec/af/ec2756b81573441fe8c706e27188cbebce437912d3bdc650e8d5d3856c1a/connect_python-0.4.2-py3-none-any.whl", hash = "sha256:8d76089f4e2bf97513eccf1f594d10fb2275bae3042f6f945ad8dea884a4f2c4", size = 42033, upload-time = "2025-07-01T06:44:47.657Z" }, -] - -[package.optional-dependencies] -compiler = [ - { name = "protogen" }, + { url = "https://files.pythonhosted.org/packages/b7/3f/dc41bcb3cd450bd2e102e4384b5a324d4b35b06332e301d9f73dc0543892/connect_python-0.6.0-py3-none-any.whl", hash = "sha256:9e12fdfdf546144a68b976430b014b266ab482fac56362ff8dbe3004e370abc7", size = 49356, upload-time = "2025-12-08T04:45:44.628Z" }, ] [[package]] @@ -373,135 +205,14 @@ wheels = [ [[package]] name = "exceptiongroup" -version = "1.3.0" +version = "1.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions", marker = "python_full_version < '3.13'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/0b/9f/a65090624ecf468cdca03533906e7c69ed7588582240cfe7cc9e770b50eb/exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88", size = 29749, upload-time = "2025-05-10T17:42:51.123Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/36/f4/c6e662dade71f56cd2f3735141b265c3c79293c109549c1e6933b0651ffc/exceptiongroup-1.3.0-py3-none-any.whl", hash = "sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10", size = 16674, upload-time = "2025-05-10T17:42:49.33Z" }, -] - -[[package]] -name = "frozenlist" -version = "1.8.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2d/f5/c831fac6cc817d26fd54c7eaccd04ef7e0288806943f7cc5bbf69f3ac1f0/frozenlist-1.8.0.tar.gz", hash = "sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad", size = 45875, upload-time = "2025-10-06T05:38:17.865Z" } +sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/83/4a/557715d5047da48d54e659203b9335be7bfaafda2c3f627b7c47e0b3aaf3/frozenlist-1.8.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b37f6d31b3dcea7deb5e9696e529a6aa4a898adc33db82da12e4c60a7c4d2011", size = 86230, upload-time = "2025-10-06T05:35:23.699Z" }, - { url = "https://files.pythonhosted.org/packages/a2/fb/c85f9fed3ea8fe8740e5b46a59cc141c23b842eca617da8876cfce5f760e/frozenlist-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ef2b7b394f208233e471abc541cc6991f907ffd47dc72584acee3147899d6565", size = 49621, upload-time = "2025-10-06T05:35:25.341Z" }, - { url = "https://files.pythonhosted.org/packages/63/70/26ca3f06aace16f2352796b08704338d74b6d1a24ca38f2771afbb7ed915/frozenlist-1.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a88f062f072d1589b7b46e951698950e7da00442fc1cacbe17e19e025dc327ad", size = 49889, upload-time = "2025-10-06T05:35:26.797Z" }, - { url = "https://files.pythonhosted.org/packages/5d/ed/c7895fd2fde7f3ee70d248175f9b6cdf792fb741ab92dc59cd9ef3bd241b/frozenlist-1.8.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f57fb59d9f385710aa7060e89410aeb5058b99e62f4d16b08b91986b9a2140c2", size = 219464, upload-time = "2025-10-06T05:35:28.254Z" }, - { url = "https://files.pythonhosted.org/packages/6b/83/4d587dccbfca74cb8b810472392ad62bfa100bf8108c7223eb4c4fa2f7b3/frozenlist-1.8.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:799345ab092bee59f01a915620b5d014698547afd011e691a208637312db9186", size = 221649, upload-time = "2025-10-06T05:35:29.454Z" }, - { url = "https://files.pythonhosted.org/packages/6a/c6/fd3b9cd046ec5fff9dab66831083bc2077006a874a2d3d9247dea93ddf7e/frozenlist-1.8.0-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c23c3ff005322a6e16f71bf8692fcf4d5a304aaafe1e262c98c6d4adc7be863e", size = 219188, upload-time = "2025-10-06T05:35:30.951Z" }, - { url = "https://files.pythonhosted.org/packages/ce/80/6693f55eb2e085fc8afb28cf611448fb5b90e98e068fa1d1b8d8e66e5c7d/frozenlist-1.8.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8a76ea0f0b9dfa06f254ee06053d93a600865b3274358ca48a352ce4f0798450", size = 231748, upload-time = "2025-10-06T05:35:32.101Z" }, - { url = "https://files.pythonhosted.org/packages/97/d6/e9459f7c5183854abd989ba384fe0cc1a0fb795a83c033f0571ec5933ca4/frozenlist-1.8.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c7366fe1418a6133d5aa824ee53d406550110984de7637d65a178010f759c6ef", size = 236351, upload-time = "2025-10-06T05:35:33.834Z" }, - { url = "https://files.pythonhosted.org/packages/97/92/24e97474b65c0262e9ecd076e826bfd1d3074adcc165a256e42e7b8a7249/frozenlist-1.8.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:13d23a45c4cebade99340c4165bd90eeb4a56c6d8a9d8aa49568cac19a6d0dc4", size = 218767, upload-time = "2025-10-06T05:35:35.205Z" }, - { url = "https://files.pythonhosted.org/packages/ee/bf/dc394a097508f15abff383c5108cb8ad880d1f64a725ed3b90d5c2fbf0bb/frozenlist-1.8.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:e4a3408834f65da56c83528fb52ce7911484f0d1eaf7b761fc66001db1646eff", size = 235887, upload-time = "2025-10-06T05:35:36.354Z" }, - { url = "https://files.pythonhosted.org/packages/40/90/25b201b9c015dbc999a5baf475a257010471a1fa8c200c843fd4abbee725/frozenlist-1.8.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:42145cd2748ca39f32801dad54aeea10039da6f86e303659db90db1c4b614c8c", size = 228785, upload-time = "2025-10-06T05:35:37.949Z" }, - { url = "https://files.pythonhosted.org/packages/84/f4/b5bc148df03082f05d2dd30c089e269acdbe251ac9a9cf4e727b2dbb8a3d/frozenlist-1.8.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:e2de870d16a7a53901e41b64ffdf26f2fbb8917b3e6ebf398098d72c5b20bd7f", size = 230312, upload-time = "2025-10-06T05:35:39.178Z" }, - { url = "https://files.pythonhosted.org/packages/db/4b/87e95b5d15097c302430e647136b7d7ab2398a702390cf4c8601975709e7/frozenlist-1.8.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:20e63c9493d33ee48536600d1a5c95eefc870cd71e7ab037763d1fbb89cc51e7", size = 217650, upload-time = "2025-10-06T05:35:40.377Z" }, - { url = "https://files.pythonhosted.org/packages/e5/70/78a0315d1fea97120591a83e0acd644da638c872f142fd72a6cebee825f3/frozenlist-1.8.0-cp310-cp310-win32.whl", hash = "sha256:adbeebaebae3526afc3c96fad434367cafbfd1b25d72369a9e5858453b1bb71a", size = 39659, upload-time = "2025-10-06T05:35:41.863Z" }, - { url = "https://files.pythonhosted.org/packages/66/aa/3f04523fb189a00e147e60c5b2205126118f216b0aa908035c45336e27e4/frozenlist-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:667c3777ca571e5dbeb76f331562ff98b957431df140b54c85fd4d52eea8d8f6", size = 43837, upload-time = "2025-10-06T05:35:43.205Z" }, - { url = "https://files.pythonhosted.org/packages/39/75/1135feecdd7c336938bd55b4dc3b0dfc46d85b9be12ef2628574b28de776/frozenlist-1.8.0-cp310-cp310-win_arm64.whl", hash = "sha256:80f85f0a7cc86e7a54c46d99c9e1318ff01f4687c172ede30fd52d19d1da1c8e", size = 39989, upload-time = "2025-10-06T05:35:44.596Z" }, - { url = "https://files.pythonhosted.org/packages/bc/03/077f869d540370db12165c0aa51640a873fb661d8b315d1d4d67b284d7ac/frozenlist-1.8.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:09474e9831bc2b2199fad6da3c14c7b0fbdd377cce9d3d77131be28906cb7d84", size = 86912, upload-time = "2025-10-06T05:35:45.98Z" }, - { url = "https://files.pythonhosted.org/packages/df/b5/7610b6bd13e4ae77b96ba85abea1c8cb249683217ef09ac9e0ae93f25a91/frozenlist-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:17c883ab0ab67200b5f964d2b9ed6b00971917d5d8a92df149dc2c9779208ee9", size = 50046, upload-time = "2025-10-06T05:35:47.009Z" }, - { url = "https://files.pythonhosted.org/packages/6e/ef/0e8f1fe32f8a53dd26bdd1f9347efe0778b0fddf62789ea683f4cc7d787d/frozenlist-1.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fa47e444b8ba08fffd1c18e8cdb9a75db1b6a27f17507522834ad13ed5922b93", size = 50119, upload-time = "2025-10-06T05:35:48.38Z" }, - { url = "https://files.pythonhosted.org/packages/11/b1/71a477adc7c36e5fb628245dfbdea2166feae310757dea848d02bd0689fd/frozenlist-1.8.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2552f44204b744fba866e573be4c1f9048d6a324dfe14475103fd51613eb1d1f", size = 231067, upload-time = "2025-10-06T05:35:49.97Z" }, - { url = "https://files.pythonhosted.org/packages/45/7e/afe40eca3a2dc19b9904c0f5d7edfe82b5304cb831391edec0ac04af94c2/frozenlist-1.8.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:957e7c38f250991e48a9a73e6423db1bb9dd14e722a10f6b8bb8e16a0f55f695", size = 233160, upload-time = "2025-10-06T05:35:51.729Z" }, - { url = "https://files.pythonhosted.org/packages/a6/aa/7416eac95603ce428679d273255ffc7c998d4132cfae200103f164b108aa/frozenlist-1.8.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:8585e3bb2cdea02fc88ffa245069c36555557ad3609e83be0ec71f54fd4abb52", size = 228544, upload-time = "2025-10-06T05:35:53.246Z" }, - { url = "https://files.pythonhosted.org/packages/8b/3d/2a2d1f683d55ac7e3875e4263d28410063e738384d3adc294f5ff3d7105e/frozenlist-1.8.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:edee74874ce20a373d62dc28b0b18b93f645633c2943fd90ee9d898550770581", size = 243797, upload-time = "2025-10-06T05:35:54.497Z" }, - { url = "https://files.pythonhosted.org/packages/78/1e/2d5565b589e580c296d3bb54da08d206e797d941a83a6fdea42af23be79c/frozenlist-1.8.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c9a63152fe95756b85f31186bddf42e4c02c6321207fd6601a1c89ebac4fe567", size = 247923, upload-time = "2025-10-06T05:35:55.861Z" }, - { url = "https://files.pythonhosted.org/packages/aa/c3/65872fcf1d326a7f101ad4d86285c403c87be7d832b7470b77f6d2ed5ddc/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b6db2185db9be0a04fecf2f241c70b63b1a242e2805be291855078f2b404dd6b", size = 230886, upload-time = "2025-10-06T05:35:57.399Z" }, - { url = "https://files.pythonhosted.org/packages/a0/76/ac9ced601d62f6956f03cc794f9e04c81719509f85255abf96e2510f4265/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:f4be2e3d8bc8aabd566f8d5b8ba7ecc09249d74ba3c9ed52e54dc23a293f0b92", size = 245731, upload-time = "2025-10-06T05:35:58.563Z" }, - { url = "https://files.pythonhosted.org/packages/b9/49/ecccb5f2598daf0b4a1415497eba4c33c1e8ce07495eb07d2860c731b8d5/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:c8d1634419f39ea6f5c427ea2f90ca85126b54b50837f31497f3bf38266e853d", size = 241544, upload-time = "2025-10-06T05:35:59.719Z" }, - { url = "https://files.pythonhosted.org/packages/53/4b/ddf24113323c0bbcc54cb38c8b8916f1da7165e07b8e24a717b4a12cbf10/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:1a7fa382a4a223773ed64242dbe1c9c326ec09457e6b8428efb4118c685c3dfd", size = 241806, upload-time = "2025-10-06T05:36:00.959Z" }, - { url = "https://files.pythonhosted.org/packages/a7/fb/9b9a084d73c67175484ba2789a59f8eebebd0827d186a8102005ce41e1ba/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:11847b53d722050808926e785df837353bd4d75f1d494377e59b23594d834967", size = 229382, upload-time = "2025-10-06T05:36:02.22Z" }, - { url = "https://files.pythonhosted.org/packages/95/a3/c8fb25aac55bf5e12dae5c5aa6a98f85d436c1dc658f21c3ac73f9fa95e5/frozenlist-1.8.0-cp311-cp311-win32.whl", hash = "sha256:27c6e8077956cf73eadd514be8fb04d77fc946a7fe9f7fe167648b0b9085cc25", size = 39647, upload-time = "2025-10-06T05:36:03.409Z" }, - { url = "https://files.pythonhosted.org/packages/0a/f5/603d0d6a02cfd4c8f2a095a54672b3cf967ad688a60fb9faf04fc4887f65/frozenlist-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:ac913f8403b36a2c8610bbfd25b8013488533e71e62b4b4adce9c86c8cea905b", size = 44064, upload-time = "2025-10-06T05:36:04.368Z" }, - { url = "https://files.pythonhosted.org/packages/5d/16/c2c9ab44e181f043a86f9a8f84d5124b62dbcb3a02c0977ec72b9ac1d3e0/frozenlist-1.8.0-cp311-cp311-win_arm64.whl", hash = "sha256:d4d3214a0f8394edfa3e303136d0575eece0745ff2b47bd2cb2e66dd92d4351a", size = 39937, upload-time = "2025-10-06T05:36:05.669Z" }, - { url = "https://files.pythonhosted.org/packages/69/29/948b9aa87e75820a38650af445d2ef2b6b8a6fab1a23b6bb9e4ef0be2d59/frozenlist-1.8.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:78f7b9e5d6f2fdb88cdde9440dc147259b62b9d3b019924def9f6478be254ac1", size = 87782, upload-time = "2025-10-06T05:36:06.649Z" }, - { url = "https://files.pythonhosted.org/packages/64/80/4f6e318ee2a7c0750ed724fa33a4bdf1eacdc5a39a7a24e818a773cd91af/frozenlist-1.8.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:229bf37d2e4acdaf808fd3f06e854a4a7a3661e871b10dc1f8f1896a3b05f18b", size = 50594, upload-time = "2025-10-06T05:36:07.69Z" }, - { url = "https://files.pythonhosted.org/packages/2b/94/5c8a2b50a496b11dd519f4a24cb5496cf125681dd99e94c604ccdea9419a/frozenlist-1.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f833670942247a14eafbb675458b4e61c82e002a148f49e68257b79296e865c4", size = 50448, upload-time = "2025-10-06T05:36:08.78Z" }, - { url = "https://files.pythonhosted.org/packages/6a/bd/d91c5e39f490a49df14320f4e8c80161cfcce09f1e2cde1edd16a551abb3/frozenlist-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:494a5952b1c597ba44e0e78113a7266e656b9794eec897b19ead706bd7074383", size = 242411, upload-time = "2025-10-06T05:36:09.801Z" }, - { url = "https://files.pythonhosted.org/packages/8f/83/f61505a05109ef3293dfb1ff594d13d64a2324ac3482be2cedc2be818256/frozenlist-1.8.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96f423a119f4777a4a056b66ce11527366a8bb92f54e541ade21f2374433f6d4", size = 243014, upload-time = "2025-10-06T05:36:11.394Z" }, - { url = "https://files.pythonhosted.org/packages/d8/cb/cb6c7b0f7d4023ddda30cf56b8b17494eb3a79e3fda666bf735f63118b35/frozenlist-1.8.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3462dd9475af2025c31cc61be6652dfa25cbfb56cbbf52f4ccfe029f38decaf8", size = 234909, upload-time = "2025-10-06T05:36:12.598Z" }, - { url = "https://files.pythonhosted.org/packages/31/c5/cd7a1f3b8b34af009fb17d4123c5a778b44ae2804e3ad6b86204255f9ec5/frozenlist-1.8.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c4c800524c9cd9bac5166cd6f55285957fcfc907db323e193f2afcd4d9abd69b", size = 250049, upload-time = "2025-10-06T05:36:14.065Z" }, - { url = "https://files.pythonhosted.org/packages/c0/01/2f95d3b416c584a1e7f0e1d6d31998c4a795f7544069ee2e0962a4b60740/frozenlist-1.8.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d6a5df73acd3399d893dafc71663ad22534b5aa4f94e8a2fabfe856c3c1b6a52", size = 256485, upload-time = "2025-10-06T05:36:15.39Z" }, - { url = "https://files.pythonhosted.org/packages/ce/03/024bf7720b3abaebcff6d0793d73c154237b85bdf67b7ed55e5e9596dc9a/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:405e8fe955c2280ce66428b3ca55e12b3c4e9c336fb2103a4937e891c69a4a29", size = 237619, upload-time = "2025-10-06T05:36:16.558Z" }, - { url = "https://files.pythonhosted.org/packages/69/fa/f8abdfe7d76b731f5d8bd217827cf6764d4f1d9763407e42717b4bed50a0/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:908bd3f6439f2fef9e85031b59fd4f1297af54415fb60e4254a95f75b3cab3f3", size = 250320, upload-time = "2025-10-06T05:36:17.821Z" }, - { url = "https://files.pythonhosted.org/packages/f5/3c/b051329f718b463b22613e269ad72138cc256c540f78a6de89452803a47d/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:294e487f9ec720bd8ffcebc99d575f7eff3568a08a253d1ee1a0378754b74143", size = 246820, upload-time = "2025-10-06T05:36:19.046Z" }, - { url = "https://files.pythonhosted.org/packages/0f/ae/58282e8f98e444b3f4dd42448ff36fa38bef29e40d40f330b22e7108f565/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:74c51543498289c0c43656701be6b077f4b265868fa7f8a8859c197006efb608", size = 250518, upload-time = "2025-10-06T05:36:20.763Z" }, - { url = "https://files.pythonhosted.org/packages/8f/96/007e5944694d66123183845a106547a15944fbbb7154788cbf7272789536/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:776f352e8329135506a1d6bf16ac3f87bc25b28e765949282dcc627af36123aa", size = 239096, upload-time = "2025-10-06T05:36:22.129Z" }, - { url = "https://files.pythonhosted.org/packages/66/bb/852b9d6db2fa40be96f29c0d1205c306288f0684df8fd26ca1951d461a56/frozenlist-1.8.0-cp312-cp312-win32.whl", hash = "sha256:433403ae80709741ce34038da08511d4a77062aa924baf411ef73d1146e74faf", size = 39985, upload-time = "2025-10-06T05:36:23.661Z" }, - { url = "https://files.pythonhosted.org/packages/b8/af/38e51a553dd66eb064cdf193841f16f077585d4d28394c2fa6235cb41765/frozenlist-1.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:34187385b08f866104f0c0617404c8eb08165ab1272e884abc89c112e9c00746", size = 44591, upload-time = "2025-10-06T05:36:24.958Z" }, - { url = "https://files.pythonhosted.org/packages/a7/06/1dc65480ab147339fecc70797e9c2f69d9cea9cf38934ce08df070fdb9cb/frozenlist-1.8.0-cp312-cp312-win_arm64.whl", hash = "sha256:fe3c58d2f5db5fbd18c2987cba06d51b0529f52bc3a6cdc33d3f4eab725104bd", size = 40102, upload-time = "2025-10-06T05:36:26.333Z" }, - { url = "https://files.pythonhosted.org/packages/2d/40/0832c31a37d60f60ed79e9dfb5a92e1e2af4f40a16a29abcc7992af9edff/frozenlist-1.8.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8d92f1a84bb12d9e56f818b3a746f3efba93c1b63c8387a73dde655e1e42282a", size = 85717, upload-time = "2025-10-06T05:36:27.341Z" }, - { url = "https://files.pythonhosted.org/packages/30/ba/b0b3de23f40bc55a7057bd38434e25c34fa48e17f20ee273bbde5e0650f3/frozenlist-1.8.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:96153e77a591c8adc2ee805756c61f59fef4cf4073a9275ee86fe8cba41241f7", size = 49651, upload-time = "2025-10-06T05:36:28.855Z" }, - { url = "https://files.pythonhosted.org/packages/0c/ab/6e5080ee374f875296c4243c381bbdef97a9ac39c6e3ce1d5f7d42cb78d6/frozenlist-1.8.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f21f00a91358803399890ab167098c131ec2ddd5f8f5fd5fe9c9f2c6fcd91e40", size = 49417, upload-time = "2025-10-06T05:36:29.877Z" }, - { url = "https://files.pythonhosted.org/packages/d5/4e/e4691508f9477ce67da2015d8c00acd751e6287739123113a9fca6f1604e/frozenlist-1.8.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:fb30f9626572a76dfe4293c7194a09fb1fe93ba94c7d4f720dfae3b646b45027", size = 234391, upload-time = "2025-10-06T05:36:31.301Z" }, - { url = "https://files.pythonhosted.org/packages/40/76/c202df58e3acdf12969a7895fd6f3bc016c642e6726aa63bd3025e0fc71c/frozenlist-1.8.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eaa352d7047a31d87dafcacbabe89df0aa506abb5b1b85a2fb91bc3faa02d822", size = 233048, upload-time = "2025-10-06T05:36:32.531Z" }, - { url = "https://files.pythonhosted.org/packages/f9/c0/8746afb90f17b73ca5979c7a3958116e105ff796e718575175319b5bb4ce/frozenlist-1.8.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:03ae967b4e297f58f8c774c7eabcce57fe3c2434817d4385c50661845a058121", size = 226549, upload-time = "2025-10-06T05:36:33.706Z" }, - { url = "https://files.pythonhosted.org/packages/7e/eb/4c7eefc718ff72f9b6c4893291abaae5fbc0c82226a32dcd8ef4f7a5dbef/frozenlist-1.8.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f6292f1de555ffcc675941d65fffffb0a5bcd992905015f85d0592201793e0e5", size = 239833, upload-time = "2025-10-06T05:36:34.947Z" }, - { url = "https://files.pythonhosted.org/packages/c2/4e/e5c02187cf704224f8b21bee886f3d713ca379535f16893233b9d672ea71/frozenlist-1.8.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:29548f9b5b5e3460ce7378144c3010363d8035cea44bc0bf02d57f5a685e084e", size = 245363, upload-time = "2025-10-06T05:36:36.534Z" }, - { url = "https://files.pythonhosted.org/packages/1f/96/cb85ec608464472e82ad37a17f844889c36100eed57bea094518bf270692/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ec3cc8c5d4084591b4237c0a272cc4f50a5b03396a47d9caaf76f5d7b38a4f11", size = 229314, upload-time = "2025-10-06T05:36:38.582Z" }, - { url = "https://files.pythonhosted.org/packages/5d/6f/4ae69c550e4cee66b57887daeebe006fe985917c01d0fff9caab9883f6d0/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:517279f58009d0b1f2e7c1b130b377a349405da3f7621ed6bfae50b10adf20c1", size = 243365, upload-time = "2025-10-06T05:36:40.152Z" }, - { url = "https://files.pythonhosted.org/packages/7a/58/afd56de246cf11780a40a2c28dc7cbabbf06337cc8ddb1c780a2d97e88d8/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:db1e72ede2d0d7ccb213f218df6a078a9c09a7de257c2fe8fcef16d5925230b1", size = 237763, upload-time = "2025-10-06T05:36:41.355Z" }, - { url = "https://files.pythonhosted.org/packages/cb/36/cdfaf6ed42e2644740d4a10452d8e97fa1c062e2a8006e4b09f1b5fd7d63/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:b4dec9482a65c54a5044486847b8a66bf10c9cb4926d42927ec4e8fd5db7fed8", size = 240110, upload-time = "2025-10-06T05:36:42.716Z" }, - { url = "https://files.pythonhosted.org/packages/03/a8/9ea226fbefad669f11b52e864c55f0bd57d3c8d7eb07e9f2e9a0b39502e1/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:21900c48ae04d13d416f0e1e0c4d81f7931f73a9dfa0b7a8746fb2fe7dd970ed", size = 233717, upload-time = "2025-10-06T05:36:44.251Z" }, - { url = "https://files.pythonhosted.org/packages/1e/0b/1b5531611e83ba7d13ccc9988967ea1b51186af64c42b7a7af465dcc9568/frozenlist-1.8.0-cp313-cp313-win32.whl", hash = "sha256:8b7b94a067d1c504ee0b16def57ad5738701e4ba10cec90529f13fa03c833496", size = 39628, upload-time = "2025-10-06T05:36:45.423Z" }, - { url = "https://files.pythonhosted.org/packages/d8/cf/174c91dbc9cc49bc7b7aab74d8b734e974d1faa8f191c74af9b7e80848e6/frozenlist-1.8.0-cp313-cp313-win_amd64.whl", hash = "sha256:878be833caa6a3821caf85eb39c5ba92d28e85df26d57afb06b35b2efd937231", size = 43882, upload-time = "2025-10-06T05:36:46.796Z" }, - { url = "https://files.pythonhosted.org/packages/c1/17/502cd212cbfa96eb1388614fe39a3fc9ab87dbbe042b66f97acb57474834/frozenlist-1.8.0-cp313-cp313-win_arm64.whl", hash = "sha256:44389d135b3ff43ba8cc89ff7f51f5a0bb6b63d829c8300f79a2fe4fe61bcc62", size = 39676, upload-time = "2025-10-06T05:36:47.8Z" }, - { url = "https://files.pythonhosted.org/packages/d2/5c/3bbfaa920dfab09e76946a5d2833a7cbdf7b9b4a91c714666ac4855b88b4/frozenlist-1.8.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:e25ac20a2ef37e91c1b39938b591457666a0fa835c7783c3a8f33ea42870db94", size = 89235, upload-time = "2025-10-06T05:36:48.78Z" }, - { url = "https://files.pythonhosted.org/packages/d2/d6/f03961ef72166cec1687e84e8925838442b615bd0b8854b54923ce5b7b8a/frozenlist-1.8.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:07cdca25a91a4386d2e76ad992916a85038a9b97561bf7a3fd12d5d9ce31870c", size = 50742, upload-time = "2025-10-06T05:36:49.837Z" }, - { url = "https://files.pythonhosted.org/packages/1e/bb/a6d12b7ba4c3337667d0e421f7181c82dda448ce4e7ad7ecd249a16fa806/frozenlist-1.8.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4e0c11f2cc6717e0a741f84a527c52616140741cd812a50422f83dc31749fb52", size = 51725, upload-time = "2025-10-06T05:36:50.851Z" }, - { url = "https://files.pythonhosted.org/packages/bc/71/d1fed0ffe2c2ccd70b43714c6cab0f4188f09f8a67a7914a6b46ee30f274/frozenlist-1.8.0-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b3210649ee28062ea6099cfda39e147fa1bc039583c8ee4481cb7811e2448c51", size = 284533, upload-time = "2025-10-06T05:36:51.898Z" }, - { url = "https://files.pythonhosted.org/packages/c9/1f/fb1685a7b009d89f9bf78a42d94461bc06581f6e718c39344754a5d9bada/frozenlist-1.8.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:581ef5194c48035a7de2aefc72ac6539823bb71508189e5de01d60c9dcd5fa65", size = 292506, upload-time = "2025-10-06T05:36:53.101Z" }, - { url = "https://files.pythonhosted.org/packages/e6/3b/b991fe1612703f7e0d05c0cf734c1b77aaf7c7d321df4572e8d36e7048c8/frozenlist-1.8.0-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3ef2d026f16a2b1866e1d86fc4e1291e1ed8a387b2c333809419a2f8b3a77b82", size = 274161, upload-time = "2025-10-06T05:36:54.309Z" }, - { url = "https://files.pythonhosted.org/packages/ca/ec/c5c618767bcdf66e88945ec0157d7f6c4a1322f1473392319b7a2501ded7/frozenlist-1.8.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5500ef82073f599ac84d888e3a8c1f77ac831183244bfd7f11eaa0289fb30714", size = 294676, upload-time = "2025-10-06T05:36:55.566Z" }, - { url = "https://files.pythonhosted.org/packages/7c/ce/3934758637d8f8a88d11f0585d6495ef54b2044ed6ec84492a91fa3b27aa/frozenlist-1.8.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:50066c3997d0091c411a66e710f4e11752251e6d2d73d70d8d5d4c76442a199d", size = 300638, upload-time = "2025-10-06T05:36:56.758Z" }, - { url = "https://files.pythonhosted.org/packages/fc/4f/a7e4d0d467298f42de4b41cbc7ddaf19d3cfeabaf9ff97c20c6c7ee409f9/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:5c1c8e78426e59b3f8005e9b19f6ff46e5845895adbde20ece9218319eca6506", size = 283067, upload-time = "2025-10-06T05:36:57.965Z" }, - { url = "https://files.pythonhosted.org/packages/dc/48/c7b163063d55a83772b268e6d1affb960771b0e203b632cfe09522d67ea5/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:eefdba20de0d938cec6a89bd4d70f346a03108a19b9df4248d3cf0d88f1b0f51", size = 292101, upload-time = "2025-10-06T05:36:59.237Z" }, - { url = "https://files.pythonhosted.org/packages/9f/d0/2366d3c4ecdc2fd391e0afa6e11500bfba0ea772764d631bbf82f0136c9d/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:cf253e0e1c3ceb4aaff6df637ce033ff6535fb8c70a764a8f46aafd3d6ab798e", size = 289901, upload-time = "2025-10-06T05:37:00.811Z" }, - { url = "https://files.pythonhosted.org/packages/b8/94/daff920e82c1b70e3618a2ac39fbc01ae3e2ff6124e80739ce5d71c9b920/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:032efa2674356903cd0261c4317a561a6850f3ac864a63fc1583147fb05a79b0", size = 289395, upload-time = "2025-10-06T05:37:02.115Z" }, - { url = "https://files.pythonhosted.org/packages/e3/20/bba307ab4235a09fdcd3cc5508dbabd17c4634a1af4b96e0f69bfe551ebd/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6da155091429aeba16851ecb10a9104a108bcd32f6c1642867eadaee401c1c41", size = 283659, upload-time = "2025-10-06T05:37:03.711Z" }, - { url = "https://files.pythonhosted.org/packages/fd/00/04ca1c3a7a124b6de4f8a9a17cc2fcad138b4608e7a3fc5877804b8715d7/frozenlist-1.8.0-cp313-cp313t-win32.whl", hash = "sha256:0f96534f8bfebc1a394209427d0f8a63d343c9779cda6fc25e8e121b5fd8555b", size = 43492, upload-time = "2025-10-06T05:37:04.915Z" }, - { url = "https://files.pythonhosted.org/packages/59/5e/c69f733a86a94ab10f68e496dc6b7e8bc078ebb415281d5698313e3af3a1/frozenlist-1.8.0-cp313-cp313t-win_amd64.whl", hash = "sha256:5d63a068f978fc69421fb0e6eb91a9603187527c86b7cd3f534a5b77a592b888", size = 48034, upload-time = "2025-10-06T05:37:06.343Z" }, - { url = "https://files.pythonhosted.org/packages/16/6c/be9d79775d8abe79b05fa6d23da99ad6e7763a1d080fbae7290b286093fd/frozenlist-1.8.0-cp313-cp313t-win_arm64.whl", hash = "sha256:bf0a7e10b077bf5fb9380ad3ae8ce20ef919a6ad93b4552896419ac7e1d8e042", size = 41749, upload-time = "2025-10-06T05:37:07.431Z" }, - { url = "https://files.pythonhosted.org/packages/f1/c8/85da824b7e7b9b6e7f7705b2ecaf9591ba6f79c1177f324c2735e41d36a2/frozenlist-1.8.0-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:cee686f1f4cadeb2136007ddedd0aaf928ab95216e7691c63e50a8ec066336d0", size = 86127, upload-time = "2025-10-06T05:37:08.438Z" }, - { url = "https://files.pythonhosted.org/packages/8e/e8/a1185e236ec66c20afd72399522f142c3724c785789255202d27ae992818/frozenlist-1.8.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:119fb2a1bd47307e899c2fac7f28e85b9a543864df47aa7ec9d3c1b4545f096f", size = 49698, upload-time = "2025-10-06T05:37:09.48Z" }, - { url = "https://files.pythonhosted.org/packages/a1/93/72b1736d68f03fda5fdf0f2180fb6caaae3894f1b854d006ac61ecc727ee/frozenlist-1.8.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4970ece02dbc8c3a92fcc5228e36a3e933a01a999f7094ff7c23fbd2beeaa67c", size = 49749, upload-time = "2025-10-06T05:37:10.569Z" }, - { url = "https://files.pythonhosted.org/packages/a7/b2/fabede9fafd976b991e9f1b9c8c873ed86f202889b864756f240ce6dd855/frozenlist-1.8.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:cba69cb73723c3f329622e34bdbf5ce1f80c21c290ff04256cff1cd3c2036ed2", size = 231298, upload-time = "2025-10-06T05:37:11.993Z" }, - { url = "https://files.pythonhosted.org/packages/3a/3b/d9b1e0b0eed36e70477ffb8360c49c85c8ca8ef9700a4e6711f39a6e8b45/frozenlist-1.8.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:778a11b15673f6f1df23d9586f83c4846c471a8af693a22e066508b77d201ec8", size = 232015, upload-time = "2025-10-06T05:37:13.194Z" }, - { url = "https://files.pythonhosted.org/packages/dc/94/be719d2766c1138148564a3960fc2c06eb688da592bdc25adcf856101be7/frozenlist-1.8.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0325024fe97f94c41c08872db482cf8ac4800d80e79222c6b0b7b162d5b13686", size = 225038, upload-time = "2025-10-06T05:37:14.577Z" }, - { url = "https://files.pythonhosted.org/packages/e4/09/6712b6c5465f083f52f50cf74167b92d4ea2f50e46a9eea0523d658454ae/frozenlist-1.8.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:97260ff46b207a82a7567b581ab4190bd4dfa09f4db8a8b49d1a958f6aa4940e", size = 240130, upload-time = "2025-10-06T05:37:15.781Z" }, - { url = "https://files.pythonhosted.org/packages/f8/d4/cd065cdcf21550b54f3ce6a22e143ac9e4836ca42a0de1022da8498eac89/frozenlist-1.8.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:54b2077180eb7f83dd52c40b2750d0a9f175e06a42e3213ce047219de902717a", size = 242845, upload-time = "2025-10-06T05:37:17.037Z" }, - { url = "https://files.pythonhosted.org/packages/62/c3/f57a5c8c70cd1ead3d5d5f776f89d33110b1addae0ab010ad774d9a44fb9/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:2f05983daecab868a31e1da44462873306d3cbfd76d1f0b5b69c473d21dbb128", size = 229131, upload-time = "2025-10-06T05:37:18.221Z" }, - { url = "https://files.pythonhosted.org/packages/6c/52/232476fe9cb64f0742f3fde2b7d26c1dac18b6d62071c74d4ded55e0ef94/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:33f48f51a446114bc5d251fb2954ab0164d5be02ad3382abcbfe07e2531d650f", size = 240542, upload-time = "2025-10-06T05:37:19.771Z" }, - { url = "https://files.pythonhosted.org/packages/5f/85/07bf3f5d0fb5414aee5f47d33c6f5c77bfe49aac680bfece33d4fdf6a246/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:154e55ec0655291b5dd1b8731c637ecdb50975a2ae70c606d100750a540082f7", size = 237308, upload-time = "2025-10-06T05:37:20.969Z" }, - { url = "https://files.pythonhosted.org/packages/11/99/ae3a33d5befd41ac0ca2cc7fd3aa707c9c324de2e89db0e0f45db9a64c26/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:4314debad13beb564b708b4a496020e5306c7333fa9a3ab90374169a20ffab30", size = 238210, upload-time = "2025-10-06T05:37:22.252Z" }, - { url = "https://files.pythonhosted.org/packages/b2/60/b1d2da22f4970e7a155f0adde9b1435712ece01b3cd45ba63702aea33938/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:073f8bf8becba60aa931eb3bc420b217bb7d5b8f4750e6f8b3be7f3da85d38b7", size = 231972, upload-time = "2025-10-06T05:37:23.5Z" }, - { url = "https://files.pythonhosted.org/packages/3f/ab/945b2f32de889993b9c9133216c068b7fcf257d8595a0ac420ac8677cab0/frozenlist-1.8.0-cp314-cp314-win32.whl", hash = "sha256:bac9c42ba2ac65ddc115d930c78d24ab8d4f465fd3fc473cdedfccadb9429806", size = 40536, upload-time = "2025-10-06T05:37:25.581Z" }, - { url = "https://files.pythonhosted.org/packages/59/ad/9caa9b9c836d9ad6f067157a531ac48b7d36499f5036d4141ce78c230b1b/frozenlist-1.8.0-cp314-cp314-win_amd64.whl", hash = "sha256:3e0761f4d1a44f1d1a47996511752cf3dcec5bbdd9cc2b4fe595caf97754b7a0", size = 44330, upload-time = "2025-10-06T05:37:26.928Z" }, - { url = "https://files.pythonhosted.org/packages/82/13/e6950121764f2676f43534c555249f57030150260aee9dcf7d64efda11dd/frozenlist-1.8.0-cp314-cp314-win_arm64.whl", hash = "sha256:d1eaff1d00c7751b7c6662e9c5ba6eb2c17a2306ba5e2a37f24ddf3cc953402b", size = 40627, upload-time = "2025-10-06T05:37:28.075Z" }, - { url = "https://files.pythonhosted.org/packages/c0/c7/43200656ecc4e02d3f8bc248df68256cd9572b3f0017f0a0c4e93440ae23/frozenlist-1.8.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:d3bb933317c52d7ea5004a1c442eef86f426886fba134ef8cf4226ea6ee1821d", size = 89238, upload-time = "2025-10-06T05:37:29.373Z" }, - { url = "https://files.pythonhosted.org/packages/d1/29/55c5f0689b9c0fb765055629f472c0de484dcaf0acee2f7707266ae3583c/frozenlist-1.8.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:8009897cdef112072f93a0efdce29cd819e717fd2f649ee3016efd3cd885a7ed", size = 50738, upload-time = "2025-10-06T05:37:30.792Z" }, - { url = "https://files.pythonhosted.org/packages/ba/7d/b7282a445956506fa11da8c2db7d276adcbf2b17d8bb8407a47685263f90/frozenlist-1.8.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2c5dcbbc55383e5883246d11fd179782a9d07a986c40f49abe89ddf865913930", size = 51739, upload-time = "2025-10-06T05:37:32.127Z" }, - { url = "https://files.pythonhosted.org/packages/62/1c/3d8622e60d0b767a5510d1d3cf21065b9db874696a51ea6d7a43180a259c/frozenlist-1.8.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:39ecbc32f1390387d2aa4f5a995e465e9e2f79ba3adcac92d68e3e0afae6657c", size = 284186, upload-time = "2025-10-06T05:37:33.21Z" }, - { url = "https://files.pythonhosted.org/packages/2d/14/aa36d5f85a89679a85a1d44cd7a6657e0b1c75f61e7cad987b203d2daca8/frozenlist-1.8.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:92db2bf818d5cc8d9c1f1fc56b897662e24ea5adb36ad1f1d82875bd64e03c24", size = 292196, upload-time = "2025-10-06T05:37:36.107Z" }, - { url = "https://files.pythonhosted.org/packages/05/23/6bde59eb55abd407d34f77d39a5126fb7b4f109a3f611d3929f14b700c66/frozenlist-1.8.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:2dc43a022e555de94c3b68a4ef0b11c4f747d12c024a520c7101709a2144fb37", size = 273830, upload-time = "2025-10-06T05:37:37.663Z" }, - { url = "https://files.pythonhosted.org/packages/d2/3f/22cff331bfad7a8afa616289000ba793347fcd7bc275f3b28ecea2a27909/frozenlist-1.8.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cb89a7f2de3602cfed448095bab3f178399646ab7c61454315089787df07733a", size = 294289, upload-time = "2025-10-06T05:37:39.261Z" }, - { url = "https://files.pythonhosted.org/packages/a4/89/5b057c799de4838b6c69aa82b79705f2027615e01be996d2486a69ca99c4/frozenlist-1.8.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:33139dc858c580ea50e7e60a1b0ea003efa1fd42e6ec7fdbad78fff65fad2fd2", size = 300318, upload-time = "2025-10-06T05:37:43.213Z" }, - { url = "https://files.pythonhosted.org/packages/30/de/2c22ab3eb2a8af6d69dc799e48455813bab3690c760de58e1bf43b36da3e/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:168c0969a329b416119507ba30b9ea13688fafffac1b7822802537569a1cb0ef", size = 282814, upload-time = "2025-10-06T05:37:45.337Z" }, - { url = "https://files.pythonhosted.org/packages/59/f7/970141a6a8dbd7f556d94977858cfb36fa9b66e0892c6dd780d2219d8cd8/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:28bd570e8e189d7f7b001966435f9dac6718324b5be2990ac496cf1ea9ddb7fe", size = 291762, upload-time = "2025-10-06T05:37:46.657Z" }, - { url = "https://files.pythonhosted.org/packages/c1/15/ca1adae83a719f82df9116d66f5bb28bb95557b3951903d39135620ef157/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:b2a095d45c5d46e5e79ba1e5b9cb787f541a8dee0433836cea4b96a2c439dcd8", size = 289470, upload-time = "2025-10-06T05:37:47.946Z" }, - { url = "https://files.pythonhosted.org/packages/ac/83/dca6dc53bf657d371fbc88ddeb21b79891e747189c5de990b9dfff2ccba1/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:eab8145831a0d56ec9c4139b6c3e594c7a83c2c8be25d5bcf2d86136a532287a", size = 289042, upload-time = "2025-10-06T05:37:49.499Z" }, - { url = "https://files.pythonhosted.org/packages/96/52/abddd34ca99be142f354398700536c5bd315880ed0a213812bc491cff5e4/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:974b28cf63cc99dfb2188d8d222bc6843656188164848c4f679e63dae4b0708e", size = 283148, upload-time = "2025-10-06T05:37:50.745Z" }, - { url = "https://files.pythonhosted.org/packages/af/d3/76bd4ed4317e7119c2b7f57c3f6934aba26d277acc6309f873341640e21f/frozenlist-1.8.0-cp314-cp314t-win32.whl", hash = "sha256:342c97bf697ac5480c0a7ec73cd700ecfa5a8a40ac923bd035484616efecc2df", size = 44676, upload-time = "2025-10-06T05:37:52.222Z" }, - { url = "https://files.pythonhosted.org/packages/89/76/c615883b7b521ead2944bb3480398cbb07e12b7b4e4d073d3752eb721558/frozenlist-1.8.0-cp314-cp314t-win_amd64.whl", hash = "sha256:06be8f67f39c8b1dc671f5d83aaefd3358ae5cdcf8314552c57e7ed3e6475bdd", size = 49451, upload-time = "2025-10-06T05:37:53.425Z" }, - { url = "https://files.pythonhosted.org/packages/e0/a3/5982da14e113d07b325230f95060e2169f5311b1017ea8af2a29b374c289/frozenlist-1.8.0-cp314-cp314t-win_arm64.whl", hash = "sha256:102e6314ca4da683dca92e3b1355490fed5f313b768500084fbe6371fddfdb79", size = 42507, upload-time = "2025-10-06T05:37:54.513Z" }, - { url = "https://files.pythonhosted.org/packages/9a/9a/e35b4a917281c0b8419d4207f4334c8e8c5dbf4f3f5f9ada73958d937dcc/frozenlist-1.8.0-py3-none-any.whl", hash = "sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d", size = 13409, upload-time = "2025-10-06T05:38:16.721Z" }, + { url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size = 16740, upload-time = "2025-11-21T23:01:53.443Z" }, ] [[package]] @@ -709,156 +420,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" }, ] -[[package]] -name = "multidict" -version = "6.7.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/80/1e/5492c365f222f907de1039b91f922b93fa4f764c713ee858d235495d8f50/multidict-6.7.0.tar.gz", hash = "sha256:c6e99d9a65ca282e578dfea819cfa9c0a62b2499d8677392e09feaf305e9e6f5", size = 101834, upload-time = "2025-10-06T14:52:30.657Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a9/63/7bdd4adc330abcca54c85728db2327130e49e52e8c3ce685cec44e0f2e9f/multidict-6.7.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:9f474ad5acda359c8758c8accc22032c6abe6dc87a8be2440d097785e27a9349", size = 77153, upload-time = "2025-10-06T14:48:26.409Z" }, - { url = "https://files.pythonhosted.org/packages/3f/bb/b6c35ff175ed1a3142222b78455ee31be71a8396ed3ab5280fbe3ebe4e85/multidict-6.7.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4b7a9db5a870f780220e931d0002bbfd88fb53aceb6293251e2c839415c1b20e", size = 44993, upload-time = "2025-10-06T14:48:28.4Z" }, - { url = "https://files.pythonhosted.org/packages/e0/1f/064c77877c5fa6df6d346e68075c0f6998547afe952d6471b4c5f6a7345d/multidict-6.7.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:03ca744319864e92721195fa28c7a3b2bc7b686246b35e4078c1e4d0eb5466d3", size = 44607, upload-time = "2025-10-06T14:48:29.581Z" }, - { url = "https://files.pythonhosted.org/packages/04/7a/bf6aa92065dd47f287690000b3d7d332edfccb2277634cadf6a810463c6a/multidict-6.7.0-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:f0e77e3c0008bc9316e662624535b88d360c3a5d3f81e15cf12c139a75250046", size = 241847, upload-time = "2025-10-06T14:48:32.107Z" }, - { url = "https://files.pythonhosted.org/packages/94/39/297a8de920f76eda343e4ce05f3b489f0ab3f9504f2576dfb37b7c08ca08/multidict-6.7.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:08325c9e5367aa379a3496aa9a022fe8837ff22e00b94db256d3a1378c76ab32", size = 242616, upload-time = "2025-10-06T14:48:34.054Z" }, - { url = "https://files.pythonhosted.org/packages/39/3a/d0eee2898cfd9d654aea6cb8c4addc2f9756e9a7e09391cfe55541f917f7/multidict-6.7.0-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e2862408c99f84aa571ab462d25236ef9cb12a602ea959ba9c9009a54902fc73", size = 222333, upload-time = "2025-10-06T14:48:35.9Z" }, - { url = "https://files.pythonhosted.org/packages/05/48/3b328851193c7a4240815b71eea165b49248867bbb6153a0aee227a0bb47/multidict-6.7.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4d72a9a2d885f5c208b0cb91ff2ed43636bb7e345ec839ff64708e04f69a13cc", size = 253239, upload-time = "2025-10-06T14:48:37.302Z" }, - { url = "https://files.pythonhosted.org/packages/b1/ca/0706a98c8d126a89245413225ca4a3fefc8435014de309cf8b30acb68841/multidict-6.7.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:478cc36476687bac1514d651cbbaa94b86b0732fb6855c60c673794c7dd2da62", size = 251618, upload-time = "2025-10-06T14:48:38.963Z" }, - { url = "https://files.pythonhosted.org/packages/5e/4f/9c7992f245554d8b173f6f0a048ad24b3e645d883f096857ec2c0822b8bd/multidict-6.7.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6843b28b0364dc605f21481c90fadb5f60d9123b442eb8a726bb74feef588a84", size = 241655, upload-time = "2025-10-06T14:48:40.312Z" }, - { url = "https://files.pythonhosted.org/packages/31/79/26a85991ae67efd1c0b1fc2e0c275b8a6aceeb155a68861f63f87a798f16/multidict-6.7.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:23bfeee5316266e5ee2d625df2d2c602b829435fc3a235c2ba2131495706e4a0", size = 239245, upload-time = "2025-10-06T14:48:41.848Z" }, - { url = "https://files.pythonhosted.org/packages/14/1e/75fa96394478930b79d0302eaf9a6c69f34005a1a5251ac8b9c336486ec9/multidict-6.7.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:680878b9f3d45c31e1f730eef731f9b0bc1da456155688c6745ee84eb818e90e", size = 233523, upload-time = "2025-10-06T14:48:43.749Z" }, - { url = "https://files.pythonhosted.org/packages/b2/5e/085544cb9f9c4ad2b5d97467c15f856df8d9bac410cffd5c43991a5d878b/multidict-6.7.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:eb866162ef2f45063acc7a53a88ef6fe8bf121d45c30ea3c9cd87ce7e191a8d4", size = 243129, upload-time = "2025-10-06T14:48:45.225Z" }, - { url = "https://files.pythonhosted.org/packages/b9/c3/e9d9e2f20c9474e7a8fcef28f863c5cbd29bb5adce6b70cebe8bdad0039d/multidict-6.7.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:df0e3bf7993bdbeca5ac25aa859cf40d39019e015c9c91809ba7093967f7a648", size = 248999, upload-time = "2025-10-06T14:48:46.703Z" }, - { url = "https://files.pythonhosted.org/packages/b5/3f/df171b6efa3239ae33b97b887e42671cd1d94d460614bfb2c30ffdab3b95/multidict-6.7.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:661709cdcd919a2ece2234f9bae7174e5220c80b034585d7d8a755632d3e2111", size = 243711, upload-time = "2025-10-06T14:48:48.146Z" }, - { url = "https://files.pythonhosted.org/packages/3c/2f/9b5564888c4e14b9af64c54acf149263721a283aaf4aa0ae89b091d5d8c1/multidict-6.7.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:096f52730c3fb8ed419db2d44391932b63891b2c5ed14850a7e215c0ba9ade36", size = 237504, upload-time = "2025-10-06T14:48:49.447Z" }, - { url = "https://files.pythonhosted.org/packages/6c/3a/0bd6ca0f7d96d790542d591c8c3354c1e1b6bfd2024d4d92dc3d87485ec7/multidict-6.7.0-cp310-cp310-win32.whl", hash = "sha256:afa8a2978ec65d2336305550535c9c4ff50ee527914328c8677b3973ade52b85", size = 41422, upload-time = "2025-10-06T14:48:50.789Z" }, - { url = "https://files.pythonhosted.org/packages/00/35/f6a637ea2c75f0d3b7c7d41b1189189acff0d9deeb8b8f35536bb30f5e33/multidict-6.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:b15b3afff74f707b9275d5ba6a91ae8f6429c3ffb29bbfd216b0b375a56f13d7", size = 46050, upload-time = "2025-10-06T14:48:51.938Z" }, - { url = "https://files.pythonhosted.org/packages/e7/b8/f7bf8329b39893d02d9d95cf610c75885d12fc0f402b1c894e1c8e01c916/multidict-6.7.0-cp310-cp310-win_arm64.whl", hash = "sha256:4b73189894398d59131a66ff157837b1fafea9974be486d036bb3d32331fdbf0", size = 43153, upload-time = "2025-10-06T14:48:53.146Z" }, - { url = "https://files.pythonhosted.org/packages/34/9e/5c727587644d67b2ed479041e4b1c58e30afc011e3d45d25bbe35781217c/multidict-6.7.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4d409aa42a94c0b3fa617708ef5276dfe81012ba6753a0370fcc9d0195d0a1fc", size = 76604, upload-time = "2025-10-06T14:48:54.277Z" }, - { url = "https://files.pythonhosted.org/packages/17/e4/67b5c27bd17c085a5ea8f1ec05b8a3e5cba0ca734bfcad5560fb129e70ca/multidict-6.7.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:14c9e076eede3b54c636f8ce1c9c252b5f057c62131211f0ceeec273810c9721", size = 44715, upload-time = "2025-10-06T14:48:55.445Z" }, - { url = "https://files.pythonhosted.org/packages/4d/e1/866a5d77be6ea435711bef2a4291eed11032679b6b28b56b4776ab06ba3e/multidict-6.7.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4c09703000a9d0fa3c3404b27041e574cc7f4df4c6563873246d0e11812a94b6", size = 44332, upload-time = "2025-10-06T14:48:56.706Z" }, - { url = "https://files.pythonhosted.org/packages/31/61/0c2d50241ada71ff61a79518db85ada85fdabfcf395d5968dae1cbda04e5/multidict-6.7.0-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:a265acbb7bb33a3a2d626afbe756371dce0279e7b17f4f4eda406459c2b5ff1c", size = 245212, upload-time = "2025-10-06T14:48:58.042Z" }, - { url = "https://files.pythonhosted.org/packages/ac/e0/919666a4e4b57fff1b57f279be1c9316e6cdc5de8a8b525d76f6598fefc7/multidict-6.7.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:51cb455de290ae462593e5b1cb1118c5c22ea7f0d3620d9940bf695cea5a4bd7", size = 246671, upload-time = "2025-10-06T14:49:00.004Z" }, - { url = "https://files.pythonhosted.org/packages/a1/cc/d027d9c5a520f3321b65adea289b965e7bcbd2c34402663f482648c716ce/multidict-6.7.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:db99677b4457c7a5c5a949353e125ba72d62b35f74e26da141530fbb012218a7", size = 225491, upload-time = "2025-10-06T14:49:01.393Z" }, - { url = "https://files.pythonhosted.org/packages/75/c4/bbd633980ce6155a28ff04e6a6492dd3335858394d7bb752d8b108708558/multidict-6.7.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f470f68adc395e0183b92a2f4689264d1ea4b40504a24d9882c27375e6662bb9", size = 257322, upload-time = "2025-10-06T14:49:02.745Z" }, - { url = "https://files.pythonhosted.org/packages/4c/6d/d622322d344f1f053eae47e033b0b3f965af01212de21b10bcf91be991fb/multidict-6.7.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0db4956f82723cc1c270de9c6e799b4c341d327762ec78ef82bb962f79cc07d8", size = 254694, upload-time = "2025-10-06T14:49:04.15Z" }, - { url = "https://files.pythonhosted.org/packages/a8/9f/78f8761c2705d4c6d7516faed63c0ebdac569f6db1bef95e0d5218fdc146/multidict-6.7.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3e56d780c238f9e1ae66a22d2adf8d16f485381878250db8d496623cd38b22bd", size = 246715, upload-time = "2025-10-06T14:49:05.967Z" }, - { url = "https://files.pythonhosted.org/packages/78/59/950818e04f91b9c2b95aab3d923d9eabd01689d0dcd889563988e9ea0fd8/multidict-6.7.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9d14baca2ee12c1a64740d4531356ba50b82543017f3ad6de0deb943c5979abb", size = 243189, upload-time = "2025-10-06T14:49:07.37Z" }, - { url = "https://files.pythonhosted.org/packages/7a/3d/77c79e1934cad2ee74991840f8a0110966d9599b3af95964c0cd79bb905b/multidict-6.7.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:295a92a76188917c7f99cda95858c822f9e4aae5824246bba9b6b44004ddd0a6", size = 237845, upload-time = "2025-10-06T14:49:08.759Z" }, - { url = "https://files.pythonhosted.org/packages/63/1b/834ce32a0a97a3b70f86437f685f880136677ac00d8bce0027e9fd9c2db7/multidict-6.7.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:39f1719f57adbb767ef592a50ae5ebb794220d1188f9ca93de471336401c34d2", size = 246374, upload-time = "2025-10-06T14:49:10.574Z" }, - { url = "https://files.pythonhosted.org/packages/23/ef/43d1c3ba205b5dec93dc97f3fba179dfa47910fc73aaaea4f7ceb41cec2a/multidict-6.7.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:0a13fb8e748dfc94749f622de065dd5c1def7e0d2216dba72b1d8069a389c6ff", size = 253345, upload-time = "2025-10-06T14:49:12.331Z" }, - { url = "https://files.pythonhosted.org/packages/6b/03/eaf95bcc2d19ead522001f6a650ef32811aa9e3624ff0ad37c445c7a588c/multidict-6.7.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:e3aa16de190d29a0ea1b48253c57d99a68492c8dd8948638073ab9e74dc9410b", size = 246940, upload-time = "2025-10-06T14:49:13.821Z" }, - { url = "https://files.pythonhosted.org/packages/e8/df/ec8a5fd66ea6cd6f525b1fcbb23511b033c3e9bc42b81384834ffa484a62/multidict-6.7.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a048ce45dcdaaf1defb76b2e684f997fb5abf74437b6cb7b22ddad934a964e34", size = 242229, upload-time = "2025-10-06T14:49:15.603Z" }, - { url = "https://files.pythonhosted.org/packages/8a/a2/59b405d59fd39ec86d1142630e9049243015a5f5291ba49cadf3c090c541/multidict-6.7.0-cp311-cp311-win32.whl", hash = "sha256:a90af66facec4cebe4181b9e62a68be65e45ac9b52b67de9eec118701856e7ff", size = 41308, upload-time = "2025-10-06T14:49:16.871Z" }, - { url = "https://files.pythonhosted.org/packages/32/0f/13228f26f8b882c34da36efa776c3b7348455ec383bab4a66390e42963ae/multidict-6.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:95b5ffa4349df2887518bb839409bcf22caa72d82beec453216802f475b23c81", size = 46037, upload-time = "2025-10-06T14:49:18.457Z" }, - { url = "https://files.pythonhosted.org/packages/84/1f/68588e31b000535a3207fd3c909ebeec4fb36b52c442107499c18a896a2a/multidict-6.7.0-cp311-cp311-win_arm64.whl", hash = "sha256:329aa225b085b6f004a4955271a7ba9f1087e39dcb7e65f6284a988264a63912", size = 43023, upload-time = "2025-10-06T14:49:19.648Z" }, - { url = "https://files.pythonhosted.org/packages/c2/9e/9f61ac18d9c8b475889f32ccfa91c9f59363480613fc807b6e3023d6f60b/multidict-6.7.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:8a3862568a36d26e650a19bb5cbbba14b71789032aebc0423f8cc5f150730184", size = 76877, upload-time = "2025-10-06T14:49:20.884Z" }, - { url = "https://files.pythonhosted.org/packages/38/6f/614f09a04e6184f8824268fce4bc925e9849edfa654ddd59f0b64508c595/multidict-6.7.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:960c60b5849b9b4f9dcc9bea6e3626143c252c74113df2c1540aebce70209b45", size = 45467, upload-time = "2025-10-06T14:49:22.054Z" }, - { url = "https://files.pythonhosted.org/packages/b3/93/c4f67a436dd026f2e780c433277fff72be79152894d9fc36f44569cab1a6/multidict-6.7.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2049be98fb57a31b4ccf870bf377af2504d4ae35646a19037ec271e4c07998aa", size = 43834, upload-time = "2025-10-06T14:49:23.566Z" }, - { url = "https://files.pythonhosted.org/packages/7f/f5/013798161ca665e4a422afbc5e2d9e4070142a9ff8905e482139cd09e4d0/multidict-6.7.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:0934f3843a1860dd465d38895c17fce1f1cb37295149ab05cd1b9a03afacb2a7", size = 250545, upload-time = "2025-10-06T14:49:24.882Z" }, - { url = "https://files.pythonhosted.org/packages/71/2f/91dbac13e0ba94669ea5119ba267c9a832f0cb65419aca75549fcf09a3dc/multidict-6.7.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b3e34f3a1b8131ba06f1a73adab24f30934d148afcd5f5de9a73565a4404384e", size = 258305, upload-time = "2025-10-06T14:49:26.778Z" }, - { url = "https://files.pythonhosted.org/packages/ef/b0/754038b26f6e04488b48ac621f779c341338d78503fb45403755af2df477/multidict-6.7.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:efbb54e98446892590dc2458c19c10344ee9a883a79b5cec4bc34d6656e8d546", size = 242363, upload-time = "2025-10-06T14:49:28.562Z" }, - { url = "https://files.pythonhosted.org/packages/87/15/9da40b9336a7c9fa606c4cf2ed80a649dffeb42b905d4f63a1d7eb17d746/multidict-6.7.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a35c5fc61d4f51eb045061e7967cfe3123d622cd500e8868e7c0c592a09fedc4", size = 268375, upload-time = "2025-10-06T14:49:29.96Z" }, - { url = "https://files.pythonhosted.org/packages/82/72/c53fcade0cc94dfaad583105fd92b3a783af2091eddcb41a6d5a52474000/multidict-6.7.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:29fe6740ebccba4175af1b9b87bf553e9c15cd5868ee967e010efcf94e4fd0f1", size = 269346, upload-time = "2025-10-06T14:49:31.404Z" }, - { url = "https://files.pythonhosted.org/packages/0d/e2/9baffdae21a76f77ef8447f1a05a96ec4bc0a24dae08767abc0a2fe680b8/multidict-6.7.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:123e2a72e20537add2f33a79e605f6191fba2afda4cbb876e35c1a7074298a7d", size = 256107, upload-time = "2025-10-06T14:49:32.974Z" }, - { url = "https://files.pythonhosted.org/packages/3c/06/3f06f611087dc60d65ef775f1fb5aca7c6d61c6db4990e7cda0cef9b1651/multidict-6.7.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b284e319754366c1aee2267a2036248b24eeb17ecd5dc16022095e747f2f4304", size = 253592, upload-time = "2025-10-06T14:49:34.52Z" }, - { url = "https://files.pythonhosted.org/packages/20/24/54e804ec7945b6023b340c412ce9c3f81e91b3bf5fa5ce65558740141bee/multidict-6.7.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:803d685de7be4303b5a657b76e2f6d1240e7e0a8aa2968ad5811fa2285553a12", size = 251024, upload-time = "2025-10-06T14:49:35.956Z" }, - { url = "https://files.pythonhosted.org/packages/14/48/011cba467ea0b17ceb938315d219391d3e421dfd35928e5dbdc3f4ae76ef/multidict-6.7.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:c04a328260dfd5db8c39538f999f02779012268f54614902d0afc775d44e0a62", size = 251484, upload-time = "2025-10-06T14:49:37.631Z" }, - { url = "https://files.pythonhosted.org/packages/0d/2f/919258b43bb35b99fa127435cfb2d91798eb3a943396631ef43e3720dcf4/multidict-6.7.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:8a19cdb57cd3df4cd865849d93ee14920fb97224300c88501f16ecfa2604b4e0", size = 263579, upload-time = "2025-10-06T14:49:39.502Z" }, - { url = "https://files.pythonhosted.org/packages/31/22/a0e884d86b5242b5a74cf08e876bdf299e413016b66e55511f7a804a366e/multidict-6.7.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9b2fd74c52accced7e75de26023b7dccee62511a600e62311b918ec5c168fc2a", size = 259654, upload-time = "2025-10-06T14:49:41.32Z" }, - { url = "https://files.pythonhosted.org/packages/b2/e5/17e10e1b5c5f5a40f2fcbb45953c9b215f8a4098003915e46a93f5fcaa8f/multidict-6.7.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3e8bfdd0e487acf992407a140d2589fe598238eaeffa3da8448d63a63cd363f8", size = 251511, upload-time = "2025-10-06T14:49:46.021Z" }, - { url = "https://files.pythonhosted.org/packages/e3/9a/201bb1e17e7af53139597069c375e7b0dcbd47594604f65c2d5359508566/multidict-6.7.0-cp312-cp312-win32.whl", hash = "sha256:dd32a49400a2c3d52088e120ee00c1e3576cbff7e10b98467962c74fdb762ed4", size = 41895, upload-time = "2025-10-06T14:49:48.718Z" }, - { url = "https://files.pythonhosted.org/packages/46/e2/348cd32faad84eaf1d20cce80e2bb0ef8d312c55bca1f7fa9865e7770aaf/multidict-6.7.0-cp312-cp312-win_amd64.whl", hash = "sha256:92abb658ef2d7ef22ac9f8bb88e8b6c3e571671534e029359b6d9e845923eb1b", size = 46073, upload-time = "2025-10-06T14:49:50.28Z" }, - { url = "https://files.pythonhosted.org/packages/25/ec/aad2613c1910dce907480e0c3aa306905830f25df2e54ccc9dea450cb5aa/multidict-6.7.0-cp312-cp312-win_arm64.whl", hash = "sha256:490dab541a6a642ce1a9d61a4781656b346a55c13038f0b1244653828e3a83ec", size = 43226, upload-time = "2025-10-06T14:49:52.304Z" }, - { url = "https://files.pythonhosted.org/packages/d2/86/33272a544eeb36d66e4d9a920602d1a2f57d4ebea4ef3cdfe5a912574c95/multidict-6.7.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:bee7c0588aa0076ce77c0ea5d19a68d76ad81fcd9fe8501003b9a24f9d4000f6", size = 76135, upload-time = "2025-10-06T14:49:54.26Z" }, - { url = "https://files.pythonhosted.org/packages/91/1c/eb97db117a1ebe46d457a3d235a7b9d2e6dcab174f42d1b67663dd9e5371/multidict-6.7.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7ef6b61cad77091056ce0e7ce69814ef72afacb150b7ac6a3e9470def2198159", size = 45117, upload-time = "2025-10-06T14:49:55.82Z" }, - { url = "https://files.pythonhosted.org/packages/f1/d8/6c3442322e41fb1dd4de8bd67bfd11cd72352ac131f6368315617de752f1/multidict-6.7.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9c0359b1ec12b1d6849c59f9d319610b7f20ef990a6d454ab151aa0e3b9f78ca", size = 43472, upload-time = "2025-10-06T14:49:57.048Z" }, - { url = "https://files.pythonhosted.org/packages/75/3f/e2639e80325af0b6c6febdf8e57cc07043ff15f57fa1ef808f4ccb5ac4cd/multidict-6.7.0-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:cd240939f71c64bd658f186330603aac1a9a81bf6273f523fca63673cb7378a8", size = 249342, upload-time = "2025-10-06T14:49:58.368Z" }, - { url = "https://files.pythonhosted.org/packages/5d/cc/84e0585f805cbeaa9cbdaa95f9a3d6aed745b9d25700623ac89a6ecff400/multidict-6.7.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a60a4d75718a5efa473ebd5ab685786ba0c67b8381f781d1be14da49f1a2dc60", size = 257082, upload-time = "2025-10-06T14:49:59.89Z" }, - { url = "https://files.pythonhosted.org/packages/b0/9c/ac851c107c92289acbbf5cfb485694084690c1b17e555f44952c26ddc5bd/multidict-6.7.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:53a42d364f323275126aff81fb67c5ca1b7a04fda0546245730a55c8c5f24bc4", size = 240704, upload-time = "2025-10-06T14:50:01.485Z" }, - { url = "https://files.pythonhosted.org/packages/50/cc/5f93e99427248c09da95b62d64b25748a5f5c98c7c2ab09825a1d6af0e15/multidict-6.7.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3b29b980d0ddbecb736735ee5bef69bb2ddca56eff603c86f3f29a1128299b4f", size = 266355, upload-time = "2025-10-06T14:50:02.955Z" }, - { url = "https://files.pythonhosted.org/packages/ec/0c/2ec1d883ceb79c6f7f6d7ad90c919c898f5d1c6ea96d322751420211e072/multidict-6.7.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f8a93b1c0ed2d04b97a5e9336fd2d33371b9a6e29ab7dd6503d63407c20ffbaf", size = 267259, upload-time = "2025-10-06T14:50:04.446Z" }, - { url = "https://files.pythonhosted.org/packages/c6/2d/f0b184fa88d6630aa267680bdb8623fb69cb0d024b8c6f0d23f9a0f406d3/multidict-6.7.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9ff96e8815eecacc6645da76c413eb3b3d34cfca256c70b16b286a687d013c32", size = 254903, upload-time = "2025-10-06T14:50:05.98Z" }, - { url = "https://files.pythonhosted.org/packages/06/c9/11ea263ad0df7dfabcad404feb3c0dd40b131bc7f232d5537f2fb1356951/multidict-6.7.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7516c579652f6a6be0e266aec0acd0db80829ca305c3d771ed898538804c2036", size = 252365, upload-time = "2025-10-06T14:50:07.511Z" }, - { url = "https://files.pythonhosted.org/packages/41/88/d714b86ee2c17d6e09850c70c9d310abac3d808ab49dfa16b43aba9d53fd/multidict-6.7.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:040f393368e63fb0f3330e70c26bfd336656bed925e5cbe17c9da839a6ab13ec", size = 250062, upload-time = "2025-10-06T14:50:09.074Z" }, - { url = "https://files.pythonhosted.org/packages/15/fe/ad407bb9e818c2b31383f6131ca19ea7e35ce93cf1310fce69f12e89de75/multidict-6.7.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b3bc26a951007b1057a1c543af845f1c7e3e71cc240ed1ace7bf4484aa99196e", size = 249683, upload-time = "2025-10-06T14:50:10.714Z" }, - { url = "https://files.pythonhosted.org/packages/8c/a4/a89abdb0229e533fb925e7c6e5c40201c2873efebc9abaf14046a4536ee6/multidict-6.7.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:7b022717c748dd1992a83e219587aabe45980d88969f01b316e78683e6285f64", size = 261254, upload-time = "2025-10-06T14:50:12.28Z" }, - { url = "https://files.pythonhosted.org/packages/8d/aa/0e2b27bd88b40a4fb8dc53dd74eecac70edaa4c1dd0707eb2164da3675b3/multidict-6.7.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:9600082733859f00d79dee64effc7aef1beb26adb297416a4ad2116fd61374bd", size = 257967, upload-time = "2025-10-06T14:50:14.16Z" }, - { url = "https://files.pythonhosted.org/packages/d0/8e/0c67b7120d5d5f6d874ed85a085f9dc770a7f9d8813e80f44a9fec820bb7/multidict-6.7.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:94218fcec4d72bc61df51c198d098ce2b378e0ccbac41ddbed5ef44092913288", size = 250085, upload-time = "2025-10-06T14:50:15.639Z" }, - { url = "https://files.pythonhosted.org/packages/ba/55/b73e1d624ea4b8fd4dd07a3bb70f6e4c7c6c5d9d640a41c6ffe5cdbd2a55/multidict-6.7.0-cp313-cp313-win32.whl", hash = "sha256:a37bd74c3fa9d00be2d7b8eca074dc56bd8077ddd2917a839bd989612671ed17", size = 41713, upload-time = "2025-10-06T14:50:17.066Z" }, - { url = "https://files.pythonhosted.org/packages/32/31/75c59e7d3b4205075b4c183fa4ca398a2daf2303ddf616b04ae6ef55cffe/multidict-6.7.0-cp313-cp313-win_amd64.whl", hash = "sha256:30d193c6cc6d559db42b6bcec8a5d395d34d60c9877a0b71ecd7c204fcf15390", size = 45915, upload-time = "2025-10-06T14:50:18.264Z" }, - { url = "https://files.pythonhosted.org/packages/31/2a/8987831e811f1184c22bc2e45844934385363ee61c0a2dcfa8f71b87e608/multidict-6.7.0-cp313-cp313-win_arm64.whl", hash = "sha256:ea3334cabe4d41b7ccd01e4d349828678794edbc2d3ae97fc162a3312095092e", size = 43077, upload-time = "2025-10-06T14:50:19.853Z" }, - { url = "https://files.pythonhosted.org/packages/e8/68/7b3a5170a382a340147337b300b9eb25a9ddb573bcdfff19c0fa3f31ffba/multidict-6.7.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:ad9ce259f50abd98a1ca0aa6e490b58c316a0fce0617f609723e40804add2c00", size = 83114, upload-time = "2025-10-06T14:50:21.223Z" }, - { url = "https://files.pythonhosted.org/packages/55/5c/3fa2d07c84df4e302060f555bbf539310980362236ad49f50eeb0a1c1eb9/multidict-6.7.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:07f5594ac6d084cbb5de2df218d78baf55ef150b91f0ff8a21cc7a2e3a5a58eb", size = 48442, upload-time = "2025-10-06T14:50:22.871Z" }, - { url = "https://files.pythonhosted.org/packages/fc/56/67212d33239797f9bd91962bb899d72bb0f4c35a8652dcdb8ed049bef878/multidict-6.7.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:0591b48acf279821a579282444814a2d8d0af624ae0bc600aa4d1b920b6e924b", size = 46885, upload-time = "2025-10-06T14:50:24.258Z" }, - { url = "https://files.pythonhosted.org/packages/46/d1/908f896224290350721597a61a69cd19b89ad8ee0ae1f38b3f5cd12ea2ac/multidict-6.7.0-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:749a72584761531d2b9467cfbdfd29487ee21124c304c4b6cb760d8777b27f9c", size = 242588, upload-time = "2025-10-06T14:50:25.716Z" }, - { url = "https://files.pythonhosted.org/packages/ab/67/8604288bbd68680eee0ab568fdcb56171d8b23a01bcd5cb0c8fedf6e5d99/multidict-6.7.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b4c3d199f953acd5b446bf7c0de1fe25d94e09e79086f8dc2f48a11a129cdf1", size = 249966, upload-time = "2025-10-06T14:50:28.192Z" }, - { url = "https://files.pythonhosted.org/packages/20/33/9228d76339f1ba51e3efef7da3ebd91964d3006217aae13211653193c3ff/multidict-6.7.0-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:9fb0211dfc3b51efea2f349ec92c114d7754dd62c01f81c3e32b765b70c45c9b", size = 228618, upload-time = "2025-10-06T14:50:29.82Z" }, - { url = "https://files.pythonhosted.org/packages/f8/2d/25d9b566d10cab1c42b3b9e5b11ef79c9111eaf4463b8c257a3bd89e0ead/multidict-6.7.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a027ec240fe73a8d6281872690b988eed307cd7d91b23998ff35ff577ca688b5", size = 257539, upload-time = "2025-10-06T14:50:31.731Z" }, - { url = "https://files.pythonhosted.org/packages/b6/b1/8d1a965e6637fc33de3c0d8f414485c2b7e4af00f42cab3d84e7b955c222/multidict-6.7.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d1d964afecdf3a8288789df2f5751dc0a8261138c3768d9af117ed384e538fad", size = 256345, upload-time = "2025-10-06T14:50:33.26Z" }, - { url = "https://files.pythonhosted.org/packages/ba/0c/06b5a8adbdeedada6f4fb8d8f193d44a347223b11939b42953eeb6530b6b/multidict-6.7.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:caf53b15b1b7df9fbd0709aa01409000a2b4dd03a5f6f5cc548183c7c8f8b63c", size = 247934, upload-time = "2025-10-06T14:50:34.808Z" }, - { url = "https://files.pythonhosted.org/packages/8f/31/b2491b5fe167ca044c6eb4b8f2c9f3b8a00b24c432c365358eadac5d7625/multidict-6.7.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:654030da3197d927f05a536a66186070e98765aa5142794c9904555d3a9d8fb5", size = 245243, upload-time = "2025-10-06T14:50:36.436Z" }, - { url = "https://files.pythonhosted.org/packages/61/1a/982913957cb90406c8c94f53001abd9eafc271cb3e70ff6371590bec478e/multidict-6.7.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:2090d3718829d1e484706a2f525e50c892237b2bf9b17a79b059cb98cddc2f10", size = 235878, upload-time = "2025-10-06T14:50:37.953Z" }, - { url = "https://files.pythonhosted.org/packages/be/c0/21435d804c1a1cf7a2608593f4d19bca5bcbd7a81a70b253fdd1c12af9c0/multidict-6.7.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:2d2cfeec3f6f45651b3d408c4acec0ebf3daa9bc8a112a084206f5db5d05b754", size = 243452, upload-time = "2025-10-06T14:50:39.574Z" }, - { url = "https://files.pythonhosted.org/packages/54/0a/4349d540d4a883863191be6eb9a928846d4ec0ea007d3dcd36323bb058ac/multidict-6.7.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:4ef089f985b8c194d341eb2c24ae6e7408c9a0e2e5658699c92f497437d88c3c", size = 252312, upload-time = "2025-10-06T14:50:41.612Z" }, - { url = "https://files.pythonhosted.org/packages/26/64/d5416038dbda1488daf16b676e4dbfd9674dde10a0cc8f4fc2b502d8125d/multidict-6.7.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:e93a0617cd16998784bf4414c7e40f17a35d2350e5c6f0bd900d3a8e02bd3762", size = 246935, upload-time = "2025-10-06T14:50:43.972Z" }, - { url = "https://files.pythonhosted.org/packages/9f/8c/8290c50d14e49f35e0bd4abc25e1bc7711149ca9588ab7d04f886cdf03d9/multidict-6.7.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f0feece2ef8ebc42ed9e2e8c78fc4aa3cf455733b507c09ef7406364c94376c6", size = 243385, upload-time = "2025-10-06T14:50:45.648Z" }, - { url = "https://files.pythonhosted.org/packages/ef/a0/f83ae75e42d694b3fbad3e047670e511c138be747bc713cf1b10d5096416/multidict-6.7.0-cp313-cp313t-win32.whl", hash = "sha256:19a1d55338ec1be74ef62440ca9e04a2f001a04d0cc49a4983dc320ff0f3212d", size = 47777, upload-time = "2025-10-06T14:50:47.154Z" }, - { url = "https://files.pythonhosted.org/packages/dc/80/9b174a92814a3830b7357307a792300f42c9e94664b01dee8e457551fa66/multidict-6.7.0-cp313-cp313t-win_amd64.whl", hash = "sha256:3da4fb467498df97e986af166b12d01f05d2e04f978a9c1c680ea1988e0bc4b6", size = 53104, upload-time = "2025-10-06T14:50:48.851Z" }, - { url = "https://files.pythonhosted.org/packages/cc/28/04baeaf0428d95bb7a7bea0e691ba2f31394338ba424fb0679a9ed0f4c09/multidict-6.7.0-cp313-cp313t-win_arm64.whl", hash = "sha256:b4121773c49a0776461f4a904cdf6264c88e42218aaa8407e803ca8025872792", size = 45503, upload-time = "2025-10-06T14:50:50.16Z" }, - { url = "https://files.pythonhosted.org/packages/e2/b1/3da6934455dd4b261d4c72f897e3a5728eba81db59959f3a639245891baa/multidict-6.7.0-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:3bab1e4aff7adaa34410f93b1f8e57c4b36b9af0426a76003f441ee1d3c7e842", size = 75128, upload-time = "2025-10-06T14:50:51.92Z" }, - { url = "https://files.pythonhosted.org/packages/14/2c/f069cab5b51d175a1a2cb4ccdf7a2c2dabd58aa5bd933fa036a8d15e2404/multidict-6.7.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:b8512bac933afc3e45fb2b18da8e59b78d4f408399a960339598374d4ae3b56b", size = 44410, upload-time = "2025-10-06T14:50:53.275Z" }, - { url = "https://files.pythonhosted.org/packages/42/e2/64bb41266427af6642b6b128e8774ed84c11b80a90702c13ac0a86bb10cc/multidict-6.7.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:79dcf9e477bc65414ebfea98ffd013cb39552b5ecd62908752e0e413d6d06e38", size = 43205, upload-time = "2025-10-06T14:50:54.911Z" }, - { url = "https://files.pythonhosted.org/packages/02/68/6b086fef8a3f1a8541b9236c594f0c9245617c29841f2e0395d979485cde/multidict-6.7.0-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:31bae522710064b5cbeddaf2e9f32b1abab70ac6ac91d42572502299e9953128", size = 245084, upload-time = "2025-10-06T14:50:56.369Z" }, - { url = "https://files.pythonhosted.org/packages/15/ee/f524093232007cd7a75c1d132df70f235cfd590a7c9eaccd7ff422ef4ae8/multidict-6.7.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a0df7ff02397bb63e2fd22af2c87dfa39e8c7f12947bc524dbdc528282c7e34", size = 252667, upload-time = "2025-10-06T14:50:57.991Z" }, - { url = "https://files.pythonhosted.org/packages/02/a5/eeb3f43ab45878f1895118c3ef157a480db58ede3f248e29b5354139c2c9/multidict-6.7.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7a0222514e8e4c514660e182d5156a415c13ef0aabbd71682fc714e327b95e99", size = 233590, upload-time = "2025-10-06T14:50:59.589Z" }, - { url = "https://files.pythonhosted.org/packages/6a/1e/76d02f8270b97269d7e3dbd45644b1785bda457b474315f8cf999525a193/multidict-6.7.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2397ab4daaf2698eb51a76721e98db21ce4f52339e535725de03ea962b5a3202", size = 264112, upload-time = "2025-10-06T14:51:01.183Z" }, - { url = "https://files.pythonhosted.org/packages/76/0b/c28a70ecb58963847c2a8efe334904cd254812b10e535aefb3bcce513918/multidict-6.7.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8891681594162635948a636c9fe0ff21746aeb3dd5463f6e25d9bea3a8a39ca1", size = 261194, upload-time = "2025-10-06T14:51:02.794Z" }, - { url = "https://files.pythonhosted.org/packages/b4/63/2ab26e4209773223159b83aa32721b4021ffb08102f8ac7d689c943fded1/multidict-6.7.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:18706cc31dbf402a7945916dd5cddf160251b6dab8a2c5f3d6d5a55949f676b3", size = 248510, upload-time = "2025-10-06T14:51:04.724Z" }, - { url = "https://files.pythonhosted.org/packages/93/cd/06c1fa8282af1d1c46fd55c10a7930af652afdce43999501d4d68664170c/multidict-6.7.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:f844a1bbf1d207dd311a56f383f7eda2d0e134921d45751842d8235e7778965d", size = 248395, upload-time = "2025-10-06T14:51:06.306Z" }, - { url = "https://files.pythonhosted.org/packages/99/ac/82cb419dd6b04ccf9e7e61befc00c77614fc8134362488b553402ecd55ce/multidict-6.7.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:d4393e3581e84e5645506923816b9cc81f5609a778c7e7534054091acc64d1c6", size = 239520, upload-time = "2025-10-06T14:51:08.091Z" }, - { url = "https://files.pythonhosted.org/packages/fa/f3/a0f9bf09493421bd8716a362e0cd1d244f5a6550f5beffdd6b47e885b331/multidict-6.7.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:fbd18dc82d7bf274b37aa48d664534330af744e03bccf696d6f4c6042e7d19e7", size = 245479, upload-time = "2025-10-06T14:51:10.365Z" }, - { url = "https://files.pythonhosted.org/packages/8d/01/476d38fc73a212843f43c852b0eee266b6971f0e28329c2184a8df90c376/multidict-6.7.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:b6234e14f9314731ec45c42fc4554b88133ad53a09092cc48a88e771c125dadb", size = 258903, upload-time = "2025-10-06T14:51:12.466Z" }, - { url = "https://files.pythonhosted.org/packages/49/6d/23faeb0868adba613b817d0e69c5f15531b24d462af8012c4f6de4fa8dc3/multidict-6.7.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:08d4379f9744d8f78d98c8673c06e202ffa88296f009c71bbafe8a6bf847d01f", size = 252333, upload-time = "2025-10-06T14:51:14.48Z" }, - { url = "https://files.pythonhosted.org/packages/1e/cc/48d02ac22b30fa247f7dad82866e4b1015431092f4ba6ebc7e77596e0b18/multidict-6.7.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:9fe04da3f79387f450fd0061d4dd2e45a72749d31bf634aecc9e27f24fdc4b3f", size = 243411, upload-time = "2025-10-06T14:51:16.072Z" }, - { url = "https://files.pythonhosted.org/packages/4a/03/29a8bf5a18abf1fe34535c88adbdfa88c9fb869b5a3b120692c64abe8284/multidict-6.7.0-cp314-cp314-win32.whl", hash = "sha256:fbafe31d191dfa7c4c51f7a6149c9fb7e914dcf9ffead27dcfd9f1ae382b3885", size = 40940, upload-time = "2025-10-06T14:51:17.544Z" }, - { url = "https://files.pythonhosted.org/packages/82/16/7ed27b680791b939de138f906d5cf2b4657b0d45ca6f5dd6236fdddafb1a/multidict-6.7.0-cp314-cp314-win_amd64.whl", hash = "sha256:2f67396ec0310764b9222a1728ced1ab638f61aadc6226f17a71dd9324f9a99c", size = 45087, upload-time = "2025-10-06T14:51:18.875Z" }, - { url = "https://files.pythonhosted.org/packages/cd/3c/e3e62eb35a1950292fe39315d3c89941e30a9d07d5d2df42965ab041da43/multidict-6.7.0-cp314-cp314-win_arm64.whl", hash = "sha256:ba672b26069957ee369cfa7fc180dde1fc6f176eaf1e6beaf61fbebbd3d9c000", size = 42368, upload-time = "2025-10-06T14:51:20.225Z" }, - { url = "https://files.pythonhosted.org/packages/8b/40/cd499bd0dbc5f1136726db3153042a735fffd0d77268e2ee20d5f33c010f/multidict-6.7.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:c1dcc7524066fa918c6a27d61444d4ee7900ec635779058571f70d042d86ed63", size = 82326, upload-time = "2025-10-06T14:51:21.588Z" }, - { url = "https://files.pythonhosted.org/packages/13/8a/18e031eca251c8df76daf0288e6790561806e439f5ce99a170b4af30676b/multidict-6.7.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:27e0b36c2d388dc7b6ced3406671b401e84ad7eb0656b8f3a2f46ed0ce483718", size = 48065, upload-time = "2025-10-06T14:51:22.93Z" }, - { url = "https://files.pythonhosted.org/packages/40/71/5e6701277470a87d234e433fb0a3a7deaf3bcd92566e421e7ae9776319de/multidict-6.7.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2a7baa46a22e77f0988e3b23d4ede5513ebec1929e34ee9495be535662c0dfe2", size = 46475, upload-time = "2025-10-06T14:51:24.352Z" }, - { url = "https://files.pythonhosted.org/packages/fe/6a/bab00cbab6d9cfb57afe1663318f72ec28289ea03fd4e8236bb78429893a/multidict-6.7.0-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:7bf77f54997a9166a2f5675d1201520586439424c2511723a7312bdb4bcc034e", size = 239324, upload-time = "2025-10-06T14:51:25.822Z" }, - { url = "https://files.pythonhosted.org/packages/2a/5f/8de95f629fc22a7769ade8b41028e3e5a822c1f8904f618d175945a81ad3/multidict-6.7.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e011555abada53f1578d63389610ac8a5400fc70ce71156b0aa30d326f1a5064", size = 246877, upload-time = "2025-10-06T14:51:27.604Z" }, - { url = "https://files.pythonhosted.org/packages/23/b4/38881a960458f25b89e9f4a4fdcb02ac101cfa710190db6e5528841e67de/multidict-6.7.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:28b37063541b897fd6a318007373930a75ca6d6ac7c940dbe14731ffdd8d498e", size = 225824, upload-time = "2025-10-06T14:51:29.664Z" }, - { url = "https://files.pythonhosted.org/packages/1e/39/6566210c83f8a261575f18e7144736059f0c460b362e96e9cf797a24b8e7/multidict-6.7.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:05047ada7a2fde2631a0ed706f1fd68b169a681dfe5e4cf0f8e4cb6618bbc2cd", size = 253558, upload-time = "2025-10-06T14:51:31.684Z" }, - { url = "https://files.pythonhosted.org/packages/00/a3/67f18315100f64c269f46e6c0319fa87ba68f0f64f2b8e7fd7c72b913a0b/multidict-6.7.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:716133f7d1d946a4e1b91b1756b23c088881e70ff180c24e864c26192ad7534a", size = 252339, upload-time = "2025-10-06T14:51:33.699Z" }, - { url = "https://files.pythonhosted.org/packages/c8/2a/1cb77266afee2458d82f50da41beba02159b1d6b1f7973afc9a1cad1499b/multidict-6.7.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d1bed1b467ef657f2a0ae62844a607909ef1c6889562de5e1d505f74457d0b96", size = 244895, upload-time = "2025-10-06T14:51:36.189Z" }, - { url = "https://files.pythonhosted.org/packages/dd/72/09fa7dd487f119b2eb9524946ddd36e2067c08510576d43ff68469563b3b/multidict-6.7.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:ca43bdfa5d37bd6aee89d85e1d0831fb86e25541be7e9d376ead1b28974f8e5e", size = 241862, upload-time = "2025-10-06T14:51:41.291Z" }, - { url = "https://files.pythonhosted.org/packages/65/92/bc1f8bd0853d8669300f732c801974dfc3702c3eeadae2f60cef54dc69d7/multidict-6.7.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:44b546bd3eb645fd26fb949e43c02a25a2e632e2ca21a35e2e132c8105dc8599", size = 232376, upload-time = "2025-10-06T14:51:43.55Z" }, - { url = "https://files.pythonhosted.org/packages/09/86/ac39399e5cb9d0c2ac8ef6e10a768e4d3bc933ac808d49c41f9dc23337eb/multidict-6.7.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:a6ef16328011d3f468e7ebc326f24c1445f001ca1dec335b2f8e66bed3006394", size = 240272, upload-time = "2025-10-06T14:51:45.265Z" }, - { url = "https://files.pythonhosted.org/packages/3d/b6/fed5ac6b8563ec72df6cb1ea8dac6d17f0a4a1f65045f66b6d3bf1497c02/multidict-6.7.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:5aa873cbc8e593d361ae65c68f85faadd755c3295ea2c12040ee146802f23b38", size = 248774, upload-time = "2025-10-06T14:51:46.836Z" }, - { url = "https://files.pythonhosted.org/packages/6b/8d/b954d8c0dc132b68f760aefd45870978deec6818897389dace00fcde32ff/multidict-6.7.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:3d7b6ccce016e29df4b7ca819659f516f0bc7a4b3efa3bb2012ba06431b044f9", size = 242731, upload-time = "2025-10-06T14:51:48.541Z" }, - { url = "https://files.pythonhosted.org/packages/16/9d/a2dac7009125d3540c2f54e194829ea18ac53716c61b655d8ed300120b0f/multidict-6.7.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:171b73bd4ee683d307599b66793ac80981b06f069b62eea1c9e29c9241aa66b0", size = 240193, upload-time = "2025-10-06T14:51:50.355Z" }, - { url = "https://files.pythonhosted.org/packages/39/ca/c05f144128ea232ae2178b008d5011d4e2cea86e4ee8c85c2631b1b94802/multidict-6.7.0-cp314-cp314t-win32.whl", hash = "sha256:b2d7f80c4e1fd010b07cb26820aae86b7e73b681ee4889684fb8d2d4537aab13", size = 48023, upload-time = "2025-10-06T14:51:51.883Z" }, - { url = "https://files.pythonhosted.org/packages/ba/8f/0a60e501584145588be1af5cc829265701ba3c35a64aec8e07cbb71d39bb/multidict-6.7.0-cp314-cp314t-win_amd64.whl", hash = "sha256:09929cab6fcb68122776d575e03c6cc64ee0b8fca48d17e135474b042ce515cd", size = 53507, upload-time = "2025-10-06T14:51:53.672Z" }, - { url = "https://files.pythonhosted.org/packages/7f/ae/3148b988a9c6239903e786eac19c889fab607c31d6efa7fb2147e5680f23/multidict-6.7.0-cp314-cp314t-win_arm64.whl", hash = "sha256:cc41db090ed742f32bd2d2c721861725e6109681eddf835d0a82bd3a5c382827", size = 44804, upload-time = "2025-10-06T14:51:55.415Z" }, - { url = "https://files.pythonhosted.org/packages/b7/da/7d22601b625e241d4f23ef1ebff8acfc60da633c9e7e7922e24d10f592b3/multidict-6.7.0-py3-none-any.whl", hash = "sha256:394fc5c42a333c9ffc3e421a4c85e08580d990e08b99f6bf35b4132114c5dcb3", size = 12317, upload-time = "2025-10-06T14:52:29.272Z" }, -] - [[package]] name = "otdf-python" version = "0.4.1" source = { editable = "." } dependencies = [ - { name = "connect-python", extra = ["compiler"] }, + { name = "connect-python" }, { name = "cryptography" }, { name = "grpcio" }, { name = "grpcio-status" }, { name = "grpcio-tools" }, { name = "httpx" }, { name = "protobuf" }, + { name = "protoc-gen-connect-python" }, { name = "protoc-gen-openapiv2" }, { name = "pyjwt" }, { name = "typing-extensions" }, @@ -875,13 +449,14 @@ dev = [ [package.metadata] requires-dist = [ - { name = "connect-python", extras = ["compiler"], specifier = ">=0.4.2,<0.5" }, + { name = "connect-python", specifier = ">=0.6.0,<0.7" }, { name = "cryptography", specifier = ">=45.0.4" }, { name = "grpcio", specifier = ">=1.74.0" }, { name = "grpcio-status", specifier = ">=1.74.0" }, { name = "grpcio-tools", specifier = ">=1.74.0" }, { name = "httpx", specifier = ">=0.28.1" }, { name = "protobuf", specifier = ">=6.31.1" }, + { name = "protoc-gen-connect-python", specifier = ">=0.6.0,<0.7" }, { name = "protoc-gen-openapiv2", specifier = ">=0.0.1" }, { name = "pyjwt", specifier = ">=2.10.1" }, { name = "typing-extensions", specifier = ">=4.14.1" }, @@ -915,132 +490,31 @@ wheels = [ ] [[package]] -name = "propcache" -version = "0.4.1" +name = "protobuf" +version = "6.33.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/9e/da/e9fc233cf63743258bff22b3dfa7ea5baef7b5bc324af47a0ad89b8ffc6f/propcache-0.4.1.tar.gz", hash = "sha256:f48107a8c637e80362555f37ecf49abe20370e557cc4ab374f04ec4423c97c3d", size = 46442, upload-time = "2025-10-08T19:49:02.291Z" } +sdist = { url = "https://files.pythonhosted.org/packages/34/44/e49ecff446afeec9d1a66d6bbf9adc21e3c7cea7803a920ca3773379d4f6/protobuf-6.33.2.tar.gz", hash = "sha256:56dc370c91fbb8ac85bc13582c9e373569668a290aa2e66a590c2a0d35ddb9e4", size = 444296, upload-time = "2025-12-06T00:17:53.311Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3c/0e/934b541323035566a9af292dba85a195f7b78179114f2c6ebb24551118a9/propcache-0.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7c2d1fa3201efaf55d730400d945b5b3ab6e672e100ba0f9a409d950ab25d7db", size = 79534, upload-time = "2025-10-08T19:46:02.083Z" }, - { url = "https://files.pythonhosted.org/packages/a1/6b/db0d03d96726d995dc7171286c6ba9d8d14251f37433890f88368951a44e/propcache-0.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1eb2994229cc8ce7fe9b3db88f5465f5fd8651672840b2e426b88cdb1a30aac8", size = 45526, upload-time = "2025-10-08T19:46:03.884Z" }, - { url = "https://files.pythonhosted.org/packages/e4/c3/82728404aea669e1600f304f2609cde9e665c18df5a11cdd57ed73c1dceb/propcache-0.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:66c1f011f45a3b33d7bcb22daed4b29c0c9e2224758b6be00686731e1b46f925", size = 47263, upload-time = "2025-10-08T19:46:05.405Z" }, - { url = "https://files.pythonhosted.org/packages/df/1b/39313ddad2bf9187a1432654c38249bab4562ef535ef07f5eb6eb04d0b1b/propcache-0.4.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9a52009f2adffe195d0b605c25ec929d26b36ef986ba85244891dee3b294df21", size = 201012, upload-time = "2025-10-08T19:46:07.165Z" }, - { url = "https://files.pythonhosted.org/packages/5b/01/f1d0b57d136f294a142acf97f4ed58c8e5b974c21e543000968357115011/propcache-0.4.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5d4e2366a9c7b837555cf02fb9be2e3167d333aff716332ef1b7c3a142ec40c5", size = 209491, upload-time = "2025-10-08T19:46:08.909Z" }, - { url = "https://files.pythonhosted.org/packages/a1/c8/038d909c61c5bb039070b3fb02ad5cccdb1dde0d714792e251cdb17c9c05/propcache-0.4.1-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:9d2b6caef873b4f09e26ea7e33d65f42b944837563a47a94719cc3544319a0db", size = 215319, upload-time = "2025-10-08T19:46:10.7Z" }, - { url = "https://files.pythonhosted.org/packages/08/57/8c87e93142b2c1fa2408e45695205a7ba05fb5db458c0bf5c06ba0e09ea6/propcache-0.4.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2b16ec437a8c8a965ecf95739448dd938b5c7f56e67ea009f4300d8df05f32b7", size = 196856, upload-time = "2025-10-08T19:46:12.003Z" }, - { url = "https://files.pythonhosted.org/packages/42/df/5615fec76aa561987a534759b3686008a288e73107faa49a8ae5795a9f7a/propcache-0.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:296f4c8ed03ca7476813fe666c9ea97869a8d7aec972618671b33a38a5182ef4", size = 193241, upload-time = "2025-10-08T19:46:13.495Z" }, - { url = "https://files.pythonhosted.org/packages/d5/21/62949eb3a7a54afe8327011c90aca7e03547787a88fb8bd9726806482fea/propcache-0.4.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:1f0978529a418ebd1f49dad413a2b68af33f85d5c5ca5c6ca2a3bed375a7ac60", size = 190552, upload-time = "2025-10-08T19:46:14.938Z" }, - { url = "https://files.pythonhosted.org/packages/30/ee/ab4d727dd70806e5b4de96a798ae7ac6e4d42516f030ee60522474b6b332/propcache-0.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fd138803047fb4c062b1c1dd95462f5209456bfab55c734458f15d11da288f8f", size = 200113, upload-time = "2025-10-08T19:46:16.695Z" }, - { url = "https://files.pythonhosted.org/packages/8a/0b/38b46208e6711b016aa8966a3ac793eee0d05c7159d8342aa27fc0bc365e/propcache-0.4.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8c9b3cbe4584636d72ff556d9036e0c9317fa27b3ac1f0f558e7e84d1c9c5900", size = 200778, upload-time = "2025-10-08T19:46:18.023Z" }, - { url = "https://files.pythonhosted.org/packages/cf/81/5abec54355ed344476bee711e9f04815d4b00a311ab0535599204eecc257/propcache-0.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f93243fdc5657247533273ac4f86ae106cc6445a0efacb9a1bfe982fcfefd90c", size = 193047, upload-time = "2025-10-08T19:46:19.449Z" }, - { url = "https://files.pythonhosted.org/packages/ec/b6/1f237c04e32063cb034acd5f6ef34ef3a394f75502e72703545631ab1ef6/propcache-0.4.1-cp310-cp310-win32.whl", hash = "sha256:a0ee98db9c5f80785b266eb805016e36058ac72c51a064040f2bc43b61101cdb", size = 38093, upload-time = "2025-10-08T19:46:20.643Z" }, - { url = "https://files.pythonhosted.org/packages/a6/67/354aac4e0603a15f76439caf0427781bcd6797f370377f75a642133bc954/propcache-0.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:1cdb7988c4e5ac7f6d175a28a9aa0c94cb6f2ebe52756a3c0cda98d2809a9e37", size = 41638, upload-time = "2025-10-08T19:46:21.935Z" }, - { url = "https://files.pythonhosted.org/packages/e0/e1/74e55b9fd1a4c209ff1a9a824bf6c8b3d1fc5a1ac3eabe23462637466785/propcache-0.4.1-cp310-cp310-win_arm64.whl", hash = "sha256:d82ad62b19645419fe79dd63b3f9253e15b30e955c0170e5cebc350c1844e581", size = 38229, upload-time = "2025-10-08T19:46:23.368Z" }, - { url = "https://files.pythonhosted.org/packages/8c/d4/4e2c9aaf7ac2242b9358f98dccd8f90f2605402f5afeff6c578682c2c491/propcache-0.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:60a8fda9644b7dfd5dece8c61d8a85e271cb958075bfc4e01083c148b61a7caf", size = 80208, upload-time = "2025-10-08T19:46:24.597Z" }, - { url = "https://files.pythonhosted.org/packages/c2/21/d7b68e911f9c8e18e4ae43bdbc1e1e9bbd971f8866eb81608947b6f585ff/propcache-0.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c30b53e7e6bda1d547cabb47c825f3843a0a1a42b0496087bb58d8fedf9f41b5", size = 45777, upload-time = "2025-10-08T19:46:25.733Z" }, - { url = "https://files.pythonhosted.org/packages/d3/1d/11605e99ac8ea9435651ee71ab4cb4bf03f0949586246476a25aadfec54a/propcache-0.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6918ecbd897443087a3b7cd978d56546a812517dcaaca51b49526720571fa93e", size = 47647, upload-time = "2025-10-08T19:46:27.304Z" }, - { url = "https://files.pythonhosted.org/packages/58/1a/3c62c127a8466c9c843bccb503d40a273e5cc69838805f322e2826509e0d/propcache-0.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3d902a36df4e5989763425a8ab9e98cd8ad5c52c823b34ee7ef307fd50582566", size = 214929, upload-time = "2025-10-08T19:46:28.62Z" }, - { url = "https://files.pythonhosted.org/packages/56/b9/8fa98f850960b367c4b8fe0592e7fc341daa7a9462e925228f10a60cf74f/propcache-0.4.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a9695397f85973bb40427dedddf70d8dc4a44b22f1650dd4af9eedf443d45165", size = 221778, upload-time = "2025-10-08T19:46:30.358Z" }, - { url = "https://files.pythonhosted.org/packages/46/a6/0ab4f660eb59649d14b3d3d65c439421cf2f87fe5dd68591cbe3c1e78a89/propcache-0.4.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2bb07ffd7eaad486576430c89f9b215f9e4be68c4866a96e97db9e97fead85dc", size = 228144, upload-time = "2025-10-08T19:46:32.607Z" }, - { url = "https://files.pythonhosted.org/packages/52/6a/57f43e054fb3d3a56ac9fc532bc684fc6169a26c75c353e65425b3e56eef/propcache-0.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fd6f30fdcf9ae2a70abd34da54f18da086160e4d7d9251f81f3da0ff84fc5a48", size = 210030, upload-time = "2025-10-08T19:46:33.969Z" }, - { url = "https://files.pythonhosted.org/packages/40/e2/27e6feebb5f6b8408fa29f5efbb765cd54c153ac77314d27e457a3e993b7/propcache-0.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:fc38cba02d1acba4e2869eef1a57a43dfbd3d49a59bf90dda7444ec2be6a5570", size = 208252, upload-time = "2025-10-08T19:46:35.309Z" }, - { url = "https://files.pythonhosted.org/packages/9e/f8/91c27b22ccda1dbc7967f921c42825564fa5336a01ecd72eb78a9f4f53c2/propcache-0.4.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:67fad6162281e80e882fb3ec355398cf72864a54069d060321f6cd0ade95fe85", size = 202064, upload-time = "2025-10-08T19:46:36.993Z" }, - { url = "https://files.pythonhosted.org/packages/f2/26/7f00bd6bd1adba5aafe5f4a66390f243acab58eab24ff1a08bebb2ef9d40/propcache-0.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f10207adf04d08bec185bae14d9606a1444715bc99180f9331c9c02093e1959e", size = 212429, upload-time = "2025-10-08T19:46:38.398Z" }, - { url = "https://files.pythonhosted.org/packages/84/89/fd108ba7815c1117ddca79c228f3f8a15fc82a73bca8b142eb5de13b2785/propcache-0.4.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:e9b0d8d0845bbc4cfcdcbcdbf5086886bc8157aa963c31c777ceff7846c77757", size = 216727, upload-time = "2025-10-08T19:46:39.732Z" }, - { url = "https://files.pythonhosted.org/packages/79/37/3ec3f7e3173e73f1d600495d8b545b53802cbf35506e5732dd8578db3724/propcache-0.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:981333cb2f4c1896a12f4ab92a9cc8f09ea664e9b7dbdc4eff74627af3a11c0f", size = 205097, upload-time = "2025-10-08T19:46:41.025Z" }, - { url = "https://files.pythonhosted.org/packages/61/b0/b2631c19793f869d35f47d5a3a56fb19e9160d3c119f15ac7344fc3ccae7/propcache-0.4.1-cp311-cp311-win32.whl", hash = "sha256:f1d2f90aeec838a52f1c1a32fe9a619fefd5e411721a9117fbf82aea638fe8a1", size = 38084, upload-time = "2025-10-08T19:46:42.693Z" }, - { url = "https://files.pythonhosted.org/packages/f4/78/6cce448e2098e9f3bfc91bb877f06aa24b6ccace872e39c53b2f707c4648/propcache-0.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:364426a62660f3f699949ac8c621aad6977be7126c5807ce48c0aeb8e7333ea6", size = 41637, upload-time = "2025-10-08T19:46:43.778Z" }, - { url = "https://files.pythonhosted.org/packages/9c/e9/754f180cccd7f51a39913782c74717c581b9cc8177ad0e949f4d51812383/propcache-0.4.1-cp311-cp311-win_arm64.whl", hash = "sha256:e53f3a38d3510c11953f3e6a33f205c6d1b001129f972805ca9b42fc308bc239", size = 38064, upload-time = "2025-10-08T19:46:44.872Z" }, - { url = "https://files.pythonhosted.org/packages/a2/0f/f17b1b2b221d5ca28b4b876e8bb046ac40466513960646bda8e1853cdfa2/propcache-0.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e153e9cd40cc8945138822807139367f256f89c6810c2634a4f6902b52d3b4e2", size = 80061, upload-time = "2025-10-08T19:46:46.075Z" }, - { url = "https://files.pythonhosted.org/packages/76/47/8ccf75935f51448ba9a16a71b783eb7ef6b9ee60f5d14c7f8a8a79fbeed7/propcache-0.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cd547953428f7abb73c5ad82cbb32109566204260d98e41e5dfdc682eb7f8403", size = 46037, upload-time = "2025-10-08T19:46:47.23Z" }, - { url = "https://files.pythonhosted.org/packages/0a/b6/5c9a0e42df4d00bfb4a3cbbe5cf9f54260300c88a0e9af1f47ca5ce17ac0/propcache-0.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f048da1b4f243fc44f205dfd320933a951b8d89e0afd4c7cacc762a8b9165207", size = 47324, upload-time = "2025-10-08T19:46:48.384Z" }, - { url = "https://files.pythonhosted.org/packages/9e/d3/6c7ee328b39a81ee877c962469f1e795f9db87f925251efeb0545e0020d0/propcache-0.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ec17c65562a827bba85e3872ead335f95405ea1674860d96483a02f5c698fa72", size = 225505, upload-time = "2025-10-08T19:46:50.055Z" }, - { url = "https://files.pythonhosted.org/packages/01/5d/1c53f4563490b1d06a684742cc6076ef944bc6457df6051b7d1a877c057b/propcache-0.4.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:405aac25c6394ef275dee4c709be43745d36674b223ba4eb7144bf4d691b7367", size = 230242, upload-time = "2025-10-08T19:46:51.815Z" }, - { url = "https://files.pythonhosted.org/packages/20/e1/ce4620633b0e2422207c3cb774a0ee61cac13abc6217763a7b9e2e3f4a12/propcache-0.4.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0013cb6f8dde4b2a2f66903b8ba740bdfe378c943c4377a200551ceb27f379e4", size = 238474, upload-time = "2025-10-08T19:46:53.208Z" }, - { url = "https://files.pythonhosted.org/packages/46/4b/3aae6835b8e5f44ea6a68348ad90f78134047b503765087be2f9912140ea/propcache-0.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:15932ab57837c3368b024473a525e25d316d8353016e7cc0e5ba9eb343fbb1cf", size = 221575, upload-time = "2025-10-08T19:46:54.511Z" }, - { url = "https://files.pythonhosted.org/packages/6e/a5/8a5e8678bcc9d3a1a15b9a29165640d64762d424a16af543f00629c87338/propcache-0.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:031dce78b9dc099f4c29785d9cf5577a3faf9ebf74ecbd3c856a7b92768c3df3", size = 216736, upload-time = "2025-10-08T19:46:56.212Z" }, - { url = "https://files.pythonhosted.org/packages/f1/63/b7b215eddeac83ca1c6b934f89d09a625aa9ee4ba158338854c87210cc36/propcache-0.4.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:ab08df6c9a035bee56e31af99be621526bd237bea9f32def431c656b29e41778", size = 213019, upload-time = "2025-10-08T19:46:57.595Z" }, - { url = "https://files.pythonhosted.org/packages/57/74/f580099a58c8af587cac7ba19ee7cb418506342fbbe2d4a4401661cca886/propcache-0.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4d7af63f9f93fe593afbf104c21b3b15868efb2c21d07d8732c0c4287e66b6a6", size = 220376, upload-time = "2025-10-08T19:46:59.067Z" }, - { url = "https://files.pythonhosted.org/packages/c4/ee/542f1313aff7eaf19c2bb758c5d0560d2683dac001a1c96d0774af799843/propcache-0.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:cfc27c945f422e8b5071b6e93169679e4eb5bf73bbcbf1ba3ae3a83d2f78ebd9", size = 226988, upload-time = "2025-10-08T19:47:00.544Z" }, - { url = "https://files.pythonhosted.org/packages/8f/18/9c6b015dd9c6930f6ce2229e1f02fb35298b847f2087ea2b436a5bfa7287/propcache-0.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:35c3277624a080cc6ec6f847cbbbb5b49affa3598c4535a0a4682a697aaa5c75", size = 215615, upload-time = "2025-10-08T19:47:01.968Z" }, - { url = "https://files.pythonhosted.org/packages/80/9e/e7b85720b98c45a45e1fca6a177024934dc9bc5f4d5dd04207f216fc33ed/propcache-0.4.1-cp312-cp312-win32.whl", hash = "sha256:671538c2262dadb5ba6395e26c1731e1d52534bfe9ae56d0b5573ce539266aa8", size = 38066, upload-time = "2025-10-08T19:47:03.503Z" }, - { url = "https://files.pythonhosted.org/packages/54/09/d19cff2a5aaac632ec8fc03737b223597b1e347416934c1b3a7df079784c/propcache-0.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:cb2d222e72399fcf5890d1d5cc1060857b9b236adff2792ff48ca2dfd46c81db", size = 41655, upload-time = "2025-10-08T19:47:04.973Z" }, - { url = "https://files.pythonhosted.org/packages/68/ab/6b5c191bb5de08036a8c697b265d4ca76148efb10fa162f14af14fb5f076/propcache-0.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:204483131fb222bdaaeeea9f9e6c6ed0cac32731f75dfc1d4a567fc1926477c1", size = 37789, upload-time = "2025-10-08T19:47:06.077Z" }, - { url = "https://files.pythonhosted.org/packages/bf/df/6d9c1b6ac12b003837dde8a10231a7344512186e87b36e855bef32241942/propcache-0.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:43eedf29202c08550aac1d14e0ee619b0430aaef78f85864c1a892294fbc28cf", size = 77750, upload-time = "2025-10-08T19:47:07.648Z" }, - { url = "https://files.pythonhosted.org/packages/8b/e8/677a0025e8a2acf07d3418a2e7ba529c9c33caf09d3c1f25513023c1db56/propcache-0.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d62cdfcfd89ccb8de04e0eda998535c406bf5e060ffd56be6c586cbcc05b3311", size = 44780, upload-time = "2025-10-08T19:47:08.851Z" }, - { url = "https://files.pythonhosted.org/packages/89/a4/92380f7ca60f99ebae761936bc48a72a639e8a47b29050615eef757cb2a7/propcache-0.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cae65ad55793da34db5f54e4029b89d3b9b9490d8abe1b4c7ab5d4b8ec7ebf74", size = 46308, upload-time = "2025-10-08T19:47:09.982Z" }, - { url = "https://files.pythonhosted.org/packages/2d/48/c5ac64dee5262044348d1d78a5f85dd1a57464a60d30daee946699963eb3/propcache-0.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:333ddb9031d2704a301ee3e506dc46b1fe5f294ec198ed6435ad5b6a085facfe", size = 208182, upload-time = "2025-10-08T19:47:11.319Z" }, - { url = "https://files.pythonhosted.org/packages/c6/0c/cd762dd011a9287389a6a3eb43aa30207bde253610cca06824aeabfe9653/propcache-0.4.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:fd0858c20f078a32cf55f7e81473d96dcf3b93fd2ccdb3d40fdf54b8573df3af", size = 211215, upload-time = "2025-10-08T19:47:13.146Z" }, - { url = "https://files.pythonhosted.org/packages/30/3e/49861e90233ba36890ae0ca4c660e95df565b2cd15d4a68556ab5865974e/propcache-0.4.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:678ae89ebc632c5c204c794f8dab2837c5f159aeb59e6ed0539500400577298c", size = 218112, upload-time = "2025-10-08T19:47:14.913Z" }, - { url = "https://files.pythonhosted.org/packages/f1/8b/544bc867e24e1bd48f3118cecd3b05c694e160a168478fa28770f22fd094/propcache-0.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d472aeb4fbf9865e0c6d622d7f4d54a4e101a89715d8904282bb5f9a2f476c3f", size = 204442, upload-time = "2025-10-08T19:47:16.277Z" }, - { url = "https://files.pythonhosted.org/packages/50/a6/4282772fd016a76d3e5c0df58380a5ea64900afd836cec2c2f662d1b9bb3/propcache-0.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4d3df5fa7e36b3225954fba85589da77a0fe6a53e3976de39caf04a0db4c36f1", size = 199398, upload-time = "2025-10-08T19:47:17.962Z" }, - { url = "https://files.pythonhosted.org/packages/3e/ec/d8a7cd406ee1ddb705db2139f8a10a8a427100347bd698e7014351c7af09/propcache-0.4.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:ee17f18d2498f2673e432faaa71698032b0127ebf23ae5974eeaf806c279df24", size = 196920, upload-time = "2025-10-08T19:47:19.355Z" }, - { url = "https://files.pythonhosted.org/packages/f6/6c/f38ab64af3764f431e359f8baf9e0a21013e24329e8b85d2da32e8ed07ca/propcache-0.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:580e97762b950f993ae618e167e7be9256b8353c2dcd8b99ec100eb50f5286aa", size = 203748, upload-time = "2025-10-08T19:47:21.338Z" }, - { url = "https://files.pythonhosted.org/packages/d6/e3/fa846bd70f6534d647886621388f0a265254d30e3ce47e5c8e6e27dbf153/propcache-0.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:501d20b891688eb8e7aa903021f0b72d5a55db40ffaab27edefd1027caaafa61", size = 205877, upload-time = "2025-10-08T19:47:23.059Z" }, - { url = "https://files.pythonhosted.org/packages/e2/39/8163fc6f3133fea7b5f2827e8eba2029a0277ab2c5beee6c1db7b10fc23d/propcache-0.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9a0bd56e5b100aef69bd8562b74b46254e7c8812918d3baa700c8a8009b0af66", size = 199437, upload-time = "2025-10-08T19:47:24.445Z" }, - { url = "https://files.pythonhosted.org/packages/93/89/caa9089970ca49c7c01662bd0eeedfe85494e863e8043565aeb6472ce8fe/propcache-0.4.1-cp313-cp313-win32.whl", hash = "sha256:bcc9aaa5d80322bc2fb24bb7accb4a30f81e90ab8d6ba187aec0744bc302ad81", size = 37586, upload-time = "2025-10-08T19:47:25.736Z" }, - { url = "https://files.pythonhosted.org/packages/f5/ab/f76ec3c3627c883215b5c8080debb4394ef5a7a29be811f786415fc1e6fd/propcache-0.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:381914df18634f5494334d201e98245c0596067504b9372d8cf93f4bb23e025e", size = 40790, upload-time = "2025-10-08T19:47:26.847Z" }, - { url = "https://files.pythonhosted.org/packages/59/1b/e71ae98235f8e2ba5004d8cb19765a74877abf189bc53fc0c80d799e56c3/propcache-0.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:8873eb4460fd55333ea49b7d189749ecf6e55bf85080f11b1c4530ed3034cba1", size = 37158, upload-time = "2025-10-08T19:47:27.961Z" }, - { url = "https://files.pythonhosted.org/packages/83/ce/a31bbdfc24ee0dcbba458c8175ed26089cf109a55bbe7b7640ed2470cfe9/propcache-0.4.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:92d1935ee1f8d7442da9c0c4fa7ac20d07e94064184811b685f5c4fada64553b", size = 81451, upload-time = "2025-10-08T19:47:29.445Z" }, - { url = "https://files.pythonhosted.org/packages/25/9c/442a45a470a68456e710d96cacd3573ef26a1d0a60067e6a7d5e655621ed/propcache-0.4.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:473c61b39e1460d386479b9b2f337da492042447c9b685f28be4f74d3529e566", size = 46374, upload-time = "2025-10-08T19:47:30.579Z" }, - { url = "https://files.pythonhosted.org/packages/f4/bf/b1d5e21dbc3b2e889ea4327044fb16312a736d97640fb8b6aa3f9c7b3b65/propcache-0.4.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:c0ef0aaafc66fbd87842a3fe3902fd889825646bc21149eafe47be6072725835", size = 48396, upload-time = "2025-10-08T19:47:31.79Z" }, - { url = "https://files.pythonhosted.org/packages/f4/04/5b4c54a103d480e978d3c8a76073502b18db0c4bc17ab91b3cb5092ad949/propcache-0.4.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f95393b4d66bfae908c3ca8d169d5f79cd65636ae15b5e7a4f6e67af675adb0e", size = 275950, upload-time = "2025-10-08T19:47:33.481Z" }, - { url = "https://files.pythonhosted.org/packages/b4/c1/86f846827fb969c4b78b0af79bba1d1ea2156492e1b83dea8b8a6ae27395/propcache-0.4.1-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c07fda85708bc48578467e85099645167a955ba093be0a2dcba962195676e859", size = 273856, upload-time = "2025-10-08T19:47:34.906Z" }, - { url = "https://files.pythonhosted.org/packages/36/1d/fc272a63c8d3bbad6878c336c7a7dea15e8f2d23a544bda43205dfa83ada/propcache-0.4.1-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:af223b406d6d000830c6f65f1e6431783fc3f713ba3e6cc8c024d5ee96170a4b", size = 280420, upload-time = "2025-10-08T19:47:36.338Z" }, - { url = "https://files.pythonhosted.org/packages/07/0c/01f2219d39f7e53d52e5173bcb09c976609ba30209912a0680adfb8c593a/propcache-0.4.1-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a78372c932c90ee474559c5ddfffd718238e8673c340dc21fe45c5b8b54559a0", size = 263254, upload-time = "2025-10-08T19:47:37.692Z" }, - { url = "https://files.pythonhosted.org/packages/2d/18/cd28081658ce597898f0c4d174d4d0f3c5b6d4dc27ffafeef835c95eb359/propcache-0.4.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:564d9f0d4d9509e1a870c920a89b2fec951b44bf5ba7d537a9e7c1ccec2c18af", size = 261205, upload-time = "2025-10-08T19:47:39.659Z" }, - { url = "https://files.pythonhosted.org/packages/7a/71/1f9e22eb8b8316701c2a19fa1f388c8a3185082607da8e406a803c9b954e/propcache-0.4.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:17612831fda0138059cc5546f4d12a2aacfb9e47068c06af35c400ba58ba7393", size = 247873, upload-time = "2025-10-08T19:47:41.084Z" }, - { url = "https://files.pythonhosted.org/packages/4a/65/3d4b61f36af2b4eddba9def857959f1016a51066b4f1ce348e0cf7881f58/propcache-0.4.1-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:41a89040cb10bd345b3c1a873b2bf36413d48da1def52f268a055f7398514874", size = 262739, upload-time = "2025-10-08T19:47:42.51Z" }, - { url = "https://files.pythonhosted.org/packages/2a/42/26746ab087faa77c1c68079b228810436ccd9a5ce9ac85e2b7307195fd06/propcache-0.4.1-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:e35b88984e7fa64aacecea39236cee32dd9bd8c55f57ba8a75cf2399553f9bd7", size = 263514, upload-time = "2025-10-08T19:47:43.927Z" }, - { url = "https://files.pythonhosted.org/packages/94/13/630690fe201f5502d2403dd3cfd451ed8858fe3c738ee88d095ad2ff407b/propcache-0.4.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6f8b465489f927b0df505cbe26ffbeed4d6d8a2bbc61ce90eb074ff129ef0ab1", size = 257781, upload-time = "2025-10-08T19:47:45.448Z" }, - { url = "https://files.pythonhosted.org/packages/92/f7/1d4ec5841505f423469efbfc381d64b7b467438cd5a4bbcbb063f3b73d27/propcache-0.4.1-cp313-cp313t-win32.whl", hash = "sha256:2ad890caa1d928c7c2965b48f3a3815c853180831d0e5503d35cf00c472f4717", size = 41396, upload-time = "2025-10-08T19:47:47.202Z" }, - { url = "https://files.pythonhosted.org/packages/48/f0/615c30622316496d2cbbc29f5985f7777d3ada70f23370608c1d3e081c1f/propcache-0.4.1-cp313-cp313t-win_amd64.whl", hash = "sha256:f7ee0e597f495cf415bcbd3da3caa3bd7e816b74d0d52b8145954c5e6fd3ff37", size = 44897, upload-time = "2025-10-08T19:47:48.336Z" }, - { url = "https://files.pythonhosted.org/packages/fd/ca/6002e46eccbe0e33dcd4069ef32f7f1c9e243736e07adca37ae8c4830ec3/propcache-0.4.1-cp313-cp313t-win_arm64.whl", hash = "sha256:929d7cbe1f01bb7baffb33dc14eb5691c95831450a26354cd210a8155170c93a", size = 39789, upload-time = "2025-10-08T19:47:49.876Z" }, - { url = "https://files.pythonhosted.org/packages/8e/5c/bca52d654a896f831b8256683457ceddd490ec18d9ec50e97dfd8fc726a8/propcache-0.4.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:3f7124c9d820ba5548d431afb4632301acf965db49e666aa21c305cbe8c6de12", size = 78152, upload-time = "2025-10-08T19:47:51.051Z" }, - { url = "https://files.pythonhosted.org/packages/65/9b/03b04e7d82a5f54fb16113d839f5ea1ede58a61e90edf515f6577c66fa8f/propcache-0.4.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:c0d4b719b7da33599dfe3b22d3db1ef789210a0597bc650b7cee9c77c2be8c5c", size = 44869, upload-time = "2025-10-08T19:47:52.594Z" }, - { url = "https://files.pythonhosted.org/packages/b2/fa/89a8ef0468d5833a23fff277b143d0573897cf75bd56670a6d28126c7d68/propcache-0.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:9f302f4783709a78240ebc311b793f123328716a60911d667e0c036bc5dcbded", size = 46596, upload-time = "2025-10-08T19:47:54.073Z" }, - { url = "https://files.pythonhosted.org/packages/86/bd/47816020d337f4a746edc42fe8d53669965138f39ee117414c7d7a340cfe/propcache-0.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c80ee5802e3fb9ea37938e7eecc307fb984837091d5fd262bb37238b1ae97641", size = 206981, upload-time = "2025-10-08T19:47:55.715Z" }, - { url = "https://files.pythonhosted.org/packages/df/f6/c5fa1357cc9748510ee55f37173eb31bfde6d94e98ccd9e6f033f2fc06e1/propcache-0.4.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ed5a841e8bb29a55fb8159ed526b26adc5bdd7e8bd7bf793ce647cb08656cdf4", size = 211490, upload-time = "2025-10-08T19:47:57.499Z" }, - { url = "https://files.pythonhosted.org/packages/80/1e/e5889652a7c4a3846683401a48f0f2e5083ce0ec1a8a5221d8058fbd1adf/propcache-0.4.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:55c72fd6ea2da4c318e74ffdf93c4fe4e926051133657459131a95c846d16d44", size = 215371, upload-time = "2025-10-08T19:47:59.317Z" }, - { url = "https://files.pythonhosted.org/packages/b2/f2/889ad4b2408f72fe1a4f6a19491177b30ea7bf1a0fd5f17050ca08cfc882/propcache-0.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8326e144341460402713f91df60ade3c999d601e7eb5ff8f6f7862d54de0610d", size = 201424, upload-time = "2025-10-08T19:48:00.67Z" }, - { url = "https://files.pythonhosted.org/packages/27/73/033d63069b57b0812c8bd19f311faebeceb6ba31b8f32b73432d12a0b826/propcache-0.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:060b16ae65bc098da7f6d25bf359f1f31f688384858204fe5d652979e0015e5b", size = 197566, upload-time = "2025-10-08T19:48:02.604Z" }, - { url = "https://files.pythonhosted.org/packages/dc/89/ce24f3dc182630b4e07aa6d15f0ff4b14ed4b9955fae95a0b54c58d66c05/propcache-0.4.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:89eb3fa9524f7bec9de6e83cf3faed9d79bffa560672c118a96a171a6f55831e", size = 193130, upload-time = "2025-10-08T19:48:04.499Z" }, - { url = "https://files.pythonhosted.org/packages/a9/24/ef0d5fd1a811fb5c609278d0209c9f10c35f20581fcc16f818da959fc5b4/propcache-0.4.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:dee69d7015dc235f526fe80a9c90d65eb0039103fe565776250881731f06349f", size = 202625, upload-time = "2025-10-08T19:48:06.213Z" }, - { url = "https://files.pythonhosted.org/packages/f5/02/98ec20ff5546f68d673df2f7a69e8c0d076b5abd05ca882dc7ee3a83653d/propcache-0.4.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:5558992a00dfd54ccbc64a32726a3357ec93825a418a401f5cc67df0ac5d9e49", size = 204209, upload-time = "2025-10-08T19:48:08.432Z" }, - { url = "https://files.pythonhosted.org/packages/a0/87/492694f76759b15f0467a2a93ab68d32859672b646aa8a04ce4864e7932d/propcache-0.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c9b822a577f560fbd9554812526831712c1436d2c046cedee4c3796d3543b144", size = 197797, upload-time = "2025-10-08T19:48:09.968Z" }, - { url = "https://files.pythonhosted.org/packages/ee/36/66367de3575db1d2d3f3d177432bd14ee577a39d3f5d1b3d5df8afe3b6e2/propcache-0.4.1-cp314-cp314-win32.whl", hash = "sha256:ab4c29b49d560fe48b696cdcb127dd36e0bc2472548f3bf56cc5cb3da2b2984f", size = 38140, upload-time = "2025-10-08T19:48:11.232Z" }, - { url = "https://files.pythonhosted.org/packages/0c/2a/a758b47de253636e1b8aef181c0b4f4f204bf0dd964914fb2af90a95b49b/propcache-0.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:5a103c3eb905fcea0ab98be99c3a9a5ab2de60228aa5aceedc614c0281cf6153", size = 41257, upload-time = "2025-10-08T19:48:12.707Z" }, - { url = "https://files.pythonhosted.org/packages/34/5e/63bd5896c3fec12edcbd6f12508d4890d23c265df28c74b175e1ef9f4f3b/propcache-0.4.1-cp314-cp314-win_arm64.whl", hash = "sha256:74c1fb26515153e482e00177a1ad654721bf9207da8a494a0c05e797ad27b992", size = 38097, upload-time = "2025-10-08T19:48:13.923Z" }, - { url = "https://files.pythonhosted.org/packages/99/85/9ff785d787ccf9bbb3f3106f79884a130951436f58392000231b4c737c80/propcache-0.4.1-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:824e908bce90fb2743bd6b59db36eb4f45cd350a39637c9f73b1c1ea66f5b75f", size = 81455, upload-time = "2025-10-08T19:48:15.16Z" }, - { url = "https://files.pythonhosted.org/packages/90/85/2431c10c8e7ddb1445c1f7c4b54d886e8ad20e3c6307e7218f05922cad67/propcache-0.4.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:c2b5e7db5328427c57c8e8831abda175421b709672f6cfc3d630c3b7e2146393", size = 46372, upload-time = "2025-10-08T19:48:16.424Z" }, - { url = "https://files.pythonhosted.org/packages/01/20/b0972d902472da9bcb683fa595099911f4d2e86e5683bcc45de60dd05dc3/propcache-0.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6f6ff873ed40292cd4969ef5310179afd5db59fdf055897e282485043fc80ad0", size = 48411, upload-time = "2025-10-08T19:48:17.577Z" }, - { url = "https://files.pythonhosted.org/packages/e2/e3/7dc89f4f21e8f99bad3d5ddb3a3389afcf9da4ac69e3deb2dcdc96e74169/propcache-0.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:49a2dc67c154db2c1463013594c458881a069fcf98940e61a0569016a583020a", size = 275712, upload-time = "2025-10-08T19:48:18.901Z" }, - { url = "https://files.pythonhosted.org/packages/20/67/89800c8352489b21a8047c773067644e3897f02ecbbd610f4d46b7f08612/propcache-0.4.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:005f08e6a0529984491e37d8dbc3dd86f84bd78a8ceb5fa9a021f4c48d4984be", size = 273557, upload-time = "2025-10-08T19:48:20.762Z" }, - { url = "https://files.pythonhosted.org/packages/e2/a1/b52b055c766a54ce6d9c16d9aca0cad8059acd9637cdf8aa0222f4a026ef/propcache-0.4.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5c3310452e0d31390da9035c348633b43d7e7feb2e37be252be6da45abd1abcc", size = 280015, upload-time = "2025-10-08T19:48:22.592Z" }, - { url = "https://files.pythonhosted.org/packages/48/c8/33cee30bd890672c63743049f3c9e4be087e6780906bfc3ec58528be59c1/propcache-0.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4c3c70630930447f9ef1caac7728c8ad1c56bc5015338b20fed0d08ea2480b3a", size = 262880, upload-time = "2025-10-08T19:48:23.947Z" }, - { url = "https://files.pythonhosted.org/packages/0c/b1/8f08a143b204b418285c88b83d00edbd61afbc2c6415ffafc8905da7038b/propcache-0.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8e57061305815dfc910a3634dcf584f08168a8836e6999983569f51a8544cd89", size = 260938, upload-time = "2025-10-08T19:48:25.656Z" }, - { url = "https://files.pythonhosted.org/packages/cf/12/96e4664c82ca2f31e1c8dff86afb867348979eb78d3cb8546a680287a1e9/propcache-0.4.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:521a463429ef54143092c11a77e04056dd00636f72e8c45b70aaa3140d639726", size = 247641, upload-time = "2025-10-08T19:48:27.207Z" }, - { url = "https://files.pythonhosted.org/packages/18/ed/e7a9cfca28133386ba52278136d42209d3125db08d0a6395f0cba0c0285c/propcache-0.4.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:120c964da3fdc75e3731aa392527136d4ad35868cc556fd09bb6d09172d9a367", size = 262510, upload-time = "2025-10-08T19:48:28.65Z" }, - { url = "https://files.pythonhosted.org/packages/f5/76/16d8bf65e8845dd62b4e2b57444ab81f07f40caa5652b8969b87ddcf2ef6/propcache-0.4.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:d8f353eb14ee3441ee844ade4277d560cdd68288838673273b978e3d6d2c8f36", size = 263161, upload-time = "2025-10-08T19:48:30.133Z" }, - { url = "https://files.pythonhosted.org/packages/e7/70/c99e9edb5d91d5ad8a49fa3c1e8285ba64f1476782fed10ab251ff413ba1/propcache-0.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ab2943be7c652f09638800905ee1bab2c544e537edb57d527997a24c13dc1455", size = 257393, upload-time = "2025-10-08T19:48:31.567Z" }, - { url = "https://files.pythonhosted.org/packages/08/02/87b25304249a35c0915d236575bc3574a323f60b47939a2262b77632a3ee/propcache-0.4.1-cp314-cp314t-win32.whl", hash = "sha256:05674a162469f31358c30bcaa8883cb7829fa3110bf9c0991fe27d7896c42d85", size = 42546, upload-time = "2025-10-08T19:48:32.872Z" }, - { url = "https://files.pythonhosted.org/packages/cb/ef/3c6ecf8b317aa982f309835e8f96987466123c6e596646d4e6a1dfcd080f/propcache-0.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:990f6b3e2a27d683cb7602ed6c86f15ee6b43b1194736f9baaeb93d0016633b1", size = 46259, upload-time = "2025-10-08T19:48:34.226Z" }, - { url = "https://files.pythonhosted.org/packages/c4/2d/346e946d4951f37eca1e4f55be0f0174c52cd70720f84029b02f296f4a38/propcache-0.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:ecef2343af4cc68e05131e45024ba34f6095821988a9d0a02aa7c73fcc448aa9", size = 40428, upload-time = "2025-10-08T19:48:35.441Z" }, - { url = "https://files.pythonhosted.org/packages/5b/5a/bc7b4a4ef808fa59a816c17b20c4bef6884daebbdf627ff2a161da67da19/propcache-0.4.1-py3-none-any.whl", hash = "sha256:af2a6052aeb6cf17d3e46ee169099044fd8224cbaf75c76a2ef596e8163e2237", size = 13305, upload-time = "2025-10-08T19:49:00.792Z" }, + { url = "https://files.pythonhosted.org/packages/bc/91/1e3a34881a88697a7354ffd177e8746e97a722e5e8db101544b47e84afb1/protobuf-6.33.2-cp310-abi3-win32.whl", hash = "sha256:87eb388bd2d0f78febd8f4c8779c79247b26a5befad525008e49a6955787ff3d", size = 425603, upload-time = "2025-12-06T00:17:41.114Z" }, + { url = "https://files.pythonhosted.org/packages/64/20/4d50191997e917ae13ad0a235c8b42d8c1ab9c3e6fd455ca16d416944355/protobuf-6.33.2-cp310-abi3-win_amd64.whl", hash = "sha256:fc2a0e8b05b180e5fc0dd1559fe8ebdae21a27e81ac77728fb6c42b12c7419b4", size = 436930, upload-time = "2025-12-06T00:17:43.278Z" }, + { url = "https://files.pythonhosted.org/packages/b2/ca/7e485da88ba45c920fb3f50ae78de29ab925d9e54ef0de678306abfbb497/protobuf-6.33.2-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:d9b19771ca75935b3a4422957bc518b0cecb978b31d1dd12037b088f6bcc0e43", size = 427621, upload-time = "2025-12-06T00:17:44.445Z" }, + { url = "https://files.pythonhosted.org/packages/7d/4f/f743761e41d3b2b2566748eb76bbff2b43e14d5fcab694f494a16458b05f/protobuf-6.33.2-cp39-abi3-manylinux2014_aarch64.whl", hash = "sha256:b5d3b5625192214066d99b2b605f5783483575656784de223f00a8d00754fc0e", size = 324460, upload-time = "2025-12-06T00:17:45.678Z" }, + { url = "https://files.pythonhosted.org/packages/b1/fa/26468d00a92824020f6f2090d827078c09c9c587e34cbfd2d0c7911221f8/protobuf-6.33.2-cp39-abi3-manylinux2014_s390x.whl", hash = "sha256:8cd7640aee0b7828b6d03ae518b5b4806fdfc1afe8de82f79c3454f8aef29872", size = 339168, upload-time = "2025-12-06T00:17:46.813Z" }, + { url = "https://files.pythonhosted.org/packages/56/13/333b8f421738f149d4fe5e49553bc2a2ab75235486259f689b4b91f96cec/protobuf-6.33.2-cp39-abi3-manylinux2014_x86_64.whl", hash = "sha256:1f8017c48c07ec5859106533b682260ba3d7c5567b1ca1f24297ce03384d1b4f", size = 323270, upload-time = "2025-12-06T00:17:48.253Z" }, + { url = "https://files.pythonhosted.org/packages/0e/15/4f02896cc3df04fc465010a4c6a0cd89810f54617a32a70ef531ed75d61c/protobuf-6.33.2-py3-none-any.whl", hash = "sha256:7636aad9bb01768870266de5dc009de2d1b936771b38a793f73cbbf279c91c5c", size = 170501, upload-time = "2025-12-06T00:17:52.211Z" }, ] [[package]] -name = "protobuf" -version = "6.33.1" +name = "protoc-gen-connect-python" +version = "0.6.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0a/03/a1440979a3f74f16cab3b75b0da1a1a7f922d56a8ddea96092391998edc0/protobuf-6.33.1.tar.gz", hash = "sha256:97f65757e8d09870de6fd973aeddb92f85435607235d20b2dfed93405d00c85b", size = 443432, upload-time = "2025-11-13T16:44:18.895Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/06/f1/446a9bbd2c60772ca36556bac8bfde40eceb28d9cc7838755bc41e001d8f/protobuf-6.33.1-cp310-abi3-win32.whl", hash = "sha256:f8d3fdbc966aaab1d05046d0240dd94d40f2a8c62856d41eaa141ff64a79de6b", size = 425593, upload-time = "2025-11-13T16:44:06.275Z" }, - { url = "https://files.pythonhosted.org/packages/a6/79/8780a378c650e3df849b73de8b13cf5412f521ca2ff9b78a45c247029440/protobuf-6.33.1-cp310-abi3-win_amd64.whl", hash = "sha256:923aa6d27a92bf44394f6abf7ea0500f38769d4b07f4be41cb52bd8b1123b9ed", size = 436883, upload-time = "2025-11-13T16:44:09.222Z" }, - { url = "https://files.pythonhosted.org/packages/cd/93/26213ff72b103ae55bb0d73e7fb91ea570ef407c3ab4fd2f1f27cac16044/protobuf-6.33.1-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:fe34575f2bdde76ac429ec7b570235bf0c788883e70aee90068e9981806f2490", size = 427522, upload-time = "2025-11-13T16:44:10.475Z" }, - { url = "https://files.pythonhosted.org/packages/c2/32/df4a35247923393aa6b887c3b3244a8c941c32a25681775f96e2b418f90e/protobuf-6.33.1-cp39-abi3-manylinux2014_aarch64.whl", hash = "sha256:f8adba2e44cde2d7618996b3fc02341f03f5bc3f2748be72dc7b063319276178", size = 324445, upload-time = "2025-11-13T16:44:11.869Z" }, - { url = "https://files.pythonhosted.org/packages/8e/d0/d796e419e2ec93d2f3fa44888861c3f88f722cde02b7c3488fcc6a166820/protobuf-6.33.1-cp39-abi3-manylinux2014_s390x.whl", hash = "sha256:0f4cf01222c0d959c2b399142deb526de420be8236f22c71356e2a544e153c53", size = 339161, upload-time = "2025-11-13T16:44:12.778Z" }, - { url = "https://files.pythonhosted.org/packages/1d/2a/3c5f05a4af06649547027d288747f68525755de692a26a7720dced3652c0/protobuf-6.33.1-cp39-abi3-manylinux2014_x86_64.whl", hash = "sha256:8fd7d5e0eb08cd5b87fd3df49bc193f5cfd778701f47e11d127d0afc6c39f1d1", size = 323171, upload-time = "2025-11-13T16:44:14.035Z" }, - { url = "https://files.pythonhosted.org/packages/08/b4/46310463b4f6ceef310f8348786f3cff181cea671578e3d9743ba61a459e/protobuf-6.33.1-py3-none-any.whl", hash = "sha256:d595a9fd694fdeb061a62fbe10eb039cc1e444df81ec9bb70c7fc59ebcb1eafa", size = 170477, upload-time = "2025-11-13T16:44:17.633Z" }, + { url = "https://files.pythonhosted.org/packages/8f/3a/721ca3c27870596240b0d13dab40145b5de68147e4fdcdf9afc7684e905d/protoc_gen_connect_python-0.6.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:f7395905489de4af43e001b0439aa10680d35c023c9e61e9c7df08f5d5b4a41b", size = 1827154, upload-time = "2025-12-08T04:45:52.917Z" }, + { url = "https://files.pythonhosted.org/packages/6e/92/45e07f3060a458809530c8dc48fa3a291e35ecc3560759b26a5aa371c4cb/protoc_gen_connect_python-0.6.0-py3-none-macosx_11_0_x86_64.whl", hash = "sha256:dd0673917cb357e3796d1f088bf5aba5cbc39ef785e68aa1c69d8663ff476be5", size = 1951153, upload-time = "2025-12-08T04:45:54.314Z" }, + { url = "https://files.pythonhosted.org/packages/48/63/3d0b1ced6d0341afa3c7338eed46e4a070233d83577d7368a5acacce0781/protoc_gen_connect_python-0.6.0-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:53fcb349100d3d1c1f297d0f3391daf25d75adaea0907acbfd8fa88b1ce6b028", size = 1761360, upload-time = "2025-12-08T04:45:55.861Z" }, + { url = "https://files.pythonhosted.org/packages/11/6a/b123d1dfd4aecbc52f7ee325cddfa3ef972250e064365c1b10edf48a5736/protoc_gen_connect_python-0.6.0-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.musllinux_1_1_x86_64.whl", hash = "sha256:461d3c6a4ed73120404e65bd299dc4ddeea95a22abe08165119f0eae7c9abc9b", size = 1928744, upload-time = "2025-12-08T04:45:57.557Z" }, + { url = "https://files.pythonhosted.org/packages/f1/d9/de885f34566df97ecc9ac782d11ff923ebf250c01dc9cf0159bfb694b094/protoc_gen_connect_python-0.6.0-py3-none-win_amd64.whl", hash = "sha256:cc02f64587bbb7ddd5c22686af1b521886121ffd97bc82f7dfec96564de44ca9", size = 1988083, upload-time = "2025-12-08T04:45:58.867Z" }, + { url = "https://files.pythonhosted.org/packages/d4/1a/c3d7bf5eda1c0724f219dcc16bd219b6fcc41d3ab846e3a8af2f94b1a81f/protoc_gen_connect_python-0.6.0-py3-none-win_arm64.whl", hash = "sha256:1b89eff4e2289ac72b682a2637dc9cb60647a9b16fa6c56a6bdf229545f5bac8", size = 1793631, upload-time = "2025-12-08T04:46:00.401Z" }, ] [[package]] @@ -1056,18 +530,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/2d/ac/bd8961859d8f3f81530465d2ce9b165627e961c00348939009bac2700cc6/protoc_gen_openapiv2-0.0.1-py3-none-any.whl", hash = "sha256:18090c8be3877c438e7da0f7eb7cace45a9a210306bca4707708dbad367857be", size = 7883, upload-time = "2022-12-02T01:40:55.244Z" }, ] -[[package]] -name = "protogen" -version = "0.3.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "protobuf" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/24/fc/2e68784a06e46fe799dd375b732c13f99559a2c3b2164100607ec8b5cccf/protogen-0.3.1.tar.gz", hash = "sha256:1e55405f6c94476c45c400b069dbdb0274f065e3109fee28122e96dbba075dcd", size = 23018, upload-time = "2023-11-20T15:34:48.288Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/8d/a0/c3f3a2e2fa866547d82190ec5c0cd55580bc29c7894221bd793003a578a1/protogen-0.3.1-py3-none-any.whl", hash = "sha256:65b60b284d20ee4899d515b1959882d8c7504b271552de36f4ebfe77f6b07331", size = 21425, upload-time = "2023-11-20T15:34:45.958Z" }, -] - [[package]] name = "pycparser" version = "2.23" @@ -1079,7 +541,7 @@ wheels = [ [[package]] name = "pydantic" -version = "2.12.4" +version = "2.12.5" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "annotated-types" }, @@ -1087,9 +549,9 @@ dependencies = [ { name = "typing-extensions" }, { name = "typing-inspection" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/96/ad/a17bc283d7d81837c061c49e3eaa27a45991759a1b7eae1031921c6bd924/pydantic-2.12.4.tar.gz", hash = "sha256:0f8cb9555000a4b5b617f66bfd2566264c4984b27589d3b845685983e8ea85ac", size = 821038, upload-time = "2025-11-05T10:50:08.59Z" } +sdist = { url = "https://files.pythonhosted.org/packages/69/44/36f1a6e523abc58ae5f928898e4aca2e0ea509b5aa6f6f392a5d882be928/pydantic-2.12.5.tar.gz", hash = "sha256:4d351024c75c0f085a9febbb665ce8c0c6ec5d30e903bdb6394b7ede26aebb49", size = 821591, upload-time = "2025-11-26T15:11:46.471Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/82/2f/e68750da9b04856e2a7ec56fc6f034a5a79775e9b9a81882252789873798/pydantic-2.12.4-py3-none-any.whl", hash = "sha256:92d3d202a745d46f9be6df459ac5a064fdaa3c1c4cd8adcfa332ccf3c05f871e", size = 463400, upload-time = "2025-11-05T10:50:06.732Z" }, + { url = "https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl", hash = "sha256:e561593fccf61e8a20fc46dfc2dfe075b8be7d0188df33f221ad1f0139180f9d", size = 463580, upload-time = "2025-11-26T15:11:44.605Z" }, ] [[package]] @@ -1244,7 +706,7 @@ wheels = [ [[package]] name = "pytest" -version = "9.0.1" +version = "9.0.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, @@ -1255,9 +717,9 @@ dependencies = [ { name = "pygments" }, { name = "tomli", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/07/56/f013048ac4bc4c1d9be45afd4ab209ea62822fb1598f40687e6bf45dcea4/pytest-9.0.1.tar.gz", hash = "sha256:3e9c069ea73583e255c3b21cf46b8d3c56f6e3a1a8f6da94ccb0fcf57b9d73c8", size = 1564125, upload-time = "2025-11-12T13:05:09.333Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d1/db/7ef3487e0fb0049ddb5ce41d3a49c235bf9ad299b6a25d5780a89f19230f/pytest-9.0.2.tar.gz", hash = "sha256:75186651a92bd89611d1d9fc20f0b4345fd827c41ccd5c299a868a05d70edf11", size = 1568901, upload-time = "2025-12-06T21:30:51.014Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0b/8b/6300fb80f858cda1c51ffa17075df5d846757081d11ab4aa35cef9e6258b/pytest-9.0.1-py3-none-any.whl", hash = "sha256:67be0030d194df2dfa7b556f2e56fb3c3315bd5c8822c6951162b92b32ce7dad", size = 373668, upload-time = "2025-11-12T13:05:07.379Z" }, + { url = "https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl", hash = "sha256:711ffd45bf766d5264d487b917733b453d917afd2b0ad65223959f59089f875b", size = 374801, upload-time = "2025-12-06T21:30:49.154Z" }, ] [[package]] @@ -1283,28 +745,28 @@ wheels = [ [[package]] name = "ruff" -version = "0.14.5" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/82/fa/fbb67a5780ae0f704876cb8ac92d6d76da41da4dc72b7ed3565ab18f2f52/ruff-0.14.5.tar.gz", hash = "sha256:8d3b48d7d8aad423d3137af7ab6c8b1e38e4de104800f0d596990f6ada1a9fc1", size = 5615944, upload-time = "2025-11-13T19:58:51.155Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/68/31/c07e9c535248d10836a94e4f4e8c5a31a1beed6f169b31405b227872d4f4/ruff-0.14.5-py3-none-linux_armv6l.whl", hash = "sha256:f3b8248123b586de44a8018bcc9fefe31d23dda57a34e6f0e1e53bd51fd63594", size = 13171630, upload-time = "2025-11-13T19:57:54.894Z" }, - { url = "https://files.pythonhosted.org/packages/8e/5c/283c62516dca697cd604c2796d1487396b7a436b2f0ecc3fd412aca470e0/ruff-0.14.5-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:f7a75236570318c7a30edd7f5491945f0169de738d945ca8784500b517163a72", size = 13413925, upload-time = "2025-11-13T19:57:59.181Z" }, - { url = "https://files.pythonhosted.org/packages/b6/f3/aa319f4afc22cb6fcba2b9cdfc0f03bbf747e59ab7a8c5e90173857a1361/ruff-0.14.5-py3-none-macosx_11_0_arm64.whl", hash = "sha256:6d146132d1ee115f8802356a2dc9a634dbf58184c51bff21f313e8cd1c74899a", size = 12574040, upload-time = "2025-11-13T19:58:02.056Z" }, - { url = "https://files.pythonhosted.org/packages/f9/7f/cb5845fcc7c7e88ed57f58670189fc2ff517fe2134c3821e77e29fd3b0c8/ruff-0.14.5-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2380596653dcd20b057794d55681571a257a42327da8894b93bbd6111aa801f", size = 13009755, upload-time = "2025-11-13T19:58:05.172Z" }, - { url = "https://files.pythonhosted.org/packages/21/d2/bcbedbb6bcb9253085981730687ddc0cc7b2e18e8dc13cf4453de905d7a0/ruff-0.14.5-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2d1fa985a42b1f075a098fa1ab9d472b712bdb17ad87a8ec86e45e7fa6273e68", size = 12937641, upload-time = "2025-11-13T19:58:08.345Z" }, - { url = "https://files.pythonhosted.org/packages/a4/58/e25de28a572bdd60ffc6bb71fc7fd25a94ec6a076942e372437649cbb02a/ruff-0.14.5-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88f0770d42b7fa02bbefddde15d235ca3aa24e2f0137388cc15b2dcbb1f7c7a7", size = 13610854, upload-time = "2025-11-13T19:58:11.419Z" }, - { url = "https://files.pythonhosted.org/packages/7d/24/43bb3fd23ecee9861970978ea1a7a63e12a204d319248a7e8af539984280/ruff-0.14.5-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:3676cb02b9061fee7294661071c4709fa21419ea9176087cb77e64410926eb78", size = 15061088, upload-time = "2025-11-13T19:58:14.551Z" }, - { url = "https://files.pythonhosted.org/packages/23/44/a022f288d61c2f8c8645b24c364b719aee293ffc7d633a2ca4d116b9c716/ruff-0.14.5-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b595bedf6bc9cab647c4a173a61acf4f1ac5f2b545203ba82f30fcb10b0318fb", size = 14734717, upload-time = "2025-11-13T19:58:17.518Z" }, - { url = "https://files.pythonhosted.org/packages/58/81/5c6ba44de7e44c91f68073e0658109d8373b0590940efe5bd7753a2585a3/ruff-0.14.5-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f55382725ad0bdb2e8ee2babcbbfb16f124f5a59496a2f6a46f1d9d99d93e6e2", size = 14028812, upload-time = "2025-11-13T19:58:20.533Z" }, - { url = "https://files.pythonhosted.org/packages/ad/ef/41a8b60f8462cb320f68615b00299ebb12660097c952c600c762078420f8/ruff-0.14.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7497d19dce23976bdaca24345ae131a1d38dcfe1b0850ad8e9e6e4fa321a6e19", size = 13825656, upload-time = "2025-11-13T19:58:23.345Z" }, - { url = "https://files.pythonhosted.org/packages/7c/00/207e5de737fdb59b39eb1fac806904fe05681981b46d6a6db9468501062e/ruff-0.14.5-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:410e781f1122d6be4f446981dd479470af86537fb0b8857f27a6e872f65a38e4", size = 13959922, upload-time = "2025-11-13T19:58:26.537Z" }, - { url = "https://files.pythonhosted.org/packages/bc/7e/fa1f5c2776db4be405040293618846a2dece5c70b050874c2d1f10f24776/ruff-0.14.5-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:c01be527ef4c91a6d55e53b337bfe2c0f82af024cc1a33c44792d6844e2331e1", size = 12932501, upload-time = "2025-11-13T19:58:29.822Z" }, - { url = "https://files.pythonhosted.org/packages/67/d8/d86bf784d693a764b59479a6bbdc9515ae42c340a5dc5ab1dabef847bfaa/ruff-0.14.5-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:f66e9bb762e68d66e48550b59c74314168ebb46199886c5c5aa0b0fbcc81b151", size = 12927319, upload-time = "2025-11-13T19:58:32.923Z" }, - { url = "https://files.pythonhosted.org/packages/ac/de/ee0b304d450ae007ce0cb3e455fe24fbcaaedae4ebaad6c23831c6663651/ruff-0.14.5-py3-none-musllinux_1_2_i686.whl", hash = "sha256:d93be8f1fa01022337f1f8f3bcaa7ffee2d0b03f00922c45c2207954f351f465", size = 13206209, upload-time = "2025-11-13T19:58:35.952Z" }, - { url = "https://files.pythonhosted.org/packages/33/aa/193ca7e3a92d74f17d9d5771a765965d2cf42c86e6f0fd95b13969115723/ruff-0.14.5-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:c135d4b681f7401fe0e7312017e41aba9b3160861105726b76cfa14bc25aa367", size = 13953709, upload-time = "2025-11-13T19:58:39.002Z" }, - { url = "https://files.pythonhosted.org/packages/cc/f1/7119e42aa1d3bf036ffc9478885c2e248812b7de9abea4eae89163d2929d/ruff-0.14.5-py3-none-win32.whl", hash = "sha256:c83642e6fccfb6dea8b785eb9f456800dcd6a63f362238af5fc0c83d027dd08b", size = 12925808, upload-time = "2025-11-13T19:58:42.779Z" }, - { url = "https://files.pythonhosted.org/packages/3b/9d/7c0a255d21e0912114784e4a96bf62af0618e2190cae468cd82b13625ad2/ruff-0.14.5-py3-none-win_amd64.whl", hash = "sha256:9d55d7af7166f143c94eae1db3312f9ea8f95a4defef1979ed516dbb38c27621", size = 14331546, upload-time = "2025-11-13T19:58:45.691Z" }, - { url = "https://files.pythonhosted.org/packages/e5/80/69756670caedcf3b9be597a6e12276a6cf6197076eb62aad0c608f8efce0/ruff-0.14.5-py3-none-win_arm64.whl", hash = "sha256:4b700459d4649e2594b31f20a9de33bc7c19976d4746d8d0798ad959621d64a4", size = 13433331, upload-time = "2025-11-13T19:58:48.434Z" }, +version = "0.14.10" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/57/08/52232a877978dd8f9cf2aeddce3e611b40a63287dfca29b6b8da791f5e8d/ruff-0.14.10.tar.gz", hash = "sha256:9a2e830f075d1a42cd28420d7809ace390832a490ed0966fe373ba288e77aaf4", size = 5859763, upload-time = "2025-12-18T19:28:57.98Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/60/01/933704d69f3f05ee16ef11406b78881733c186fe14b6a46b05cfcaf6d3b2/ruff-0.14.10-py3-none-linux_armv6l.whl", hash = "sha256:7a3ce585f2ade3e1f29ec1b92df13e3da262178df8c8bdf876f48fa0e8316c49", size = 13527080, upload-time = "2025-12-18T19:29:25.642Z" }, + { url = "https://files.pythonhosted.org/packages/df/58/a0349197a7dfa603ffb7f5b0470391efa79ddc327c1e29c4851e85b09cc5/ruff-0.14.10-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:674f9be9372907f7257c51f1d4fc902cb7cf014b9980152b802794317941f08f", size = 13797320, upload-time = "2025-12-18T19:29:02.571Z" }, + { url = "https://files.pythonhosted.org/packages/7b/82/36be59f00a6082e38c23536df4e71cdbc6af8d7c707eade97fcad5c98235/ruff-0.14.10-py3-none-macosx_11_0_arm64.whl", hash = "sha256:d85713d522348837ef9df8efca33ccb8bd6fcfc86a2cde3ccb4bc9d28a18003d", size = 12918434, upload-time = "2025-12-18T19:28:51.202Z" }, + { url = "https://files.pythonhosted.org/packages/a6/00/45c62a7f7e34da92a25804f813ebe05c88aa9e0c25e5cb5a7d23dd7450e3/ruff-0.14.10-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6987ebe0501ae4f4308d7d24e2d0fe3d7a98430f5adfd0f1fead050a740a3a77", size = 13371961, upload-time = "2025-12-18T19:29:04.991Z" }, + { url = "https://files.pythonhosted.org/packages/40/31/a5906d60f0405f7e57045a70f2d57084a93ca7425f22e1d66904769d1628/ruff-0.14.10-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:16a01dfb7b9e4eee556fbfd5392806b1b8550c9b4a9f6acd3dbe6812b193c70a", size = 13275629, upload-time = "2025-12-18T19:29:21.381Z" }, + { url = "https://files.pythonhosted.org/packages/3e/60/61c0087df21894cf9d928dc04bcd4fb10e8b2e8dca7b1a276ba2155b2002/ruff-0.14.10-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7165d31a925b7a294465fa81be8c12a0e9b60fb02bf177e79067c867e71f8b1f", size = 14029234, upload-time = "2025-12-18T19:29:00.132Z" }, + { url = "https://files.pythonhosted.org/packages/44/84/77d911bee3b92348b6e5dab5a0c898d87084ea03ac5dc708f46d88407def/ruff-0.14.10-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:c561695675b972effb0c0a45db233f2c816ff3da8dcfbe7dfc7eed625f218935", size = 15449890, upload-time = "2025-12-18T19:28:53.573Z" }, + { url = "https://files.pythonhosted.org/packages/e9/36/480206eaefa24a7ec321582dda580443a8f0671fdbf6b1c80e9c3e93a16a/ruff-0.14.10-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4bb98fcbbc61725968893682fd4df8966a34611239c9fd07a1f6a07e7103d08e", size = 15123172, upload-time = "2025-12-18T19:29:23.453Z" }, + { url = "https://files.pythonhosted.org/packages/5c/38/68e414156015ba80cef5473d57919d27dfb62ec804b96180bafdeaf0e090/ruff-0.14.10-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f24b47993a9d8cb858429e97bdf8544c78029f09b520af615c1d261bf827001d", size = 14460260, upload-time = "2025-12-18T19:29:27.808Z" }, + { url = "https://files.pythonhosted.org/packages/b3/19/9e050c0dca8aba824d67cc0db69fb459c28d8cd3f6855b1405b3f29cc91d/ruff-0.14.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59aabd2e2c4fd614d2862e7939c34a532c04f1084476d6833dddef4afab87e9f", size = 14229978, upload-time = "2025-12-18T19:29:11.32Z" }, + { url = "https://files.pythonhosted.org/packages/51/eb/e8dd1dd6e05b9e695aa9dd420f4577debdd0f87a5ff2fedda33c09e9be8c/ruff-0.14.10-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:213db2b2e44be8625002dbea33bb9c60c66ea2c07c084a00d55732689d697a7f", size = 14338036, upload-time = "2025-12-18T19:29:09.184Z" }, + { url = "https://files.pythonhosted.org/packages/6a/12/f3e3a505db7c19303b70af370d137795fcfec136d670d5de5391e295c134/ruff-0.14.10-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:b914c40ab64865a17a9a5b67911d14df72346a634527240039eb3bd650e5979d", size = 13264051, upload-time = "2025-12-18T19:29:13.431Z" }, + { url = "https://files.pythonhosted.org/packages/08/64/8c3a47eaccfef8ac20e0484e68e0772013eb85802f8a9f7603ca751eb166/ruff-0.14.10-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:1484983559f026788e3a5c07c81ef7d1e97c1c78ed03041a18f75df104c45405", size = 13283998, upload-time = "2025-12-18T19:29:06.994Z" }, + { url = "https://files.pythonhosted.org/packages/12/84/534a5506f4074e5cc0529e5cd96cfc01bb480e460c7edf5af70d2bcae55e/ruff-0.14.10-py3-none-musllinux_1_2_i686.whl", hash = "sha256:c70427132db492d25f982fffc8d6c7535cc2fd2c83fc8888f05caaa248521e60", size = 13601891, upload-time = "2025-12-18T19:28:55.811Z" }, + { url = "https://files.pythonhosted.org/packages/0d/1e/14c916087d8598917dbad9b2921d340f7884824ad6e9c55de948a93b106d/ruff-0.14.10-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:5bcf45b681e9f1ee6445d317ce1fa9d6cba9a6049542d1c3d5b5958986be8830", size = 14336660, upload-time = "2025-12-18T19:29:16.531Z" }, + { url = "https://files.pythonhosted.org/packages/f2/1c/d7b67ab43f30013b47c12b42d1acd354c195351a3f7a1d67f59e54227ede/ruff-0.14.10-py3-none-win32.whl", hash = "sha256:104c49fc7ab73f3f3a758039adea978869a918f31b73280db175b43a2d9b51d6", size = 13196187, upload-time = "2025-12-18T19:29:19.006Z" }, + { url = "https://files.pythonhosted.org/packages/fb/9c/896c862e13886fae2af961bef3e6312db9ebc6adc2b156fe95e615dee8c1/ruff-0.14.10-py3-none-win_amd64.whl", hash = "sha256:466297bd73638c6bdf06485683e812db1c00c7ac96d4ddd0294a338c62fdc154", size = 14661283, upload-time = "2025-12-18T19:29:30.16Z" }, + { url = "https://files.pythonhosted.org/packages/74/31/b0e29d572670dca3674eeee78e418f20bdf97fa8aa9ea71380885e175ca0/ruff-0.14.10-py3-none-win_arm64.whl", hash = "sha256:e51d046cf6dda98a4633b8a8a771451107413b0f07183b2bef03f075599e44e6", size = 13729839, upload-time = "2025-12-18T19:28:48.636Z" }, ] [[package]] @@ -1316,15 +778,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a3/dc/17031897dae0efacfea57dfd3a82fdd2a2aeb58e0ff71b77b87e44edc772/setuptools-80.9.0-py3-none-any.whl", hash = "sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922", size = 1201486, upload-time = "2025-05-27T00:56:49.664Z" }, ] -[[package]] -name = "sniffio" -version = "1.3.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372, upload-time = "2024-02-25T23:20:04.057Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235, upload-time = "2024-02-25T23:20:01.196Z" }, -] - [[package]] name = "tomli" version = "2.3.0" @@ -1394,138 +847,3 @@ sdist = { url = "https://files.pythonhosted.org/packages/55/e3/70399cb7dd41c10ac wheels = [ { url = "https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7", size = 14611, upload-time = "2025-10-01T02:14:40.154Z" }, ] - -[[package]] -name = "urllib3" -version = "2.5.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/15/22/9ee70a2574a4f4599c47dd506532914ce044817c7752a79b6a51286319bc/urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760", size = 393185, upload-time = "2025-06-18T14:07:41.644Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795, upload-time = "2025-06-18T14:07:40.39Z" }, -] - -[[package]] -name = "yarl" -version = "1.22.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "idna" }, - { name = "multidict" }, - { name = "propcache" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/57/63/0c6ebca57330cd313f6102b16dd57ffaf3ec4c83403dcb45dbd15c6f3ea1/yarl-1.22.0.tar.gz", hash = "sha256:bebf8557577d4401ba8bd9ff33906f1376c877aa78d1fe216ad01b4d6745af71", size = 187169, upload-time = "2025-10-06T14:12:55.963Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/43/a2204825342f37c337f5edb6637040fa14e365b2fcc2346960201d457579/yarl-1.22.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:c7bd6683587567e5a49ee6e336e0612bec8329be1b7d4c8af5687dcdeb67ee1e", size = 140517, upload-time = "2025-10-06T14:08:42.494Z" }, - { url = "https://files.pythonhosted.org/packages/44/6f/674f3e6f02266428c56f704cd2501c22f78e8b2eeb23f153117cc86fb28a/yarl-1.22.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5cdac20da754f3a723cceea5b3448e1a2074866406adeb4ef35b469d089adb8f", size = 93495, upload-time = "2025-10-06T14:08:46.2Z" }, - { url = "https://files.pythonhosted.org/packages/b8/12/5b274d8a0f30c07b91b2f02cba69152600b47830fcfb465c108880fcee9c/yarl-1.22.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:07a524d84df0c10f41e3ee918846e1974aba4ec017f990dc735aad487a0bdfdf", size = 94400, upload-time = "2025-10-06T14:08:47.855Z" }, - { url = "https://files.pythonhosted.org/packages/e2/7f/df1b6949b1fa1aa9ff6de6e2631876ad4b73c4437822026e85d8acb56bb1/yarl-1.22.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e1b329cb8146d7b736677a2440e422eadd775d1806a81db2d4cded80a48efc1a", size = 347545, upload-time = "2025-10-06T14:08:49.683Z" }, - { url = "https://files.pythonhosted.org/packages/84/09/f92ed93bd6cd77872ab6c3462df45ca45cd058d8f1d0c9b4f54c1704429f/yarl-1.22.0-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:75976c6945d85dbb9ee6308cd7ff7b1fb9409380c82d6119bd778d8fcfe2931c", size = 319598, upload-time = "2025-10-06T14:08:51.215Z" }, - { url = "https://files.pythonhosted.org/packages/c3/97/ac3f3feae7d522cf7ccec3d340bb0b2b61c56cb9767923df62a135092c6b/yarl-1.22.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:80ddf7a5f8c86cb3eb4bc9028b07bbbf1f08a96c5c0bc1244be5e8fefcb94147", size = 363893, upload-time = "2025-10-06T14:08:53.144Z" }, - { url = "https://files.pythonhosted.org/packages/06/49/f3219097403b9c84a4d079b1d7bda62dd9b86d0d6e4428c02d46ab2c77fc/yarl-1.22.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d332fc2e3c94dad927f2112395772a4e4fedbcf8f80efc21ed7cdfae4d574fdb", size = 371240, upload-time = "2025-10-06T14:08:55.036Z" }, - { url = "https://files.pythonhosted.org/packages/35/9f/06b765d45c0e44e8ecf0fe15c9eacbbde342bb5b7561c46944f107bfb6c3/yarl-1.22.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0cf71bf877efeac18b38d3930594c0948c82b64547c1cf420ba48722fe5509f6", size = 346965, upload-time = "2025-10-06T14:08:56.722Z" }, - { url = "https://files.pythonhosted.org/packages/c5/69/599e7cea8d0fcb1694323b0db0dda317fa3162f7b90166faddecf532166f/yarl-1.22.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:663e1cadaddae26be034a6ab6072449a8426ddb03d500f43daf952b74553bba0", size = 342026, upload-time = "2025-10-06T14:08:58.563Z" }, - { url = "https://files.pythonhosted.org/packages/95/6f/9dfd12c8bc90fea9eab39832ee32ea48f8e53d1256252a77b710c065c89f/yarl-1.22.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:6dcbb0829c671f305be48a7227918cfcd11276c2d637a8033a99a02b67bf9eda", size = 335637, upload-time = "2025-10-06T14:09:00.506Z" }, - { url = "https://files.pythonhosted.org/packages/57/2e/34c5b4eb9b07e16e873db5b182c71e5f06f9b5af388cdaa97736d79dd9a6/yarl-1.22.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:f0d97c18dfd9a9af4490631905a3f131a8e4c9e80a39353919e2cfed8f00aedc", size = 359082, upload-time = "2025-10-06T14:09:01.936Z" }, - { url = "https://files.pythonhosted.org/packages/31/71/fa7e10fb772d273aa1f096ecb8ab8594117822f683bab7d2c5a89914c92a/yarl-1.22.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:437840083abe022c978470b942ff832c3940b2ad3734d424b7eaffcd07f76737", size = 357811, upload-time = "2025-10-06T14:09:03.445Z" }, - { url = "https://files.pythonhosted.org/packages/26/da/11374c04e8e1184a6a03cf9c8f5688d3e5cec83ed6f31ad3481b3207f709/yarl-1.22.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:a899cbd98dce6f5d8de1aad31cb712ec0a530abc0a86bd6edaa47c1090138467", size = 351223, upload-time = "2025-10-06T14:09:05.401Z" }, - { url = "https://files.pythonhosted.org/packages/82/8f/e2d01f161b0c034a30410e375e191a5d27608c1f8693bab1a08b089ca096/yarl-1.22.0-cp310-cp310-win32.whl", hash = "sha256:595697f68bd1f0c1c159fcb97b661fc9c3f5db46498043555d04805430e79bea", size = 82118, upload-time = "2025-10-06T14:09:11.148Z" }, - { url = "https://files.pythonhosted.org/packages/62/46/94c76196642dbeae634c7a61ba3da88cd77bed875bf6e4a8bed037505aa6/yarl-1.22.0-cp310-cp310-win_amd64.whl", hash = "sha256:cb95a9b1adaa48e41815a55ae740cfda005758104049a640a398120bf02515ca", size = 86852, upload-time = "2025-10-06T14:09:12.958Z" }, - { url = "https://files.pythonhosted.org/packages/af/af/7df4f179d3b1a6dcb9a4bd2ffbc67642746fcafdb62580e66876ce83fff4/yarl-1.22.0-cp310-cp310-win_arm64.whl", hash = "sha256:b85b982afde6df99ecc996990d4ad7ccbdbb70e2a4ba4de0aecde5922ba98a0b", size = 82012, upload-time = "2025-10-06T14:09:14.664Z" }, - { url = "https://files.pythonhosted.org/packages/4d/27/5ab13fc84c76a0250afd3d26d5936349a35be56ce5785447d6c423b26d92/yarl-1.22.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:1ab72135b1f2db3fed3997d7e7dc1b80573c67138023852b6efb336a5eae6511", size = 141607, upload-time = "2025-10-06T14:09:16.298Z" }, - { url = "https://files.pythonhosted.org/packages/6a/a1/d065d51d02dc02ce81501d476b9ed2229d9a990818332242a882d5d60340/yarl-1.22.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:669930400e375570189492dc8d8341301578e8493aec04aebc20d4717f899dd6", size = 94027, upload-time = "2025-10-06T14:09:17.786Z" }, - { url = "https://files.pythonhosted.org/packages/c1/da/8da9f6a53f67b5106ffe902c6fa0164e10398d4e150d85838b82f424072a/yarl-1.22.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:792a2af6d58177ef7c19cbf0097aba92ca1b9cb3ffdd9c7470e156c8f9b5e028", size = 94963, upload-time = "2025-10-06T14:09:19.662Z" }, - { url = "https://files.pythonhosted.org/packages/68/fe/2c1f674960c376e29cb0bec1249b117d11738db92a6ccc4a530b972648db/yarl-1.22.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3ea66b1c11c9150f1372f69afb6b8116f2dd7286f38e14ea71a44eee9ec51b9d", size = 368406, upload-time = "2025-10-06T14:09:21.402Z" }, - { url = "https://files.pythonhosted.org/packages/95/26/812a540e1c3c6418fec60e9bbd38e871eaba9545e94fa5eff8f4a8e28e1e/yarl-1.22.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3e2daa88dc91870215961e96a039ec73e4937da13cf77ce17f9cad0c18df3503", size = 336581, upload-time = "2025-10-06T14:09:22.98Z" }, - { url = "https://files.pythonhosted.org/packages/0b/f5/5777b19e26fdf98563985e481f8be3d8a39f8734147a6ebf459d0dab5a6b/yarl-1.22.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ba440ae430c00eee41509353628600212112cd5018d5def7e9b05ea7ac34eb65", size = 388924, upload-time = "2025-10-06T14:09:24.655Z" }, - { url = "https://files.pythonhosted.org/packages/86/08/24bd2477bd59c0bbd994fe1d93b126e0472e4e3df5a96a277b0a55309e89/yarl-1.22.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e6438cc8f23a9c1478633d216b16104a586b9761db62bfacb6425bac0a36679e", size = 392890, upload-time = "2025-10-06T14:09:26.617Z" }, - { url = "https://files.pythonhosted.org/packages/46/00/71b90ed48e895667ecfb1eaab27c1523ee2fa217433ed77a73b13205ca4b/yarl-1.22.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4c52a6e78aef5cf47a98ef8e934755abf53953379b7d53e68b15ff4420e6683d", size = 365819, upload-time = "2025-10-06T14:09:28.544Z" }, - { url = "https://files.pythonhosted.org/packages/30/2d/f715501cae832651d3282387c6a9236cd26bd00d0ff1e404b3dc52447884/yarl-1.22.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3b06bcadaac49c70f4c88af4ffcfbe3dc155aab3163e75777818092478bcbbe7", size = 363601, upload-time = "2025-10-06T14:09:30.568Z" }, - { url = "https://files.pythonhosted.org/packages/f8/f9/a678c992d78e394e7126ee0b0e4e71bd2775e4334d00a9278c06a6cce96a/yarl-1.22.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:6944b2dc72c4d7f7052683487e3677456050ff77fcf5e6204e98caf785ad1967", size = 358072, upload-time = "2025-10-06T14:09:32.528Z" }, - { url = "https://files.pythonhosted.org/packages/2c/d1/b49454411a60edb6fefdcad4f8e6dbba7d8019e3a508a1c5836cba6d0781/yarl-1.22.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:d5372ca1df0f91a86b047d1277c2aaf1edb32d78bbcefffc81b40ffd18f027ed", size = 385311, upload-time = "2025-10-06T14:09:34.634Z" }, - { url = "https://files.pythonhosted.org/packages/87/e5/40d7a94debb8448c7771a916d1861d6609dddf7958dc381117e7ba36d9e8/yarl-1.22.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:51af598701f5299012b8416486b40fceef8c26fc87dc6d7d1f6fc30609ea0aa6", size = 381094, upload-time = "2025-10-06T14:09:36.268Z" }, - { url = "https://files.pythonhosted.org/packages/35/d8/611cc282502381ad855448643e1ad0538957fc82ae83dfe7762c14069e14/yarl-1.22.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b266bd01fedeffeeac01a79ae181719ff848a5a13ce10075adbefc8f1daee70e", size = 370944, upload-time = "2025-10-06T14:09:37.872Z" }, - { url = "https://files.pythonhosted.org/packages/2d/df/fadd00fb1c90e1a5a8bd731fa3d3de2e165e5a3666a095b04e31b04d9cb6/yarl-1.22.0-cp311-cp311-win32.whl", hash = "sha256:a9b1ba5610a4e20f655258d5a1fdc7ebe3d837bb0e45b581398b99eb98b1f5ca", size = 81804, upload-time = "2025-10-06T14:09:39.359Z" }, - { url = "https://files.pythonhosted.org/packages/b5/f7/149bb6f45f267cb5c074ac40c01c6b3ea6d8a620d34b337f6321928a1b4d/yarl-1.22.0-cp311-cp311-win_amd64.whl", hash = "sha256:078278b9b0b11568937d9509b589ee83ef98ed6d561dfe2020e24a9fd08eaa2b", size = 86858, upload-time = "2025-10-06T14:09:41.068Z" }, - { url = "https://files.pythonhosted.org/packages/2b/13/88b78b93ad3f2f0b78e13bfaaa24d11cbc746e93fe76d8c06bf139615646/yarl-1.22.0-cp311-cp311-win_arm64.whl", hash = "sha256:b6a6f620cfe13ccec221fa312139135166e47ae169f8253f72a0abc0dae94376", size = 81637, upload-time = "2025-10-06T14:09:42.712Z" }, - { url = "https://files.pythonhosted.org/packages/75/ff/46736024fee3429b80a165a732e38e5d5a238721e634ab41b040d49f8738/yarl-1.22.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e340382d1afa5d32b892b3ff062436d592ec3d692aeea3bef3a5cfe11bbf8c6f", size = 142000, upload-time = "2025-10-06T14:09:44.631Z" }, - { url = "https://files.pythonhosted.org/packages/5a/9a/b312ed670df903145598914770eb12de1bac44599549b3360acc96878df8/yarl-1.22.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f1e09112a2c31ffe8d80be1b0988fa6a18c5d5cad92a9ffbb1c04c91bfe52ad2", size = 94338, upload-time = "2025-10-06T14:09:46.372Z" }, - { url = "https://files.pythonhosted.org/packages/ba/f5/0601483296f09c3c65e303d60c070a5c19fcdbc72daa061e96170785bc7d/yarl-1.22.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:939fe60db294c786f6b7c2d2e121576628468f65453d86b0fe36cb52f987bd74", size = 94909, upload-time = "2025-10-06T14:09:48.648Z" }, - { url = "https://files.pythonhosted.org/packages/60/41/9a1fe0b73dbcefce72e46cf149b0e0a67612d60bfc90fb59c2b2efdfbd86/yarl-1.22.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e1651bf8e0398574646744c1885a41198eba53dc8a9312b954073f845c90a8df", size = 372940, upload-time = "2025-10-06T14:09:50.089Z" }, - { url = "https://files.pythonhosted.org/packages/17/7a/795cb6dfee561961c30b800f0ed616b923a2ec6258b5def2a00bf8231334/yarl-1.22.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:b8a0588521a26bf92a57a1705b77b8b59044cdceccac7151bd8d229e66b8dedb", size = 345825, upload-time = "2025-10-06T14:09:52.142Z" }, - { url = "https://files.pythonhosted.org/packages/d7/93/a58f4d596d2be2ae7bab1a5846c4d270b894958845753b2c606d666744d3/yarl-1.22.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:42188e6a615c1a75bcaa6e150c3fe8f3e8680471a6b10150c5f7e83f47cc34d2", size = 386705, upload-time = "2025-10-06T14:09:54.128Z" }, - { url = "https://files.pythonhosted.org/packages/61/92/682279d0e099d0e14d7fd2e176bd04f48de1484f56546a3e1313cd6c8e7c/yarl-1.22.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f6d2cb59377d99718913ad9a151030d6f83ef420a2b8f521d94609ecc106ee82", size = 396518, upload-time = "2025-10-06T14:09:55.762Z" }, - { url = "https://files.pythonhosted.org/packages/db/0f/0d52c98b8a885aeda831224b78f3be7ec2e1aa4a62091f9f9188c3c65b56/yarl-1.22.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:50678a3b71c751d58d7908edc96d332af328839eea883bb554a43f539101277a", size = 377267, upload-time = "2025-10-06T14:09:57.958Z" }, - { url = "https://files.pythonhosted.org/packages/22/42/d2685e35908cbeaa6532c1fc73e89e7f2efb5d8a7df3959ea8e37177c5a3/yarl-1.22.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1e8fbaa7cec507aa24ea27a01456e8dd4b6fab829059b69844bd348f2d467124", size = 365797, upload-time = "2025-10-06T14:09:59.527Z" }, - { url = "https://files.pythonhosted.org/packages/a2/83/cf8c7bcc6355631762f7d8bdab920ad09b82efa6b722999dfb05afa6cfac/yarl-1.22.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:433885ab5431bc3d3d4f2f9bd15bfa1614c522b0f1405d62c4f926ccd69d04fa", size = 365535, upload-time = "2025-10-06T14:10:01.139Z" }, - { url = "https://files.pythonhosted.org/packages/25/e1/5302ff9b28f0c59cac913b91fe3f16c59a033887e57ce9ca5d41a3a94737/yarl-1.22.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:b790b39c7e9a4192dc2e201a282109ed2985a1ddbd5ac08dc56d0e121400a8f7", size = 382324, upload-time = "2025-10-06T14:10:02.756Z" }, - { url = "https://files.pythonhosted.org/packages/bf/cd/4617eb60f032f19ae3a688dc990d8f0d89ee0ea378b61cac81ede3e52fae/yarl-1.22.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:31f0b53913220599446872d757257be5898019c85e7971599065bc55065dc99d", size = 383803, upload-time = "2025-10-06T14:10:04.552Z" }, - { url = "https://files.pythonhosted.org/packages/59/65/afc6e62bb506a319ea67b694551dab4a7e6fb7bf604e9bd9f3e11d575fec/yarl-1.22.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a49370e8f711daec68d09b821a34e1167792ee2d24d405cbc2387be4f158b520", size = 374220, upload-time = "2025-10-06T14:10:06.489Z" }, - { url = "https://files.pythonhosted.org/packages/e7/3d/68bf18d50dc674b942daec86a9ba922d3113d8399b0e52b9897530442da2/yarl-1.22.0-cp312-cp312-win32.whl", hash = "sha256:70dfd4f241c04bd9239d53b17f11e6ab672b9f1420364af63e8531198e3f5fe8", size = 81589, upload-time = "2025-10-06T14:10:09.254Z" }, - { url = "https://files.pythonhosted.org/packages/c8/9a/6ad1a9b37c2f72874f93e691b2e7ecb6137fb2b899983125db4204e47575/yarl-1.22.0-cp312-cp312-win_amd64.whl", hash = "sha256:8884d8b332a5e9b88e23f60bb166890009429391864c685e17bd73a9eda9105c", size = 87213, upload-time = "2025-10-06T14:10:11.369Z" }, - { url = "https://files.pythonhosted.org/packages/44/c5/c21b562d1680a77634d748e30c653c3ca918beb35555cff24986fff54598/yarl-1.22.0-cp312-cp312-win_arm64.whl", hash = "sha256:ea70f61a47f3cc93bdf8b2f368ed359ef02a01ca6393916bc8ff877427181e74", size = 81330, upload-time = "2025-10-06T14:10:13.112Z" }, - { url = "https://files.pythonhosted.org/packages/ea/f3/d67de7260456ee105dc1d162d43a019ecad6b91e2f51809d6cddaa56690e/yarl-1.22.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8dee9c25c74997f6a750cd317b8ca63545169c098faee42c84aa5e506c819b53", size = 139980, upload-time = "2025-10-06T14:10:14.601Z" }, - { url = "https://files.pythonhosted.org/packages/01/88/04d98af0b47e0ef42597b9b28863b9060bb515524da0a65d5f4db160b2d5/yarl-1.22.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:01e73b85a5434f89fc4fe27dcda2aff08ddf35e4d47bbbea3bdcd25321af538a", size = 93424, upload-time = "2025-10-06T14:10:16.115Z" }, - { url = "https://files.pythonhosted.org/packages/18/91/3274b215fd8442a03975ce6bee5fe6aa57a8326b29b9d3d56234a1dca244/yarl-1.22.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:22965c2af250d20c873cdbee8ff958fb809940aeb2e74ba5f20aaf6b7ac8c70c", size = 93821, upload-time = "2025-10-06T14:10:17.993Z" }, - { url = "https://files.pythonhosted.org/packages/61/3a/caf4e25036db0f2da4ca22a353dfeb3c9d3c95d2761ebe9b14df8fc16eb0/yarl-1.22.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b4f15793aa49793ec8d1c708ab7f9eded1aa72edc5174cae703651555ed1b601", size = 373243, upload-time = "2025-10-06T14:10:19.44Z" }, - { url = "https://files.pythonhosted.org/packages/6e/9e/51a77ac7516e8e7803b06e01f74e78649c24ee1021eca3d6a739cb6ea49c/yarl-1.22.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e5542339dcf2747135c5c85f68680353d5cb9ffd741c0f2e8d832d054d41f35a", size = 342361, upload-time = "2025-10-06T14:10:21.124Z" }, - { url = "https://files.pythonhosted.org/packages/d4/f8/33b92454789dde8407f156c00303e9a891f1f51a0330b0fad7c909f87692/yarl-1.22.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5c401e05ad47a75869c3ab3e35137f8468b846770587e70d71e11de797d113df", size = 387036, upload-time = "2025-10-06T14:10:22.902Z" }, - { url = "https://files.pythonhosted.org/packages/d9/9a/c5db84ea024f76838220280f732970aa4ee154015d7f5c1bfb60a267af6f/yarl-1.22.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:243dda95d901c733f5b59214d28b0120893d91777cb8aa043e6ef059d3cddfe2", size = 397671, upload-time = "2025-10-06T14:10:24.523Z" }, - { url = "https://files.pythonhosted.org/packages/11/c9/cd8538dc2e7727095e0c1d867bad1e40c98f37763e6d995c1939f5fdc7b1/yarl-1.22.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bec03d0d388060058f5d291a813f21c011041938a441c593374da6077fe21b1b", size = 377059, upload-time = "2025-10-06T14:10:26.406Z" }, - { url = "https://files.pythonhosted.org/packages/a1/b9/ab437b261702ced75122ed78a876a6dec0a1b0f5e17a4ac7a9a2482d8abe/yarl-1.22.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b0748275abb8c1e1e09301ee3cf90c8a99678a4e92e4373705f2a2570d581273", size = 365356, upload-time = "2025-10-06T14:10:28.461Z" }, - { url = "https://files.pythonhosted.org/packages/b2/9d/8e1ae6d1d008a9567877b08f0ce4077a29974c04c062dabdb923ed98e6fe/yarl-1.22.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:47fdb18187e2a4e18fda2c25c05d8251a9e4a521edaed757fef033e7d8498d9a", size = 361331, upload-time = "2025-10-06T14:10:30.541Z" }, - { url = "https://files.pythonhosted.org/packages/ca/5a/09b7be3905962f145b73beb468cdd53db8aa171cf18c80400a54c5b82846/yarl-1.22.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c7044802eec4524fde550afc28edda0dd5784c4c45f0be151a2d3ba017daca7d", size = 382590, upload-time = "2025-10-06T14:10:33.352Z" }, - { url = "https://files.pythonhosted.org/packages/aa/7f/59ec509abf90eda5048b0bc3e2d7b5099dffdb3e6b127019895ab9d5ef44/yarl-1.22.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:139718f35149ff544caba20fce6e8a2f71f1e39b92c700d8438a0b1d2a631a02", size = 385316, upload-time = "2025-10-06T14:10:35.034Z" }, - { url = "https://files.pythonhosted.org/packages/e5/84/891158426bc8036bfdfd862fabd0e0fa25df4176ec793e447f4b85cf1be4/yarl-1.22.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e1b51bebd221006d3d2f95fbe124b22b247136647ae5dcc8c7acafba66e5ee67", size = 374431, upload-time = "2025-10-06T14:10:37.76Z" }, - { url = "https://files.pythonhosted.org/packages/bb/49/03da1580665baa8bef5e8ed34c6df2c2aca0a2f28bf397ed238cc1bbc6f2/yarl-1.22.0-cp313-cp313-win32.whl", hash = "sha256:d3e32536234a95f513bd374e93d717cf6b2231a791758de6c509e3653f234c95", size = 81555, upload-time = "2025-10-06T14:10:39.649Z" }, - { url = "https://files.pythonhosted.org/packages/9a/ee/450914ae11b419eadd067c6183ae08381cfdfcb9798b90b2b713bbebddda/yarl-1.22.0-cp313-cp313-win_amd64.whl", hash = "sha256:47743b82b76d89a1d20b83e60d5c20314cbd5ba2befc9cda8f28300c4a08ed4d", size = 86965, upload-time = "2025-10-06T14:10:41.313Z" }, - { url = "https://files.pythonhosted.org/packages/98/4d/264a01eae03b6cf629ad69bae94e3b0e5344741e929073678e84bf7a3e3b/yarl-1.22.0-cp313-cp313-win_arm64.whl", hash = "sha256:5d0fcda9608875f7d052eff120c7a5da474a6796fe4d83e152e0e4d42f6d1a9b", size = 81205, upload-time = "2025-10-06T14:10:43.167Z" }, - { url = "https://files.pythonhosted.org/packages/88/fc/6908f062a2f77b5f9f6d69cecb1747260831ff206adcbc5b510aff88df91/yarl-1.22.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:719ae08b6972befcba4310e49edb1161a88cdd331e3a694b84466bd938a6ab10", size = 146209, upload-time = "2025-10-06T14:10:44.643Z" }, - { url = "https://files.pythonhosted.org/packages/65/47/76594ae8eab26210b4867be6f49129861ad33da1f1ebdf7051e98492bf62/yarl-1.22.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:47d8a5c446df1c4db9d21b49619ffdba90e77c89ec6e283f453856c74b50b9e3", size = 95966, upload-time = "2025-10-06T14:10:46.554Z" }, - { url = "https://files.pythonhosted.org/packages/ab/ce/05e9828a49271ba6b5b038b15b3934e996980dd78abdfeb52a04cfb9467e/yarl-1.22.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:cfebc0ac8333520d2d0423cbbe43ae43c8838862ddb898f5ca68565e395516e9", size = 97312, upload-time = "2025-10-06T14:10:48.007Z" }, - { url = "https://files.pythonhosted.org/packages/d1/c5/7dffad5e4f2265b29c9d7ec869c369e4223166e4f9206fc2243ee9eea727/yarl-1.22.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4398557cbf484207df000309235979c79c4356518fd5c99158c7d38203c4da4f", size = 361967, upload-time = "2025-10-06T14:10:49.997Z" }, - { url = "https://files.pythonhosted.org/packages/50/b2/375b933c93a54bff7fc041e1a6ad2c0f6f733ffb0c6e642ce56ee3b39970/yarl-1.22.0-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:2ca6fd72a8cd803be290d42f2dec5cdcd5299eeb93c2d929bf060ad9efaf5de0", size = 323949, upload-time = "2025-10-06T14:10:52.004Z" }, - { url = "https://files.pythonhosted.org/packages/66/50/bfc2a29a1d78644c5a7220ce2f304f38248dc94124a326794e677634b6cf/yarl-1.22.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ca1f59c4e1ab6e72f0a23c13fca5430f889634166be85dbf1013683e49e3278e", size = 361818, upload-time = "2025-10-06T14:10:54.078Z" }, - { url = "https://files.pythonhosted.org/packages/46/96/f3941a46af7d5d0f0498f86d71275696800ddcdd20426298e572b19b91ff/yarl-1.22.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6c5010a52015e7c70f86eb967db0f37f3c8bd503a695a49f8d45700144667708", size = 372626, upload-time = "2025-10-06T14:10:55.767Z" }, - { url = "https://files.pythonhosted.org/packages/c1/42/8b27c83bb875cd89448e42cd627e0fb971fa1675c9ec546393d18826cb50/yarl-1.22.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d7672ecf7557476642c88497c2f8d8542f8e36596e928e9bcba0e42e1e7d71f", size = 341129, upload-time = "2025-10-06T14:10:57.985Z" }, - { url = "https://files.pythonhosted.org/packages/49/36/99ca3122201b382a3cf7cc937b95235b0ac944f7e9f2d5331d50821ed352/yarl-1.22.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:3b7c88eeef021579d600e50363e0b6ee4f7f6f728cd3486b9d0f3ee7b946398d", size = 346776, upload-time = "2025-10-06T14:10:59.633Z" }, - { url = "https://files.pythonhosted.org/packages/85/b4/47328bf996acd01a4c16ef9dcd2f59c969f495073616586f78cd5f2efb99/yarl-1.22.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:f4afb5c34f2c6fecdcc182dfcfc6af6cccf1aa923eed4d6a12e9d96904e1a0d8", size = 334879, upload-time = "2025-10-06T14:11:01.454Z" }, - { url = "https://files.pythonhosted.org/packages/c2/ad/b77d7b3f14a4283bffb8e92c6026496f6de49751c2f97d4352242bba3990/yarl-1.22.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:59c189e3e99a59cf8d83cbb31d4db02d66cda5a1a4374e8a012b51255341abf5", size = 350996, upload-time = "2025-10-06T14:11:03.452Z" }, - { url = "https://files.pythonhosted.org/packages/81/c8/06e1d69295792ba54d556f06686cbd6a7ce39c22307100e3fb4a2c0b0a1d/yarl-1.22.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:5a3bf7f62a289fa90f1990422dc8dff5a458469ea71d1624585ec3a4c8d6960f", size = 356047, upload-time = "2025-10-06T14:11:05.115Z" }, - { url = "https://files.pythonhosted.org/packages/4b/b8/4c0e9e9f597074b208d18cef227d83aac36184bfbc6eab204ea55783dbc5/yarl-1.22.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:de6b9a04c606978fdfe72666fa216ffcf2d1a9f6a381058d4378f8d7b1e5de62", size = 342947, upload-time = "2025-10-06T14:11:08.137Z" }, - { url = "https://files.pythonhosted.org/packages/e0/e5/11f140a58bf4c6ad7aca69a892bff0ee638c31bea4206748fc0df4ebcb3a/yarl-1.22.0-cp313-cp313t-win32.whl", hash = "sha256:1834bb90991cc2999f10f97f5f01317f99b143284766d197e43cd5b45eb18d03", size = 86943, upload-time = "2025-10-06T14:11:10.284Z" }, - { url = "https://files.pythonhosted.org/packages/31/74/8b74bae38ed7fe6793d0c15a0c8207bbb819cf287788459e5ed230996cdd/yarl-1.22.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ff86011bd159a9d2dfc89c34cfd8aff12875980e3bd6a39ff097887520e60249", size = 93715, upload-time = "2025-10-06T14:11:11.739Z" }, - { url = "https://files.pythonhosted.org/packages/69/66/991858aa4b5892d57aef7ee1ba6b4d01ec3b7eb3060795d34090a3ca3278/yarl-1.22.0-cp313-cp313t-win_arm64.whl", hash = "sha256:7861058d0582b847bc4e3a4a4c46828a410bca738673f35a29ba3ca5db0b473b", size = 83857, upload-time = "2025-10-06T14:11:13.586Z" }, - { url = "https://files.pythonhosted.org/packages/46/b3/e20ef504049f1a1c54a814b4b9bed96d1ac0e0610c3b4da178f87209db05/yarl-1.22.0-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:34b36c2c57124530884d89d50ed2c1478697ad7473efd59cfd479945c95650e4", size = 140520, upload-time = "2025-10-06T14:11:15.465Z" }, - { url = "https://files.pythonhosted.org/packages/e4/04/3532d990fdbab02e5ede063676b5c4260e7f3abea2151099c2aa745acc4c/yarl-1.22.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:0dd9a702591ca2e543631c2a017e4a547e38a5c0f29eece37d9097e04a7ac683", size = 93504, upload-time = "2025-10-06T14:11:17.106Z" }, - { url = "https://files.pythonhosted.org/packages/11/63/ff458113c5c2dac9a9719ac68ee7c947cb621432bcf28c9972b1c0e83938/yarl-1.22.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:594fcab1032e2d2cc3321bb2e51271e7cd2b516c7d9aee780ece81b07ff8244b", size = 94282, upload-time = "2025-10-06T14:11:19.064Z" }, - { url = "https://files.pythonhosted.org/packages/a7/bc/315a56aca762d44a6aaaf7ad253f04d996cb6b27bad34410f82d76ea8038/yarl-1.22.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f3d7a87a78d46a2e3d5b72587ac14b4c16952dd0887dbb051451eceac774411e", size = 372080, upload-time = "2025-10-06T14:11:20.996Z" }, - { url = "https://files.pythonhosted.org/packages/3f/3f/08e9b826ec2e099ea6e7c69a61272f4f6da62cb5b1b63590bb80ca2e4a40/yarl-1.22.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:852863707010316c973162e703bddabec35e8757e67fcb8ad58829de1ebc8590", size = 338696, upload-time = "2025-10-06T14:11:22.847Z" }, - { url = "https://files.pythonhosted.org/packages/e3/9f/90360108e3b32bd76789088e99538febfea24a102380ae73827f62073543/yarl-1.22.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:131a085a53bfe839a477c0845acf21efc77457ba2bcf5899618136d64f3303a2", size = 387121, upload-time = "2025-10-06T14:11:24.889Z" }, - { url = "https://files.pythonhosted.org/packages/98/92/ab8d4657bd5b46a38094cfaea498f18bb70ce6b63508fd7e909bd1f93066/yarl-1.22.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:078a8aefd263f4d4f923a9677b942b445a2be970ca24548a8102689a3a8ab8da", size = 394080, upload-time = "2025-10-06T14:11:27.307Z" }, - { url = "https://files.pythonhosted.org/packages/f5/e7/d8c5a7752fef68205296201f8ec2bf718f5c805a7a7e9880576c67600658/yarl-1.22.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bca03b91c323036913993ff5c738d0842fc9c60c4648e5c8d98331526df89784", size = 372661, upload-time = "2025-10-06T14:11:29.387Z" }, - { url = "https://files.pythonhosted.org/packages/b6/2e/f4d26183c8db0bb82d491b072f3127fb8c381a6206a3a56332714b79b751/yarl-1.22.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:68986a61557d37bb90d3051a45b91fa3d5c516d177dfc6dd6f2f436a07ff2b6b", size = 364645, upload-time = "2025-10-06T14:11:31.423Z" }, - { url = "https://files.pythonhosted.org/packages/80/7c/428e5812e6b87cd00ee8e898328a62c95825bf37c7fa87f0b6bb2ad31304/yarl-1.22.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:4792b262d585ff0dff6bcb787f8492e40698443ec982a3568c2096433660c694", size = 355361, upload-time = "2025-10-06T14:11:33.055Z" }, - { url = "https://files.pythonhosted.org/packages/ec/2a/249405fd26776f8b13c067378ef4d7dd49c9098d1b6457cdd152a99e96a9/yarl-1.22.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:ebd4549b108d732dba1d4ace67614b9545b21ece30937a63a65dd34efa19732d", size = 381451, upload-time = "2025-10-06T14:11:35.136Z" }, - { url = "https://files.pythonhosted.org/packages/67/a8/fb6b1adbe98cf1e2dd9fad71003d3a63a1bc22459c6e15f5714eb9323b93/yarl-1.22.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:f87ac53513d22240c7d59203f25cc3beac1e574c6cd681bbfd321987b69f95fd", size = 383814, upload-time = "2025-10-06T14:11:37.094Z" }, - { url = "https://files.pythonhosted.org/packages/d9/f9/3aa2c0e480fb73e872ae2814c43bc1e734740bb0d54e8cb2a95925f98131/yarl-1.22.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:22b029f2881599e2f1b06f8f1db2ee63bd309e2293ba2d566e008ba12778b8da", size = 370799, upload-time = "2025-10-06T14:11:38.83Z" }, - { url = "https://files.pythonhosted.org/packages/50/3c/af9dba3b8b5eeb302f36f16f92791f3ea62e3f47763406abf6d5a4a3333b/yarl-1.22.0-cp314-cp314-win32.whl", hash = "sha256:6a635ea45ba4ea8238463b4f7d0e721bad669f80878b7bfd1f89266e2ae63da2", size = 82990, upload-time = "2025-10-06T14:11:40.624Z" }, - { url = "https://files.pythonhosted.org/packages/ac/30/ac3a0c5bdc1d6efd1b41fa24d4897a4329b3b1e98de9449679dd327af4f0/yarl-1.22.0-cp314-cp314-win_amd64.whl", hash = "sha256:0d6e6885777af0f110b0e5d7e5dda8b704efed3894da26220b7f3d887b839a79", size = 88292, upload-time = "2025-10-06T14:11:42.578Z" }, - { url = "https://files.pythonhosted.org/packages/df/0a/227ab4ff5b998a1b7410abc7b46c9b7a26b0ca9e86c34ba4b8d8bc7c63d5/yarl-1.22.0-cp314-cp314-win_arm64.whl", hash = "sha256:8218f4e98d3c10d683584cb40f0424f4b9fd6e95610232dd75e13743b070ee33", size = 82888, upload-time = "2025-10-06T14:11:44.863Z" }, - { url = "https://files.pythonhosted.org/packages/06/5e/a15eb13db90abd87dfbefb9760c0f3f257ac42a5cac7e75dbc23bed97a9f/yarl-1.22.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:45c2842ff0e0d1b35a6bf1cd6c690939dacb617a70827f715232b2e0494d55d1", size = 146223, upload-time = "2025-10-06T14:11:46.796Z" }, - { url = "https://files.pythonhosted.org/packages/18/82/9665c61910d4d84f41a5bf6837597c89e665fa88aa4941080704645932a9/yarl-1.22.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:d947071e6ebcf2e2bee8fce76e10faca8f7a14808ca36a910263acaacef08eca", size = 95981, upload-time = "2025-10-06T14:11:48.845Z" }, - { url = "https://files.pythonhosted.org/packages/5d/9a/2f65743589809af4d0a6d3aa749343c4b5f4c380cc24a8e94a3c6625a808/yarl-1.22.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:334b8721303e61b00019474cc103bdac3d7b1f65e91f0bfedeec2d56dfe74b53", size = 97303, upload-time = "2025-10-06T14:11:50.897Z" }, - { url = "https://files.pythonhosted.org/packages/b0/ab/5b13d3e157505c43c3b43b5a776cbf7b24a02bc4cccc40314771197e3508/yarl-1.22.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1e7ce67c34138a058fd092f67d07a72b8e31ff0c9236e751957465a24b28910c", size = 361820, upload-time = "2025-10-06T14:11:52.549Z" }, - { url = "https://files.pythonhosted.org/packages/fb/76/242a5ef4677615cf95330cfc1b4610e78184400699bdda0acb897ef5e49a/yarl-1.22.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d77e1b2c6d04711478cb1c4ab90db07f1609ccf06a287d5607fcd90dc9863acf", size = 323203, upload-time = "2025-10-06T14:11:54.225Z" }, - { url = "https://files.pythonhosted.org/packages/8c/96/475509110d3f0153b43d06164cf4195c64d16999e0c7e2d8a099adcd6907/yarl-1.22.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c4647674b6150d2cae088fc07de2738a84b8bcedebef29802cf0b0a82ab6face", size = 363173, upload-time = "2025-10-06T14:11:56.069Z" }, - { url = "https://files.pythonhosted.org/packages/c9/66/59db471aecfbd559a1fd48aedd954435558cd98c7d0da8b03cc6c140a32c/yarl-1.22.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:efb07073be061c8f79d03d04139a80ba33cbd390ca8f0297aae9cce6411e4c6b", size = 373562, upload-time = "2025-10-06T14:11:58.783Z" }, - { url = "https://files.pythonhosted.org/packages/03/1f/c5d94abc91557384719da10ff166b916107c1b45e4d0423a88457071dd88/yarl-1.22.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e51ac5435758ba97ad69617e13233da53908beccc6cfcd6c34bbed8dcbede486", size = 339828, upload-time = "2025-10-06T14:12:00.686Z" }, - { url = "https://files.pythonhosted.org/packages/5f/97/aa6a143d3afba17b6465733681c70cf175af89f76ec8d9286e08437a7454/yarl-1.22.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:33e32a0dd0c8205efa8e83d04fc9f19313772b78522d1bdc7d9aed706bfd6138", size = 347551, upload-time = "2025-10-06T14:12:02.628Z" }, - { url = "https://files.pythonhosted.org/packages/43/3c/45a2b6d80195959239a7b2a8810506d4eea5487dce61c2a3393e7fc3c52e/yarl-1.22.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:bf4a21e58b9cde0e401e683ebd00f6ed30a06d14e93f7c8fd059f8b6e8f87b6a", size = 334512, upload-time = "2025-10-06T14:12:04.871Z" }, - { url = "https://files.pythonhosted.org/packages/86/a0/c2ab48d74599c7c84cb104ebd799c5813de252bea0f360ffc29d270c2caa/yarl-1.22.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:e4b582bab49ac33c8deb97e058cd67c2c50dac0dd134874106d9c774fd272529", size = 352400, upload-time = "2025-10-06T14:12:06.624Z" }, - { url = "https://files.pythonhosted.org/packages/32/75/f8919b2eafc929567d3d8411f72bdb1a2109c01caaab4ebfa5f8ffadc15b/yarl-1.22.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:0b5bcc1a9c4839e7e30b7b30dd47fe5e7e44fb7054ec29b5bb8d526aa1041093", size = 357140, upload-time = "2025-10-06T14:12:08.362Z" }, - { url = "https://files.pythonhosted.org/packages/cf/72/6a85bba382f22cf78add705d8c3731748397d986e197e53ecc7835e76de7/yarl-1.22.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:c0232bce2170103ec23c454e54a57008a9a72b5d1c3105dc2496750da8cfa47c", size = 341473, upload-time = "2025-10-06T14:12:10.994Z" }, - { url = "https://files.pythonhosted.org/packages/35/18/55e6011f7c044dc80b98893060773cefcfdbf60dfefb8cb2f58b9bacbd83/yarl-1.22.0-cp314-cp314t-win32.whl", hash = "sha256:8009b3173bcd637be650922ac455946197d858b3630b6d8787aa9e5c4564533e", size = 89056, upload-time = "2025-10-06T14:12:13.317Z" }, - { url = "https://files.pythonhosted.org/packages/f9/86/0f0dccb6e59a9e7f122c5afd43568b1d31b8ab7dda5f1b01fb5c7025c9a9/yarl-1.22.0-cp314-cp314t-win_amd64.whl", hash = "sha256:9fb17ea16e972c63d25d4a97f016d235c78dd2344820eb35bc034bc32012ee27", size = 96292, upload-time = "2025-10-06T14:12:15.398Z" }, - { url = "https://files.pythonhosted.org/packages/48/b7/503c98092fb3b344a179579f55814b613c1fbb1c23b3ec14a7b008a66a6e/yarl-1.22.0-cp314-cp314t-win_arm64.whl", hash = "sha256:9f6d73c1436b934e3f01df1e1b21ff765cd1d28c77dfb9ace207f746d4610ee1", size = 85171, upload-time = "2025-10-06T14:12:16.935Z" }, - { url = "https://files.pythonhosted.org/packages/73/ae/b48f95715333080afb75a4504487cbe142cae1268afc482d06692d605ae6/yarl-1.22.0-py3-none-any.whl", hash = "sha256:1380560bdba02b6b6c90de54133c81c9f2a453dee9912fe58c1dcced1edb7cff", size = 46814, upload-time = "2025-10-06T14:12:53.872Z" }, -]