From 96b3ccf97364f37f95fc0e6ae170384c32725066 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 Sep 2024 10:32:50 -0700 Subject: [PATCH 01/38] Bump fossas/fossa-action from 1.3.3 to 1.4.0 (#732) Bumps [fossas/fossa-action](https://github.com/fossas/fossa-action) from 1.3.3 to 1.4.0. - [Release notes](https://github.com/fossas/fossa-action/releases) - [Commits](https://github.com/fossas/fossa-action/compare/v1.3.3...v1.4.0) --- updated-dependencies: - dependency-name: fossas/fossa-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Signed-off-by: Elena Kolevska --- .github/workflows/fossa.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/fossa.yaml b/.github/workflows/fossa.yaml index cb2bf02f..57b26319 100644 --- a/.github/workflows/fossa.yaml +++ b/.github/workflows/fossa.yaml @@ -43,12 +43,12 @@ jobs: uses: actions/checkout@v4 - name: "Run FOSSA Scan" - uses: fossas/fossa-action@v1.3.3 # Use a specific version if locking is preferred + uses: fossas/fossa-action@v1.4.0 # Use a specific version if locking is preferred with: api-key: ${{ env.FOSSA_API_KEY }} - name: "Run FOSSA Test" - uses: fossas/fossa-action@v1.3.3 # Use a specific version if locking is preferred + uses: fossas/fossa-action@v1.4.0 # Use a specific version if locking is preferred with: api-key: ${{ env.FOSSA_API_KEY }} run-tests: true From face17ec096a3d031b62b21cf76738050c59c393 Mon Sep 17 00:00:00 2001 From: Elena Kolevska Date: Mon, 21 Oct 2024 06:17:39 +0100 Subject: [PATCH 02/38] Fixes missing docker-compose in examples (#736) Signed-off-by: Elena Kolevska --- examples/invoke-binding/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/invoke-binding/README.md b/examples/invoke-binding/README.md index f1a44417..d006f76d 100644 --- a/examples/invoke-binding/README.md +++ b/examples/invoke-binding/README.md @@ -26,10 +26,10 @@ name: Kafka install sleep: 30 --> -1. Start the kafka containers using docker-compose +1. Start the kafka containers using docker compose ```bash -docker-compose -f ./docker-compose-single-kafka.yml up -d +docker compose -f ./docker-compose-single-kafka.yml up -d ``` @@ -91,7 +91,7 @@ dapr stop --app-id receiver For kafka cleanup, run the following code: ```bash -docker-compose -f ./docker-compose-single-kafka.yml down +docker compose -f ./docker-compose-single-kafka.yml down ``` From eb975979aef943825521b1e26558d485f14677b2 Mon Sep 17 00:00:00 2001 From: Elena Kolevska Date: Sat, 26 Oct 2024 00:51:38 +0100 Subject: [PATCH 03/38] Bidirectional streaming for pubsub (#735) * works Signed-off-by: Elena Kolevska * works Signed-off-by: Elena Kolevska * Sync bidi streaming and tests Signed-off-by: Elena Kolevska * example fix Signed-off-by: Elena Kolevska fixes typing Signed-off-by: Elena Kolevska more readable example Signed-off-by: Elena Kolevska linter Signed-off-by: Elena Kolevska * examples fix Signed-off-by: Elena Kolevska * Adds support for api token Signed-off-by: Elena Kolevska * clean up Signed-off-by: Elena Kolevska * Adds docs Signed-off-by: Elena Kolevska * more small tweaks Signed-off-by: Elena Kolevska * cleanups and tests Signed-off-by: Elena Kolevska * Removes receive queue Signed-off-by: Elena Kolevska * Adds `subscribe_with_handler` Signed-off-by: Elena Kolevska * Fixes linter Signed-off-by: Elena Kolevska * Fixes linter Signed-off-by: Elena Kolevska * Adds async Signed-off-by: Elena Kolevska * Adds tests for async streaming subscription Signed-off-by: Elena Kolevska * Linter Signed-off-by: Elena Kolevska * Split sync and async examples Signed-off-by: Elena Kolevska * linter Signed-off-by: Elena Kolevska * Adds interceptors to the async client for bidirectional streaming Signed-off-by: Elena Kolevska * Removes unneeded class Signed-off-by: Elena Kolevska * Removes async client Signed-off-by: Elena Kolevska * Fixes missing docker-compose in examples (#736) Signed-off-by: Elena Kolevska * Removes async examples test Signed-off-by: Elena Kolevska * Small cleanup Signed-off-by: Elena Kolevska * Split up topic names between tests Signed-off-by: Elena Kolevska * lint Signed-off-by: Elena Kolevska * Revert "Removes async client" This reverts commit cb4b65b201d41e0a7b65beb3ef199b610e699725. Signed-off-by: Elena Kolevska * Split up topic names between tests Signed-off-by: Elena Kolevska * updates fake server to wait for confirmation message before sending new message Signed-off-by: Elena Kolevska * Updates protos Signed-off-by: Elena Kolevska * Adds stream cancelled error Signed-off-by: Elena Kolevska * linter Signed-off-by: Elena Kolevska --------- Signed-off-by: Elena Kolevska --- dapr/aio/clients/grpc/client.py | 71 +- dapr/aio/clients/grpc/interceptors.py | 22 +- dapr/aio/clients/grpc/subscription.py | 116 ++ dapr/clients/grpc/client.py | 76 +- dapr/clients/grpc/interceptors.py | 27 +- dapr/clients/grpc/subscription.py | 145 +++ dapr/common/pubsub/subscription.py | 92 ++ dapr/proto/common/v1/common_pb2.py | 16 +- dapr/proto/common/v1/common_pb2.pyi | 70 +- dapr/proto/common/v1/common_pb2_grpc.py | 25 - dapr/proto/runtime/v1/appcallback_pb2.py | 24 +- dapr/proto/runtime/v1/appcallback_pb2.pyi | 156 +-- dapr/proto/runtime/v1/appcallback_pb2_grpc.py | 169 +-- dapr/proto/runtime/v1/dapr_pb2.py | 536 ++++---- dapr/proto/runtime/v1/dapr_pb2.pyi | 950 ++++++++------ dapr/proto/runtime/v1/dapr_pb2_grpc.py | 1110 ++++------------- .../en/python-sdk-docs/python-client.md | 124 +- examples/pubsub-streaming-async/README.md | 122 ++ examples/pubsub-streaming-async/publisher.py | 52 + .../subscriber-handler.py | 50 + examples/pubsub-streaming-async/subscriber.py | 67 + examples/pubsub-streaming/README.md | 121 ++ examples/pubsub-streaming/publisher.py | 43 + .../pubsub-streaming/subscriber-handler.py | 44 + examples/pubsub-streaming/subscriber.py | 76 ++ tests/clients/fake_dapr_server.py | 57 +- tests/clients/test_dapr_grpc_client.py | 125 ++ tests/clients/test_dapr_grpc_client_async.py | 125 +- tests/clients/test_subscription.py | 109 ++ tools/requirements.txt | 2 +- tox.ini | 2 + 31 files changed, 2927 insertions(+), 1797 deletions(-) create mode 100644 dapr/aio/clients/grpc/subscription.py create mode 100644 dapr/clients/grpc/subscription.py create mode 100644 dapr/common/pubsub/subscription.py create mode 100644 examples/pubsub-streaming-async/README.md create mode 100644 examples/pubsub-streaming-async/publisher.py create mode 100644 examples/pubsub-streaming-async/subscriber-handler.py create mode 100644 examples/pubsub-streaming-async/subscriber.py create mode 100644 examples/pubsub-streaming/README.md create mode 100644 examples/pubsub-streaming/publisher.py create mode 100644 examples/pubsub-streaming/subscriber-handler.py create mode 100644 examples/pubsub-streaming/subscriber.py create mode 100644 tests/clients/test_subscription.py diff --git a/dapr/aio/clients/grpc/client.py b/dapr/aio/clients/grpc/client.py index f9f53498..2b40101c 100644 --- a/dapr/aio/clients/grpc/client.py +++ b/dapr/aio/clients/grpc/client.py @@ -24,7 +24,7 @@ from warnings import warn -from typing import Callable, Dict, Optional, Text, Union, Sequence, List, Any +from typing import Callable, Dict, Optional, Text, Union, Sequence, List, Any, Awaitable from typing_extensions import Self from google.protobuf.message import Message as GrpcMessage @@ -39,12 +39,14 @@ AioRpcError, ) +from dapr.aio.clients.grpc.subscription import Subscription from dapr.clients.exceptions import DaprInternalError, DaprGrpcError from dapr.clients.grpc._crypto import EncryptOptions, DecryptOptions from dapr.clients.grpc._state import StateOptions, StateItem from dapr.clients.grpc._helpers import getWorkflowRuntimeStatus from dapr.clients.health import DaprHealth from dapr.clients.retry import RetryPolicy +from dapr.common.pubsub.subscription import StreamInactiveError from dapr.conf.helpers import GrpcEndpoint from dapr.conf import settings from dapr.proto import api_v1, api_service_v1, common_v1 @@ -94,6 +96,7 @@ UnlockResponse, GetWorkflowResponse, StartWorkflowResponse, + TopicEventResponse, ) @@ -482,6 +485,72 @@ async def publish_event( return DaprResponse(await call.initial_metadata()) + async def subscribe( + self, + pubsub_name: str, + topic: str, + metadata: Optional[dict] = None, + dead_letter_topic: Optional[str] = None, + ) -> Subscription: + """ + Subscribe to a topic with a bidirectional stream + + Args: + pubsub_name (str): The name of the pubsub component. + topic (str): The name of the topic. + metadata (Optional[dict]): Additional metadata for the subscription. + dead_letter_topic (Optional[str]): Name of the dead-letter topic. + + Returns: + Subscription: The Subscription object managing the stream. + """ + subscription = Subscription(self._stub, pubsub_name, topic, metadata, dead_letter_topic) + await subscription.start() + return subscription + + async def subscribe_with_handler( + self, + pubsub_name: str, + topic: str, + handler_fn: Callable[..., TopicEventResponse], + metadata: Optional[dict] = None, + dead_letter_topic: Optional[str] = None, + ) -> Callable[[], Awaitable[None]]: + """ + Subscribe to a topic with a bidirectional stream and a message handler function + + Args: + pubsub_name (str): The name of the pubsub component. + topic (str): The name of the topic. + handler_fn (Callable[..., TopicEventResponse]): The function to call when a message is received. + metadata (Optional[dict]): Additional metadata for the subscription. + dead_letter_topic (Optional[str]): Name of the dead-letter topic. + + Returns: + Callable[[], Awaitable[None]]: An async function to close the subscription. + """ + subscription = await self.subscribe(pubsub_name, topic, metadata, dead_letter_topic) + + async def stream_messages(sub: Subscription): + while True: + try: + message = await sub.next_message() + if message: + response = await handler_fn(message) + if response: + await subscription.respond(message, response.status) + else: + continue + except StreamInactiveError: + break + + async def close_subscription(): + await subscription.close() + + asyncio.create_task(stream_messages(subscription)) + + return close_subscription + async def get_state( self, store_name: str, diff --git a/dapr/aio/clients/grpc/interceptors.py b/dapr/aio/clients/grpc/interceptors.py index 55ede4b9..bf83cf56 100644 --- a/dapr/aio/clients/grpc/interceptors.py +++ b/dapr/aio/clients/grpc/interceptors.py @@ -16,7 +16,7 @@ from collections import namedtuple from typing import List, Tuple -from grpc.aio import UnaryUnaryClientInterceptor, ClientCallDetails # type: ignore +from grpc.aio import UnaryUnaryClientInterceptor, StreamStreamClientInterceptor, ClientCallDetails # type: ignore from dapr.conf import settings @@ -51,7 +51,7 @@ def intercept_unary_unary(self, continuation, client_call_details, request): return continuation(client_call_details, request) -class DaprClientInterceptorAsync(UnaryUnaryClientInterceptor): +class DaprClientInterceptorAsync(UnaryUnaryClientInterceptor, StreamStreamClientInterceptor): """The class implements a UnaryUnaryClientInterceptor from grpc to add an interceptor to add additional headers to all calls as needed. @@ -115,8 +115,24 @@ async def intercept_unary_unary(self, continuation, client_call_details, request Returns: A response object after invoking the continuation callable """ + new_call_details = await self._intercept_call(client_call_details) + # Call continuation + response = await continuation(new_call_details, request) + return response + + async def intercept_stream_stream(self, continuation, client_call_details, request): + """This method intercepts a stream-stream gRPC call. This is the implementation of the + abstract method defined in StreamStreamClientInterceptor defined in grpc. This is invoked + automatically by grpc based on the order in which interceptors are added to the channel. + + Args: + continuation: a callable to be invoked to continue with the RPC or next interceptor + client_call_details: a ClientCallDetails object describing the outgoing RPC + request: the request value for the RPC - # Pre-process or intercept call + Returns: + A response object after invoking the continuation callable + """ new_call_details = await self._intercept_call(client_call_details) # Call continuation response = await continuation(new_call_details, request) diff --git a/dapr/aio/clients/grpc/subscription.py b/dapr/aio/clients/grpc/subscription.py new file mode 100644 index 00000000..a526ee86 --- /dev/null +++ b/dapr/aio/clients/grpc/subscription.py @@ -0,0 +1,116 @@ +import asyncio +from grpc import StatusCode +from grpc.aio import AioRpcError + +from dapr.clients.grpc._response import TopicEventResponse +from dapr.clients.health import DaprHealth +from dapr.common.pubsub.subscription import ( + StreamInactiveError, + SubscriptionMessage, + StreamCancelledError, +) +from dapr.proto import api_v1, appcallback_v1 + + +class Subscription: + def __init__(self, stub, pubsub_name, topic, metadata=None, dead_letter_topic=None): + self._stub = stub + self._pubsub_name = pubsub_name + self._topic = topic + self._metadata = metadata or {} + self._dead_letter_topic = dead_letter_topic or '' + self._stream = None + self._send_queue = asyncio.Queue() + self._stream_active = asyncio.Event() + + async def start(self): + async def outgoing_request_iterator(): + try: + initial_request = api_v1.SubscribeTopicEventsRequestAlpha1( + initial_request=api_v1.SubscribeTopicEventsRequestInitialAlpha1( + pubsub_name=self._pubsub_name, + topic=self._topic, + metadata=self._metadata, + dead_letter_topic=self._dead_letter_topic, + ) + ) + yield initial_request + + while self._stream_active.is_set(): + try: + response = await asyncio.wait_for(self._send_queue.get(), timeout=1.0) + yield response + except asyncio.TimeoutError: + continue + except Exception as e: + raise Exception(f'Error while writing to stream: {e}') + + self._stream = self._stub.SubscribeTopicEventsAlpha1(outgoing_request_iterator()) + self._stream_active.set() + await self._stream.read() # discard the initial message + + async def reconnect_stream(self): + await self.close() + DaprHealth.wait_until_ready() + print('Attempting to reconnect...') + await self.start() + + async def next_message(self): + if not self._stream_active.is_set(): + raise StreamInactiveError('Stream is not active') + + try: + if self._stream is not None: + message = await self._stream.read() + if message is None: + return None + return SubscriptionMessage(message.event_message) + except AioRpcError as e: + if e.code() == StatusCode.UNAVAILABLE: + print( + f'gRPC error while reading from stream: {e.details()}, ' + f'Status Code: {e.code()}. ' + f'Attempting to reconnect...' + ) + await self.reconnect_stream() + elif e.code() == StatusCode.CANCELLED: + raise StreamCancelledError('Stream has been cancelled') + else: + raise Exception(f'gRPC error while reading from subscription stream: {e} ') + except Exception as e: + raise Exception(f'Error while fetching message: {e}') + + return None + + async def respond(self, message, status): + try: + status = appcallback_v1.TopicEventResponse(status=status.value) + response = api_v1.SubscribeTopicEventsRequestProcessedAlpha1( + id=message.id(), status=status + ) + msg = api_v1.SubscribeTopicEventsRequestAlpha1(event_processed=response) + if not self._stream_active.is_set(): + raise StreamInactiveError('Stream is not active') + await self._send_queue.put(msg) + except Exception as e: + print(f"Can't send message: {e}") + + async def respond_success(self, message): + await self.respond(message, TopicEventResponse('success').status) + + async def respond_retry(self, message): + await self.respond(message, TopicEventResponse('retry').status) + + async def respond_drop(self, message): + await self.respond(message, TopicEventResponse('drop').status) + + async def close(self): + if self._stream: + try: + self._stream.cancel() + self._stream_active.clear() + except AioRpcError as e: + if e.code() != StatusCode.CANCELLED: + raise Exception(f'Error while closing stream: {e}') + except Exception as e: + raise Exception(f'Error while closing stream: {e}') diff --git a/dapr/clients/grpc/client.py b/dapr/clients/grpc/client.py index 64a26408..94793907 100644 --- a/dapr/clients/grpc/client.py +++ b/dapr/clients/grpc/client.py @@ -12,7 +12,7 @@ See the License for the specific language governing permissions and limitations under the License. """ - +import threading import time import socket import json @@ -41,6 +41,7 @@ from dapr.clients.grpc._state import StateOptions, StateItem from dapr.clients.grpc._helpers import getWorkflowRuntimeStatus from dapr.clients.grpc._crypto import EncryptOptions, DecryptOptions +from dapr.clients.grpc.subscription import Subscription, StreamInactiveError from dapr.clients.grpc.interceptors import DaprClientInterceptor, DaprClientTimeoutInterceptor from dapr.clients.health import DaprHealth from dapr.clients.retry import RetryPolicy @@ -85,6 +86,7 @@ StartWorkflowResponse, EncryptResponse, DecryptResponse, + TopicEventResponse, ) @@ -481,6 +483,78 @@ def publish_event( return DaprResponse(call.initial_metadata()) + def subscribe( + self, + pubsub_name: str, + topic: str, + metadata: Optional[MetadataTuple] = None, + dead_letter_topic: Optional[str] = None, + ) -> Subscription: + """ + Subscribe to a topic with a bidirectional stream + + Args: + pubsub_name (str): The name of the pubsub component. + topic (str): The name of the topic. + metadata (Optional[MetadataTuple]): Additional metadata for the subscription. + dead_letter_topic (Optional[str]): Name of the dead-letter topic. + timeout (Optional[int]): The time in seconds to wait for a message before returning None + If not set, the `next_message` method will block indefinitely + until a message is received. + + Returns: + Subscription: The Subscription object managing the stream. + """ + subscription = Subscription(self._stub, pubsub_name, topic, metadata, dead_letter_topic) + subscription.start() + return subscription + + def subscribe_with_handler( + self, + pubsub_name: str, + topic: str, + handler_fn: Callable[..., TopicEventResponse], + metadata: Optional[MetadataTuple] = None, + dead_letter_topic: Optional[str] = None, + ) -> Callable: + """ + Subscribe to a topic with a bidirectional stream and a message handler function + + Args: + pubsub_name (str): The name of the pubsub component. + topic (str): The name of the topic. + handler_fn (Callable[..., TopicEventResponse]): The function to call when a message is received. + metadata (Optional[MetadataTuple]): Additional metadata for the subscription. + dead_letter_topic (Optional[str]): Name of the dead-letter topic. + timeout (Optional[int]): The time in seconds to wait for a message before returning None + If not set, the `next_message` method will block indefinitely + until a message is received. + """ + subscription = self.subscribe(pubsub_name, topic, metadata, dead_letter_topic) + + def stream_messages(sub): + while True: + try: + message = sub.next_message() + if message: + # Process the message + response = handler_fn(message) + if response: + subscription.respond(message, response.status) + else: + # No message received + continue + except StreamInactiveError: + break + + def close_subscription(): + subscription.close() + + streaming_thread = threading.Thread(target=stream_messages, args=(subscription,)) + streaming_thread.start() + + return close_subscription + def get_state( self, store_name: str, diff --git a/dapr/clients/grpc/interceptors.py b/dapr/clients/grpc/interceptors.py index 22098f53..15bde185 100644 --- a/dapr/clients/grpc/interceptors.py +++ b/dapr/clients/grpc/interceptors.py @@ -1,7 +1,7 @@ from collections import namedtuple from typing import List, Tuple -from grpc import UnaryUnaryClientInterceptor, ClientCallDetails # type: ignore +from grpc import UnaryUnaryClientInterceptor, ClientCallDetails, StreamStreamClientInterceptor # type: ignore from dapr.conf import settings @@ -38,7 +38,7 @@ def intercept_unary_unary(self, continuation, client_call_details, request): return continuation(client_call_details, request) -class DaprClientInterceptor(UnaryUnaryClientInterceptor): +class DaprClientInterceptor(UnaryUnaryClientInterceptor, StreamStreamClientInterceptor): """The class implements a UnaryUnaryClientInterceptor from grpc to add an interceptor to add additional headers to all calls as needed. @@ -91,8 +91,8 @@ def _intercept_call(self, client_call_details: ClientCallDetails) -> ClientCallD return new_call_details def intercept_unary_unary(self, continuation, client_call_details, request): - """This method intercepts a unary-unary gRPC call. This is the implementation of the - abstract method defined in UnaryUnaryClientInterceptor defined in grpc. This is invoked + """This method intercepts a unary-unary gRPC call. It is the implementation of the + abstract method defined in UnaryUnaryClientInterceptor defined in grpc. It's invoked automatically by grpc based on the order in which interceptors are added to the channel. Args: @@ -103,8 +103,25 @@ def intercept_unary_unary(self, continuation, client_call_details, request): Returns: A response object after invoking the continuation callable """ - # Pre-process or intercept call new_call_details = self._intercept_call(client_call_details) # Call continuation response = continuation(new_call_details, request) return response + + def intercept_stream_stream(self, continuation, client_call_details, request_iterator): + """This method intercepts a stream-stream gRPC call. It is the implementation of the + abstract method defined in StreamStreamClientInterceptor defined in grpc. It's invoked + automatically by grpc based on the order in which interceptors are added to the channel. + + Args: + continuation: a callable to be invoked to continue with the RPC or next interceptor + client_call_details: a ClientCallDetails object describing the outgoing RPC + request_iterator: the request value for the RPC + + Returns: + A response object after invoking the continuation callable + """ + new_call_details = self._intercept_call(client_call_details) + # Call continuation + response = continuation(new_call_details, request_iterator) + return response diff --git a/dapr/clients/grpc/subscription.py b/dapr/clients/grpc/subscription.py new file mode 100644 index 00000000..d67bed9d --- /dev/null +++ b/dapr/clients/grpc/subscription.py @@ -0,0 +1,145 @@ +from grpc import RpcError, StatusCode, Call # type: ignore + +from dapr.clients.grpc._response import TopicEventResponse +from dapr.clients.health import DaprHealth +from dapr.common.pubsub.subscription import ( + StreamInactiveError, + SubscriptionMessage, + StreamCancelledError, +) +from dapr.proto import api_v1, appcallback_v1 +import queue +import threading +from typing import Optional + + +class Subscription: + def __init__(self, stub, pubsub_name, topic, metadata=None, dead_letter_topic=None): + self._stub = stub + self._pubsub_name = pubsub_name + self._topic = topic + self._metadata = metadata or {} + self._dead_letter_topic = dead_letter_topic or '' + self._stream: Optional[Call] = None + self._response_thread: Optional[threading.Thread] = None + self._send_queue: queue.Queue = queue.Queue() + self._stream_active: bool = False + self._stream_lock = threading.Lock() # Protects _stream_active + + def start(self): + def outgoing_request_iterator(): + """ + Generator function to create the request iterator for the stream. + This sends the initial request to establish the stream. + """ + try: + # Send InitialRequest needed to establish the stream + initial_request = api_v1.SubscribeTopicEventsRequestAlpha1( + initial_request=api_v1.SubscribeTopicEventsRequestInitialAlpha1( + pubsub_name=self._pubsub_name, + topic=self._topic, + metadata=self._metadata or {}, + dead_letter_topic=self._dead_letter_topic or '', + ) + ) + yield initial_request + + # Start sending back acknowledgement messages from the send queue + while self._is_stream_active(): + try: + # Wait for responses/acknowledgements to send from the send queue. + response = self._send_queue.get() + yield response + except queue.Empty: + continue + except Exception as e: + raise Exception(f'Error while writing to stream: {e}') + + # Create the bidirectional stream + self._stream = self._stub.SubscribeTopicEventsAlpha1(outgoing_request_iterator()) + self._set_stream_active() + try: + next(self._stream) # discard the initial message + except Exception as e: + raise Exception(f'Error while initializing stream: {e}') + + def reconnect_stream(self): + self.close() + DaprHealth.wait_until_ready() + print('Attempting to reconnect...') + self.start() + + def next_message(self): + """ + Get the next message from the receive queue. + @return: The next message from the queue, + or None if no message is received within the timeout. + """ + if not self._is_stream_active() or self._stream is None: + raise StreamInactiveError('Stream is not active') + + try: + # Read the next message from the stream directly + message = next(self._stream) + return SubscriptionMessage(message.event_message) + except RpcError as e: + # If Dapr can't be reached, wait until it's ready and reconnect the stream + if e.code() == StatusCode.UNAVAILABLE: + print( + f'gRPC error while reading from stream: {e.details()}, Status Code: {e.code()}' + ) + self.reconnect_stream() + elif e.code() == StatusCode.CANCELLED: + raise StreamCancelledError('Stream has been cancelled') + else: + raise Exception( + f'gRPC error while reading from subscription stream: {e.details()} ' + f'Status Code: {e.code()}' + ) + except Exception as e: + raise Exception(f'Error while fetching message: {e}') + + def respond(self, message, status): + try: + status = appcallback_v1.TopicEventResponse(status=status.value) + response = api_v1.SubscribeTopicEventsRequestProcessedAlpha1( + id=message.id(), status=status + ) + msg = api_v1.SubscribeTopicEventsRequestAlpha1(event_processed=response) + if not self._is_stream_active(): + raise StreamInactiveError('Stream is not active') + self._send_queue.put(msg) + except Exception as e: + print(f"Can't send message on inactive stream: {e}") + + def respond_success(self, message): + self.respond(message, TopicEventResponse('success').status) + + def respond_retry(self, message): + self.respond(message, TopicEventResponse('retry').status) + + def respond_drop(self, message): + self.respond(message, TopicEventResponse('drop').status) + + def _set_stream_active(self): + with self._stream_lock: + self._stream_active = True + + def _set_stream_inactive(self): + with self._stream_lock: + self._stream_active = False + + def _is_stream_active(self): + with self._stream_lock: + return self._stream_active + + def close(self): + if self._stream: + try: + self._stream.cancel() + self._set_stream_inactive() + except RpcError as e: + if e.code() != StatusCode.CANCELLED: + raise Exception(f'Error while closing stream: {e}') + except Exception as e: + raise Exception(f'Error while closing stream: {e}') diff --git a/dapr/common/pubsub/subscription.py b/dapr/common/pubsub/subscription.py new file mode 100644 index 00000000..6f68e180 --- /dev/null +++ b/dapr/common/pubsub/subscription.py @@ -0,0 +1,92 @@ +import json +from google.protobuf.json_format import MessageToDict +from dapr.proto.runtime.v1.appcallback_pb2 import TopicEventRequest +from typing import Optional, Union + + +class SubscriptionMessage: + def __init__(self, msg: TopicEventRequest): + self._id: str = msg.id + self._source: str = msg.source + self._type: str = msg.type + self._spec_version: str = msg.spec_version + self._data_content_type: str = msg.data_content_type + self._topic: str = msg.topic + self._pubsub_name: str = msg.pubsub_name + self._raw_data: bytes = msg.data + self._data: Optional[Union[dict, str]] = None + + try: + self._extensions = MessageToDict(msg.extensions) + except Exception as e: + self._extensions = {} + print(f'Error parsing extensions: {e}') + + # Parse the content based on its media type + if self._raw_data and len(self._raw_data) > 0: + self._parse_data_content() + + def id(self): + return self._id + + def source(self): + return self._source + + def type(self): + return self._type + + def spec_version(self): + return self._spec_version + + def data_content_type(self): + return self._data_content_type + + def topic(self): + return self._topic + + def pubsub_name(self): + return self._pubsub_name + + def raw_data(self): + return self._raw_data + + def extensions(self): + return self._extensions + + def data(self): + return self._data + + def _parse_data_content(self): + try: + if self._data_content_type == 'application/json': + try: + self._data = json.loads(self._raw_data) + except json.JSONDecodeError: + print(f'Error parsing json message data from topic {self._topic}') + pass # If JSON parsing fails, keep `data` as None + elif self._data_content_type == 'text/plain': + # Assume UTF-8 encoding + try: + self._data = self._raw_data.decode('utf-8') + except UnicodeDecodeError: + print(f'Error decoding message data from topic {self._topic} as UTF-8') + elif self._data_content_type.startswith( + 'application/' + ) and self._data_content_type.endswith('+json'): + # Handle custom JSON-based media types (e.g., application/vnd.api+json) + try: + self._data = json.loads(self._raw_data) + except json.JSONDecodeError: + print(f'Error parsing json message data from topic {self._topic}') + pass # If JSON parsing fails, keep `data` as None + except Exception as e: + # Log or handle any unexpected exceptions + print(f'Error parsing media type: {e}') + + +class StreamInactiveError(Exception): + pass + + +class StreamCancelledError(Exception): + pass diff --git a/dapr/proto/common/v1/common_pb2.py b/dapr/proto/common/v1/common_pb2.py index b4f795de..a1bf2566 100644 --- a/dapr/proto/common/v1/common_pb2.py +++ b/dapr/proto/common/v1/common_pb2.py @@ -1,7 +1,6 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: dapr/proto/common/v1/common.proto -# Protobuf Python Version: 5.26.1 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool @@ -20,13 +19,14 @@ _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'dapr.proto.common.v1.common_pb2', _globals) -if not _descriptor._USE_C_DESCRIPTORS: - _globals['DESCRIPTOR']._loaded_options = None - _globals['DESCRIPTOR']._serialized_options = b'\n\nio.dapr.v1B\014CommonProtosZ/github.com/dapr/dapr/pkg/proto/common/v1;common\252\002\033Dapr.Client.Autogen.Grpc.v1' - _globals['_STATEITEM_METADATAENTRY']._loaded_options = None - _globals['_STATEITEM_METADATAENTRY']._serialized_options = b'8\001' - _globals['_CONFIGURATIONITEM_METADATAENTRY']._loaded_options = None - _globals['_CONFIGURATIONITEM_METADATAENTRY']._serialized_options = b'8\001' +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\nio.dapr.v1B\014CommonProtosZ/github.com/dapr/dapr/pkg/proto/common/v1;common\252\002\033Dapr.Client.Autogen.Grpc.v1' + _STATEITEM_METADATAENTRY._options = None + _STATEITEM_METADATAENTRY._serialized_options = b'8\001' + _CONFIGURATIONITEM_METADATAENTRY._options = None + _CONFIGURATIONITEM_METADATAENTRY._serialized_options = b'8\001' _globals['_HTTPEXTENSION']._serialized_start=87 _globals['_HTTPEXTENSION']._serialized_end=295 _globals['_HTTPEXTENSION_VERB']._serialized_start=181 diff --git a/dapr/proto/common/v1/common_pb2.pyi b/dapr/proto/common/v1/common_pb2.pyi index cc9537fc..0b23ce54 100644 --- a/dapr/proto/common/v1/common_pb2.pyi +++ b/dapr/proto/common/v1/common_pb2.pyi @@ -13,7 +13,6 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. """ - import builtins import collections.abc import google.protobuf.any_pb2 @@ -31,13 +30,13 @@ else: DESCRIPTOR: google.protobuf.descriptor.FileDescriptor -@typing.final +@typing_extensions.final class HTTPExtension(google.protobuf.message.Message): """HTTPExtension includes HTTP verb and querystring when Dapr runtime delivers HTTP content. For example, when callers calls http invoke api - POST http://localhost:3500/v1.0/invoke//method/?query1=value1&query2=value2 + `POST http://localhost:3500/v1.0/invoke//method/?query1=value1&query2=value2` Dapr runtime will parse POST as a verb and extract querystring to quersytring map. """ @@ -90,11 +89,11 @@ class HTTPExtension(google.protobuf.message.Message): verb: global___HTTPExtension.Verb.ValueType = ..., querystring: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["querystring", b"querystring", "verb", b"verb"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["querystring", b"querystring", "verb", b"verb"]) -> None: ... global___HTTPExtension = HTTPExtension -@typing.final +@typing_extensions.final class InvokeRequest(google.protobuf.message.Message): """InvokeRequest is the message to invoke a method with the data. This message is used in InvokeService of Dapr gRPC Service and OnInvoke @@ -109,18 +108,17 @@ class InvokeRequest(google.protobuf.message.Message): HTTP_EXTENSION_FIELD_NUMBER: builtins.int method: builtins.str """Required. method is a method name which will be invoked by caller.""" - content_type: builtins.str - """The type of data content. - - This field is required if data delivers http request body - Otherwise, this is optional. - """ @property def data(self) -> google.protobuf.any_pb2.Any: """Required in unary RPCs. Bytes value or Protobuf message which caller sent. Dapr treats Any.value as bytes type if Any.type_url is unset. """ + content_type: builtins.str + """The type of data content. + This field is required if data delivers http request body + Otherwise, this is optional. + """ @property def http_extension(self) -> global___HTTPExtension: """HTTP specific fields if request conveys http-compatible request. @@ -128,7 +126,6 @@ class InvokeRequest(google.protobuf.message.Message): This field is required for http-compatible request. Otherwise, this field is optional. """ - def __init__( self, *, @@ -137,12 +134,12 @@ class InvokeRequest(google.protobuf.message.Message): content_type: builtins.str = ..., http_extension: global___HTTPExtension | None = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["data", b"data", "http_extension", b"http_extension"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["content_type", b"content_type", "data", b"data", "http_extension", b"http_extension", "method", b"method"]) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["data", b"data", "http_extension", b"http_extension"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["content_type", b"content_type", "data", b"data", "http_extension", b"http_extension", "method", b"method"]) -> None: ... global___InvokeRequest = InvokeRequest -@typing.final +@typing_extensions.final class InvokeResponse(google.protobuf.message.Message): """InvokeResponse is the response message including data and its content type from app callback. @@ -154,24 +151,23 @@ class InvokeResponse(google.protobuf.message.Message): DATA_FIELD_NUMBER: builtins.int CONTENT_TYPE_FIELD_NUMBER: builtins.int - content_type: builtins.str - """Required. The type of data content.""" @property def data(self) -> google.protobuf.any_pb2.Any: """Required in unary RPCs. The content body of InvokeService response.""" - + content_type: builtins.str + """Required. The type of data content.""" def __init__( self, *, data: google.protobuf.any_pb2.Any | None = ..., content_type: builtins.str = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["data", b"data"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["content_type", b"content_type", "data", b"data"]) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["data", b"data"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["content_type", b"content_type", "data", b"data"]) -> None: ... global___InvokeResponse = InvokeResponse -@typing.final +@typing_extensions.final class StreamPayload(google.protobuf.message.Message): """Chunk of data sent in a streaming request or response. This is used in requests including InternalInvokeRequestStream. @@ -195,17 +191,17 @@ class StreamPayload(google.protobuf.message.Message): data: builtins.bytes = ..., seq: builtins.int = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["data", b"data", "seq", b"seq"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["data", b"data", "seq", b"seq"]) -> None: ... global___StreamPayload = StreamPayload -@typing.final +@typing_extensions.final class StateItem(google.protobuf.message.Message): """StateItem represents state key, value, and additional options to save state.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing.final + @typing_extensions.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -219,7 +215,7 @@ class StateItem(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... KEY_FIELD_NUMBER: builtins.int VALUE_FIELD_NUMBER: builtins.int @@ -235,15 +231,12 @@ class StateItem(google.protobuf.message.Message): """The entity tag which represents the specific version of data. The exact ETag format is defined by the corresponding data store. """ - @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """The metadata which will be passed to state store component.""" - @property def options(self) -> global___StateOptions: """Options for concurrency and consistency to save the state.""" - def __init__( self, *, @@ -253,12 +246,12 @@ class StateItem(google.protobuf.message.Message): metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., options: global___StateOptions | None = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["etag", b"etag", "options", b"options"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["etag", b"etag", "key", b"key", "metadata", b"metadata", "options", b"options", "value", b"value"]) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["etag", b"etag", "options", b"options"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["etag", b"etag", "key", b"key", "metadata", b"metadata", "options", b"options", "value", b"value"]) -> None: ... global___StateItem = StateItem -@typing.final +@typing_extensions.final class Etag(google.protobuf.message.Message): """Etag represents a state item version""" @@ -272,11 +265,11 @@ class Etag(google.protobuf.message.Message): *, value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["value", b"value"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["value", b"value"]) -> None: ... global___Etag = Etag -@typing.final +@typing_extensions.final class StateOptions(google.protobuf.message.Message): """StateOptions configures concurrency and consistency for state operations""" @@ -326,17 +319,17 @@ class StateOptions(google.protobuf.message.Message): concurrency: global___StateOptions.StateConcurrency.ValueType = ..., consistency: global___StateOptions.StateConsistency.ValueType = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["concurrency", b"concurrency", "consistency", b"consistency"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["concurrency", b"concurrency", "consistency", b"consistency"]) -> None: ... global___StateOptions = StateOptions -@typing.final +@typing_extensions.final class ConfigurationItem(google.protobuf.message.Message): """ConfigurationItem represents all the configuration with its name(key).""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing.final + @typing_extensions.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -350,7 +343,7 @@ class ConfigurationItem(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... VALUE_FIELD_NUMBER: builtins.int VERSION_FIELD_NUMBER: builtins.int @@ -362,7 +355,6 @@ class ConfigurationItem(google.protobuf.message.Message): @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """the metadata which will be passed to/from configuration store component.""" - def __init__( self, *, @@ -370,6 +362,6 @@ class ConfigurationItem(google.protobuf.message.Message): version: builtins.str = ..., metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["metadata", b"metadata", "value", b"value", "version", b"version"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["metadata", b"metadata", "value", b"value", "version", b"version"]) -> None: ... global___ConfigurationItem = ConfigurationItem diff --git a/dapr/proto/common/v1/common_pb2_grpc.py b/dapr/proto/common/v1/common_pb2_grpc.py index cd86bc6a..2daafffe 100644 --- a/dapr/proto/common/v1/common_pb2_grpc.py +++ b/dapr/proto/common/v1/common_pb2_grpc.py @@ -1,29 +1,4 @@ # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! """Client and server classes corresponding to protobuf-defined services.""" import grpc -import warnings - -GRPC_GENERATED_VERSION = '1.63.0' -GRPC_VERSION = grpc.__version__ -EXPECTED_ERROR_RELEASE = '1.65.0' -SCHEDULED_RELEASE_DATE = 'June 25, 2024' -_version_not_supported = False - -try: - from grpc._utilities import first_version_is_lower - _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) -except ImportError: - _version_not_supported = True - -if _version_not_supported: - warnings.warn( - f'The grpc package installed is at version {GRPC_VERSION},' - + f' but the generated code in dapr/proto/common/v1/common_pb2_grpc.py depends on' - + f' grpcio>={GRPC_GENERATED_VERSION}.' - + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' - + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' - + f' This warning will become an error in {EXPECTED_ERROR_RELEASE},' - + f' scheduled for release on {SCHEDULED_RELEASE_DATE}.', - RuntimeWarning - ) diff --git a/dapr/proto/runtime/v1/appcallback_pb2.py b/dapr/proto/runtime/v1/appcallback_pb2.py index b6f27030..f661ff99 100644 --- a/dapr/proto/runtime/v1/appcallback_pb2.py +++ b/dapr/proto/runtime/v1/appcallback_pb2.py @@ -1,7 +1,6 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: dapr/proto/runtime/v1/appcallback.proto -# Protobuf Python Version: 5.26.1 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool @@ -23,17 +22,18 @@ _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'dapr.proto.runtime.v1.appcallback_pb2', _globals) -if not _descriptor._USE_C_DESCRIPTORS: - _globals['DESCRIPTOR']._loaded_options = None - _globals['DESCRIPTOR']._serialized_options = b'\n\nio.dapr.v1B\025DaprAppCallbackProtosZ1github.com/dapr/dapr/pkg/proto/runtime/v1;runtime\252\002 Dapr.AppCallback.Autogen.Grpc.v1' - _globals['_TOPICEVENTBULKREQUESTENTRY_METADATAENTRY']._loaded_options = None - _globals['_TOPICEVENTBULKREQUESTENTRY_METADATAENTRY']._serialized_options = b'8\001' - _globals['_TOPICEVENTBULKREQUEST_METADATAENTRY']._loaded_options = None - _globals['_TOPICEVENTBULKREQUEST_METADATAENTRY']._serialized_options = b'8\001' - _globals['_BINDINGEVENTREQUEST_METADATAENTRY']._loaded_options = None - _globals['_BINDINGEVENTREQUEST_METADATAENTRY']._serialized_options = b'8\001' - _globals['_TOPICSUBSCRIPTION_METADATAENTRY']._loaded_options = None - _globals['_TOPICSUBSCRIPTION_METADATAENTRY']._serialized_options = b'8\001' +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\nio.dapr.v1B\025DaprAppCallbackProtosZ1github.com/dapr/dapr/pkg/proto/runtime/v1;runtime\252\002 Dapr.AppCallback.Autogen.Grpc.v1' + _TOPICEVENTBULKREQUESTENTRY_METADATAENTRY._options = None + _TOPICEVENTBULKREQUESTENTRY_METADATAENTRY._serialized_options = b'8\001' + _TOPICEVENTBULKREQUEST_METADATAENTRY._options = None + _TOPICEVENTBULKREQUEST_METADATAENTRY._serialized_options = b'8\001' + _BINDINGEVENTREQUEST_METADATAENTRY._options = None + _BINDINGEVENTREQUEST_METADATAENTRY._serialized_options = b'8\001' + _TOPICSUBSCRIPTION_METADATAENTRY._options = None + _TOPICSUBSCRIPTION_METADATAENTRY._serialized_options = b'8\001' _globals['_JOBEVENTREQUEST']._serialized_start=188 _globals['_JOBEVENTREQUEST']._serialized_end=354 _globals['_JOBEVENTRESPONSE']._serialized_start=356 diff --git a/dapr/proto/runtime/v1/appcallback_pb2.pyi b/dapr/proto/runtime/v1/appcallback_pb2.pyi index 6c12dc57..b302559f 100644 --- a/dapr/proto/runtime/v1/appcallback_pb2.pyi +++ b/dapr/proto/runtime/v1/appcallback_pb2.pyi @@ -13,7 +13,6 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. """ - import builtins import collections.abc import dapr.proto.common.v1.common_pb2 @@ -33,7 +32,7 @@ else: DESCRIPTOR: google.protobuf.descriptor.FileDescriptor -@typing.final +@typing_extensions.final class JobEventRequest(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -44,6 +43,9 @@ class JobEventRequest(google.protobuf.message.Message): HTTP_EXTENSION_FIELD_NUMBER: builtins.int name: builtins.str """Job name.""" + @property + def data(self) -> google.protobuf.any_pb2.Any: + """Job data to be sent back to app.""" method: builtins.str """Required. method is a method name which will be invoked by caller.""" content_type: builtins.str @@ -52,10 +54,6 @@ class JobEventRequest(google.protobuf.message.Message): This field is required if data delivers http request body Otherwise, this is optional. """ - @property - def data(self) -> google.protobuf.any_pb2.Any: - """Job data to be sent back to app.""" - @property def http_extension(self) -> dapr.proto.common.v1.common_pb2.HTTPExtension: """HTTP specific fields if request conveys http-compatible request. @@ -63,7 +61,6 @@ class JobEventRequest(google.protobuf.message.Message): This field is required for http-compatible request. Otherwise, this field is optional. """ - def __init__( self, *, @@ -73,12 +70,12 @@ class JobEventRequest(google.protobuf.message.Message): content_type: builtins.str = ..., http_extension: dapr.proto.common.v1.common_pb2.HTTPExtension | None = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["data", b"data", "http_extension", b"http_extension"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["content_type", b"content_type", "data", b"data", "http_extension", b"http_extension", "method", b"method", "name", b"name"]) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["data", b"data", "http_extension", b"http_extension"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["content_type", b"content_type", "data", b"data", "http_extension", b"http_extension", "method", b"method", "name", b"name"]) -> None: ... global___JobEventRequest = JobEventRequest -@typing.final +@typing_extensions.final class JobEventResponse(google.protobuf.message.Message): """JobEventResponse is the response from the app when a job is triggered.""" @@ -90,7 +87,7 @@ class JobEventResponse(google.protobuf.message.Message): global___JobEventResponse = JobEventResponse -@typing.final +@typing_extensions.final class TopicEventRequest(google.protobuf.message.Message): """TopicEventRequest message is compatible with CloudEvent spec v1.0 https://github.com/cloudevents/spec/blob/v1.0/spec.md @@ -139,7 +136,6 @@ class TopicEventRequest(google.protobuf.message.Message): @property def extensions(self) -> google.protobuf.struct_pb2.Struct: """The map of additional custom properties to be sent to the app. These are considered to be cloud event extensions.""" - def __init__( self, *, @@ -154,12 +150,12 @@ class TopicEventRequest(google.protobuf.message.Message): path: builtins.str = ..., extensions: google.protobuf.struct_pb2.Struct | None = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["extensions", b"extensions"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["data", b"data", "data_content_type", b"data_content_type", "extensions", b"extensions", "id", b"id", "path", b"path", "pubsub_name", b"pubsub_name", "source", b"source", "spec_version", b"spec_version", "topic", b"topic", "type", b"type"]) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["extensions", b"extensions"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["data", b"data", "data_content_type", b"data_content_type", "extensions", b"extensions", "id", b"id", "path", b"path", "pubsub_name", b"pubsub_name", "source", b"source", "spec_version", b"spec_version", "topic", b"topic", "type", b"type"]) -> None: ... global___TopicEventRequest = TopicEventRequest -@typing.final +@typing_extensions.final class TopicEventResponse(google.protobuf.message.Message): """TopicEventResponse is response from app on published message""" @@ -196,11 +192,11 @@ class TopicEventResponse(google.protobuf.message.Message): *, status: global___TopicEventResponse.TopicEventResponseStatus.ValueType = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["status", b"status"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["status", b"status"]) -> None: ... global___TopicEventResponse = TopicEventResponse -@typing.final +@typing_extensions.final class TopicEventCERequest(google.protobuf.message.Message): """TopicEventCERequest message is compatible with CloudEvent spec v1.0""" @@ -228,7 +224,6 @@ class TopicEventCERequest(google.protobuf.message.Message): @property def extensions(self) -> google.protobuf.struct_pb2.Struct: """Custom attributes which includes cloud event extensions.""" - def __init__( self, *, @@ -240,18 +235,18 @@ class TopicEventCERequest(google.protobuf.message.Message): data: builtins.bytes = ..., extensions: google.protobuf.struct_pb2.Struct | None = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["extensions", b"extensions"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["data", b"data", "data_content_type", b"data_content_type", "extensions", b"extensions", "id", b"id", "source", b"source", "spec_version", b"spec_version", "type", b"type"]) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["extensions", b"extensions"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["data", b"data", "data_content_type", b"data_content_type", "extensions", b"extensions", "id", b"id", "source", b"source", "spec_version", b"spec_version", "type", b"type"]) -> None: ... global___TopicEventCERequest = TopicEventCERequest -@typing.final +@typing_extensions.final class TopicEventBulkRequestEntry(google.protobuf.message.Message): """TopicEventBulkRequestEntry represents a single message inside a bulk request""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing.final + @typing_extensions.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -265,7 +260,7 @@ class TopicEventBulkRequestEntry(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... ENTRY_ID_FIELD_NUMBER: builtins.int BYTES_FIELD_NUMBER: builtins.int @@ -275,14 +270,13 @@ class TopicEventBulkRequestEntry(google.protobuf.message.Message): entry_id: builtins.str """Unique identifier for the message.""" bytes: builtins.bytes - content_type: builtins.str - """content type of the event contained.""" @property def cloud_event(self) -> global___TopicEventCERequest: ... + content_type: builtins.str + """content type of the event contained.""" @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """The metadata associated with the event.""" - def __init__( self, *, @@ -292,19 +286,19 @@ class TopicEventBulkRequestEntry(google.protobuf.message.Message): content_type: builtins.str = ..., metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["bytes", b"bytes", "cloud_event", b"cloud_event", "event", b"event"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["bytes", b"bytes", "cloud_event", b"cloud_event", "content_type", b"content_type", "entry_id", b"entry_id", "event", b"event", "metadata", b"metadata"]) -> None: ... - def WhichOneof(self, oneof_group: typing.Literal["event", b"event"]) -> typing.Literal["bytes", "cloud_event"] | None: ... + def HasField(self, field_name: typing_extensions.Literal["bytes", b"bytes", "cloud_event", b"cloud_event", "event", b"event"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["bytes", b"bytes", "cloud_event", b"cloud_event", "content_type", b"content_type", "entry_id", b"entry_id", "event", b"event", "metadata", b"metadata"]) -> None: ... + def WhichOneof(self, oneof_group: typing_extensions.Literal["event", b"event"]) -> typing_extensions.Literal["bytes", "cloud_event"] | None: ... global___TopicEventBulkRequestEntry = TopicEventBulkRequestEntry -@typing.final +@typing_extensions.final class TopicEventBulkRequest(google.protobuf.message.Message): """TopicEventBulkRequest represents request for bulk message""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing.final + @typing_extensions.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -318,7 +312,7 @@ class TopicEventBulkRequest(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... ID_FIELD_NUMBER: builtins.int ENTRIES_FIELD_NUMBER: builtins.int @@ -329,6 +323,12 @@ class TopicEventBulkRequest(google.protobuf.message.Message): PATH_FIELD_NUMBER: builtins.int id: builtins.str """Unique identifier for the bulk request.""" + @property + def entries(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___TopicEventBulkRequestEntry]: + """The list of items inside this bulk request.""" + @property + def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: + """The metadata associated with the this bulk request.""" topic: builtins.str """The pubsub topic which publisher sent to.""" pubsub_name: builtins.str @@ -339,14 +339,6 @@ class TopicEventBulkRequest(google.protobuf.message.Message): """The matching path from TopicSubscription/routes (if specified) for this event. This value is used by OnTopicEvent to "switch" inside the handler. """ - @property - def entries(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___TopicEventBulkRequestEntry]: - """The list of items inside this bulk request.""" - - @property - def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: - """The metadata associated with the this bulk request.""" - def __init__( self, *, @@ -358,11 +350,11 @@ class TopicEventBulkRequest(google.protobuf.message.Message): type: builtins.str = ..., path: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["entries", b"entries", "id", b"id", "metadata", b"metadata", "path", b"path", "pubsub_name", b"pubsub_name", "topic", b"topic", "type", b"type"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["entries", b"entries", "id", b"id", "metadata", b"metadata", "path", b"path", "pubsub_name", b"pubsub_name", "topic", b"topic", "type", b"type"]) -> None: ... global___TopicEventBulkRequest = TopicEventBulkRequest -@typing.final +@typing_extensions.final class TopicEventBulkResponseEntry(google.protobuf.message.Message): """TopicEventBulkResponseEntry Represents single response, as part of TopicEventBulkResponse, to be sent by subscibed App for the corresponding single message during bulk subscribe @@ -382,11 +374,11 @@ class TopicEventBulkResponseEntry(google.protobuf.message.Message): entry_id: builtins.str = ..., status: global___TopicEventResponse.TopicEventResponseStatus.ValueType = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["entry_id", b"entry_id", "status", b"status"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["entry_id", b"entry_id", "status", b"status"]) -> None: ... global___TopicEventBulkResponseEntry = TopicEventBulkResponseEntry -@typing.final +@typing_extensions.final class TopicEventBulkResponse(google.protobuf.message.Message): """AppBulkResponse is response from app on published message""" @@ -396,23 +388,22 @@ class TopicEventBulkResponse(google.protobuf.message.Message): @property def statuses(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___TopicEventBulkResponseEntry]: """The list of all responses for the bulk request.""" - def __init__( self, *, statuses: collections.abc.Iterable[global___TopicEventBulkResponseEntry] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["statuses", b"statuses"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["statuses", b"statuses"]) -> None: ... global___TopicEventBulkResponse = TopicEventBulkResponse -@typing.final +@typing_extensions.final class BindingEventRequest(google.protobuf.message.Message): """BindingEventRequest represents input bindings event.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing.final + @typing_extensions.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -426,7 +417,7 @@ class BindingEventRequest(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... NAME_FIELD_NUMBER: builtins.int DATA_FIELD_NUMBER: builtins.int @@ -438,7 +429,6 @@ class BindingEventRequest(google.protobuf.message.Message): @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """The metadata set by the input binging components.""" - def __init__( self, *, @@ -446,11 +436,11 @@ class BindingEventRequest(google.protobuf.message.Message): data: builtins.bytes = ..., metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["data", b"data", "metadata", b"metadata", "name", b"name"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["data", b"data", "metadata", b"metadata", "name", b"name"]) -> None: ... global___BindingEventRequest = BindingEventRequest -@typing.final +@typing_extensions.final class BindingEventResponse(google.protobuf.message.Message): """BindingEventResponse includes operations to save state or send data to output bindings optionally. @@ -484,20 +474,18 @@ class BindingEventResponse(google.protobuf.message.Message): CONCURRENCY_FIELD_NUMBER: builtins.int store_name: builtins.str """The name of state store where states are saved.""" - data: builtins.bytes - """The content which will be sent to "to" output bindings.""" - concurrency: global___BindingEventResponse.BindingEventConcurrency.ValueType - """The concurrency of output bindings to send data to - "to" output bindings list. The default is SEQUENTIAL. - """ @property def states(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[dapr.proto.common.v1.common_pb2.StateItem]: """The state key values which will be stored in store_name.""" - @property def to(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]: """The list of output bindings.""" - + data: builtins.bytes + """The content which will be sent to "to" output bindings.""" + concurrency: global___BindingEventResponse.BindingEventConcurrency.ValueType + """The concurrency of output bindings to send data to + "to" output bindings list. The default is SEQUENTIAL. + """ def __init__( self, *, @@ -507,11 +495,11 @@ class BindingEventResponse(google.protobuf.message.Message): data: builtins.bytes = ..., concurrency: global___BindingEventResponse.BindingEventConcurrency.ValueType = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["concurrency", b"concurrency", "data", b"data", "states", b"states", "store_name", b"store_name", "to", b"to"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["concurrency", b"concurrency", "data", b"data", "states", b"states", "store_name", b"store_name", "to", b"to"]) -> None: ... global___BindingEventResponse = BindingEventResponse -@typing.final +@typing_extensions.final class ListTopicSubscriptionsResponse(google.protobuf.message.Message): """ListTopicSubscriptionsResponse is the message including the list of the subscribing topics.""" @@ -521,23 +509,22 @@ class ListTopicSubscriptionsResponse(google.protobuf.message.Message): @property def subscriptions(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___TopicSubscription]: """The list of topics.""" - def __init__( self, *, subscriptions: collections.abc.Iterable[global___TopicSubscription] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["subscriptions", b"subscriptions"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["subscriptions", b"subscriptions"]) -> None: ... global___ListTopicSubscriptionsResponse = ListTopicSubscriptionsResponse -@typing.final +@typing_extensions.final class TopicSubscription(google.protobuf.message.Message): """TopicSubscription represents topic and metadata.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing.final + @typing_extensions.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -551,7 +538,7 @@ class TopicSubscription(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... PUBSUB_NAME_FIELD_NUMBER: builtins.int TOPIC_FIELD_NUMBER: builtins.int @@ -563,22 +550,19 @@ class TopicSubscription(google.protobuf.message.Message): """Required. The name of the pubsub containing the topic below to subscribe to.""" topic: builtins.str """Required. The name of topic which will be subscribed""" - dead_letter_topic: builtins.str - """The optional dead letter queue for this topic to send events to.""" @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """The optional properties used for this topic's subscription e.g. session id""" - @property def routes(self) -> global___TopicRoutes: """The optional routing rules to match against. In the gRPC interface, OnTopicEvent is still invoked but the matching path is sent in the TopicEventRequest. """ - + dead_letter_topic: builtins.str + """The optional dead letter queue for this topic to send events to.""" @property def bulk_subscribe(self) -> global___BulkSubscribeConfig: """The optional bulk subscribe settings for this topic.""" - def __init__( self, *, @@ -589,34 +573,33 @@ class TopicSubscription(google.protobuf.message.Message): dead_letter_topic: builtins.str = ..., bulk_subscribe: global___BulkSubscribeConfig | None = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["bulk_subscribe", b"bulk_subscribe", "routes", b"routes"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["bulk_subscribe", b"bulk_subscribe", "dead_letter_topic", b"dead_letter_topic", "metadata", b"metadata", "pubsub_name", b"pubsub_name", "routes", b"routes", "topic", b"topic"]) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["bulk_subscribe", b"bulk_subscribe", "routes", b"routes"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["bulk_subscribe", b"bulk_subscribe", "dead_letter_topic", b"dead_letter_topic", "metadata", b"metadata", "pubsub_name", b"pubsub_name", "routes", b"routes", "topic", b"topic"]) -> None: ... global___TopicSubscription = TopicSubscription -@typing.final +@typing_extensions.final class TopicRoutes(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor RULES_FIELD_NUMBER: builtins.int DEFAULT_FIELD_NUMBER: builtins.int - default: builtins.str - """The default path for this topic.""" @property def rules(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___TopicRule]: """The list of rules for this topic.""" - + default: builtins.str + """The default path for this topic.""" def __init__( self, *, rules: collections.abc.Iterable[global___TopicRule] | None = ..., default: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["default", b"default", "rules", b"rules"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["default", b"default", "rules", b"rules"]) -> None: ... global___TopicRoutes = TopicRoutes -@typing.final +@typing_extensions.final class TopicRule(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -638,11 +621,11 @@ class TopicRule(google.protobuf.message.Message): match: builtins.str = ..., path: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["match", b"match", "path", b"path"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["match", b"match", "path", b"path"]) -> None: ... global___TopicRule = TopicRule -@typing.final +@typing_extensions.final class BulkSubscribeConfig(google.protobuf.message.Message): """BulkSubscribeConfig is the message to pass settings for bulk subscribe""" @@ -664,11 +647,11 @@ class BulkSubscribeConfig(google.protobuf.message.Message): max_messages_count: builtins.int = ..., max_await_duration_ms: builtins.int = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["enabled", b"enabled", "max_await_duration_ms", b"max_await_duration_ms", "max_messages_count", b"max_messages_count"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["enabled", b"enabled", "max_await_duration_ms", b"max_await_duration_ms", "max_messages_count", b"max_messages_count"]) -> None: ... global___BulkSubscribeConfig = BulkSubscribeConfig -@typing.final +@typing_extensions.final class ListInputBindingsResponse(google.protobuf.message.Message): """ListInputBindingsResponse is the message including the list of input bindings.""" @@ -678,17 +661,16 @@ class ListInputBindingsResponse(google.protobuf.message.Message): @property def bindings(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]: """The list of input bindings.""" - def __init__( self, *, bindings: collections.abc.Iterable[builtins.str] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["bindings", b"bindings"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["bindings", b"bindings"]) -> None: ... global___ListInputBindingsResponse = ListInputBindingsResponse -@typing.final +@typing_extensions.final class HealthCheckResponse(google.protobuf.message.Message): """HealthCheckResponse is the message with the response to the health check. This message is currently empty as used as placeholder. diff --git a/dapr/proto/runtime/v1/appcallback_pb2_grpc.py b/dapr/proto/runtime/v1/appcallback_pb2_grpc.py index 92a05f46..b203f7db 100644 --- a/dapr/proto/runtime/v1/appcallback_pb2_grpc.py +++ b/dapr/proto/runtime/v1/appcallback_pb2_grpc.py @@ -1,36 +1,11 @@ # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! """Client and server classes corresponding to protobuf-defined services.""" import grpc -import warnings from dapr.proto.common.v1 import common_pb2 as dapr_dot_proto_dot_common_dot_v1_dot_common__pb2 from dapr.proto.runtime.v1 import appcallback_pb2 as dapr_dot_proto_dot_runtime_dot_v1_dot_appcallback__pb2 from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 -GRPC_GENERATED_VERSION = '1.63.0' -GRPC_VERSION = grpc.__version__ -EXPECTED_ERROR_RELEASE = '1.65.0' -SCHEDULED_RELEASE_DATE = 'June 25, 2024' -_version_not_supported = False - -try: - from grpc._utilities import first_version_is_lower - _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) -except ImportError: - _version_not_supported = True - -if _version_not_supported: - warnings.warn( - f'The grpc package installed is at version {GRPC_VERSION},' - + f' but the generated code in dapr/proto/runtime/v1/appcallback_pb2_grpc.py depends on' - + f' grpcio>={GRPC_GENERATED_VERSION}.' - + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' - + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' - + f' This warning will become an error in {EXPECTED_ERROR_RELEASE},' - + f' scheduled for release on {SCHEDULED_RELEASE_DATE}.', - RuntimeWarning - ) - class AppCallbackStub(object): """AppCallback V1 allows user application to interact with Dapr runtime. @@ -48,27 +23,27 @@ def __init__(self, channel): '/dapr.proto.runtime.v1.AppCallback/OnInvoke', request_serializer=dapr_dot_proto_dot_common_dot_v1_dot_common__pb2.InvokeRequest.SerializeToString, response_deserializer=dapr_dot_proto_dot_common_dot_v1_dot_common__pb2.InvokeResponse.FromString, - _registered_method=True) + ) self.ListTopicSubscriptions = channel.unary_unary( '/dapr.proto.runtime.v1.AppCallback/ListTopicSubscriptions', request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, response_deserializer=dapr_dot_proto_dot_runtime_dot_v1_dot_appcallback__pb2.ListTopicSubscriptionsResponse.FromString, - _registered_method=True) + ) self.OnTopicEvent = channel.unary_unary( '/dapr.proto.runtime.v1.AppCallback/OnTopicEvent', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_appcallback__pb2.TopicEventRequest.SerializeToString, response_deserializer=dapr_dot_proto_dot_runtime_dot_v1_dot_appcallback__pb2.TopicEventResponse.FromString, - _registered_method=True) + ) self.ListInputBindings = channel.unary_unary( '/dapr.proto.runtime.v1.AppCallback/ListInputBindings', request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, response_deserializer=dapr_dot_proto_dot_runtime_dot_v1_dot_appcallback__pb2.ListInputBindingsResponse.FromString, - _registered_method=True) + ) self.OnBindingEvent = channel.unary_unary( '/dapr.proto.runtime.v1.AppCallback/OnBindingEvent', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_appcallback__pb2.BindingEventRequest.SerializeToString, response_deserializer=dapr_dot_proto_dot_runtime_dot_v1_dot_appcallback__pb2.BindingEventResponse.FromString, - _registered_method=True) + ) class AppCallbackServicer(object): @@ -167,21 +142,11 @@ def OnInvoke(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.AppCallback/OnInvoke', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.AppCallback/OnInvoke', dapr_dot_proto_dot_common_dot_v1_dot_common__pb2.InvokeRequest.SerializeToString, dapr_dot_proto_dot_common_dot_v1_dot_common__pb2.InvokeResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def ListTopicSubscriptions(request, @@ -194,21 +159,11 @@ def ListTopicSubscriptions(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.AppCallback/ListTopicSubscriptions', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.AppCallback/ListTopicSubscriptions', google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, dapr_dot_proto_dot_runtime_dot_v1_dot_appcallback__pb2.ListTopicSubscriptionsResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def OnTopicEvent(request, @@ -221,21 +176,11 @@ def OnTopicEvent(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.AppCallback/OnTopicEvent', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.AppCallback/OnTopicEvent', dapr_dot_proto_dot_runtime_dot_v1_dot_appcallback__pb2.TopicEventRequest.SerializeToString, dapr_dot_proto_dot_runtime_dot_v1_dot_appcallback__pb2.TopicEventResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def ListInputBindings(request, @@ -248,21 +193,11 @@ def ListInputBindings(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.AppCallback/ListInputBindings', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.AppCallback/ListInputBindings', google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, dapr_dot_proto_dot_runtime_dot_v1_dot_appcallback__pb2.ListInputBindingsResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def OnBindingEvent(request, @@ -275,21 +210,11 @@ def OnBindingEvent(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.AppCallback/OnBindingEvent', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.AppCallback/OnBindingEvent', dapr_dot_proto_dot_runtime_dot_v1_dot_appcallback__pb2.BindingEventRequest.SerializeToString, dapr_dot_proto_dot_runtime_dot_v1_dot_appcallback__pb2.BindingEventResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) class AppCallbackHealthCheckStub(object): @@ -307,7 +232,7 @@ def __init__(self, channel): '/dapr.proto.runtime.v1.AppCallbackHealthCheck/HealthCheck', request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, response_deserializer=dapr_dot_proto_dot_runtime_dot_v1_dot_appcallback__pb2.HealthCheckResponse.FromString, - _registered_method=True) + ) class AppCallbackHealthCheckServicer(object): @@ -353,21 +278,11 @@ def HealthCheck(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.AppCallbackHealthCheck/HealthCheck', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.AppCallbackHealthCheck/HealthCheck', google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, dapr_dot_proto_dot_runtime_dot_v1_dot_appcallback__pb2.HealthCheckResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) class AppCallbackAlphaStub(object): @@ -385,12 +300,12 @@ def __init__(self, channel): '/dapr.proto.runtime.v1.AppCallbackAlpha/OnBulkTopicEventAlpha1', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_appcallback__pb2.TopicEventBulkRequest.SerializeToString, response_deserializer=dapr_dot_proto_dot_runtime_dot_v1_dot_appcallback__pb2.TopicEventBulkResponse.FromString, - _registered_method=True) + ) self.OnJobEventAlpha1 = channel.unary_unary( '/dapr.proto.runtime.v1.AppCallbackAlpha/OnJobEventAlpha1', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_appcallback__pb2.JobEventRequest.SerializeToString, response_deserializer=dapr_dot_proto_dot_runtime_dot_v1_dot_appcallback__pb2.JobEventResponse.FromString, - _registered_method=True) + ) class AppCallbackAlphaServicer(object): @@ -448,21 +363,11 @@ def OnBulkTopicEventAlpha1(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.AppCallbackAlpha/OnBulkTopicEventAlpha1', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.AppCallbackAlpha/OnBulkTopicEventAlpha1', dapr_dot_proto_dot_runtime_dot_v1_dot_appcallback__pb2.TopicEventBulkRequest.SerializeToString, dapr_dot_proto_dot_runtime_dot_v1_dot_appcallback__pb2.TopicEventBulkResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def OnJobEventAlpha1(request, @@ -475,18 +380,8 @@ def OnJobEventAlpha1(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.AppCallbackAlpha/OnJobEventAlpha1', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.AppCallbackAlpha/OnJobEventAlpha1', dapr_dot_proto_dot_runtime_dot_v1_dot_appcallback__pb2.JobEventRequest.SerializeToString, dapr_dot_proto_dot_runtime_dot_v1_dot_appcallback__pb2.JobEventResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/dapr/proto/runtime/v1/dapr_pb2.py b/dapr/proto/runtime/v1/dapr_pb2.py index e46a132a..e2e9ccbc 100644 --- a/dapr/proto/runtime/v1/dapr_pb2.py +++ b/dapr/proto/runtime/v1/dapr_pb2.py @@ -1,7 +1,6 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: dapr/proto/runtime/v1/dapr.proto -# Protobuf Python Version: 5.26.1 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool @@ -19,78 +18,85 @@ from dapr.proto.runtime.v1 import appcallback_pb2 as dapr_dot_proto_dot_runtime_dot_v1_dot_appcallback__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n dapr/proto/runtime/v1/dapr.proto\x12\x15\x64\x61pr.proto.runtime.v1\x1a\x19google/protobuf/any.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a!dapr/proto/common/v1/common.proto\x1a\'dapr/proto/runtime/v1/appcallback.proto\"X\n\x14InvokeServiceRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x34\n\x07message\x18\x03 \x01(\x0b\x32#.dapr.proto.common.v1.InvokeRequest\"\xf5\x01\n\x0fGetStateRequest\x12\x12\n\nstore_name\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\t\x12H\n\x0b\x63onsistency\x18\x03 \x01(\x0e\x32\x33.dapr.proto.common.v1.StateOptions.StateConsistency\x12\x46\n\x08metadata\x18\x04 \x03(\x0b\x32\x34.dapr.proto.runtime.v1.GetStateRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xc9\x01\n\x13GetBulkStateRequest\x12\x12\n\nstore_name\x18\x01 \x01(\t\x12\x0c\n\x04keys\x18\x02 \x03(\t\x12\x13\n\x0bparallelism\x18\x03 \x01(\x05\x12J\n\x08metadata\x18\x04 \x03(\x0b\x32\x38.dapr.proto.runtime.v1.GetBulkStateRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"K\n\x14GetBulkStateResponse\x12\x33\n\x05items\x18\x01 \x03(\x0b\x32$.dapr.proto.runtime.v1.BulkStateItem\"\xbe\x01\n\rBulkStateItem\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\x12\x0c\n\x04\x65tag\x18\x03 \x01(\t\x12\r\n\x05\x65rror\x18\x04 \x01(\t\x12\x44\n\x08metadata\x18\x05 \x03(\x0b\x32\x32.dapr.proto.runtime.v1.BulkStateItem.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xa8\x01\n\x10GetStateResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\x12\x0c\n\x04\x65tag\x18\x02 \x01(\t\x12G\n\x08metadata\x18\x03 \x03(\x0b\x32\x35.dapr.proto.runtime.v1.GetStateResponse.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x90\x02\n\x12\x44\x65leteStateRequest\x12\x12\n\nstore_name\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\t\x12(\n\x04\x65tag\x18\x03 \x01(\x0b\x32\x1a.dapr.proto.common.v1.Etag\x12\x33\n\x07options\x18\x04 \x01(\x0b\x32\".dapr.proto.common.v1.StateOptions\x12I\n\x08metadata\x18\x05 \x03(\x0b\x32\x37.dapr.proto.runtime.v1.DeleteStateRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"]\n\x16\x44\x65leteBulkStateRequest\x12\x12\n\nstore_name\x18\x01 \x01(\t\x12/\n\x06states\x18\x02 \x03(\x0b\x32\x1f.dapr.proto.common.v1.StateItem\"W\n\x10SaveStateRequest\x12\x12\n\nstore_name\x18\x01 \x01(\t\x12/\n\x06states\x18\x02 \x03(\x0b\x32\x1f.dapr.proto.common.v1.StateItem\"\xbc\x01\n\x11QueryStateRequest\x12\x1d\n\nstore_name\x18\x01 \x01(\tR\tstoreName\x12\r\n\x05query\x18\x02 \x01(\t\x12H\n\x08metadata\x18\x03 \x03(\x0b\x32\x36.dapr.proto.runtime.v1.QueryStateRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"H\n\x0eQueryStateItem\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\x12\x0c\n\x04\x65tag\x18\x03 \x01(\t\x12\r\n\x05\x65rror\x18\x04 \x01(\t\"\xd7\x01\n\x12QueryStateResponse\x12\x36\n\x07results\x18\x01 \x03(\x0b\x32%.dapr.proto.runtime.v1.QueryStateItem\x12\r\n\x05token\x18\x02 \x01(\t\x12I\n\x08metadata\x18\x03 \x03(\x0b\x32\x37.dapr.proto.runtime.v1.QueryStateResponse.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xdf\x01\n\x13PublishEventRequest\x12\x13\n\x0bpubsub_name\x18\x01 \x01(\t\x12\r\n\x05topic\x18\x02 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\x0c\x12\x19\n\x11\x64\x61ta_content_type\x18\x04 \x01(\t\x12J\n\x08metadata\x18\x05 \x03(\x0b\x32\x38.dapr.proto.runtime.v1.PublishEventRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xf5\x01\n\x12\x42ulkPublishRequest\x12\x13\n\x0bpubsub_name\x18\x01 \x01(\t\x12\r\n\x05topic\x18\x02 \x01(\t\x12?\n\x07\x65ntries\x18\x03 \x03(\x0b\x32..dapr.proto.runtime.v1.BulkPublishRequestEntry\x12I\n\x08metadata\x18\x04 \x03(\x0b\x32\x37.dapr.proto.runtime.v1.BulkPublishRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xd1\x01\n\x17\x42ulkPublishRequestEntry\x12\x10\n\x08\x65ntry_id\x18\x01 \x01(\t\x12\r\n\x05\x65vent\x18\x02 \x01(\x0c\x12\x14\n\x0c\x63ontent_type\x18\x03 \x01(\t\x12N\n\x08metadata\x18\x04 \x03(\x0b\x32<.dapr.proto.runtime.v1.BulkPublishRequestEntry.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"c\n\x13\x42ulkPublishResponse\x12L\n\rfailedEntries\x18\x01 \x03(\x0b\x32\x35.dapr.proto.runtime.v1.BulkPublishResponseFailedEntry\"A\n\x1e\x42ulkPublishResponseFailedEntry\x12\x10\n\x08\x65ntry_id\x18\x01 \x01(\t\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"\xfb\x01\n!SubscribeTopicEventsRequestAlpha1\x12Z\n\x0finitial_request\x18\x01 \x01(\x0b\x32?.dapr.proto.runtime.v1.SubscribeTopicEventsInitialRequestAlpha1H\x00\x12S\n\x0e\x65vent_response\x18\x02 \x01(\x0b\x32\x39.dapr.proto.runtime.v1.SubscribeTopicEventsResponseAlpha1H\x00\x42%\n#subscribe_topic_events_request_type\"\x96\x02\n(SubscribeTopicEventsInitialRequestAlpha1\x12\x13\n\x0bpubsub_name\x18\x01 \x01(\t\x12\r\n\x05topic\x18\x02 \x01(\t\x12_\n\x08metadata\x18\x03 \x03(\x0b\x32M.dapr.proto.runtime.v1.SubscribeTopicEventsInitialRequestAlpha1.MetadataEntry\x12\x1e\n\x11\x64\x65\x61\x64_letter_topic\x18\x04 \x01(\tH\x00\x88\x01\x01\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x14\n\x12_dead_letter_topic\"k\n\"SubscribeTopicEventsResponseAlpha1\x12\n\n\x02id\x18\x01 \x01(\t\x12\x39\n\x06status\x18\x02 \x01(\x0b\x32).dapr.proto.runtime.v1.TopicEventResponse\"\xc3\x01\n\x14InvokeBindingRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\x12K\n\x08metadata\x18\x03 \x03(\x0b\x32\x39.dapr.proto.runtime.v1.InvokeBindingRequest.MetadataEntry\x12\x11\n\toperation\x18\x04 \x01(\t\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xa4\x01\n\x15InvokeBindingResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\x12L\n\x08metadata\x18\x02 \x03(\x0b\x32:.dapr.proto.runtime.v1.InvokeBindingResponse.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xb8\x01\n\x10GetSecretRequest\x12\x1d\n\nstore_name\x18\x01 \x01(\tR\tstoreName\x12\x0b\n\x03key\x18\x02 \x01(\t\x12G\n\x08metadata\x18\x03 \x03(\x0b\x32\x35.dapr.proto.runtime.v1.GetSecretRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x82\x01\n\x11GetSecretResponse\x12@\n\x04\x64\x61ta\x18\x01 \x03(\x0b\x32\x32.dapr.proto.runtime.v1.GetSecretResponse.DataEntry\x1a+\n\tDataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xb3\x01\n\x14GetBulkSecretRequest\x12\x1d\n\nstore_name\x18\x01 \x01(\tR\tstoreName\x12K\n\x08metadata\x18\x02 \x03(\x0b\x32\x39.dapr.proto.runtime.v1.GetBulkSecretRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x85\x01\n\x0eSecretResponse\x12\x43\n\x07secrets\x18\x01 \x03(\x0b\x32\x32.dapr.proto.runtime.v1.SecretResponse.SecretsEntry\x1a.\n\x0cSecretsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xb1\x01\n\x15GetBulkSecretResponse\x12\x44\n\x04\x64\x61ta\x18\x01 \x03(\x0b\x32\x36.dapr.proto.runtime.v1.GetBulkSecretResponse.DataEntry\x1aR\n\tDataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x34\n\x05value\x18\x02 \x01(\x0b\x32%.dapr.proto.runtime.v1.SecretResponse:\x02\x38\x01\"f\n\x1bTransactionalStateOperation\x12\x15\n\roperationType\x18\x01 \x01(\t\x12\x30\n\x07request\x18\x02 \x01(\x0b\x32\x1f.dapr.proto.common.v1.StateItem\"\x83\x02\n\x1e\x45xecuteStateTransactionRequest\x12\x11\n\tstoreName\x18\x01 \x01(\t\x12\x46\n\noperations\x18\x02 \x03(\x0b\x32\x32.dapr.proto.runtime.v1.TransactionalStateOperation\x12U\n\x08metadata\x18\x03 \x03(\x0b\x32\x43.dapr.proto.runtime.v1.ExecuteStateTransactionRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xbb\x01\n\x19RegisterActorTimerRequest\x12\x1d\n\nactor_type\x18\x01 \x01(\tR\tactorType\x12\x19\n\x08\x61\x63tor_id\x18\x02 \x01(\tR\x07\x61\x63torId\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x19\n\x08\x64ue_time\x18\x04 \x01(\tR\x07\x64ueTime\x12\x0e\n\x06period\x18\x05 \x01(\t\x12\x10\n\x08\x63\x61llback\x18\x06 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x07 \x01(\x0c\x12\x0b\n\x03ttl\x18\x08 \x01(\t\"e\n\x1bUnregisterActorTimerRequest\x12\x1d\n\nactor_type\x18\x01 \x01(\tR\tactorType\x12\x19\n\x08\x61\x63tor_id\x18\x02 \x01(\tR\x07\x61\x63torId\x12\x0c\n\x04name\x18\x03 \x01(\t\"\xac\x01\n\x1cRegisterActorReminderRequest\x12\x1d\n\nactor_type\x18\x01 \x01(\tR\tactorType\x12\x19\n\x08\x61\x63tor_id\x18\x02 \x01(\tR\x07\x61\x63torId\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x19\n\x08\x64ue_time\x18\x04 \x01(\tR\x07\x64ueTime\x12\x0e\n\x06period\x18\x05 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x06 \x01(\x0c\x12\x0b\n\x03ttl\x18\x07 \x01(\t\"h\n\x1eUnregisterActorReminderRequest\x12\x1d\n\nactor_type\x18\x01 \x01(\tR\tactorType\x12\x19\n\x08\x61\x63tor_id\x18\x02 \x01(\tR\x07\x61\x63torId\x12\x0c\n\x04name\x18\x03 \x01(\t\"]\n\x14GetActorStateRequest\x12\x1d\n\nactor_type\x18\x01 \x01(\tR\tactorType\x12\x19\n\x08\x61\x63tor_id\x18\x02 \x01(\tR\x07\x61\x63torId\x12\x0b\n\x03key\x18\x03 \x01(\t\"\xa4\x01\n\x15GetActorStateResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\x12L\n\x08metadata\x18\x02 \x03(\x0b\x32:.dapr.proto.runtime.v1.GetActorStateResponse.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xac\x01\n#ExecuteActorStateTransactionRequest\x12\x1d\n\nactor_type\x18\x01 \x01(\tR\tactorType\x12\x19\n\x08\x61\x63tor_id\x18\x02 \x01(\tR\x07\x61\x63torId\x12K\n\noperations\x18\x03 \x03(\x0b\x32\x37.dapr.proto.runtime.v1.TransactionalActorStateOperation\"\xf5\x01\n TransactionalActorStateOperation\x12\x15\n\roperationType\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\t\x12#\n\x05value\x18\x03 \x01(\x0b\x32\x14.google.protobuf.Any\x12W\n\x08metadata\x18\x04 \x03(\x0b\x32\x45.dapr.proto.runtime.v1.TransactionalActorStateOperation.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xe8\x01\n\x12InvokeActorRequest\x12\x1d\n\nactor_type\x18\x01 \x01(\tR\tactorType\x12\x19\n\x08\x61\x63tor_id\x18\x02 \x01(\tR\x07\x61\x63torId\x12\x0e\n\x06method\x18\x03 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\x0c\x12I\n\x08metadata\x18\x05 \x03(\x0b\x32\x37.dapr.proto.runtime.v1.InvokeActorRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"#\n\x13InvokeActorResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\"\x14\n\x12GetMetadataRequest\"\x9b\x06\n\x13GetMetadataResponse\x12\n\n\x02id\x18\x01 \x01(\t\x12Q\n\x13\x61\x63tive_actors_count\x18\x02 \x03(\x0b\x32(.dapr.proto.runtime.v1.ActiveActorsCountB\x02\x18\x01R\x06\x61\x63tors\x12V\n\x15registered_components\x18\x03 \x03(\x0b\x32+.dapr.proto.runtime.v1.RegisteredComponentsR\ncomponents\x12\x65\n\x11\x65xtended_metadata\x18\x04 \x03(\x0b\x32@.dapr.proto.runtime.v1.GetMetadataResponse.ExtendedMetadataEntryR\x08\x65xtended\x12O\n\rsubscriptions\x18\x05 \x03(\x0b\x32).dapr.proto.runtime.v1.PubsubSubscriptionR\rsubscriptions\x12R\n\x0ehttp_endpoints\x18\x06 \x03(\x0b\x32+.dapr.proto.runtime.v1.MetadataHTTPEndpointR\rhttpEndpoints\x12j\n\x19\x61pp_connection_properties\x18\x07 \x01(\x0b\x32..dapr.proto.runtime.v1.AppConnectionPropertiesR\x17\x61ppConnectionProperties\x12\'\n\x0fruntime_version\x18\x08 \x01(\tR\x0eruntimeVersion\x12)\n\x10\x65nabled_features\x18\t \x03(\tR\x0f\x65nabledFeatures\x12H\n\ractor_runtime\x18\n \x01(\x0b\x32#.dapr.proto.runtime.v1.ActorRuntimeR\x0c\x61\x63torRuntime\x1a\x37\n\x15\x45xtendedMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xbc\x02\n\x0c\x41\x63torRuntime\x12]\n\x0eruntime_status\x18\x01 \x01(\x0e\x32\x36.dapr.proto.runtime.v1.ActorRuntime.ActorRuntimeStatusR\rruntimeStatus\x12M\n\ractive_actors\x18\x02 \x03(\x0b\x32(.dapr.proto.runtime.v1.ActiveActorsCountR\x0c\x61\x63tiveActors\x12\x1d\n\nhost_ready\x18\x03 \x01(\x08R\thostReady\x12\x1c\n\tplacement\x18\x04 \x01(\tR\tplacement\"A\n\x12\x41\x63torRuntimeStatus\x12\x10\n\x0cINITIALIZING\x10\x00\x12\x0c\n\x08\x44ISABLED\x10\x01\x12\x0b\n\x07RUNNING\x10\x02\"0\n\x11\x41\x63tiveActorsCount\x12\x0c\n\x04type\x18\x01 \x01(\t\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"Y\n\x14RegisteredComponents\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04type\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\t\x12\x14\n\x0c\x63\x61pabilities\x18\x04 \x03(\t\"*\n\x14MetadataHTTPEndpoint\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\"\xd1\x01\n\x17\x41ppConnectionProperties\x12\x0c\n\x04port\x18\x01 \x01(\x05\x12\x10\n\x08protocol\x18\x02 \x01(\t\x12\'\n\x0f\x63hannel_address\x18\x03 \x01(\tR\x0e\x63hannelAddress\x12\'\n\x0fmax_concurrency\x18\x04 \x01(\x05R\x0emaxConcurrency\x12\x44\n\x06health\x18\x05 \x01(\x0b\x32\x34.dapr.proto.runtime.v1.AppConnectionHealthProperties\"\xdc\x01\n\x1d\x41ppConnectionHealthProperties\x12*\n\x11health_check_path\x18\x01 \x01(\tR\x0fhealthCheckPath\x12\x32\n\x15health_probe_interval\x18\x02 \x01(\tR\x13healthProbeInterval\x12\x30\n\x14health_probe_timeout\x18\x03 \x01(\tR\x12healthProbeTimeout\x12)\n\x10health_threshold\x18\x04 \x01(\x05R\x0fhealthThreshold\"\x86\x03\n\x12PubsubSubscription\x12\x1f\n\x0bpubsub_name\x18\x01 \x01(\tR\npubsubname\x12\x14\n\x05topic\x18\x02 \x01(\tR\x05topic\x12S\n\x08metadata\x18\x03 \x03(\x0b\x32\x37.dapr.proto.runtime.v1.PubsubSubscription.MetadataEntryR\x08metadata\x12\x44\n\x05rules\x18\x04 \x01(\x0b\x32..dapr.proto.runtime.v1.PubsubSubscriptionRulesR\x05rules\x12*\n\x11\x64\x65\x61\x64_letter_topic\x18\x05 \x01(\tR\x0f\x64\x65\x61\x64LetterTopic\x12\x41\n\x04type\x18\x06 \x01(\x0e\x32-.dapr.proto.runtime.v1.PubsubSubscriptionTypeR\x04type\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"W\n\x17PubsubSubscriptionRules\x12<\n\x05rules\x18\x01 \x03(\x0b\x32-.dapr.proto.runtime.v1.PubsubSubscriptionRule\"5\n\x16PubsubSubscriptionRule\x12\r\n\x05match\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\t\"0\n\x12SetMetadataRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"\xbc\x01\n\x17GetConfigurationRequest\x12\x12\n\nstore_name\x18\x01 \x01(\t\x12\x0c\n\x04keys\x18\x02 \x03(\t\x12N\n\x08metadata\x18\x03 \x03(\x0b\x32<.dapr.proto.runtime.v1.GetConfigurationRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xbc\x01\n\x18GetConfigurationResponse\x12I\n\x05items\x18\x01 \x03(\x0b\x32:.dapr.proto.runtime.v1.GetConfigurationResponse.ItemsEntry\x1aU\n\nItemsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x36\n\x05value\x18\x02 \x01(\x0b\x32\'.dapr.proto.common.v1.ConfigurationItem:\x02\x38\x01\"\xc8\x01\n\x1dSubscribeConfigurationRequest\x12\x12\n\nstore_name\x18\x01 \x01(\t\x12\x0c\n\x04keys\x18\x02 \x03(\t\x12T\n\x08metadata\x18\x03 \x03(\x0b\x32\x42.dapr.proto.runtime.v1.SubscribeConfigurationRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"A\n\x1fUnsubscribeConfigurationRequest\x12\x12\n\nstore_name\x18\x01 \x01(\t\x12\n\n\x02id\x18\x02 \x01(\t\"\xd4\x01\n\x1eSubscribeConfigurationResponse\x12\n\n\x02id\x18\x01 \x01(\t\x12O\n\x05items\x18\x02 \x03(\x0b\x32@.dapr.proto.runtime.v1.SubscribeConfigurationResponse.ItemsEntry\x1aU\n\nItemsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x36\n\x05value\x18\x02 \x01(\x0b\x32\'.dapr.proto.common.v1.ConfigurationItem:\x02\x38\x01\"?\n UnsubscribeConfigurationResponse\x12\n\n\x02ok\x18\x01 \x01(\x08\x12\x0f\n\x07message\x18\x02 \x01(\t\"\x9b\x01\n\x0eTryLockRequest\x12\x1d\n\nstore_name\x18\x01 \x01(\tR\tstoreName\x12\x1f\n\x0bresource_id\x18\x02 \x01(\tR\nresourceId\x12\x1d\n\nlock_owner\x18\x03 \x01(\tR\tlockOwner\x12*\n\x11\x65xpiry_in_seconds\x18\x04 \x01(\x05R\x0f\x65xpiryInSeconds\"\"\n\x0fTryLockResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\"n\n\rUnlockRequest\x12\x1d\n\nstore_name\x18\x01 \x01(\tR\tstoreName\x12\x1f\n\x0bresource_id\x18\x02 \x01(\tR\nresourceId\x12\x1d\n\nlock_owner\x18\x03 \x01(\tR\tlockOwner\"\xae\x01\n\x0eUnlockResponse\x12<\n\x06status\x18\x01 \x01(\x0e\x32,.dapr.proto.runtime.v1.UnlockResponse.Status\"^\n\x06Status\x12\x0b\n\x07SUCCESS\x10\x00\x12\x17\n\x13LOCK_DOES_NOT_EXIST\x10\x01\x12\x1a\n\x16LOCK_BELONGS_TO_OTHERS\x10\x02\x12\x12\n\x0eINTERNAL_ERROR\x10\x03\"\xb0\x01\n\x13SubtleGetKeyRequest\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x44\n\x06\x66ormat\x18\x03 \x01(\x0e\x32\x34.dapr.proto.runtime.v1.SubtleGetKeyRequest.KeyFormat\"\x1e\n\tKeyFormat\x12\x07\n\x03PEM\x10\x00\x12\x08\n\x04JSON\x10\x01\"C\n\x14SubtleGetKeyResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x1d\n\npublic_key\x18\x02 \x01(\tR\tpublicKey\"\xb6\x01\n\x14SubtleEncryptRequest\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12\x11\n\tplaintext\x18\x02 \x01(\x0c\x12\x11\n\talgorithm\x18\x03 \x01(\t\x12\x19\n\x08key_name\x18\x04 \x01(\tR\x07keyName\x12\r\n\x05nonce\x18\x05 \x01(\x0c\x12\'\n\x0f\x61ssociated_data\x18\x06 \x01(\x0cR\x0e\x61ssociatedData\"8\n\x15SubtleEncryptResponse\x12\x12\n\nciphertext\x18\x01 \x01(\x0c\x12\x0b\n\x03tag\x18\x02 \x01(\x0c\"\xc4\x01\n\x14SubtleDecryptRequest\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12\x12\n\nciphertext\x18\x02 \x01(\x0c\x12\x11\n\talgorithm\x18\x03 \x01(\t\x12\x19\n\x08key_name\x18\x04 \x01(\tR\x07keyName\x12\r\n\x05nonce\x18\x05 \x01(\x0c\x12\x0b\n\x03tag\x18\x06 \x01(\x0c\x12\'\n\x0f\x61ssociated_data\x18\x07 \x01(\x0cR\x0e\x61ssociatedData\"*\n\x15SubtleDecryptResponse\x12\x11\n\tplaintext\x18\x01 \x01(\x0c\"\xc8\x01\n\x14SubtleWrapKeyRequest\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12#\n\rplaintext_key\x18\x02 \x01(\x0cR\x0cplaintextKey\x12\x11\n\talgorithm\x18\x03 \x01(\t\x12\x19\n\x08key_name\x18\x04 \x01(\tR\x07keyName\x12\r\n\x05nonce\x18\x05 \x01(\x0c\x12\'\n\x0f\x61ssociated_data\x18\x06 \x01(\x0cR\x0e\x61ssociatedData\"E\n\x15SubtleWrapKeyResponse\x12\x1f\n\x0bwrapped_key\x18\x01 \x01(\x0cR\nwrappedKey\x12\x0b\n\x03tag\x18\x02 \x01(\x0c\"\xd3\x01\n\x16SubtleUnwrapKeyRequest\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12\x1f\n\x0bwrapped_key\x18\x02 \x01(\x0cR\nwrappedKey\x12\x11\n\talgorithm\x18\x03 \x01(\t\x12\x19\n\x08key_name\x18\x04 \x01(\tR\x07keyName\x12\r\n\x05nonce\x18\x05 \x01(\x0c\x12\x0b\n\x03tag\x18\x06 \x01(\x0c\x12\'\n\x0f\x61ssociated_data\x18\x07 \x01(\x0cR\x0e\x61ssociatedData\">\n\x17SubtleUnwrapKeyResponse\x12#\n\rplaintext_key\x18\x01 \x01(\x0cR\x0cplaintextKey\"x\n\x11SubtleSignRequest\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12\x0e\n\x06\x64igest\x18\x02 \x01(\x0c\x12\x11\n\talgorithm\x18\x03 \x01(\t\x12\x19\n\x08key_name\x18\x04 \x01(\tR\x07keyName\"\'\n\x12SubtleSignResponse\x12\x11\n\tsignature\x18\x01 \x01(\x0c\"\x8d\x01\n\x13SubtleVerifyRequest\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12\x0e\n\x06\x64igest\x18\x02 \x01(\x0c\x12\x11\n\talgorithm\x18\x03 \x01(\t\x12\x19\n\x08key_name\x18\x04 \x01(\tR\x07keyName\x12\x11\n\tsignature\x18\x05 \x01(\x0c\"%\n\x14SubtleVerifyResponse\x12\r\n\x05valid\x18\x01 \x01(\x08\"\x85\x01\n\x0e\x45ncryptRequest\x12=\n\x07options\x18\x01 \x01(\x0b\x32,.dapr.proto.runtime.v1.EncryptRequestOptions\x12\x34\n\x07payload\x18\x02 \x01(\x0b\x32#.dapr.proto.common.v1.StreamPayload\"\xfe\x01\n\x15\x45ncryptRequestOptions\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12\x19\n\x08key_name\x18\x02 \x01(\tR\x07keyName\x12\x1a\n\x12key_wrap_algorithm\x18\x03 \x01(\t\x12\x1e\n\x16\x64\x61ta_encryption_cipher\x18\n \x01(\t\x12\x37\n\x18omit_decryption_key_name\x18\x0b \x01(\x08R\x15omitDecryptionKeyName\x12.\n\x13\x64\x65\x63ryption_key_name\x18\x0c \x01(\tR\x11\x64\x65\x63ryptionKeyName\"G\n\x0f\x45ncryptResponse\x12\x34\n\x07payload\x18\x01 \x01(\x0b\x32#.dapr.proto.common.v1.StreamPayload\"\x85\x01\n\x0e\x44\x65\x63ryptRequest\x12=\n\x07options\x18\x01 \x01(\x0b\x32,.dapr.proto.runtime.v1.DecryptRequestOptions\x12\x34\n\x07payload\x18\x02 \x01(\x0b\x32#.dapr.proto.common.v1.StreamPayload\"Y\n\x15\x44\x65\x63ryptRequestOptions\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12\x19\n\x08key_name\x18\x0c \x01(\tR\x07keyName\"G\n\x0f\x44\x65\x63ryptResponse\x12\x34\n\x07payload\x18\x01 \x01(\x0b\x32#.dapr.proto.common.v1.StreamPayload\"d\n\x12GetWorkflowRequest\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\x12-\n\x12workflow_component\x18\x02 \x01(\tR\x11workflowComponent\"\x84\x03\n\x13GetWorkflowResponse\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\x12#\n\rworkflow_name\x18\x02 \x01(\tR\x0cworkflowName\x12\x39\n\ncreated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\x12\x42\n\x0flast_updated_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\rlastUpdatedAt\x12%\n\x0eruntime_status\x18\x05 \x01(\tR\rruntimeStatus\x12N\n\nproperties\x18\x06 \x03(\x0b\x32:.dapr.proto.runtime.v1.GetWorkflowResponse.PropertiesEntry\x1a\x31\n\x0fPropertiesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x95\x02\n\x14StartWorkflowRequest\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\x12-\n\x12workflow_component\x18\x02 \x01(\tR\x11workflowComponent\x12#\n\rworkflow_name\x18\x03 \x01(\tR\x0cworkflowName\x12I\n\x07options\x18\x04 \x03(\x0b\x32\x38.dapr.proto.runtime.v1.StartWorkflowRequest.OptionsEntry\x12\r\n\x05input\x18\x05 \x01(\x0c\x1a.\n\x0cOptionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"8\n\x15StartWorkflowResponse\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\"j\n\x18TerminateWorkflowRequest\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\x12-\n\x12workflow_component\x18\x02 \x01(\tR\x11workflowComponent\"f\n\x14PauseWorkflowRequest\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\x12-\n\x12workflow_component\x18\x02 \x01(\tR\x11workflowComponent\"g\n\x15ResumeWorkflowRequest\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\x12-\n\x12workflow_component\x18\x02 \x01(\tR\x11workflowComponent\"\x9e\x01\n\x19RaiseEventWorkflowRequest\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\x12-\n\x12workflow_component\x18\x02 \x01(\tR\x11workflowComponent\x12\x1d\n\nevent_name\x18\x03 \x01(\tR\teventName\x12\x12\n\nevent_data\x18\x04 \x01(\x0c\"f\n\x14PurgeWorkflowRequest\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\x12-\n\x12workflow_component\x18\x02 \x01(\tR\x11workflowComponent\"\x11\n\x0fShutdownRequest\"\xbb\x01\n\x03Job\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x15\n\x08schedule\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07repeats\x18\x03 \x01(\rH\x01\x88\x01\x01\x12\x15\n\x08\x64ue_time\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x10\n\x03ttl\x18\x05 \x01(\tH\x03\x88\x01\x01\x12\"\n\x04\x64\x61ta\x18\x06 \x01(\x0b\x32\x14.google.protobuf.AnyB\x0b\n\t_scheduleB\n\n\x08_repeatsB\x0b\n\t_due_timeB\x06\n\x04_ttl\"=\n\x12ScheduleJobRequest\x12\'\n\x03job\x18\x01 \x01(\x0b\x32\x1a.dapr.proto.runtime.v1.Job\"\x15\n\x13ScheduleJobResponse\"\x1d\n\rGetJobRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"9\n\x0eGetJobResponse\x12\'\n\x03job\x18\x01 \x01(\x0b\x32\x1a.dapr.proto.runtime.v1.Job\" \n\x10\x44\x65leteJobRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"\x13\n\x11\x44\x65leteJobResponse*W\n\x16PubsubSubscriptionType\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x0f\n\x0b\x44\x45\x43LARATIVE\x10\x01\x12\x10\n\x0cPROGRAMMATIC\x10\x02\x12\r\n\tSTREAMING\x10\x03\x32\xab\x30\n\x04\x44\x61pr\x12\x64\n\rInvokeService\x12+.dapr.proto.runtime.v1.InvokeServiceRequest\x1a$.dapr.proto.common.v1.InvokeResponse\"\x00\x12]\n\x08GetState\x12&.dapr.proto.runtime.v1.GetStateRequest\x1a\'.dapr.proto.runtime.v1.GetStateResponse\"\x00\x12i\n\x0cGetBulkState\x12*.dapr.proto.runtime.v1.GetBulkStateRequest\x1a+.dapr.proto.runtime.v1.GetBulkStateResponse\"\x00\x12N\n\tSaveState\x12\'.dapr.proto.runtime.v1.SaveStateRequest\x1a\x16.google.protobuf.Empty\"\x00\x12i\n\x10QueryStateAlpha1\x12(.dapr.proto.runtime.v1.QueryStateRequest\x1a).dapr.proto.runtime.v1.QueryStateResponse\"\x00\x12R\n\x0b\x44\x65leteState\x12).dapr.proto.runtime.v1.DeleteStateRequest\x1a\x16.google.protobuf.Empty\"\x00\x12Z\n\x0f\x44\x65leteBulkState\x12-.dapr.proto.runtime.v1.DeleteBulkStateRequest\x1a\x16.google.protobuf.Empty\"\x00\x12j\n\x17\x45xecuteStateTransaction\x12\x35.dapr.proto.runtime.v1.ExecuteStateTransactionRequest\x1a\x16.google.protobuf.Empty\"\x00\x12T\n\x0cPublishEvent\x12*.dapr.proto.runtime.v1.PublishEventRequest\x1a\x16.google.protobuf.Empty\"\x00\x12q\n\x16\x42ulkPublishEventAlpha1\x12).dapr.proto.runtime.v1.BulkPublishRequest\x1a*.dapr.proto.runtime.v1.BulkPublishResponse\"\x00\x12\x86\x01\n\x1aSubscribeTopicEventsAlpha1\x12\x38.dapr.proto.runtime.v1.SubscribeTopicEventsRequestAlpha1\x1a(.dapr.proto.runtime.v1.TopicEventRequest\"\x00(\x01\x30\x01\x12l\n\rInvokeBinding\x12+.dapr.proto.runtime.v1.InvokeBindingRequest\x1a,.dapr.proto.runtime.v1.InvokeBindingResponse\"\x00\x12`\n\tGetSecret\x12\'.dapr.proto.runtime.v1.GetSecretRequest\x1a(.dapr.proto.runtime.v1.GetSecretResponse\"\x00\x12l\n\rGetBulkSecret\x12+.dapr.proto.runtime.v1.GetBulkSecretRequest\x1a,.dapr.proto.runtime.v1.GetBulkSecretResponse\"\x00\x12`\n\x12RegisterActorTimer\x12\x30.dapr.proto.runtime.v1.RegisterActorTimerRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x64\n\x14UnregisterActorTimer\x12\x32.dapr.proto.runtime.v1.UnregisterActorTimerRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x66\n\x15RegisterActorReminder\x12\x33.dapr.proto.runtime.v1.RegisterActorReminderRequest\x1a\x16.google.protobuf.Empty\"\x00\x12j\n\x17UnregisterActorReminder\x12\x35.dapr.proto.runtime.v1.UnregisterActorReminderRequest\x1a\x16.google.protobuf.Empty\"\x00\x12l\n\rGetActorState\x12+.dapr.proto.runtime.v1.GetActorStateRequest\x1a,.dapr.proto.runtime.v1.GetActorStateResponse\"\x00\x12t\n\x1c\x45xecuteActorStateTransaction\x12:.dapr.proto.runtime.v1.ExecuteActorStateTransactionRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x66\n\x0bInvokeActor\x12).dapr.proto.runtime.v1.InvokeActorRequest\x1a*.dapr.proto.runtime.v1.InvokeActorResponse\"\x00\x12{\n\x16GetConfigurationAlpha1\x12..dapr.proto.runtime.v1.GetConfigurationRequest\x1a/.dapr.proto.runtime.v1.GetConfigurationResponse\"\x00\x12u\n\x10GetConfiguration\x12..dapr.proto.runtime.v1.GetConfigurationRequest\x1a/.dapr.proto.runtime.v1.GetConfigurationResponse\"\x00\x12\x8f\x01\n\x1cSubscribeConfigurationAlpha1\x12\x34.dapr.proto.runtime.v1.SubscribeConfigurationRequest\x1a\x35.dapr.proto.runtime.v1.SubscribeConfigurationResponse\"\x00\x30\x01\x12\x89\x01\n\x16SubscribeConfiguration\x12\x34.dapr.proto.runtime.v1.SubscribeConfigurationRequest\x1a\x35.dapr.proto.runtime.v1.SubscribeConfigurationResponse\"\x00\x30\x01\x12\x93\x01\n\x1eUnsubscribeConfigurationAlpha1\x12\x36.dapr.proto.runtime.v1.UnsubscribeConfigurationRequest\x1a\x37.dapr.proto.runtime.v1.UnsubscribeConfigurationResponse\"\x00\x12\x8d\x01\n\x18UnsubscribeConfiguration\x12\x36.dapr.proto.runtime.v1.UnsubscribeConfigurationRequest\x1a\x37.dapr.proto.runtime.v1.UnsubscribeConfigurationResponse\"\x00\x12`\n\rTryLockAlpha1\x12%.dapr.proto.runtime.v1.TryLockRequest\x1a&.dapr.proto.runtime.v1.TryLockResponse\"\x00\x12]\n\x0cUnlockAlpha1\x12$.dapr.proto.runtime.v1.UnlockRequest\x1a%.dapr.proto.runtime.v1.UnlockResponse\"\x00\x12\x62\n\rEncryptAlpha1\x12%.dapr.proto.runtime.v1.EncryptRequest\x1a&.dapr.proto.runtime.v1.EncryptResponse(\x01\x30\x01\x12\x62\n\rDecryptAlpha1\x12%.dapr.proto.runtime.v1.DecryptRequest\x1a&.dapr.proto.runtime.v1.DecryptResponse(\x01\x30\x01\x12\x66\n\x0bGetMetadata\x12).dapr.proto.runtime.v1.GetMetadataRequest\x1a*.dapr.proto.runtime.v1.GetMetadataResponse\"\x00\x12R\n\x0bSetMetadata\x12).dapr.proto.runtime.v1.SetMetadataRequest\x1a\x16.google.protobuf.Empty\"\x00\x12m\n\x12SubtleGetKeyAlpha1\x12*.dapr.proto.runtime.v1.SubtleGetKeyRequest\x1a+.dapr.proto.runtime.v1.SubtleGetKeyResponse\x12p\n\x13SubtleEncryptAlpha1\x12+.dapr.proto.runtime.v1.SubtleEncryptRequest\x1a,.dapr.proto.runtime.v1.SubtleEncryptResponse\x12p\n\x13SubtleDecryptAlpha1\x12+.dapr.proto.runtime.v1.SubtleDecryptRequest\x1a,.dapr.proto.runtime.v1.SubtleDecryptResponse\x12p\n\x13SubtleWrapKeyAlpha1\x12+.dapr.proto.runtime.v1.SubtleWrapKeyRequest\x1a,.dapr.proto.runtime.v1.SubtleWrapKeyResponse\x12v\n\x15SubtleUnwrapKeyAlpha1\x12-.dapr.proto.runtime.v1.SubtleUnwrapKeyRequest\x1a..dapr.proto.runtime.v1.SubtleUnwrapKeyResponse\x12g\n\x10SubtleSignAlpha1\x12(.dapr.proto.runtime.v1.SubtleSignRequest\x1a).dapr.proto.runtime.v1.SubtleSignResponse\x12m\n\x12SubtleVerifyAlpha1\x12*.dapr.proto.runtime.v1.SubtleVerifyRequest\x1a+.dapr.proto.runtime.v1.SubtleVerifyResponse\x12r\n\x13StartWorkflowAlpha1\x12+.dapr.proto.runtime.v1.StartWorkflowRequest\x1a,.dapr.proto.runtime.v1.StartWorkflowResponse\"\x00\x12l\n\x11GetWorkflowAlpha1\x12).dapr.proto.runtime.v1.GetWorkflowRequest\x1a*.dapr.proto.runtime.v1.GetWorkflowResponse\"\x00\x12\\\n\x13PurgeWorkflowAlpha1\x12+.dapr.proto.runtime.v1.PurgeWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x64\n\x17TerminateWorkflowAlpha1\x12/.dapr.proto.runtime.v1.TerminateWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\\\n\x13PauseWorkflowAlpha1\x12+.dapr.proto.runtime.v1.PauseWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x00\x12^\n\x14ResumeWorkflowAlpha1\x12,.dapr.proto.runtime.v1.ResumeWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x66\n\x18RaiseEventWorkflowAlpha1\x12\x30.dapr.proto.runtime.v1.RaiseEventWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x00\x12q\n\x12StartWorkflowBeta1\x12+.dapr.proto.runtime.v1.StartWorkflowRequest\x1a,.dapr.proto.runtime.v1.StartWorkflowResponse\"\x00\x12k\n\x10GetWorkflowBeta1\x12).dapr.proto.runtime.v1.GetWorkflowRequest\x1a*.dapr.proto.runtime.v1.GetWorkflowResponse\"\x00\x12[\n\x12PurgeWorkflowBeta1\x12+.dapr.proto.runtime.v1.PurgeWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x63\n\x16TerminateWorkflowBeta1\x12/.dapr.proto.runtime.v1.TerminateWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x00\x12[\n\x12PauseWorkflowBeta1\x12+.dapr.proto.runtime.v1.PauseWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x00\x12]\n\x13ResumeWorkflowBeta1\x12,.dapr.proto.runtime.v1.ResumeWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x65\n\x17RaiseEventWorkflowBeta1\x12\x30.dapr.proto.runtime.v1.RaiseEventWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x00\x12L\n\x08Shutdown\x12&.dapr.proto.runtime.v1.ShutdownRequest\x1a\x16.google.protobuf.Empty\"\x00\x12l\n\x11ScheduleJobAlpha1\x12).dapr.proto.runtime.v1.ScheduleJobRequest\x1a*.dapr.proto.runtime.v1.ScheduleJobResponse\"\x00\x12]\n\x0cGetJobAlpha1\x12$.dapr.proto.runtime.v1.GetJobRequest\x1a%.dapr.proto.runtime.v1.GetJobResponse\"\x00\x12\x66\n\x0f\x44\x65leteJobAlpha1\x12\'.dapr.proto.runtime.v1.DeleteJobRequest\x1a(.dapr.proto.runtime.v1.DeleteJobResponse\"\x00\x42i\n\nio.dapr.v1B\nDaprProtosZ1github.com/dapr/dapr/pkg/proto/runtime/v1;runtime\xaa\x02\x1b\x44\x61pr.Client.Autogen.Grpc.v1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n dapr/proto/runtime/v1/dapr.proto\x12\x15\x64\x61pr.proto.runtime.v1\x1a\x19google/protobuf/any.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a!dapr/proto/common/v1/common.proto\x1a\'dapr/proto/runtime/v1/appcallback.proto\"X\n\x14InvokeServiceRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x34\n\x07message\x18\x03 \x01(\x0b\x32#.dapr.proto.common.v1.InvokeRequest\"\xf5\x01\n\x0fGetStateRequest\x12\x12\n\nstore_name\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\t\x12H\n\x0b\x63onsistency\x18\x03 \x01(\x0e\x32\x33.dapr.proto.common.v1.StateOptions.StateConsistency\x12\x46\n\x08metadata\x18\x04 \x03(\x0b\x32\x34.dapr.proto.runtime.v1.GetStateRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xc9\x01\n\x13GetBulkStateRequest\x12\x12\n\nstore_name\x18\x01 \x01(\t\x12\x0c\n\x04keys\x18\x02 \x03(\t\x12\x13\n\x0bparallelism\x18\x03 \x01(\x05\x12J\n\x08metadata\x18\x04 \x03(\x0b\x32\x38.dapr.proto.runtime.v1.GetBulkStateRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"K\n\x14GetBulkStateResponse\x12\x33\n\x05items\x18\x01 \x03(\x0b\x32$.dapr.proto.runtime.v1.BulkStateItem\"\xbe\x01\n\rBulkStateItem\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\x12\x0c\n\x04\x65tag\x18\x03 \x01(\t\x12\r\n\x05\x65rror\x18\x04 \x01(\t\x12\x44\n\x08metadata\x18\x05 \x03(\x0b\x32\x32.dapr.proto.runtime.v1.BulkStateItem.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xa8\x01\n\x10GetStateResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\x12\x0c\n\x04\x65tag\x18\x02 \x01(\t\x12G\n\x08metadata\x18\x03 \x03(\x0b\x32\x35.dapr.proto.runtime.v1.GetStateResponse.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x90\x02\n\x12\x44\x65leteStateRequest\x12\x12\n\nstore_name\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\t\x12(\n\x04\x65tag\x18\x03 \x01(\x0b\x32\x1a.dapr.proto.common.v1.Etag\x12\x33\n\x07options\x18\x04 \x01(\x0b\x32\".dapr.proto.common.v1.StateOptions\x12I\n\x08metadata\x18\x05 \x03(\x0b\x32\x37.dapr.proto.runtime.v1.DeleteStateRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"]\n\x16\x44\x65leteBulkStateRequest\x12\x12\n\nstore_name\x18\x01 \x01(\t\x12/\n\x06states\x18\x02 \x03(\x0b\x32\x1f.dapr.proto.common.v1.StateItem\"W\n\x10SaveStateRequest\x12\x12\n\nstore_name\x18\x01 \x01(\t\x12/\n\x06states\x18\x02 \x03(\x0b\x32\x1f.dapr.proto.common.v1.StateItem\"\xbc\x01\n\x11QueryStateRequest\x12\x1d\n\nstore_name\x18\x01 \x01(\tR\tstoreName\x12\r\n\x05query\x18\x02 \x01(\t\x12H\n\x08metadata\x18\x03 \x03(\x0b\x32\x36.dapr.proto.runtime.v1.QueryStateRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"H\n\x0eQueryStateItem\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\x12\x0c\n\x04\x65tag\x18\x03 \x01(\t\x12\r\n\x05\x65rror\x18\x04 \x01(\t\"\xd7\x01\n\x12QueryStateResponse\x12\x36\n\x07results\x18\x01 \x03(\x0b\x32%.dapr.proto.runtime.v1.QueryStateItem\x12\r\n\x05token\x18\x02 \x01(\t\x12I\n\x08metadata\x18\x03 \x03(\x0b\x32\x37.dapr.proto.runtime.v1.QueryStateResponse.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xdf\x01\n\x13PublishEventRequest\x12\x13\n\x0bpubsub_name\x18\x01 \x01(\t\x12\r\n\x05topic\x18\x02 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\x0c\x12\x19\n\x11\x64\x61ta_content_type\x18\x04 \x01(\t\x12J\n\x08metadata\x18\x05 \x03(\x0b\x32\x38.dapr.proto.runtime.v1.PublishEventRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xf5\x01\n\x12\x42ulkPublishRequest\x12\x13\n\x0bpubsub_name\x18\x01 \x01(\t\x12\r\n\x05topic\x18\x02 \x01(\t\x12?\n\x07\x65ntries\x18\x03 \x03(\x0b\x32..dapr.proto.runtime.v1.BulkPublishRequestEntry\x12I\n\x08metadata\x18\x04 \x03(\x0b\x32\x37.dapr.proto.runtime.v1.BulkPublishRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xd1\x01\n\x17\x42ulkPublishRequestEntry\x12\x10\n\x08\x65ntry_id\x18\x01 \x01(\t\x12\r\n\x05\x65vent\x18\x02 \x01(\x0c\x12\x14\n\x0c\x63ontent_type\x18\x03 \x01(\t\x12N\n\x08metadata\x18\x04 \x03(\x0b\x32<.dapr.proto.runtime.v1.BulkPublishRequestEntry.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"c\n\x13\x42ulkPublishResponse\x12L\n\rfailedEntries\x18\x01 \x03(\x0b\x32\x35.dapr.proto.runtime.v1.BulkPublishResponseFailedEntry\"A\n\x1e\x42ulkPublishResponseFailedEntry\x12\x10\n\x08\x65ntry_id\x18\x01 \x01(\t\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"\x84\x02\n!SubscribeTopicEventsRequestAlpha1\x12Z\n\x0finitial_request\x18\x01 \x01(\x0b\x32?.dapr.proto.runtime.v1.SubscribeTopicEventsRequestInitialAlpha1H\x00\x12\\\n\x0f\x65vent_processed\x18\x02 \x01(\x0b\x32\x41.dapr.proto.runtime.v1.SubscribeTopicEventsRequestProcessedAlpha1H\x00\x42%\n#subscribe_topic_events_request_type\"\x96\x02\n(SubscribeTopicEventsRequestInitialAlpha1\x12\x13\n\x0bpubsub_name\x18\x01 \x01(\t\x12\r\n\x05topic\x18\x02 \x01(\t\x12_\n\x08metadata\x18\x03 \x03(\x0b\x32M.dapr.proto.runtime.v1.SubscribeTopicEventsRequestInitialAlpha1.MetadataEntry\x12\x1e\n\x11\x64\x65\x61\x64_letter_topic\x18\x04 \x01(\tH\x00\x88\x01\x01\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x14\n\x12_dead_letter_topic\"s\n*SubscribeTopicEventsRequestProcessedAlpha1\x12\n\n\x02id\x18\x01 \x01(\t\x12\x39\n\x06status\x18\x02 \x01(\x0b\x32).dapr.proto.runtime.v1.TopicEventResponse\"\xed\x01\n\"SubscribeTopicEventsResponseAlpha1\x12\\\n\x10initial_response\x18\x01 \x01(\x0b\x32@.dapr.proto.runtime.v1.SubscribeTopicEventsResponseInitialAlpha1H\x00\x12\x41\n\revent_message\x18\x02 \x01(\x0b\x32(.dapr.proto.runtime.v1.TopicEventRequestH\x00\x42&\n$subscribe_topic_events_response_type\"+\n)SubscribeTopicEventsResponseInitialAlpha1\"\xc3\x01\n\x14InvokeBindingRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\x12K\n\x08metadata\x18\x03 \x03(\x0b\x32\x39.dapr.proto.runtime.v1.InvokeBindingRequest.MetadataEntry\x12\x11\n\toperation\x18\x04 \x01(\t\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xa4\x01\n\x15InvokeBindingResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\x12L\n\x08metadata\x18\x02 \x03(\x0b\x32:.dapr.proto.runtime.v1.InvokeBindingResponse.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xb8\x01\n\x10GetSecretRequest\x12\x1d\n\nstore_name\x18\x01 \x01(\tR\tstoreName\x12\x0b\n\x03key\x18\x02 \x01(\t\x12G\n\x08metadata\x18\x03 \x03(\x0b\x32\x35.dapr.proto.runtime.v1.GetSecretRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x82\x01\n\x11GetSecretResponse\x12@\n\x04\x64\x61ta\x18\x01 \x03(\x0b\x32\x32.dapr.proto.runtime.v1.GetSecretResponse.DataEntry\x1a+\n\tDataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xb3\x01\n\x14GetBulkSecretRequest\x12\x1d\n\nstore_name\x18\x01 \x01(\tR\tstoreName\x12K\n\x08metadata\x18\x02 \x03(\x0b\x32\x39.dapr.proto.runtime.v1.GetBulkSecretRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x85\x01\n\x0eSecretResponse\x12\x43\n\x07secrets\x18\x01 \x03(\x0b\x32\x32.dapr.proto.runtime.v1.SecretResponse.SecretsEntry\x1a.\n\x0cSecretsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xb1\x01\n\x15GetBulkSecretResponse\x12\x44\n\x04\x64\x61ta\x18\x01 \x03(\x0b\x32\x36.dapr.proto.runtime.v1.GetBulkSecretResponse.DataEntry\x1aR\n\tDataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x34\n\x05value\x18\x02 \x01(\x0b\x32%.dapr.proto.runtime.v1.SecretResponse:\x02\x38\x01\"f\n\x1bTransactionalStateOperation\x12\x15\n\roperationType\x18\x01 \x01(\t\x12\x30\n\x07request\x18\x02 \x01(\x0b\x32\x1f.dapr.proto.common.v1.StateItem\"\x83\x02\n\x1e\x45xecuteStateTransactionRequest\x12\x11\n\tstoreName\x18\x01 \x01(\t\x12\x46\n\noperations\x18\x02 \x03(\x0b\x32\x32.dapr.proto.runtime.v1.TransactionalStateOperation\x12U\n\x08metadata\x18\x03 \x03(\x0b\x32\x43.dapr.proto.runtime.v1.ExecuteStateTransactionRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xbb\x01\n\x19RegisterActorTimerRequest\x12\x1d\n\nactor_type\x18\x01 \x01(\tR\tactorType\x12\x19\n\x08\x61\x63tor_id\x18\x02 \x01(\tR\x07\x61\x63torId\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x19\n\x08\x64ue_time\x18\x04 \x01(\tR\x07\x64ueTime\x12\x0e\n\x06period\x18\x05 \x01(\t\x12\x10\n\x08\x63\x61llback\x18\x06 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x07 \x01(\x0c\x12\x0b\n\x03ttl\x18\x08 \x01(\t\"e\n\x1bUnregisterActorTimerRequest\x12\x1d\n\nactor_type\x18\x01 \x01(\tR\tactorType\x12\x19\n\x08\x61\x63tor_id\x18\x02 \x01(\tR\x07\x61\x63torId\x12\x0c\n\x04name\x18\x03 \x01(\t\"\xac\x01\n\x1cRegisterActorReminderRequest\x12\x1d\n\nactor_type\x18\x01 \x01(\tR\tactorType\x12\x19\n\x08\x61\x63tor_id\x18\x02 \x01(\tR\x07\x61\x63torId\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x19\n\x08\x64ue_time\x18\x04 \x01(\tR\x07\x64ueTime\x12\x0e\n\x06period\x18\x05 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x06 \x01(\x0c\x12\x0b\n\x03ttl\x18\x07 \x01(\t\"h\n\x1eUnregisterActorReminderRequest\x12\x1d\n\nactor_type\x18\x01 \x01(\tR\tactorType\x12\x19\n\x08\x61\x63tor_id\x18\x02 \x01(\tR\x07\x61\x63torId\x12\x0c\n\x04name\x18\x03 \x01(\t\"]\n\x14GetActorStateRequest\x12\x1d\n\nactor_type\x18\x01 \x01(\tR\tactorType\x12\x19\n\x08\x61\x63tor_id\x18\x02 \x01(\tR\x07\x61\x63torId\x12\x0b\n\x03key\x18\x03 \x01(\t\"\xa4\x01\n\x15GetActorStateResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\x12L\n\x08metadata\x18\x02 \x03(\x0b\x32:.dapr.proto.runtime.v1.GetActorStateResponse.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xac\x01\n#ExecuteActorStateTransactionRequest\x12\x1d\n\nactor_type\x18\x01 \x01(\tR\tactorType\x12\x19\n\x08\x61\x63tor_id\x18\x02 \x01(\tR\x07\x61\x63torId\x12K\n\noperations\x18\x03 \x03(\x0b\x32\x37.dapr.proto.runtime.v1.TransactionalActorStateOperation\"\xf5\x01\n TransactionalActorStateOperation\x12\x15\n\roperationType\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\t\x12#\n\x05value\x18\x03 \x01(\x0b\x32\x14.google.protobuf.Any\x12W\n\x08metadata\x18\x04 \x03(\x0b\x32\x45.dapr.proto.runtime.v1.TransactionalActorStateOperation.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xe8\x01\n\x12InvokeActorRequest\x12\x1d\n\nactor_type\x18\x01 \x01(\tR\tactorType\x12\x19\n\x08\x61\x63tor_id\x18\x02 \x01(\tR\x07\x61\x63torId\x12\x0e\n\x06method\x18\x03 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\x0c\x12I\n\x08metadata\x18\x05 \x03(\x0b\x32\x37.dapr.proto.runtime.v1.InvokeActorRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"#\n\x13InvokeActorResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\"\x14\n\x12GetMetadataRequest\"\x9b\x06\n\x13GetMetadataResponse\x12\n\n\x02id\x18\x01 \x01(\t\x12Q\n\x13\x61\x63tive_actors_count\x18\x02 \x03(\x0b\x32(.dapr.proto.runtime.v1.ActiveActorsCountB\x02\x18\x01R\x06\x61\x63tors\x12V\n\x15registered_components\x18\x03 \x03(\x0b\x32+.dapr.proto.runtime.v1.RegisteredComponentsR\ncomponents\x12\x65\n\x11\x65xtended_metadata\x18\x04 \x03(\x0b\x32@.dapr.proto.runtime.v1.GetMetadataResponse.ExtendedMetadataEntryR\x08\x65xtended\x12O\n\rsubscriptions\x18\x05 \x03(\x0b\x32).dapr.proto.runtime.v1.PubsubSubscriptionR\rsubscriptions\x12R\n\x0ehttp_endpoints\x18\x06 \x03(\x0b\x32+.dapr.proto.runtime.v1.MetadataHTTPEndpointR\rhttpEndpoints\x12j\n\x19\x61pp_connection_properties\x18\x07 \x01(\x0b\x32..dapr.proto.runtime.v1.AppConnectionPropertiesR\x17\x61ppConnectionProperties\x12\'\n\x0fruntime_version\x18\x08 \x01(\tR\x0eruntimeVersion\x12)\n\x10\x65nabled_features\x18\t \x03(\tR\x0f\x65nabledFeatures\x12H\n\ractor_runtime\x18\n \x01(\x0b\x32#.dapr.proto.runtime.v1.ActorRuntimeR\x0c\x61\x63torRuntime\x1a\x37\n\x15\x45xtendedMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xbc\x02\n\x0c\x41\x63torRuntime\x12]\n\x0eruntime_status\x18\x01 \x01(\x0e\x32\x36.dapr.proto.runtime.v1.ActorRuntime.ActorRuntimeStatusR\rruntimeStatus\x12M\n\ractive_actors\x18\x02 \x03(\x0b\x32(.dapr.proto.runtime.v1.ActiveActorsCountR\x0c\x61\x63tiveActors\x12\x1d\n\nhost_ready\x18\x03 \x01(\x08R\thostReady\x12\x1c\n\tplacement\x18\x04 \x01(\tR\tplacement\"A\n\x12\x41\x63torRuntimeStatus\x12\x10\n\x0cINITIALIZING\x10\x00\x12\x0c\n\x08\x44ISABLED\x10\x01\x12\x0b\n\x07RUNNING\x10\x02\"0\n\x11\x41\x63tiveActorsCount\x12\x0c\n\x04type\x18\x01 \x01(\t\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"Y\n\x14RegisteredComponents\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04type\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\t\x12\x14\n\x0c\x63\x61pabilities\x18\x04 \x03(\t\"*\n\x14MetadataHTTPEndpoint\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\"\xd1\x01\n\x17\x41ppConnectionProperties\x12\x0c\n\x04port\x18\x01 \x01(\x05\x12\x10\n\x08protocol\x18\x02 \x01(\t\x12\'\n\x0f\x63hannel_address\x18\x03 \x01(\tR\x0e\x63hannelAddress\x12\'\n\x0fmax_concurrency\x18\x04 \x01(\x05R\x0emaxConcurrency\x12\x44\n\x06health\x18\x05 \x01(\x0b\x32\x34.dapr.proto.runtime.v1.AppConnectionHealthProperties\"\xdc\x01\n\x1d\x41ppConnectionHealthProperties\x12*\n\x11health_check_path\x18\x01 \x01(\tR\x0fhealthCheckPath\x12\x32\n\x15health_probe_interval\x18\x02 \x01(\tR\x13healthProbeInterval\x12\x30\n\x14health_probe_timeout\x18\x03 \x01(\tR\x12healthProbeTimeout\x12)\n\x10health_threshold\x18\x04 \x01(\x05R\x0fhealthThreshold\"\x86\x03\n\x12PubsubSubscription\x12\x1f\n\x0bpubsub_name\x18\x01 \x01(\tR\npubsubname\x12\x14\n\x05topic\x18\x02 \x01(\tR\x05topic\x12S\n\x08metadata\x18\x03 \x03(\x0b\x32\x37.dapr.proto.runtime.v1.PubsubSubscription.MetadataEntryR\x08metadata\x12\x44\n\x05rules\x18\x04 \x01(\x0b\x32..dapr.proto.runtime.v1.PubsubSubscriptionRulesR\x05rules\x12*\n\x11\x64\x65\x61\x64_letter_topic\x18\x05 \x01(\tR\x0f\x64\x65\x61\x64LetterTopic\x12\x41\n\x04type\x18\x06 \x01(\x0e\x32-.dapr.proto.runtime.v1.PubsubSubscriptionTypeR\x04type\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"W\n\x17PubsubSubscriptionRules\x12<\n\x05rules\x18\x01 \x03(\x0b\x32-.dapr.proto.runtime.v1.PubsubSubscriptionRule\"5\n\x16PubsubSubscriptionRule\x12\r\n\x05match\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\t\"0\n\x12SetMetadataRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"\xbc\x01\n\x17GetConfigurationRequest\x12\x12\n\nstore_name\x18\x01 \x01(\t\x12\x0c\n\x04keys\x18\x02 \x03(\t\x12N\n\x08metadata\x18\x03 \x03(\x0b\x32<.dapr.proto.runtime.v1.GetConfigurationRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xbc\x01\n\x18GetConfigurationResponse\x12I\n\x05items\x18\x01 \x03(\x0b\x32:.dapr.proto.runtime.v1.GetConfigurationResponse.ItemsEntry\x1aU\n\nItemsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x36\n\x05value\x18\x02 \x01(\x0b\x32\'.dapr.proto.common.v1.ConfigurationItem:\x02\x38\x01\"\xc8\x01\n\x1dSubscribeConfigurationRequest\x12\x12\n\nstore_name\x18\x01 \x01(\t\x12\x0c\n\x04keys\x18\x02 \x03(\t\x12T\n\x08metadata\x18\x03 \x03(\x0b\x32\x42.dapr.proto.runtime.v1.SubscribeConfigurationRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"A\n\x1fUnsubscribeConfigurationRequest\x12\x12\n\nstore_name\x18\x01 \x01(\t\x12\n\n\x02id\x18\x02 \x01(\t\"\xd4\x01\n\x1eSubscribeConfigurationResponse\x12\n\n\x02id\x18\x01 \x01(\t\x12O\n\x05items\x18\x02 \x03(\x0b\x32@.dapr.proto.runtime.v1.SubscribeConfigurationResponse.ItemsEntry\x1aU\n\nItemsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x36\n\x05value\x18\x02 \x01(\x0b\x32\'.dapr.proto.common.v1.ConfigurationItem:\x02\x38\x01\"?\n UnsubscribeConfigurationResponse\x12\n\n\x02ok\x18\x01 \x01(\x08\x12\x0f\n\x07message\x18\x02 \x01(\t\"\x9b\x01\n\x0eTryLockRequest\x12\x1d\n\nstore_name\x18\x01 \x01(\tR\tstoreName\x12\x1f\n\x0bresource_id\x18\x02 \x01(\tR\nresourceId\x12\x1d\n\nlock_owner\x18\x03 \x01(\tR\tlockOwner\x12*\n\x11\x65xpiry_in_seconds\x18\x04 \x01(\x05R\x0f\x65xpiryInSeconds\"\"\n\x0fTryLockResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\"n\n\rUnlockRequest\x12\x1d\n\nstore_name\x18\x01 \x01(\tR\tstoreName\x12\x1f\n\x0bresource_id\x18\x02 \x01(\tR\nresourceId\x12\x1d\n\nlock_owner\x18\x03 \x01(\tR\tlockOwner\"\xae\x01\n\x0eUnlockResponse\x12<\n\x06status\x18\x01 \x01(\x0e\x32,.dapr.proto.runtime.v1.UnlockResponse.Status\"^\n\x06Status\x12\x0b\n\x07SUCCESS\x10\x00\x12\x17\n\x13LOCK_DOES_NOT_EXIST\x10\x01\x12\x1a\n\x16LOCK_BELONGS_TO_OTHERS\x10\x02\x12\x12\n\x0eINTERNAL_ERROR\x10\x03\"\xb0\x01\n\x13SubtleGetKeyRequest\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x44\n\x06\x66ormat\x18\x03 \x01(\x0e\x32\x34.dapr.proto.runtime.v1.SubtleGetKeyRequest.KeyFormat\"\x1e\n\tKeyFormat\x12\x07\n\x03PEM\x10\x00\x12\x08\n\x04JSON\x10\x01\"C\n\x14SubtleGetKeyResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x1d\n\npublic_key\x18\x02 \x01(\tR\tpublicKey\"\xb6\x01\n\x14SubtleEncryptRequest\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12\x11\n\tplaintext\x18\x02 \x01(\x0c\x12\x11\n\talgorithm\x18\x03 \x01(\t\x12\x19\n\x08key_name\x18\x04 \x01(\tR\x07keyName\x12\r\n\x05nonce\x18\x05 \x01(\x0c\x12\'\n\x0f\x61ssociated_data\x18\x06 \x01(\x0cR\x0e\x61ssociatedData\"8\n\x15SubtleEncryptResponse\x12\x12\n\nciphertext\x18\x01 \x01(\x0c\x12\x0b\n\x03tag\x18\x02 \x01(\x0c\"\xc4\x01\n\x14SubtleDecryptRequest\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12\x12\n\nciphertext\x18\x02 \x01(\x0c\x12\x11\n\talgorithm\x18\x03 \x01(\t\x12\x19\n\x08key_name\x18\x04 \x01(\tR\x07keyName\x12\r\n\x05nonce\x18\x05 \x01(\x0c\x12\x0b\n\x03tag\x18\x06 \x01(\x0c\x12\'\n\x0f\x61ssociated_data\x18\x07 \x01(\x0cR\x0e\x61ssociatedData\"*\n\x15SubtleDecryptResponse\x12\x11\n\tplaintext\x18\x01 \x01(\x0c\"\xc8\x01\n\x14SubtleWrapKeyRequest\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12#\n\rplaintext_key\x18\x02 \x01(\x0cR\x0cplaintextKey\x12\x11\n\talgorithm\x18\x03 \x01(\t\x12\x19\n\x08key_name\x18\x04 \x01(\tR\x07keyName\x12\r\n\x05nonce\x18\x05 \x01(\x0c\x12\'\n\x0f\x61ssociated_data\x18\x06 \x01(\x0cR\x0e\x61ssociatedData\"E\n\x15SubtleWrapKeyResponse\x12\x1f\n\x0bwrapped_key\x18\x01 \x01(\x0cR\nwrappedKey\x12\x0b\n\x03tag\x18\x02 \x01(\x0c\"\xd3\x01\n\x16SubtleUnwrapKeyRequest\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12\x1f\n\x0bwrapped_key\x18\x02 \x01(\x0cR\nwrappedKey\x12\x11\n\talgorithm\x18\x03 \x01(\t\x12\x19\n\x08key_name\x18\x04 \x01(\tR\x07keyName\x12\r\n\x05nonce\x18\x05 \x01(\x0c\x12\x0b\n\x03tag\x18\x06 \x01(\x0c\x12\'\n\x0f\x61ssociated_data\x18\x07 \x01(\x0cR\x0e\x61ssociatedData\">\n\x17SubtleUnwrapKeyResponse\x12#\n\rplaintext_key\x18\x01 \x01(\x0cR\x0cplaintextKey\"x\n\x11SubtleSignRequest\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12\x0e\n\x06\x64igest\x18\x02 \x01(\x0c\x12\x11\n\talgorithm\x18\x03 \x01(\t\x12\x19\n\x08key_name\x18\x04 \x01(\tR\x07keyName\"\'\n\x12SubtleSignResponse\x12\x11\n\tsignature\x18\x01 \x01(\x0c\"\x8d\x01\n\x13SubtleVerifyRequest\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12\x0e\n\x06\x64igest\x18\x02 \x01(\x0c\x12\x11\n\talgorithm\x18\x03 \x01(\t\x12\x19\n\x08key_name\x18\x04 \x01(\tR\x07keyName\x12\x11\n\tsignature\x18\x05 \x01(\x0c\"%\n\x14SubtleVerifyResponse\x12\r\n\x05valid\x18\x01 \x01(\x08\"\x85\x01\n\x0e\x45ncryptRequest\x12=\n\x07options\x18\x01 \x01(\x0b\x32,.dapr.proto.runtime.v1.EncryptRequestOptions\x12\x34\n\x07payload\x18\x02 \x01(\x0b\x32#.dapr.proto.common.v1.StreamPayload\"\xfe\x01\n\x15\x45ncryptRequestOptions\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12\x19\n\x08key_name\x18\x02 \x01(\tR\x07keyName\x12\x1a\n\x12key_wrap_algorithm\x18\x03 \x01(\t\x12\x1e\n\x16\x64\x61ta_encryption_cipher\x18\n \x01(\t\x12\x37\n\x18omit_decryption_key_name\x18\x0b \x01(\x08R\x15omitDecryptionKeyName\x12.\n\x13\x64\x65\x63ryption_key_name\x18\x0c \x01(\tR\x11\x64\x65\x63ryptionKeyName\"G\n\x0f\x45ncryptResponse\x12\x34\n\x07payload\x18\x01 \x01(\x0b\x32#.dapr.proto.common.v1.StreamPayload\"\x85\x01\n\x0e\x44\x65\x63ryptRequest\x12=\n\x07options\x18\x01 \x01(\x0b\x32,.dapr.proto.runtime.v1.DecryptRequestOptions\x12\x34\n\x07payload\x18\x02 \x01(\x0b\x32#.dapr.proto.common.v1.StreamPayload\"Y\n\x15\x44\x65\x63ryptRequestOptions\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12\x19\n\x08key_name\x18\x0c \x01(\tR\x07keyName\"G\n\x0f\x44\x65\x63ryptResponse\x12\x34\n\x07payload\x18\x01 \x01(\x0b\x32#.dapr.proto.common.v1.StreamPayload\"d\n\x12GetWorkflowRequest\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\x12-\n\x12workflow_component\x18\x02 \x01(\tR\x11workflowComponent\"\x84\x03\n\x13GetWorkflowResponse\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\x12#\n\rworkflow_name\x18\x02 \x01(\tR\x0cworkflowName\x12\x39\n\ncreated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\x12\x42\n\x0flast_updated_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\rlastUpdatedAt\x12%\n\x0eruntime_status\x18\x05 \x01(\tR\rruntimeStatus\x12N\n\nproperties\x18\x06 \x03(\x0b\x32:.dapr.proto.runtime.v1.GetWorkflowResponse.PropertiesEntry\x1a\x31\n\x0fPropertiesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x95\x02\n\x14StartWorkflowRequest\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\x12-\n\x12workflow_component\x18\x02 \x01(\tR\x11workflowComponent\x12#\n\rworkflow_name\x18\x03 \x01(\tR\x0cworkflowName\x12I\n\x07options\x18\x04 \x03(\x0b\x32\x38.dapr.proto.runtime.v1.StartWorkflowRequest.OptionsEntry\x12\r\n\x05input\x18\x05 \x01(\x0c\x1a.\n\x0cOptionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"8\n\x15StartWorkflowResponse\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\"j\n\x18TerminateWorkflowRequest\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\x12-\n\x12workflow_component\x18\x02 \x01(\tR\x11workflowComponent\"f\n\x14PauseWorkflowRequest\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\x12-\n\x12workflow_component\x18\x02 \x01(\tR\x11workflowComponent\"g\n\x15ResumeWorkflowRequest\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\x12-\n\x12workflow_component\x18\x02 \x01(\tR\x11workflowComponent\"\x9e\x01\n\x19RaiseEventWorkflowRequest\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\x12-\n\x12workflow_component\x18\x02 \x01(\tR\x11workflowComponent\x12\x1d\n\nevent_name\x18\x03 \x01(\tR\teventName\x12\x12\n\nevent_data\x18\x04 \x01(\x0c\"f\n\x14PurgeWorkflowRequest\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\x12-\n\x12workflow_component\x18\x02 \x01(\tR\x11workflowComponent\"\x11\n\x0fShutdownRequest\"\xe8\x01\n\x03Job\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x1f\n\x08schedule\x18\x02 \x01(\tH\x00R\x08schedule\x88\x01\x01\x12\x1d\n\x07repeats\x18\x03 \x01(\rH\x01R\x07repeats\x88\x01\x01\x12\x1e\n\x08\x64ue_time\x18\x04 \x01(\tH\x02R\x07\x64ueTime\x88\x01\x01\x12\x15\n\x03ttl\x18\x05 \x01(\tH\x03R\x03ttl\x88\x01\x01\x12(\n\x04\x64\x61ta\x18\x06 \x01(\x0b\x32\x14.google.protobuf.AnyR\x04\x64\x61taB\x0b\n\t_scheduleB\n\n\x08_repeatsB\x0b\n\t_due_timeB\x06\n\x04_ttl\"=\n\x12ScheduleJobRequest\x12\'\n\x03job\x18\x01 \x01(\x0b\x32\x1a.dapr.proto.runtime.v1.Job\"\x15\n\x13ScheduleJobResponse\"\x1d\n\rGetJobRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"9\n\x0eGetJobResponse\x12\'\n\x03job\x18\x01 \x01(\x0b\x32\x1a.dapr.proto.runtime.v1.Job\" \n\x10\x44\x65leteJobRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"\x13\n\x11\x44\x65leteJobResponse\"\xf9\x03\n\x19\x43onversationAlpha1Request\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x16\n\tcontextID\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x38\n\x06inputs\x18\x03 \x03(\x0b\x32(.dapr.proto.runtime.v1.ConversationInput\x12T\n\nparameters\x18\x04 \x03(\x0b\x32@.dapr.proto.runtime.v1.ConversationAlpha1Request.ParametersEntry\x12P\n\x08metadata\x18\x05 \x03(\x0b\x32>.dapr.proto.runtime.v1.ConversationAlpha1Request.MetadataEntry\x12\x15\n\x08scrubPII\x18\x06 \x01(\x08H\x01\x88\x01\x01\x12\x18\n\x0btemperature\x18\x07 \x01(\x01H\x02\x88\x01\x01\x1aG\n\x0fParametersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12#\n\x05value\x18\x02 \x01(\x0b\x32\x14.google.protobuf.Any:\x02\x38\x01\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x0c\n\n_contextIDB\x0b\n\t_scrubPIIB\x0e\n\x0c_temperature\"d\n\x11\x43onversationInput\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\x11\n\x04role\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x15\n\x08scrubPII\x18\x03 \x01(\x08H\x01\x88\x01\x01\x42\x07\n\x05_roleB\x0b\n\t_scrubPII\"\xc8\x01\n\x18\x43onversationAlpha1Result\x12\x0e\n\x06result\x18\x01 \x01(\t\x12S\n\nparameters\x18\x02 \x03(\x0b\x32?.dapr.proto.runtime.v1.ConversationAlpha1Result.ParametersEntry\x1aG\n\x0fParametersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12#\n\x05value\x18\x02 \x01(\x0b\x32\x14.google.protobuf.Any:\x02\x38\x01\"\x84\x01\n\x1a\x43onversationAlpha1Response\x12\x16\n\tcontextID\x18\x01 \x01(\tH\x00\x88\x01\x01\x12@\n\x07outputs\x18\x02 \x03(\x0b\x32/.dapr.proto.runtime.v1.ConversationAlpha1ResultB\x0c\n\n_contextID*W\n\x16PubsubSubscriptionType\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x0f\n\x0b\x44\x45\x43LARATIVE\x10\x01\x12\x10\n\x0cPROGRAMMATIC\x10\x02\x12\r\n\tSTREAMING\x10\x03\x32\xb5\x31\n\x04\x44\x61pr\x12\x64\n\rInvokeService\x12+.dapr.proto.runtime.v1.InvokeServiceRequest\x1a$.dapr.proto.common.v1.InvokeResponse\"\x00\x12]\n\x08GetState\x12&.dapr.proto.runtime.v1.GetStateRequest\x1a\'.dapr.proto.runtime.v1.GetStateResponse\"\x00\x12i\n\x0cGetBulkState\x12*.dapr.proto.runtime.v1.GetBulkStateRequest\x1a+.dapr.proto.runtime.v1.GetBulkStateResponse\"\x00\x12N\n\tSaveState\x12\'.dapr.proto.runtime.v1.SaveStateRequest\x1a\x16.google.protobuf.Empty\"\x00\x12i\n\x10QueryStateAlpha1\x12(.dapr.proto.runtime.v1.QueryStateRequest\x1a).dapr.proto.runtime.v1.QueryStateResponse\"\x00\x12R\n\x0b\x44\x65leteState\x12).dapr.proto.runtime.v1.DeleteStateRequest\x1a\x16.google.protobuf.Empty\"\x00\x12Z\n\x0f\x44\x65leteBulkState\x12-.dapr.proto.runtime.v1.DeleteBulkStateRequest\x1a\x16.google.protobuf.Empty\"\x00\x12j\n\x17\x45xecuteStateTransaction\x12\x35.dapr.proto.runtime.v1.ExecuteStateTransactionRequest\x1a\x16.google.protobuf.Empty\"\x00\x12T\n\x0cPublishEvent\x12*.dapr.proto.runtime.v1.PublishEventRequest\x1a\x16.google.protobuf.Empty\"\x00\x12q\n\x16\x42ulkPublishEventAlpha1\x12).dapr.proto.runtime.v1.BulkPublishRequest\x1a*.dapr.proto.runtime.v1.BulkPublishResponse\"\x00\x12\x97\x01\n\x1aSubscribeTopicEventsAlpha1\x12\x38.dapr.proto.runtime.v1.SubscribeTopicEventsRequestAlpha1\x1a\x39.dapr.proto.runtime.v1.SubscribeTopicEventsResponseAlpha1\"\x00(\x01\x30\x01\x12l\n\rInvokeBinding\x12+.dapr.proto.runtime.v1.InvokeBindingRequest\x1a,.dapr.proto.runtime.v1.InvokeBindingResponse\"\x00\x12`\n\tGetSecret\x12\'.dapr.proto.runtime.v1.GetSecretRequest\x1a(.dapr.proto.runtime.v1.GetSecretResponse\"\x00\x12l\n\rGetBulkSecret\x12+.dapr.proto.runtime.v1.GetBulkSecretRequest\x1a,.dapr.proto.runtime.v1.GetBulkSecretResponse\"\x00\x12`\n\x12RegisterActorTimer\x12\x30.dapr.proto.runtime.v1.RegisterActorTimerRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x64\n\x14UnregisterActorTimer\x12\x32.dapr.proto.runtime.v1.UnregisterActorTimerRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x66\n\x15RegisterActorReminder\x12\x33.dapr.proto.runtime.v1.RegisterActorReminderRequest\x1a\x16.google.protobuf.Empty\"\x00\x12j\n\x17UnregisterActorReminder\x12\x35.dapr.proto.runtime.v1.UnregisterActorReminderRequest\x1a\x16.google.protobuf.Empty\"\x00\x12l\n\rGetActorState\x12+.dapr.proto.runtime.v1.GetActorStateRequest\x1a,.dapr.proto.runtime.v1.GetActorStateResponse\"\x00\x12t\n\x1c\x45xecuteActorStateTransaction\x12:.dapr.proto.runtime.v1.ExecuteActorStateTransactionRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x66\n\x0bInvokeActor\x12).dapr.proto.runtime.v1.InvokeActorRequest\x1a*.dapr.proto.runtime.v1.InvokeActorResponse\"\x00\x12{\n\x16GetConfigurationAlpha1\x12..dapr.proto.runtime.v1.GetConfigurationRequest\x1a/.dapr.proto.runtime.v1.GetConfigurationResponse\"\x00\x12u\n\x10GetConfiguration\x12..dapr.proto.runtime.v1.GetConfigurationRequest\x1a/.dapr.proto.runtime.v1.GetConfigurationResponse\"\x00\x12\x8f\x01\n\x1cSubscribeConfigurationAlpha1\x12\x34.dapr.proto.runtime.v1.SubscribeConfigurationRequest\x1a\x35.dapr.proto.runtime.v1.SubscribeConfigurationResponse\"\x00\x30\x01\x12\x89\x01\n\x16SubscribeConfiguration\x12\x34.dapr.proto.runtime.v1.SubscribeConfigurationRequest\x1a\x35.dapr.proto.runtime.v1.SubscribeConfigurationResponse\"\x00\x30\x01\x12\x93\x01\n\x1eUnsubscribeConfigurationAlpha1\x12\x36.dapr.proto.runtime.v1.UnsubscribeConfigurationRequest\x1a\x37.dapr.proto.runtime.v1.UnsubscribeConfigurationResponse\"\x00\x12\x8d\x01\n\x18UnsubscribeConfiguration\x12\x36.dapr.proto.runtime.v1.UnsubscribeConfigurationRequest\x1a\x37.dapr.proto.runtime.v1.UnsubscribeConfigurationResponse\"\x00\x12`\n\rTryLockAlpha1\x12%.dapr.proto.runtime.v1.TryLockRequest\x1a&.dapr.proto.runtime.v1.TryLockResponse\"\x00\x12]\n\x0cUnlockAlpha1\x12$.dapr.proto.runtime.v1.UnlockRequest\x1a%.dapr.proto.runtime.v1.UnlockResponse\"\x00\x12\x62\n\rEncryptAlpha1\x12%.dapr.proto.runtime.v1.EncryptRequest\x1a&.dapr.proto.runtime.v1.EncryptResponse(\x01\x30\x01\x12\x62\n\rDecryptAlpha1\x12%.dapr.proto.runtime.v1.DecryptRequest\x1a&.dapr.proto.runtime.v1.DecryptResponse(\x01\x30\x01\x12\x66\n\x0bGetMetadata\x12).dapr.proto.runtime.v1.GetMetadataRequest\x1a*.dapr.proto.runtime.v1.GetMetadataResponse\"\x00\x12R\n\x0bSetMetadata\x12).dapr.proto.runtime.v1.SetMetadataRequest\x1a\x16.google.protobuf.Empty\"\x00\x12m\n\x12SubtleGetKeyAlpha1\x12*.dapr.proto.runtime.v1.SubtleGetKeyRequest\x1a+.dapr.proto.runtime.v1.SubtleGetKeyResponse\x12p\n\x13SubtleEncryptAlpha1\x12+.dapr.proto.runtime.v1.SubtleEncryptRequest\x1a,.dapr.proto.runtime.v1.SubtleEncryptResponse\x12p\n\x13SubtleDecryptAlpha1\x12+.dapr.proto.runtime.v1.SubtleDecryptRequest\x1a,.dapr.proto.runtime.v1.SubtleDecryptResponse\x12p\n\x13SubtleWrapKeyAlpha1\x12+.dapr.proto.runtime.v1.SubtleWrapKeyRequest\x1a,.dapr.proto.runtime.v1.SubtleWrapKeyResponse\x12v\n\x15SubtleUnwrapKeyAlpha1\x12-.dapr.proto.runtime.v1.SubtleUnwrapKeyRequest\x1a..dapr.proto.runtime.v1.SubtleUnwrapKeyResponse\x12g\n\x10SubtleSignAlpha1\x12(.dapr.proto.runtime.v1.SubtleSignRequest\x1a).dapr.proto.runtime.v1.SubtleSignResponse\x12m\n\x12SubtleVerifyAlpha1\x12*.dapr.proto.runtime.v1.SubtleVerifyRequest\x1a+.dapr.proto.runtime.v1.SubtleVerifyResponse\x12r\n\x13StartWorkflowAlpha1\x12+.dapr.proto.runtime.v1.StartWorkflowRequest\x1a,.dapr.proto.runtime.v1.StartWorkflowResponse\"\x00\x12l\n\x11GetWorkflowAlpha1\x12).dapr.proto.runtime.v1.GetWorkflowRequest\x1a*.dapr.proto.runtime.v1.GetWorkflowResponse\"\x00\x12\\\n\x13PurgeWorkflowAlpha1\x12+.dapr.proto.runtime.v1.PurgeWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x64\n\x17TerminateWorkflowAlpha1\x12/.dapr.proto.runtime.v1.TerminateWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\\\n\x13PauseWorkflowAlpha1\x12+.dapr.proto.runtime.v1.PauseWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x00\x12^\n\x14ResumeWorkflowAlpha1\x12,.dapr.proto.runtime.v1.ResumeWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x66\n\x18RaiseEventWorkflowAlpha1\x12\x30.dapr.proto.runtime.v1.RaiseEventWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x00\x12q\n\x12StartWorkflowBeta1\x12+.dapr.proto.runtime.v1.StartWorkflowRequest\x1a,.dapr.proto.runtime.v1.StartWorkflowResponse\"\x00\x12k\n\x10GetWorkflowBeta1\x12).dapr.proto.runtime.v1.GetWorkflowRequest\x1a*.dapr.proto.runtime.v1.GetWorkflowResponse\"\x00\x12[\n\x12PurgeWorkflowBeta1\x12+.dapr.proto.runtime.v1.PurgeWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x63\n\x16TerminateWorkflowBeta1\x12/.dapr.proto.runtime.v1.TerminateWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x00\x12[\n\x12PauseWorkflowBeta1\x12+.dapr.proto.runtime.v1.PauseWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x00\x12]\n\x13ResumeWorkflowBeta1\x12,.dapr.proto.runtime.v1.ResumeWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x65\n\x17RaiseEventWorkflowBeta1\x12\x30.dapr.proto.runtime.v1.RaiseEventWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x00\x12L\n\x08Shutdown\x12&.dapr.proto.runtime.v1.ShutdownRequest\x1a\x16.google.protobuf.Empty\"\x00\x12l\n\x11ScheduleJobAlpha1\x12).dapr.proto.runtime.v1.ScheduleJobRequest\x1a*.dapr.proto.runtime.v1.ScheduleJobResponse\"\x00\x12]\n\x0cGetJobAlpha1\x12$.dapr.proto.runtime.v1.GetJobRequest\x1a%.dapr.proto.runtime.v1.GetJobResponse\"\x00\x12\x66\n\x0f\x44\x65leteJobAlpha1\x12\'.dapr.proto.runtime.v1.DeleteJobRequest\x1a(.dapr.proto.runtime.v1.DeleteJobResponse\"\x00\x12w\n\x0e\x43onverseAlpha1\x12\x30.dapr.proto.runtime.v1.ConversationAlpha1Request\x1a\x31.dapr.proto.runtime.v1.ConversationAlpha1Response\"\x00\x42i\n\nio.dapr.v1B\nDaprProtosZ1github.com/dapr/dapr/pkg/proto/runtime/v1;runtime\xaa\x02\x1b\x44\x61pr.Client.Autogen.Grpc.v1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'dapr.proto.runtime.v1.dapr_pb2', _globals) -if not _descriptor._USE_C_DESCRIPTORS: - _globals['DESCRIPTOR']._loaded_options = None - _globals['DESCRIPTOR']._serialized_options = b'\n\nio.dapr.v1B\nDaprProtosZ1github.com/dapr/dapr/pkg/proto/runtime/v1;runtime\252\002\033Dapr.Client.Autogen.Grpc.v1' - _globals['_GETSTATEREQUEST_METADATAENTRY']._loaded_options = None - _globals['_GETSTATEREQUEST_METADATAENTRY']._serialized_options = b'8\001' - _globals['_GETBULKSTATEREQUEST_METADATAENTRY']._loaded_options = None - _globals['_GETBULKSTATEREQUEST_METADATAENTRY']._serialized_options = b'8\001' - _globals['_BULKSTATEITEM_METADATAENTRY']._loaded_options = None - _globals['_BULKSTATEITEM_METADATAENTRY']._serialized_options = b'8\001' - _globals['_GETSTATERESPONSE_METADATAENTRY']._loaded_options = None - _globals['_GETSTATERESPONSE_METADATAENTRY']._serialized_options = b'8\001' - _globals['_DELETESTATEREQUEST_METADATAENTRY']._loaded_options = None - _globals['_DELETESTATEREQUEST_METADATAENTRY']._serialized_options = b'8\001' - _globals['_QUERYSTATEREQUEST_METADATAENTRY']._loaded_options = None - _globals['_QUERYSTATEREQUEST_METADATAENTRY']._serialized_options = b'8\001' - _globals['_QUERYSTATERESPONSE_METADATAENTRY']._loaded_options = None - _globals['_QUERYSTATERESPONSE_METADATAENTRY']._serialized_options = b'8\001' - _globals['_PUBLISHEVENTREQUEST_METADATAENTRY']._loaded_options = None - _globals['_PUBLISHEVENTREQUEST_METADATAENTRY']._serialized_options = b'8\001' - _globals['_BULKPUBLISHREQUEST_METADATAENTRY']._loaded_options = None - _globals['_BULKPUBLISHREQUEST_METADATAENTRY']._serialized_options = b'8\001' - _globals['_BULKPUBLISHREQUESTENTRY_METADATAENTRY']._loaded_options = None - _globals['_BULKPUBLISHREQUESTENTRY_METADATAENTRY']._serialized_options = b'8\001' - _globals['_SUBSCRIBETOPICEVENTSINITIALREQUESTALPHA1_METADATAENTRY']._loaded_options = None - _globals['_SUBSCRIBETOPICEVENTSINITIALREQUESTALPHA1_METADATAENTRY']._serialized_options = b'8\001' - _globals['_INVOKEBINDINGREQUEST_METADATAENTRY']._loaded_options = None - _globals['_INVOKEBINDINGREQUEST_METADATAENTRY']._serialized_options = b'8\001' - _globals['_INVOKEBINDINGRESPONSE_METADATAENTRY']._loaded_options = None - _globals['_INVOKEBINDINGRESPONSE_METADATAENTRY']._serialized_options = b'8\001' - _globals['_GETSECRETREQUEST_METADATAENTRY']._loaded_options = None - _globals['_GETSECRETREQUEST_METADATAENTRY']._serialized_options = b'8\001' - _globals['_GETSECRETRESPONSE_DATAENTRY']._loaded_options = None - _globals['_GETSECRETRESPONSE_DATAENTRY']._serialized_options = b'8\001' - _globals['_GETBULKSECRETREQUEST_METADATAENTRY']._loaded_options = None - _globals['_GETBULKSECRETREQUEST_METADATAENTRY']._serialized_options = b'8\001' - _globals['_SECRETRESPONSE_SECRETSENTRY']._loaded_options = None - _globals['_SECRETRESPONSE_SECRETSENTRY']._serialized_options = b'8\001' - _globals['_GETBULKSECRETRESPONSE_DATAENTRY']._loaded_options = None - _globals['_GETBULKSECRETRESPONSE_DATAENTRY']._serialized_options = b'8\001' - _globals['_EXECUTESTATETRANSACTIONREQUEST_METADATAENTRY']._loaded_options = None - _globals['_EXECUTESTATETRANSACTIONREQUEST_METADATAENTRY']._serialized_options = b'8\001' - _globals['_GETACTORSTATERESPONSE_METADATAENTRY']._loaded_options = None - _globals['_GETACTORSTATERESPONSE_METADATAENTRY']._serialized_options = b'8\001' - _globals['_TRANSACTIONALACTORSTATEOPERATION_METADATAENTRY']._loaded_options = None - _globals['_TRANSACTIONALACTORSTATEOPERATION_METADATAENTRY']._serialized_options = b'8\001' - _globals['_INVOKEACTORREQUEST_METADATAENTRY']._loaded_options = None - _globals['_INVOKEACTORREQUEST_METADATAENTRY']._serialized_options = b'8\001' - _globals['_GETMETADATARESPONSE_EXTENDEDMETADATAENTRY']._loaded_options = None - _globals['_GETMETADATARESPONSE_EXTENDEDMETADATAENTRY']._serialized_options = b'8\001' - _globals['_GETMETADATARESPONSE'].fields_by_name['active_actors_count']._loaded_options = None - _globals['_GETMETADATARESPONSE'].fields_by_name['active_actors_count']._serialized_options = b'\030\001' - _globals['_PUBSUBSUBSCRIPTION_METADATAENTRY']._loaded_options = None - _globals['_PUBSUBSUBSCRIPTION_METADATAENTRY']._serialized_options = b'8\001' - _globals['_GETCONFIGURATIONREQUEST_METADATAENTRY']._loaded_options = None - _globals['_GETCONFIGURATIONREQUEST_METADATAENTRY']._serialized_options = b'8\001' - _globals['_GETCONFIGURATIONRESPONSE_ITEMSENTRY']._loaded_options = None - _globals['_GETCONFIGURATIONRESPONSE_ITEMSENTRY']._serialized_options = b'8\001' - _globals['_SUBSCRIBECONFIGURATIONREQUEST_METADATAENTRY']._loaded_options = None - _globals['_SUBSCRIBECONFIGURATIONREQUEST_METADATAENTRY']._serialized_options = b'8\001' - _globals['_SUBSCRIBECONFIGURATIONRESPONSE_ITEMSENTRY']._loaded_options = None - _globals['_SUBSCRIBECONFIGURATIONRESPONSE_ITEMSENTRY']._serialized_options = b'8\001' - _globals['_GETWORKFLOWRESPONSE_PROPERTIESENTRY']._loaded_options = None - _globals['_GETWORKFLOWRESPONSE_PROPERTIESENTRY']._serialized_options = b'8\001' - _globals['_STARTWORKFLOWREQUEST_OPTIONSENTRY']._loaded_options = None - _globals['_STARTWORKFLOWREQUEST_OPTIONSENTRY']._serialized_options = b'8\001' - _globals['_PUBSUBSUBSCRIPTIONTYPE']._serialized_start=14739 - _globals['_PUBSUBSUBSCRIPTIONTYPE']._serialized_end=14826 +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\nio.dapr.v1B\nDaprProtosZ1github.com/dapr/dapr/pkg/proto/runtime/v1;runtime\252\002\033Dapr.Client.Autogen.Grpc.v1' + _GETSTATEREQUEST_METADATAENTRY._options = None + _GETSTATEREQUEST_METADATAENTRY._serialized_options = b'8\001' + _GETBULKSTATEREQUEST_METADATAENTRY._options = None + _GETBULKSTATEREQUEST_METADATAENTRY._serialized_options = b'8\001' + _BULKSTATEITEM_METADATAENTRY._options = None + _BULKSTATEITEM_METADATAENTRY._serialized_options = b'8\001' + _GETSTATERESPONSE_METADATAENTRY._options = None + _GETSTATERESPONSE_METADATAENTRY._serialized_options = b'8\001' + _DELETESTATEREQUEST_METADATAENTRY._options = None + _DELETESTATEREQUEST_METADATAENTRY._serialized_options = b'8\001' + _QUERYSTATEREQUEST_METADATAENTRY._options = None + _QUERYSTATEREQUEST_METADATAENTRY._serialized_options = b'8\001' + _QUERYSTATERESPONSE_METADATAENTRY._options = None + _QUERYSTATERESPONSE_METADATAENTRY._serialized_options = b'8\001' + _PUBLISHEVENTREQUEST_METADATAENTRY._options = None + _PUBLISHEVENTREQUEST_METADATAENTRY._serialized_options = b'8\001' + _BULKPUBLISHREQUEST_METADATAENTRY._options = None + _BULKPUBLISHREQUEST_METADATAENTRY._serialized_options = b'8\001' + _BULKPUBLISHREQUESTENTRY_METADATAENTRY._options = None + _BULKPUBLISHREQUESTENTRY_METADATAENTRY._serialized_options = b'8\001' + _SUBSCRIBETOPICEVENTSREQUESTINITIALALPHA1_METADATAENTRY._options = None + _SUBSCRIBETOPICEVENTSREQUESTINITIALALPHA1_METADATAENTRY._serialized_options = b'8\001' + _INVOKEBINDINGREQUEST_METADATAENTRY._options = None + _INVOKEBINDINGREQUEST_METADATAENTRY._serialized_options = b'8\001' + _INVOKEBINDINGRESPONSE_METADATAENTRY._options = None + _INVOKEBINDINGRESPONSE_METADATAENTRY._serialized_options = b'8\001' + _GETSECRETREQUEST_METADATAENTRY._options = None + _GETSECRETREQUEST_METADATAENTRY._serialized_options = b'8\001' + _GETSECRETRESPONSE_DATAENTRY._options = None + _GETSECRETRESPONSE_DATAENTRY._serialized_options = b'8\001' + _GETBULKSECRETREQUEST_METADATAENTRY._options = None + _GETBULKSECRETREQUEST_METADATAENTRY._serialized_options = b'8\001' + _SECRETRESPONSE_SECRETSENTRY._options = None + _SECRETRESPONSE_SECRETSENTRY._serialized_options = b'8\001' + _GETBULKSECRETRESPONSE_DATAENTRY._options = None + _GETBULKSECRETRESPONSE_DATAENTRY._serialized_options = b'8\001' + _EXECUTESTATETRANSACTIONREQUEST_METADATAENTRY._options = None + _EXECUTESTATETRANSACTIONREQUEST_METADATAENTRY._serialized_options = b'8\001' + _GETACTORSTATERESPONSE_METADATAENTRY._options = None + _GETACTORSTATERESPONSE_METADATAENTRY._serialized_options = b'8\001' + _TRANSACTIONALACTORSTATEOPERATION_METADATAENTRY._options = None + _TRANSACTIONALACTORSTATEOPERATION_METADATAENTRY._serialized_options = b'8\001' + _INVOKEACTORREQUEST_METADATAENTRY._options = None + _INVOKEACTORREQUEST_METADATAENTRY._serialized_options = b'8\001' + _GETMETADATARESPONSE_EXTENDEDMETADATAENTRY._options = None + _GETMETADATARESPONSE_EXTENDEDMETADATAENTRY._serialized_options = b'8\001' + _GETMETADATARESPONSE.fields_by_name['active_actors_count']._options = None + _GETMETADATARESPONSE.fields_by_name['active_actors_count']._serialized_options = b'\030\001' + _PUBSUBSUBSCRIPTION_METADATAENTRY._options = None + _PUBSUBSUBSCRIPTION_METADATAENTRY._serialized_options = b'8\001' + _GETCONFIGURATIONREQUEST_METADATAENTRY._options = None + _GETCONFIGURATIONREQUEST_METADATAENTRY._serialized_options = b'8\001' + _GETCONFIGURATIONRESPONSE_ITEMSENTRY._options = None + _GETCONFIGURATIONRESPONSE_ITEMSENTRY._serialized_options = b'8\001' + _SUBSCRIBECONFIGURATIONREQUEST_METADATAENTRY._options = None + _SUBSCRIBECONFIGURATIONREQUEST_METADATAENTRY._serialized_options = b'8\001' + _SUBSCRIBECONFIGURATIONRESPONSE_ITEMSENTRY._options = None + _SUBSCRIBECONFIGURATIONRESPONSE_ITEMSENTRY._serialized_options = b'8\001' + _GETWORKFLOWRESPONSE_PROPERTIESENTRY._options = None + _GETWORKFLOWRESPONSE_PROPERTIESENTRY._serialized_options = b'8\001' + _STARTWORKFLOWREQUEST_OPTIONSENTRY._options = None + _STARTWORKFLOWREQUEST_OPTIONSENTRY._serialized_options = b'8\001' + _CONVERSATIONALPHA1REQUEST_PARAMETERSENTRY._options = None + _CONVERSATIONALPHA1REQUEST_PARAMETERSENTRY._serialized_options = b'8\001' + _CONVERSATIONALPHA1REQUEST_METADATAENTRY._options = None + _CONVERSATIONALPHA1REQUEST_METADATAENTRY._serialized_options = b'8\001' + _CONVERSATIONALPHA1RESULT_PARAMETERSENTRY._options = None + _CONVERSATIONALPHA1RESULT_PARAMETERSENTRY._serialized_options = b'8\001' + _globals['_PUBSUBSUBSCRIPTIONTYPE']._serialized_start=16034 + _globals['_PUBSUBSUBSCRIPTIONTYPE']._serialized_end=16121 _globals['_INVOKESERVICEREQUEST']._serialized_start=224 _globals['_INVOKESERVICEREQUEST']._serialized_end=312 _globals['_GETSTATEREQUEST']._serialized_start=315 @@ -146,213 +152,231 @@ _globals['_BULKPUBLISHRESPONSEFAILEDENTRY']._serialized_start=2936 _globals['_BULKPUBLISHRESPONSEFAILEDENTRY']._serialized_end=3001 _globals['_SUBSCRIBETOPICEVENTSREQUESTALPHA1']._serialized_start=3004 - _globals['_SUBSCRIBETOPICEVENTSREQUESTALPHA1']._serialized_end=3255 - _globals['_SUBSCRIBETOPICEVENTSINITIALREQUESTALPHA1']._serialized_start=3258 - _globals['_SUBSCRIBETOPICEVENTSINITIALREQUESTALPHA1']._serialized_end=3536 - _globals['_SUBSCRIBETOPICEVENTSINITIALREQUESTALPHA1_METADATAENTRY']._serialized_start=513 - _globals['_SUBSCRIBETOPICEVENTSINITIALREQUESTALPHA1_METADATAENTRY']._serialized_end=560 - _globals['_SUBSCRIBETOPICEVENTSRESPONSEALPHA1']._serialized_start=3538 - _globals['_SUBSCRIBETOPICEVENTSRESPONSEALPHA1']._serialized_end=3645 - _globals['_INVOKEBINDINGREQUEST']._serialized_start=3648 - _globals['_INVOKEBINDINGREQUEST']._serialized_end=3843 + _globals['_SUBSCRIBETOPICEVENTSREQUESTALPHA1']._serialized_end=3264 + _globals['_SUBSCRIBETOPICEVENTSREQUESTINITIALALPHA1']._serialized_start=3267 + _globals['_SUBSCRIBETOPICEVENTSREQUESTINITIALALPHA1']._serialized_end=3545 + _globals['_SUBSCRIBETOPICEVENTSREQUESTINITIALALPHA1_METADATAENTRY']._serialized_start=513 + _globals['_SUBSCRIBETOPICEVENTSREQUESTINITIALALPHA1_METADATAENTRY']._serialized_end=560 + _globals['_SUBSCRIBETOPICEVENTSREQUESTPROCESSEDALPHA1']._serialized_start=3547 + _globals['_SUBSCRIBETOPICEVENTSREQUESTPROCESSEDALPHA1']._serialized_end=3662 + _globals['_SUBSCRIBETOPICEVENTSRESPONSEALPHA1']._serialized_start=3665 + _globals['_SUBSCRIBETOPICEVENTSRESPONSEALPHA1']._serialized_end=3902 + _globals['_SUBSCRIBETOPICEVENTSRESPONSEINITIALALPHA1']._serialized_start=3904 + _globals['_SUBSCRIBETOPICEVENTSRESPONSEINITIALALPHA1']._serialized_end=3947 + _globals['_INVOKEBINDINGREQUEST']._serialized_start=3950 + _globals['_INVOKEBINDINGREQUEST']._serialized_end=4145 _globals['_INVOKEBINDINGREQUEST_METADATAENTRY']._serialized_start=513 _globals['_INVOKEBINDINGREQUEST_METADATAENTRY']._serialized_end=560 - _globals['_INVOKEBINDINGRESPONSE']._serialized_start=3846 - _globals['_INVOKEBINDINGRESPONSE']._serialized_end=4010 + _globals['_INVOKEBINDINGRESPONSE']._serialized_start=4148 + _globals['_INVOKEBINDINGRESPONSE']._serialized_end=4312 _globals['_INVOKEBINDINGRESPONSE_METADATAENTRY']._serialized_start=513 _globals['_INVOKEBINDINGRESPONSE_METADATAENTRY']._serialized_end=560 - _globals['_GETSECRETREQUEST']._serialized_start=4013 - _globals['_GETSECRETREQUEST']._serialized_end=4197 + _globals['_GETSECRETREQUEST']._serialized_start=4315 + _globals['_GETSECRETREQUEST']._serialized_end=4499 _globals['_GETSECRETREQUEST_METADATAENTRY']._serialized_start=513 _globals['_GETSECRETREQUEST_METADATAENTRY']._serialized_end=560 - _globals['_GETSECRETRESPONSE']._serialized_start=4200 - _globals['_GETSECRETRESPONSE']._serialized_end=4330 - _globals['_GETSECRETRESPONSE_DATAENTRY']._serialized_start=4287 - _globals['_GETSECRETRESPONSE_DATAENTRY']._serialized_end=4330 - _globals['_GETBULKSECRETREQUEST']._serialized_start=4333 - _globals['_GETBULKSECRETREQUEST']._serialized_end=4512 + _globals['_GETSECRETRESPONSE']._serialized_start=4502 + _globals['_GETSECRETRESPONSE']._serialized_end=4632 + _globals['_GETSECRETRESPONSE_DATAENTRY']._serialized_start=4589 + _globals['_GETSECRETRESPONSE_DATAENTRY']._serialized_end=4632 + _globals['_GETBULKSECRETREQUEST']._serialized_start=4635 + _globals['_GETBULKSECRETREQUEST']._serialized_end=4814 _globals['_GETBULKSECRETREQUEST_METADATAENTRY']._serialized_start=513 _globals['_GETBULKSECRETREQUEST_METADATAENTRY']._serialized_end=560 - _globals['_SECRETRESPONSE']._serialized_start=4515 - _globals['_SECRETRESPONSE']._serialized_end=4648 - _globals['_SECRETRESPONSE_SECRETSENTRY']._serialized_start=4602 - _globals['_SECRETRESPONSE_SECRETSENTRY']._serialized_end=4648 - _globals['_GETBULKSECRETRESPONSE']._serialized_start=4651 - _globals['_GETBULKSECRETRESPONSE']._serialized_end=4828 - _globals['_GETBULKSECRETRESPONSE_DATAENTRY']._serialized_start=4746 - _globals['_GETBULKSECRETRESPONSE_DATAENTRY']._serialized_end=4828 - _globals['_TRANSACTIONALSTATEOPERATION']._serialized_start=4830 - _globals['_TRANSACTIONALSTATEOPERATION']._serialized_end=4932 - _globals['_EXECUTESTATETRANSACTIONREQUEST']._serialized_start=4935 - _globals['_EXECUTESTATETRANSACTIONREQUEST']._serialized_end=5194 + _globals['_SECRETRESPONSE']._serialized_start=4817 + _globals['_SECRETRESPONSE']._serialized_end=4950 + _globals['_SECRETRESPONSE_SECRETSENTRY']._serialized_start=4904 + _globals['_SECRETRESPONSE_SECRETSENTRY']._serialized_end=4950 + _globals['_GETBULKSECRETRESPONSE']._serialized_start=4953 + _globals['_GETBULKSECRETRESPONSE']._serialized_end=5130 + _globals['_GETBULKSECRETRESPONSE_DATAENTRY']._serialized_start=5048 + _globals['_GETBULKSECRETRESPONSE_DATAENTRY']._serialized_end=5130 + _globals['_TRANSACTIONALSTATEOPERATION']._serialized_start=5132 + _globals['_TRANSACTIONALSTATEOPERATION']._serialized_end=5234 + _globals['_EXECUTESTATETRANSACTIONREQUEST']._serialized_start=5237 + _globals['_EXECUTESTATETRANSACTIONREQUEST']._serialized_end=5496 _globals['_EXECUTESTATETRANSACTIONREQUEST_METADATAENTRY']._serialized_start=513 _globals['_EXECUTESTATETRANSACTIONREQUEST_METADATAENTRY']._serialized_end=560 - _globals['_REGISTERACTORTIMERREQUEST']._serialized_start=5197 - _globals['_REGISTERACTORTIMERREQUEST']._serialized_end=5384 - _globals['_UNREGISTERACTORTIMERREQUEST']._serialized_start=5386 - _globals['_UNREGISTERACTORTIMERREQUEST']._serialized_end=5487 - _globals['_REGISTERACTORREMINDERREQUEST']._serialized_start=5490 - _globals['_REGISTERACTORREMINDERREQUEST']._serialized_end=5662 - _globals['_UNREGISTERACTORREMINDERREQUEST']._serialized_start=5664 - _globals['_UNREGISTERACTORREMINDERREQUEST']._serialized_end=5768 - _globals['_GETACTORSTATEREQUEST']._serialized_start=5770 - _globals['_GETACTORSTATEREQUEST']._serialized_end=5863 - _globals['_GETACTORSTATERESPONSE']._serialized_start=5866 - _globals['_GETACTORSTATERESPONSE']._serialized_end=6030 + _globals['_REGISTERACTORTIMERREQUEST']._serialized_start=5499 + _globals['_REGISTERACTORTIMERREQUEST']._serialized_end=5686 + _globals['_UNREGISTERACTORTIMERREQUEST']._serialized_start=5688 + _globals['_UNREGISTERACTORTIMERREQUEST']._serialized_end=5789 + _globals['_REGISTERACTORREMINDERREQUEST']._serialized_start=5792 + _globals['_REGISTERACTORREMINDERREQUEST']._serialized_end=5964 + _globals['_UNREGISTERACTORREMINDERREQUEST']._serialized_start=5966 + _globals['_UNREGISTERACTORREMINDERREQUEST']._serialized_end=6070 + _globals['_GETACTORSTATEREQUEST']._serialized_start=6072 + _globals['_GETACTORSTATEREQUEST']._serialized_end=6165 + _globals['_GETACTORSTATERESPONSE']._serialized_start=6168 + _globals['_GETACTORSTATERESPONSE']._serialized_end=6332 _globals['_GETACTORSTATERESPONSE_METADATAENTRY']._serialized_start=513 _globals['_GETACTORSTATERESPONSE_METADATAENTRY']._serialized_end=560 - _globals['_EXECUTEACTORSTATETRANSACTIONREQUEST']._serialized_start=6033 - _globals['_EXECUTEACTORSTATETRANSACTIONREQUEST']._serialized_end=6205 - _globals['_TRANSACTIONALACTORSTATEOPERATION']._serialized_start=6208 - _globals['_TRANSACTIONALACTORSTATEOPERATION']._serialized_end=6453 + _globals['_EXECUTEACTORSTATETRANSACTIONREQUEST']._serialized_start=6335 + _globals['_EXECUTEACTORSTATETRANSACTIONREQUEST']._serialized_end=6507 + _globals['_TRANSACTIONALACTORSTATEOPERATION']._serialized_start=6510 + _globals['_TRANSACTIONALACTORSTATEOPERATION']._serialized_end=6755 _globals['_TRANSACTIONALACTORSTATEOPERATION_METADATAENTRY']._serialized_start=513 _globals['_TRANSACTIONALACTORSTATEOPERATION_METADATAENTRY']._serialized_end=560 - _globals['_INVOKEACTORREQUEST']._serialized_start=6456 - _globals['_INVOKEACTORREQUEST']._serialized_end=6688 + _globals['_INVOKEACTORREQUEST']._serialized_start=6758 + _globals['_INVOKEACTORREQUEST']._serialized_end=6990 _globals['_INVOKEACTORREQUEST_METADATAENTRY']._serialized_start=513 _globals['_INVOKEACTORREQUEST_METADATAENTRY']._serialized_end=560 - _globals['_INVOKEACTORRESPONSE']._serialized_start=6690 - _globals['_INVOKEACTORRESPONSE']._serialized_end=6725 - _globals['_GETMETADATAREQUEST']._serialized_start=6727 - _globals['_GETMETADATAREQUEST']._serialized_end=6747 - _globals['_GETMETADATARESPONSE']._serialized_start=6750 - _globals['_GETMETADATARESPONSE']._serialized_end=7545 - _globals['_GETMETADATARESPONSE_EXTENDEDMETADATAENTRY']._serialized_start=7490 - _globals['_GETMETADATARESPONSE_EXTENDEDMETADATAENTRY']._serialized_end=7545 - _globals['_ACTORRUNTIME']._serialized_start=7548 - _globals['_ACTORRUNTIME']._serialized_end=7864 - _globals['_ACTORRUNTIME_ACTORRUNTIMESTATUS']._serialized_start=7799 - _globals['_ACTORRUNTIME_ACTORRUNTIMESTATUS']._serialized_end=7864 - _globals['_ACTIVEACTORSCOUNT']._serialized_start=7866 - _globals['_ACTIVEACTORSCOUNT']._serialized_end=7914 - _globals['_REGISTEREDCOMPONENTS']._serialized_start=7916 - _globals['_REGISTEREDCOMPONENTS']._serialized_end=8005 - _globals['_METADATAHTTPENDPOINT']._serialized_start=8007 - _globals['_METADATAHTTPENDPOINT']._serialized_end=8049 - _globals['_APPCONNECTIONPROPERTIES']._serialized_start=8052 - _globals['_APPCONNECTIONPROPERTIES']._serialized_end=8261 - _globals['_APPCONNECTIONHEALTHPROPERTIES']._serialized_start=8264 - _globals['_APPCONNECTIONHEALTHPROPERTIES']._serialized_end=8484 - _globals['_PUBSUBSUBSCRIPTION']._serialized_start=8487 - _globals['_PUBSUBSUBSCRIPTION']._serialized_end=8877 + _globals['_INVOKEACTORRESPONSE']._serialized_start=6992 + _globals['_INVOKEACTORRESPONSE']._serialized_end=7027 + _globals['_GETMETADATAREQUEST']._serialized_start=7029 + _globals['_GETMETADATAREQUEST']._serialized_end=7049 + _globals['_GETMETADATARESPONSE']._serialized_start=7052 + _globals['_GETMETADATARESPONSE']._serialized_end=7847 + _globals['_GETMETADATARESPONSE_EXTENDEDMETADATAENTRY']._serialized_start=7792 + _globals['_GETMETADATARESPONSE_EXTENDEDMETADATAENTRY']._serialized_end=7847 + _globals['_ACTORRUNTIME']._serialized_start=7850 + _globals['_ACTORRUNTIME']._serialized_end=8166 + _globals['_ACTORRUNTIME_ACTORRUNTIMESTATUS']._serialized_start=8101 + _globals['_ACTORRUNTIME_ACTORRUNTIMESTATUS']._serialized_end=8166 + _globals['_ACTIVEACTORSCOUNT']._serialized_start=8168 + _globals['_ACTIVEACTORSCOUNT']._serialized_end=8216 + _globals['_REGISTEREDCOMPONENTS']._serialized_start=8218 + _globals['_REGISTEREDCOMPONENTS']._serialized_end=8307 + _globals['_METADATAHTTPENDPOINT']._serialized_start=8309 + _globals['_METADATAHTTPENDPOINT']._serialized_end=8351 + _globals['_APPCONNECTIONPROPERTIES']._serialized_start=8354 + _globals['_APPCONNECTIONPROPERTIES']._serialized_end=8563 + _globals['_APPCONNECTIONHEALTHPROPERTIES']._serialized_start=8566 + _globals['_APPCONNECTIONHEALTHPROPERTIES']._serialized_end=8786 + _globals['_PUBSUBSUBSCRIPTION']._serialized_start=8789 + _globals['_PUBSUBSUBSCRIPTION']._serialized_end=9179 _globals['_PUBSUBSUBSCRIPTION_METADATAENTRY']._serialized_start=513 _globals['_PUBSUBSUBSCRIPTION_METADATAENTRY']._serialized_end=560 - _globals['_PUBSUBSUBSCRIPTIONRULES']._serialized_start=8879 - _globals['_PUBSUBSUBSCRIPTIONRULES']._serialized_end=8966 - _globals['_PUBSUBSUBSCRIPTIONRULE']._serialized_start=8968 - _globals['_PUBSUBSUBSCRIPTIONRULE']._serialized_end=9021 - _globals['_SETMETADATAREQUEST']._serialized_start=9023 - _globals['_SETMETADATAREQUEST']._serialized_end=9071 - _globals['_GETCONFIGURATIONREQUEST']._serialized_start=9074 - _globals['_GETCONFIGURATIONREQUEST']._serialized_end=9262 + _globals['_PUBSUBSUBSCRIPTIONRULES']._serialized_start=9181 + _globals['_PUBSUBSUBSCRIPTIONRULES']._serialized_end=9268 + _globals['_PUBSUBSUBSCRIPTIONRULE']._serialized_start=9270 + _globals['_PUBSUBSUBSCRIPTIONRULE']._serialized_end=9323 + _globals['_SETMETADATAREQUEST']._serialized_start=9325 + _globals['_SETMETADATAREQUEST']._serialized_end=9373 + _globals['_GETCONFIGURATIONREQUEST']._serialized_start=9376 + _globals['_GETCONFIGURATIONREQUEST']._serialized_end=9564 _globals['_GETCONFIGURATIONREQUEST_METADATAENTRY']._serialized_start=513 _globals['_GETCONFIGURATIONREQUEST_METADATAENTRY']._serialized_end=560 - _globals['_GETCONFIGURATIONRESPONSE']._serialized_start=9265 - _globals['_GETCONFIGURATIONRESPONSE']._serialized_end=9453 - _globals['_GETCONFIGURATIONRESPONSE_ITEMSENTRY']._serialized_start=9368 - _globals['_GETCONFIGURATIONRESPONSE_ITEMSENTRY']._serialized_end=9453 - _globals['_SUBSCRIBECONFIGURATIONREQUEST']._serialized_start=9456 - _globals['_SUBSCRIBECONFIGURATIONREQUEST']._serialized_end=9656 + _globals['_GETCONFIGURATIONRESPONSE']._serialized_start=9567 + _globals['_GETCONFIGURATIONRESPONSE']._serialized_end=9755 + _globals['_GETCONFIGURATIONRESPONSE_ITEMSENTRY']._serialized_start=9670 + _globals['_GETCONFIGURATIONRESPONSE_ITEMSENTRY']._serialized_end=9755 + _globals['_SUBSCRIBECONFIGURATIONREQUEST']._serialized_start=9758 + _globals['_SUBSCRIBECONFIGURATIONREQUEST']._serialized_end=9958 _globals['_SUBSCRIBECONFIGURATIONREQUEST_METADATAENTRY']._serialized_start=513 _globals['_SUBSCRIBECONFIGURATIONREQUEST_METADATAENTRY']._serialized_end=560 - _globals['_UNSUBSCRIBECONFIGURATIONREQUEST']._serialized_start=9658 - _globals['_UNSUBSCRIBECONFIGURATIONREQUEST']._serialized_end=9723 - _globals['_SUBSCRIBECONFIGURATIONRESPONSE']._serialized_start=9726 - _globals['_SUBSCRIBECONFIGURATIONRESPONSE']._serialized_end=9938 - _globals['_SUBSCRIBECONFIGURATIONRESPONSE_ITEMSENTRY']._serialized_start=9368 - _globals['_SUBSCRIBECONFIGURATIONRESPONSE_ITEMSENTRY']._serialized_end=9453 - _globals['_UNSUBSCRIBECONFIGURATIONRESPONSE']._serialized_start=9940 - _globals['_UNSUBSCRIBECONFIGURATIONRESPONSE']._serialized_end=10003 - _globals['_TRYLOCKREQUEST']._serialized_start=10006 - _globals['_TRYLOCKREQUEST']._serialized_end=10161 - _globals['_TRYLOCKRESPONSE']._serialized_start=10163 - _globals['_TRYLOCKRESPONSE']._serialized_end=10197 - _globals['_UNLOCKREQUEST']._serialized_start=10199 - _globals['_UNLOCKREQUEST']._serialized_end=10309 - _globals['_UNLOCKRESPONSE']._serialized_start=10312 - _globals['_UNLOCKRESPONSE']._serialized_end=10486 - _globals['_UNLOCKRESPONSE_STATUS']._serialized_start=10392 - _globals['_UNLOCKRESPONSE_STATUS']._serialized_end=10486 - _globals['_SUBTLEGETKEYREQUEST']._serialized_start=10489 - _globals['_SUBTLEGETKEYREQUEST']._serialized_end=10665 - _globals['_SUBTLEGETKEYREQUEST_KEYFORMAT']._serialized_start=10635 - _globals['_SUBTLEGETKEYREQUEST_KEYFORMAT']._serialized_end=10665 - _globals['_SUBTLEGETKEYRESPONSE']._serialized_start=10667 - _globals['_SUBTLEGETKEYRESPONSE']._serialized_end=10734 - _globals['_SUBTLEENCRYPTREQUEST']._serialized_start=10737 - _globals['_SUBTLEENCRYPTREQUEST']._serialized_end=10919 - _globals['_SUBTLEENCRYPTRESPONSE']._serialized_start=10921 - _globals['_SUBTLEENCRYPTRESPONSE']._serialized_end=10977 - _globals['_SUBTLEDECRYPTREQUEST']._serialized_start=10980 - _globals['_SUBTLEDECRYPTREQUEST']._serialized_end=11176 - _globals['_SUBTLEDECRYPTRESPONSE']._serialized_start=11178 - _globals['_SUBTLEDECRYPTRESPONSE']._serialized_end=11220 - _globals['_SUBTLEWRAPKEYREQUEST']._serialized_start=11223 - _globals['_SUBTLEWRAPKEYREQUEST']._serialized_end=11423 - _globals['_SUBTLEWRAPKEYRESPONSE']._serialized_start=11425 - _globals['_SUBTLEWRAPKEYRESPONSE']._serialized_end=11494 - _globals['_SUBTLEUNWRAPKEYREQUEST']._serialized_start=11497 - _globals['_SUBTLEUNWRAPKEYREQUEST']._serialized_end=11708 - _globals['_SUBTLEUNWRAPKEYRESPONSE']._serialized_start=11710 - _globals['_SUBTLEUNWRAPKEYRESPONSE']._serialized_end=11772 - _globals['_SUBTLESIGNREQUEST']._serialized_start=11774 - _globals['_SUBTLESIGNREQUEST']._serialized_end=11894 - _globals['_SUBTLESIGNRESPONSE']._serialized_start=11896 - _globals['_SUBTLESIGNRESPONSE']._serialized_end=11935 - _globals['_SUBTLEVERIFYREQUEST']._serialized_start=11938 - _globals['_SUBTLEVERIFYREQUEST']._serialized_end=12079 - _globals['_SUBTLEVERIFYRESPONSE']._serialized_start=12081 - _globals['_SUBTLEVERIFYRESPONSE']._serialized_end=12118 - _globals['_ENCRYPTREQUEST']._serialized_start=12121 - _globals['_ENCRYPTREQUEST']._serialized_end=12254 - _globals['_ENCRYPTREQUESTOPTIONS']._serialized_start=12257 - _globals['_ENCRYPTREQUESTOPTIONS']._serialized_end=12511 - _globals['_ENCRYPTRESPONSE']._serialized_start=12513 - _globals['_ENCRYPTRESPONSE']._serialized_end=12584 - _globals['_DECRYPTREQUEST']._serialized_start=12587 - _globals['_DECRYPTREQUEST']._serialized_end=12720 - _globals['_DECRYPTREQUESTOPTIONS']._serialized_start=12722 - _globals['_DECRYPTREQUESTOPTIONS']._serialized_end=12811 - _globals['_DECRYPTRESPONSE']._serialized_start=12813 - _globals['_DECRYPTRESPONSE']._serialized_end=12884 - _globals['_GETWORKFLOWREQUEST']._serialized_start=12886 - _globals['_GETWORKFLOWREQUEST']._serialized_end=12986 - _globals['_GETWORKFLOWRESPONSE']._serialized_start=12989 - _globals['_GETWORKFLOWRESPONSE']._serialized_end=13377 - _globals['_GETWORKFLOWRESPONSE_PROPERTIESENTRY']._serialized_start=13328 - _globals['_GETWORKFLOWRESPONSE_PROPERTIESENTRY']._serialized_end=13377 - _globals['_STARTWORKFLOWREQUEST']._serialized_start=13380 - _globals['_STARTWORKFLOWREQUEST']._serialized_end=13657 - _globals['_STARTWORKFLOWREQUEST_OPTIONSENTRY']._serialized_start=13611 - _globals['_STARTWORKFLOWREQUEST_OPTIONSENTRY']._serialized_end=13657 - _globals['_STARTWORKFLOWRESPONSE']._serialized_start=13659 - _globals['_STARTWORKFLOWRESPONSE']._serialized_end=13715 - _globals['_TERMINATEWORKFLOWREQUEST']._serialized_start=13717 - _globals['_TERMINATEWORKFLOWREQUEST']._serialized_end=13823 - _globals['_PAUSEWORKFLOWREQUEST']._serialized_start=13825 - _globals['_PAUSEWORKFLOWREQUEST']._serialized_end=13927 - _globals['_RESUMEWORKFLOWREQUEST']._serialized_start=13929 - _globals['_RESUMEWORKFLOWREQUEST']._serialized_end=14032 - _globals['_RAISEEVENTWORKFLOWREQUEST']._serialized_start=14035 - _globals['_RAISEEVENTWORKFLOWREQUEST']._serialized_end=14193 - _globals['_PURGEWORKFLOWREQUEST']._serialized_start=14195 - _globals['_PURGEWORKFLOWREQUEST']._serialized_end=14297 - _globals['_SHUTDOWNREQUEST']._serialized_start=14299 - _globals['_SHUTDOWNREQUEST']._serialized_end=14316 - _globals['_JOB']._serialized_start=14319 - _globals['_JOB']._serialized_end=14506 - _globals['_SCHEDULEJOBREQUEST']._serialized_start=14508 - _globals['_SCHEDULEJOBREQUEST']._serialized_end=14569 - _globals['_SCHEDULEJOBRESPONSE']._serialized_start=14571 - _globals['_SCHEDULEJOBRESPONSE']._serialized_end=14592 - _globals['_GETJOBREQUEST']._serialized_start=14594 - _globals['_GETJOBREQUEST']._serialized_end=14623 - _globals['_GETJOBRESPONSE']._serialized_start=14625 - _globals['_GETJOBRESPONSE']._serialized_end=14682 - _globals['_DELETEJOBREQUEST']._serialized_start=14684 - _globals['_DELETEJOBREQUEST']._serialized_end=14716 - _globals['_DELETEJOBRESPONSE']._serialized_start=14718 - _globals['_DELETEJOBRESPONSE']._serialized_end=14737 - _globals['_DAPR']._serialized_start=14829 - _globals['_DAPR']._serialized_end=21016 + _globals['_UNSUBSCRIBECONFIGURATIONREQUEST']._serialized_start=9960 + _globals['_UNSUBSCRIBECONFIGURATIONREQUEST']._serialized_end=10025 + _globals['_SUBSCRIBECONFIGURATIONRESPONSE']._serialized_start=10028 + _globals['_SUBSCRIBECONFIGURATIONRESPONSE']._serialized_end=10240 + _globals['_SUBSCRIBECONFIGURATIONRESPONSE_ITEMSENTRY']._serialized_start=9670 + _globals['_SUBSCRIBECONFIGURATIONRESPONSE_ITEMSENTRY']._serialized_end=9755 + _globals['_UNSUBSCRIBECONFIGURATIONRESPONSE']._serialized_start=10242 + _globals['_UNSUBSCRIBECONFIGURATIONRESPONSE']._serialized_end=10305 + _globals['_TRYLOCKREQUEST']._serialized_start=10308 + _globals['_TRYLOCKREQUEST']._serialized_end=10463 + _globals['_TRYLOCKRESPONSE']._serialized_start=10465 + _globals['_TRYLOCKRESPONSE']._serialized_end=10499 + _globals['_UNLOCKREQUEST']._serialized_start=10501 + _globals['_UNLOCKREQUEST']._serialized_end=10611 + _globals['_UNLOCKRESPONSE']._serialized_start=10614 + _globals['_UNLOCKRESPONSE']._serialized_end=10788 + _globals['_UNLOCKRESPONSE_STATUS']._serialized_start=10694 + _globals['_UNLOCKRESPONSE_STATUS']._serialized_end=10788 + _globals['_SUBTLEGETKEYREQUEST']._serialized_start=10791 + _globals['_SUBTLEGETKEYREQUEST']._serialized_end=10967 + _globals['_SUBTLEGETKEYREQUEST_KEYFORMAT']._serialized_start=10937 + _globals['_SUBTLEGETKEYREQUEST_KEYFORMAT']._serialized_end=10967 + _globals['_SUBTLEGETKEYRESPONSE']._serialized_start=10969 + _globals['_SUBTLEGETKEYRESPONSE']._serialized_end=11036 + _globals['_SUBTLEENCRYPTREQUEST']._serialized_start=11039 + _globals['_SUBTLEENCRYPTREQUEST']._serialized_end=11221 + _globals['_SUBTLEENCRYPTRESPONSE']._serialized_start=11223 + _globals['_SUBTLEENCRYPTRESPONSE']._serialized_end=11279 + _globals['_SUBTLEDECRYPTREQUEST']._serialized_start=11282 + _globals['_SUBTLEDECRYPTREQUEST']._serialized_end=11478 + _globals['_SUBTLEDECRYPTRESPONSE']._serialized_start=11480 + _globals['_SUBTLEDECRYPTRESPONSE']._serialized_end=11522 + _globals['_SUBTLEWRAPKEYREQUEST']._serialized_start=11525 + _globals['_SUBTLEWRAPKEYREQUEST']._serialized_end=11725 + _globals['_SUBTLEWRAPKEYRESPONSE']._serialized_start=11727 + _globals['_SUBTLEWRAPKEYRESPONSE']._serialized_end=11796 + _globals['_SUBTLEUNWRAPKEYREQUEST']._serialized_start=11799 + _globals['_SUBTLEUNWRAPKEYREQUEST']._serialized_end=12010 + _globals['_SUBTLEUNWRAPKEYRESPONSE']._serialized_start=12012 + _globals['_SUBTLEUNWRAPKEYRESPONSE']._serialized_end=12074 + _globals['_SUBTLESIGNREQUEST']._serialized_start=12076 + _globals['_SUBTLESIGNREQUEST']._serialized_end=12196 + _globals['_SUBTLESIGNRESPONSE']._serialized_start=12198 + _globals['_SUBTLESIGNRESPONSE']._serialized_end=12237 + _globals['_SUBTLEVERIFYREQUEST']._serialized_start=12240 + _globals['_SUBTLEVERIFYREQUEST']._serialized_end=12381 + _globals['_SUBTLEVERIFYRESPONSE']._serialized_start=12383 + _globals['_SUBTLEVERIFYRESPONSE']._serialized_end=12420 + _globals['_ENCRYPTREQUEST']._serialized_start=12423 + _globals['_ENCRYPTREQUEST']._serialized_end=12556 + _globals['_ENCRYPTREQUESTOPTIONS']._serialized_start=12559 + _globals['_ENCRYPTREQUESTOPTIONS']._serialized_end=12813 + _globals['_ENCRYPTRESPONSE']._serialized_start=12815 + _globals['_ENCRYPTRESPONSE']._serialized_end=12886 + _globals['_DECRYPTREQUEST']._serialized_start=12889 + _globals['_DECRYPTREQUEST']._serialized_end=13022 + _globals['_DECRYPTREQUESTOPTIONS']._serialized_start=13024 + _globals['_DECRYPTREQUESTOPTIONS']._serialized_end=13113 + _globals['_DECRYPTRESPONSE']._serialized_start=13115 + _globals['_DECRYPTRESPONSE']._serialized_end=13186 + _globals['_GETWORKFLOWREQUEST']._serialized_start=13188 + _globals['_GETWORKFLOWREQUEST']._serialized_end=13288 + _globals['_GETWORKFLOWRESPONSE']._serialized_start=13291 + _globals['_GETWORKFLOWRESPONSE']._serialized_end=13679 + _globals['_GETWORKFLOWRESPONSE_PROPERTIESENTRY']._serialized_start=13630 + _globals['_GETWORKFLOWRESPONSE_PROPERTIESENTRY']._serialized_end=13679 + _globals['_STARTWORKFLOWREQUEST']._serialized_start=13682 + _globals['_STARTWORKFLOWREQUEST']._serialized_end=13959 + _globals['_STARTWORKFLOWREQUEST_OPTIONSENTRY']._serialized_start=13913 + _globals['_STARTWORKFLOWREQUEST_OPTIONSENTRY']._serialized_end=13959 + _globals['_STARTWORKFLOWRESPONSE']._serialized_start=13961 + _globals['_STARTWORKFLOWRESPONSE']._serialized_end=14017 + _globals['_TERMINATEWORKFLOWREQUEST']._serialized_start=14019 + _globals['_TERMINATEWORKFLOWREQUEST']._serialized_end=14125 + _globals['_PAUSEWORKFLOWREQUEST']._serialized_start=14127 + _globals['_PAUSEWORKFLOWREQUEST']._serialized_end=14229 + _globals['_RESUMEWORKFLOWREQUEST']._serialized_start=14231 + _globals['_RESUMEWORKFLOWREQUEST']._serialized_end=14334 + _globals['_RAISEEVENTWORKFLOWREQUEST']._serialized_start=14337 + _globals['_RAISEEVENTWORKFLOWREQUEST']._serialized_end=14495 + _globals['_PURGEWORKFLOWREQUEST']._serialized_start=14497 + _globals['_PURGEWORKFLOWREQUEST']._serialized_end=14599 + _globals['_SHUTDOWNREQUEST']._serialized_start=14601 + _globals['_SHUTDOWNREQUEST']._serialized_end=14618 + _globals['_JOB']._serialized_start=14621 + _globals['_JOB']._serialized_end=14853 + _globals['_SCHEDULEJOBREQUEST']._serialized_start=14855 + _globals['_SCHEDULEJOBREQUEST']._serialized_end=14916 + _globals['_SCHEDULEJOBRESPONSE']._serialized_start=14918 + _globals['_SCHEDULEJOBRESPONSE']._serialized_end=14939 + _globals['_GETJOBREQUEST']._serialized_start=14941 + _globals['_GETJOBREQUEST']._serialized_end=14970 + _globals['_GETJOBRESPONSE']._serialized_start=14972 + _globals['_GETJOBRESPONSE']._serialized_end=15029 + _globals['_DELETEJOBREQUEST']._serialized_start=15031 + _globals['_DELETEJOBREQUEST']._serialized_end=15063 + _globals['_DELETEJOBRESPONSE']._serialized_start=15065 + _globals['_DELETEJOBRESPONSE']._serialized_end=15084 + _globals['_CONVERSATIONALPHA1REQUEST']._serialized_start=15087 + _globals['_CONVERSATIONALPHA1REQUEST']._serialized_end=15592 + _globals['_CONVERSATIONALPHA1REQUEST_PARAMETERSENTRY']._serialized_start=15429 + _globals['_CONVERSATIONALPHA1REQUEST_PARAMETERSENTRY']._serialized_end=15500 + _globals['_CONVERSATIONALPHA1REQUEST_METADATAENTRY']._serialized_start=513 + _globals['_CONVERSATIONALPHA1REQUEST_METADATAENTRY']._serialized_end=560 + _globals['_CONVERSATIONINPUT']._serialized_start=15594 + _globals['_CONVERSATIONINPUT']._serialized_end=15694 + _globals['_CONVERSATIONALPHA1RESULT']._serialized_start=15697 + _globals['_CONVERSATIONALPHA1RESULT']._serialized_end=15897 + _globals['_CONVERSATIONALPHA1RESULT_PARAMETERSENTRY']._serialized_start=15429 + _globals['_CONVERSATIONALPHA1RESULT_PARAMETERSENTRY']._serialized_end=15500 + _globals['_CONVERSATIONALPHA1RESPONSE']._serialized_start=15900 + _globals['_CONVERSATIONALPHA1RESPONSE']._serialized_end=16032 + _globals['_DAPR']._serialized_start=16124 + _globals['_DAPR']._serialized_end=22449 # @@protoc_insertion_point(module_scope) diff --git a/dapr/proto/runtime/v1/dapr_pb2.pyi b/dapr/proto/runtime/v1/dapr_pb2.pyi index dd4a98f2..11f695a5 100644 --- a/dapr/proto/runtime/v1/dapr_pb2.pyi +++ b/dapr/proto/runtime/v1/dapr_pb2.pyi @@ -13,7 +13,6 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. """ - import builtins import collections.abc import dapr.proto.common.v1.common_pb2 @@ -62,7 +61,7 @@ STREAMING: PubsubSubscriptionType.ValueType # 3 """Bidirectional Streaming subscription""" global___PubsubSubscriptionType = PubsubSubscriptionType -@typing.final +@typing_extensions.final class InvokeServiceRequest(google.protobuf.message.Message): """InvokeServiceRequest represents the request message for Service invocation.""" @@ -75,25 +74,24 @@ class InvokeServiceRequest(google.protobuf.message.Message): @property def message(self) -> dapr.proto.common.v1.common_pb2.InvokeRequest: """Required. message which will be delivered to callee.""" - def __init__( self, *, id: builtins.str = ..., message: dapr.proto.common.v1.common_pb2.InvokeRequest | None = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["message", b"message"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["id", b"id", "message", b"message"]) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["message", b"message"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["id", b"id", "message", b"message"]) -> None: ... global___InvokeServiceRequest = InvokeServiceRequest -@typing.final +@typing_extensions.final class GetStateRequest(google.protobuf.message.Message): """GetStateRequest is the message to get key-value states from specific state store.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing.final + @typing_extensions.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -107,7 +105,7 @@ class GetStateRequest(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... STORE_NAME_FIELD_NUMBER: builtins.int KEY_FIELD_NUMBER: builtins.int @@ -122,7 +120,6 @@ class GetStateRequest(google.protobuf.message.Message): @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """The metadata which will be sent to state store components.""" - def __init__( self, *, @@ -131,17 +128,17 @@ class GetStateRequest(google.protobuf.message.Message): consistency: dapr.proto.common.v1.common_pb2.StateOptions.StateConsistency.ValueType = ..., metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["consistency", b"consistency", "key", b"key", "metadata", b"metadata", "store_name", b"store_name"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["consistency", b"consistency", "key", b"key", "metadata", b"metadata", "store_name", b"store_name"]) -> None: ... global___GetStateRequest = GetStateRequest -@typing.final +@typing_extensions.final class GetBulkStateRequest(google.protobuf.message.Message): """GetBulkStateRequest is the message to get a list of key-value states from specific state store.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing.final + @typing_extensions.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -155,7 +152,7 @@ class GetBulkStateRequest(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... STORE_NAME_FIELD_NUMBER: builtins.int KEYS_FIELD_NUMBER: builtins.int @@ -163,16 +160,14 @@ class GetBulkStateRequest(google.protobuf.message.Message): METADATA_FIELD_NUMBER: builtins.int store_name: builtins.str """The name of state store.""" - parallelism: builtins.int - """The number of parallel operations executed on the state store for a get operation.""" @property def keys(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]: """The keys to get.""" - + parallelism: builtins.int + """The number of parallel operations executed on the state store for a get operation.""" @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """The metadata which will be sent to state store components.""" - def __init__( self, *, @@ -181,11 +176,11 @@ class GetBulkStateRequest(google.protobuf.message.Message): parallelism: builtins.int = ..., metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["keys", b"keys", "metadata", b"metadata", "parallelism", b"parallelism", "store_name", b"store_name"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["keys", b"keys", "metadata", b"metadata", "parallelism", b"parallelism", "store_name", b"store_name"]) -> None: ... global___GetBulkStateRequest = GetBulkStateRequest -@typing.final +@typing_extensions.final class GetBulkStateResponse(google.protobuf.message.Message): """GetBulkStateResponse is the response conveying the list of state values.""" @@ -195,17 +190,16 @@ class GetBulkStateResponse(google.protobuf.message.Message): @property def items(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___BulkStateItem]: """The list of items containing the keys to get values for.""" - def __init__( self, *, items: collections.abc.Iterable[global___BulkStateItem] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["items", b"items"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["items", b"items"]) -> None: ... global___GetBulkStateResponse = GetBulkStateResponse -@typing.final +@typing_extensions.final class BulkStateItem(google.protobuf.message.Message): """BulkStateItem is the response item for a bulk get operation. Return values include the item key, data and etag. @@ -213,7 +207,7 @@ class BulkStateItem(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing.final + @typing_extensions.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -227,7 +221,7 @@ class BulkStateItem(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... KEY_FIELD_NUMBER: builtins.int DATA_FIELD_NUMBER: builtins.int @@ -247,7 +241,6 @@ class BulkStateItem(google.protobuf.message.Message): @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """The metadata which will be sent to app.""" - def __init__( self, *, @@ -257,17 +250,17 @@ class BulkStateItem(google.protobuf.message.Message): error: builtins.str = ..., metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["data", b"data", "error", b"error", "etag", b"etag", "key", b"key", "metadata", b"metadata"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["data", b"data", "error", b"error", "etag", b"etag", "key", b"key", "metadata", b"metadata"]) -> None: ... global___BulkStateItem = BulkStateItem -@typing.final +@typing_extensions.final class GetStateResponse(google.protobuf.message.Message): """GetStateResponse is the response conveying the state value and etag.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing.final + @typing_extensions.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -281,7 +274,7 @@ class GetStateResponse(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... DATA_FIELD_NUMBER: builtins.int ETAG_FIELD_NUMBER: builtins.int @@ -295,7 +288,6 @@ class GetStateResponse(google.protobuf.message.Message): @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """The metadata which will be sent to app.""" - def __init__( self, *, @@ -303,17 +295,17 @@ class GetStateResponse(google.protobuf.message.Message): etag: builtins.str = ..., metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["data", b"data", "etag", b"etag", "metadata", b"metadata"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["data", b"data", "etag", b"etag", "metadata", b"metadata"]) -> None: ... global___GetStateResponse = GetStateResponse -@typing.final +@typing_extensions.final class DeleteStateRequest(google.protobuf.message.Message): """DeleteStateRequest is the message to delete key-value states in the specific state store.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing.final + @typing_extensions.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -327,7 +319,7 @@ class DeleteStateRequest(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... STORE_NAME_FIELD_NUMBER: builtins.int KEY_FIELD_NUMBER: builtins.int @@ -343,17 +335,14 @@ class DeleteStateRequest(google.protobuf.message.Message): """The entity tag which represents the specific version of data. The exact ETag format is defined by the corresponding data store. """ - @property def options(self) -> dapr.proto.common.v1.common_pb2.StateOptions: """State operation options which includes concurrency/ consistency/retry_policy. """ - @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """The metadata which will be sent to state store components.""" - def __init__( self, *, @@ -363,12 +352,12 @@ class DeleteStateRequest(google.protobuf.message.Message): options: dapr.proto.common.v1.common_pb2.StateOptions | None = ..., metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["etag", b"etag", "options", b"options"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["etag", b"etag", "key", b"key", "metadata", b"metadata", "options", b"options", "store_name", b"store_name"]) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["etag", b"etag", "options", b"options"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["etag", b"etag", "key", b"key", "metadata", b"metadata", "options", b"options", "store_name", b"store_name"]) -> None: ... global___DeleteStateRequest = DeleteStateRequest -@typing.final +@typing_extensions.final class DeleteBulkStateRequest(google.protobuf.message.Message): """DeleteBulkStateRequest is the message to delete a list of key-value states from specific state store.""" @@ -381,18 +370,17 @@ class DeleteBulkStateRequest(google.protobuf.message.Message): @property def states(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[dapr.proto.common.v1.common_pb2.StateItem]: """The array of the state key values.""" - def __init__( self, *, store_name: builtins.str = ..., states: collections.abc.Iterable[dapr.proto.common.v1.common_pb2.StateItem] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["states", b"states", "store_name", b"store_name"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["states", b"states", "store_name", b"store_name"]) -> None: ... global___DeleteBulkStateRequest = DeleteBulkStateRequest -@typing.final +@typing_extensions.final class SaveStateRequest(google.protobuf.message.Message): """SaveStateRequest is the message to save multiple states into state store.""" @@ -405,24 +393,23 @@ class SaveStateRequest(google.protobuf.message.Message): @property def states(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[dapr.proto.common.v1.common_pb2.StateItem]: """The array of the state key values.""" - def __init__( self, *, store_name: builtins.str = ..., states: collections.abc.Iterable[dapr.proto.common.v1.common_pb2.StateItem] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["states", b"states", "store_name", b"store_name"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["states", b"states", "store_name", b"store_name"]) -> None: ... global___SaveStateRequest = SaveStateRequest -@typing.final +@typing_extensions.final class QueryStateRequest(google.protobuf.message.Message): """QueryStateRequest is the message to query state store.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing.final + @typing_extensions.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -436,7 +423,7 @@ class QueryStateRequest(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... STORE_NAME_FIELD_NUMBER: builtins.int QUERY_FIELD_NUMBER: builtins.int @@ -448,7 +435,6 @@ class QueryStateRequest(google.protobuf.message.Message): @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """The metadata which will be sent to state store components.""" - def __init__( self, *, @@ -456,11 +442,11 @@ class QueryStateRequest(google.protobuf.message.Message): query: builtins.str = ..., metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["metadata", b"metadata", "query", b"query", "store_name", b"store_name"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["metadata", b"metadata", "query", b"query", "store_name", b"store_name"]) -> None: ... global___QueryStateRequest = QueryStateRequest -@typing.final +@typing_extensions.final class QueryStateItem(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -486,17 +472,17 @@ class QueryStateItem(google.protobuf.message.Message): etag: builtins.str = ..., error: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["data", b"data", "error", b"error", "etag", b"etag", "key", b"key"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["data", b"data", "error", b"error", "etag", b"etag", "key", b"key"]) -> None: ... global___QueryStateItem = QueryStateItem -@typing.final +@typing_extensions.final class QueryStateResponse(google.protobuf.message.Message): """QueryStateResponse is the response conveying the query results.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing.final + @typing_extensions.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -510,21 +496,19 @@ class QueryStateResponse(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... RESULTS_FIELD_NUMBER: builtins.int TOKEN_FIELD_NUMBER: builtins.int METADATA_FIELD_NUMBER: builtins.int - token: builtins.str - """Pagination token.""" @property def results(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___QueryStateItem]: """An array of query results.""" - + token: builtins.str + """Pagination token.""" @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """The metadata which will be sent to app.""" - def __init__( self, *, @@ -532,17 +516,17 @@ class QueryStateResponse(google.protobuf.message.Message): token: builtins.str = ..., metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["metadata", b"metadata", "results", b"results", "token", b"token"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["metadata", b"metadata", "results", b"results", "token", b"token"]) -> None: ... global___QueryStateResponse = QueryStateResponse -@typing.final +@typing_extensions.final class PublishEventRequest(google.protobuf.message.Message): """PublishEventRequest is the message to publish event data to pubsub topic""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing.final + @typing_extensions.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -556,7 +540,7 @@ class PublishEventRequest(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... PUBSUB_NAME_FIELD_NUMBER: builtins.int TOPIC_FIELD_NUMBER: builtins.int @@ -578,7 +562,6 @@ class PublishEventRequest(google.protobuf.message.Message): metadata property: - key : the key of the message. """ - def __init__( self, *, @@ -588,17 +571,17 @@ class PublishEventRequest(google.protobuf.message.Message): data_content_type: builtins.str = ..., metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["data", b"data", "data_content_type", b"data_content_type", "metadata", b"metadata", "pubsub_name", b"pubsub_name", "topic", b"topic"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["data", b"data", "data_content_type", b"data_content_type", "metadata", b"metadata", "pubsub_name", b"pubsub_name", "topic", b"topic"]) -> None: ... global___PublishEventRequest = PublishEventRequest -@typing.final +@typing_extensions.final class BulkPublishRequest(google.protobuf.message.Message): """BulkPublishRequest is the message to bulk publish events to pubsub topic""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing.final + @typing_extensions.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -612,7 +595,7 @@ class BulkPublishRequest(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... PUBSUB_NAME_FIELD_NUMBER: builtins.int TOPIC_FIELD_NUMBER: builtins.int @@ -625,11 +608,9 @@ class BulkPublishRequest(google.protobuf.message.Message): @property def entries(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___BulkPublishRequestEntry]: """The entries which contain the individual events and associated details to be published""" - @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """The request level metadata passing to to the pubsub components""" - def __init__( self, *, @@ -638,17 +619,17 @@ class BulkPublishRequest(google.protobuf.message.Message): entries: collections.abc.Iterable[global___BulkPublishRequestEntry] | None = ..., metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["entries", b"entries", "metadata", b"metadata", "pubsub_name", b"pubsub_name", "topic", b"topic"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["entries", b"entries", "metadata", b"metadata", "pubsub_name", b"pubsub_name", "topic", b"topic"]) -> None: ... global___BulkPublishRequest = BulkPublishRequest -@typing.final +@typing_extensions.final class BulkPublishRequestEntry(google.protobuf.message.Message): """BulkPublishRequestEntry is the message containing the event to be bulk published""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing.final + @typing_extensions.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -662,7 +643,7 @@ class BulkPublishRequestEntry(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... ENTRY_ID_FIELD_NUMBER: builtins.int EVENT_FIELD_NUMBER: builtins.int @@ -677,7 +658,6 @@ class BulkPublishRequestEntry(google.protobuf.message.Message): @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """The event level metadata passing to the pubsub component""" - def __init__( self, *, @@ -686,11 +666,11 @@ class BulkPublishRequestEntry(google.protobuf.message.Message): content_type: builtins.str = ..., metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["content_type", b"content_type", "entry_id", b"entry_id", "event", b"event", "metadata", b"metadata"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["content_type", b"content_type", "entry_id", b"entry_id", "event", b"event", "metadata", b"metadata"]) -> None: ... global___BulkPublishRequestEntry = BulkPublishRequestEntry -@typing.final +@typing_extensions.final class BulkPublishResponse(google.protobuf.message.Message): """BulkPublishResponse is the message returned from a BulkPublishEvent call""" @@ -700,17 +680,16 @@ class BulkPublishResponse(google.protobuf.message.Message): @property def failedEntries(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___BulkPublishResponseFailedEntry]: """The entries for different events that failed publish in the BulkPublishEvent call""" - def __init__( self, *, failedEntries: collections.abc.Iterable[global___BulkPublishResponseFailedEntry] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["failedEntries", b"failedEntries"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["failedEntries", b"failedEntries"]) -> None: ... global___BulkPublishResponse = BulkPublishResponse -@typing.final +@typing_extensions.final class BulkPublishResponseFailedEntry(google.protobuf.message.Message): """BulkPublishResponseFailedEntry is the message containing the entryID and error of a failed event in BulkPublishEvent call""" @@ -728,47 +707,47 @@ class BulkPublishResponseFailedEntry(google.protobuf.message.Message): entry_id: builtins.str = ..., error: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["entry_id", b"entry_id", "error", b"error"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["entry_id", b"entry_id", "error", b"error"]) -> None: ... global___BulkPublishResponseFailedEntry = BulkPublishResponseFailedEntry -@typing.final +@typing_extensions.final class SubscribeTopicEventsRequestAlpha1(google.protobuf.message.Message): """SubscribeTopicEventsRequestAlpha1 is a message containing the details for subscribing to a topic via streaming. The first message must always be the initial request. All subsequent - messages must be event responses. + messages must be event processed responses. """ DESCRIPTOR: google.protobuf.descriptor.Descriptor INITIAL_REQUEST_FIELD_NUMBER: builtins.int - EVENT_RESPONSE_FIELD_NUMBER: builtins.int + EVENT_PROCESSED_FIELD_NUMBER: builtins.int @property - def initial_request(self) -> global___SubscribeTopicEventsInitialRequestAlpha1: ... + def initial_request(self) -> global___SubscribeTopicEventsRequestInitialAlpha1: ... @property - def event_response(self) -> global___SubscribeTopicEventsResponseAlpha1: ... + def event_processed(self) -> global___SubscribeTopicEventsRequestProcessedAlpha1: ... def __init__( self, *, - initial_request: global___SubscribeTopicEventsInitialRequestAlpha1 | None = ..., - event_response: global___SubscribeTopicEventsResponseAlpha1 | None = ..., + initial_request: global___SubscribeTopicEventsRequestInitialAlpha1 | None = ..., + event_processed: global___SubscribeTopicEventsRequestProcessedAlpha1 | None = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["event_response", b"event_response", "initial_request", b"initial_request", "subscribe_topic_events_request_type", b"subscribe_topic_events_request_type"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["event_response", b"event_response", "initial_request", b"initial_request", "subscribe_topic_events_request_type", b"subscribe_topic_events_request_type"]) -> None: ... - def WhichOneof(self, oneof_group: typing.Literal["subscribe_topic_events_request_type", b"subscribe_topic_events_request_type"]) -> typing.Literal["initial_request", "event_response"] | None: ... + def HasField(self, field_name: typing_extensions.Literal["event_processed", b"event_processed", "initial_request", b"initial_request", "subscribe_topic_events_request_type", b"subscribe_topic_events_request_type"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["event_processed", b"event_processed", "initial_request", b"initial_request", "subscribe_topic_events_request_type", b"subscribe_topic_events_request_type"]) -> None: ... + def WhichOneof(self, oneof_group: typing_extensions.Literal["subscribe_topic_events_request_type", b"subscribe_topic_events_request_type"]) -> typing_extensions.Literal["initial_request", "event_processed"] | None: ... global___SubscribeTopicEventsRequestAlpha1 = SubscribeTopicEventsRequestAlpha1 -@typing.final -class SubscribeTopicEventsInitialRequestAlpha1(google.protobuf.message.Message): - """SubscribeTopicEventsInitialRequestAlpha1 is the initial message containing the - details for subscribing to a topic via streaming. +@typing_extensions.final +class SubscribeTopicEventsRequestInitialAlpha1(google.protobuf.message.Message): + """SubscribeTopicEventsRequestInitialAlpha1 is the initial message containing + the details for subscribing to a topic via streaming. """ DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing.final + @typing_extensions.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -782,7 +761,7 @@ class SubscribeTopicEventsInitialRequestAlpha1(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... PUBSUB_NAME_FIELD_NUMBER: builtins.int TOPIC_FIELD_NUMBER: builtins.int @@ -792,10 +771,6 @@ class SubscribeTopicEventsInitialRequestAlpha1(google.protobuf.message.Message): """The name of the pubsub component""" topic: builtins.str """The pubsub topic""" - dead_letter_topic: builtins.str - """dead_letter_topic is the topic to which messages that fail to be processed - are sent. - """ @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """The metadata passing to pub components @@ -803,7 +778,10 @@ class SubscribeTopicEventsInitialRequestAlpha1(google.protobuf.message.Message): metadata property: - key : the key of the message. """ - + dead_letter_topic: builtins.str + """dead_letter_topic is the topic to which messages that fail to be processed + are sent. + """ def __init__( self, *, @@ -812,15 +790,15 @@ class SubscribeTopicEventsInitialRequestAlpha1(google.protobuf.message.Message): metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., dead_letter_topic: builtins.str | None = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["_dead_letter_topic", b"_dead_letter_topic", "dead_letter_topic", b"dead_letter_topic"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["_dead_letter_topic", b"_dead_letter_topic", "dead_letter_topic", b"dead_letter_topic", "metadata", b"metadata", "pubsub_name", b"pubsub_name", "topic", b"topic"]) -> None: ... - def WhichOneof(self, oneof_group: typing.Literal["_dead_letter_topic", b"_dead_letter_topic"]) -> typing.Literal["dead_letter_topic"] | None: ... + def HasField(self, field_name: typing_extensions.Literal["_dead_letter_topic", b"_dead_letter_topic", "dead_letter_topic", b"dead_letter_topic"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["_dead_letter_topic", b"_dead_letter_topic", "dead_letter_topic", b"dead_letter_topic", "metadata", b"metadata", "pubsub_name", b"pubsub_name", "topic", b"topic"]) -> None: ... + def WhichOneof(self, oneof_group: typing_extensions.Literal["_dead_letter_topic", b"_dead_letter_topic"]) -> typing_extensions.Literal["dead_letter_topic"] | None: ... -global___SubscribeTopicEventsInitialRequestAlpha1 = SubscribeTopicEventsInitialRequestAlpha1 +global___SubscribeTopicEventsRequestInitialAlpha1 = SubscribeTopicEventsRequestInitialAlpha1 -@typing.final -class SubscribeTopicEventsResponseAlpha1(google.protobuf.message.Message): - """SubscribeTopicEventsResponseAlpha1 is a message containing the result of a +@typing_extensions.final +class SubscribeTopicEventsRequestProcessedAlpha1(google.protobuf.message.Message): + """SubscribeTopicEventsRequestProcessedAlpha1 is the message containing the subscription to a topic. """ @@ -833,25 +811,64 @@ class SubscribeTopicEventsResponseAlpha1(google.protobuf.message.Message): @property def status(self) -> dapr.proto.runtime.v1.appcallback_pb2.TopicEventResponse: """status is the result of the subscription request.""" - def __init__( self, *, id: builtins.str = ..., status: dapr.proto.runtime.v1.appcallback_pb2.TopicEventResponse | None = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["status", b"status"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["id", b"id", "status", b"status"]) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["status", b"status"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["id", b"id", "status", b"status"]) -> None: ... + +global___SubscribeTopicEventsRequestProcessedAlpha1 = SubscribeTopicEventsRequestProcessedAlpha1 + +@typing_extensions.final +class SubscribeTopicEventsResponseAlpha1(google.protobuf.message.Message): + """SubscribeTopicEventsResponseAlpha1 is a message returned from daprd + when subscribing to a topic via streaming. + """ + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + INITIAL_RESPONSE_FIELD_NUMBER: builtins.int + EVENT_MESSAGE_FIELD_NUMBER: builtins.int + @property + def initial_response(self) -> global___SubscribeTopicEventsResponseInitialAlpha1: ... + @property + def event_message(self) -> dapr.proto.runtime.v1.appcallback_pb2.TopicEventRequest: ... + def __init__( + self, + *, + initial_response: global___SubscribeTopicEventsResponseInitialAlpha1 | None = ..., + event_message: dapr.proto.runtime.v1.appcallback_pb2.TopicEventRequest | None = ..., + ) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["event_message", b"event_message", "initial_response", b"initial_response", "subscribe_topic_events_response_type", b"subscribe_topic_events_response_type"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["event_message", b"event_message", "initial_response", b"initial_response", "subscribe_topic_events_response_type", b"subscribe_topic_events_response_type"]) -> None: ... + def WhichOneof(self, oneof_group: typing_extensions.Literal["subscribe_topic_events_response_type", b"subscribe_topic_events_response_type"]) -> typing_extensions.Literal["initial_response", "event_message"] | None: ... global___SubscribeTopicEventsResponseAlpha1 = SubscribeTopicEventsResponseAlpha1 -@typing.final +@typing_extensions.final +class SubscribeTopicEventsResponseInitialAlpha1(google.protobuf.message.Message): + """SubscribeTopicEventsResponseInitialAlpha1 is the initial response from daprd + when subscribing to a topic. + """ + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + def __init__( + self, + ) -> None: ... + +global___SubscribeTopicEventsResponseInitialAlpha1 = SubscribeTopicEventsResponseInitialAlpha1 + +@typing_extensions.final class InvokeBindingRequest(google.protobuf.message.Message): """InvokeBindingRequest is the message to send data to output bindings""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing.final + @typing_extensions.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -865,7 +882,7 @@ class InvokeBindingRequest(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... NAME_FIELD_NUMBER: builtins.int DATA_FIELD_NUMBER: builtins.int @@ -875,19 +892,19 @@ class InvokeBindingRequest(google.protobuf.message.Message): """The name of the output binding to invoke.""" data: builtins.bytes """The data which will be sent to output binding.""" - operation: builtins.str - """The name of the operation type for the binding to invoke""" @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """The metadata passing to output binding components Common metadata property: - ttlInSeconds : the time to live in seconds for the message. + If set in the binding definition will cause all messages to have a default time to live. The message ttl overrides any value in the binding definition. """ - + operation: builtins.str + """The name of the operation type for the binding to invoke""" def __init__( self, *, @@ -896,17 +913,17 @@ class InvokeBindingRequest(google.protobuf.message.Message): metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., operation: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["data", b"data", "metadata", b"metadata", "name", b"name", "operation", b"operation"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["data", b"data", "metadata", b"metadata", "name", b"name", "operation", b"operation"]) -> None: ... global___InvokeBindingRequest = InvokeBindingRequest -@typing.final +@typing_extensions.final class InvokeBindingResponse(google.protobuf.message.Message): """InvokeBindingResponse is the message returned from an output binding invocation""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing.final + @typing_extensions.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -920,7 +937,7 @@ class InvokeBindingResponse(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... DATA_FIELD_NUMBER: builtins.int METADATA_FIELD_NUMBER: builtins.int @@ -929,24 +946,23 @@ class InvokeBindingResponse(google.protobuf.message.Message): @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """The metadata returned from an external system""" - def __init__( self, *, data: builtins.bytes = ..., metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["data", b"data", "metadata", b"metadata"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["data", b"data", "metadata", b"metadata"]) -> None: ... global___InvokeBindingResponse = InvokeBindingResponse -@typing.final +@typing_extensions.final class GetSecretRequest(google.protobuf.message.Message): """GetSecretRequest is the message to get secret from secret store.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing.final + @typing_extensions.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -960,7 +976,7 @@ class GetSecretRequest(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... STORE_NAME_FIELD_NUMBER: builtins.int KEY_FIELD_NUMBER: builtins.int @@ -972,7 +988,6 @@ class GetSecretRequest(google.protobuf.message.Message): @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """The metadata which will be sent to secret store components.""" - def __init__( self, *, @@ -980,17 +995,17 @@ class GetSecretRequest(google.protobuf.message.Message): key: builtins.str = ..., metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["key", b"key", "metadata", b"metadata", "store_name", b"store_name"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "metadata", b"metadata", "store_name", b"store_name"]) -> None: ... global___GetSecretRequest = GetSecretRequest -@typing.final +@typing_extensions.final class GetSecretResponse(google.protobuf.message.Message): """GetSecretResponse is the response message to convey the requested secret.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing.final + @typing_extensions.final class DataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -1004,7 +1019,7 @@ class GetSecretResponse(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... DATA_FIELD_NUMBER: builtins.int @property @@ -1012,23 +1027,22 @@ class GetSecretResponse(google.protobuf.message.Message): """data is the secret value. Some secret store, such as kubernetes secret store, can save multiple secrets for single secret key. """ - def __init__( self, *, data: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["data", b"data"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["data", b"data"]) -> None: ... global___GetSecretResponse = GetSecretResponse -@typing.final +@typing_extensions.final class GetBulkSecretRequest(google.protobuf.message.Message): """GetBulkSecretRequest is the message to get the secrets from secret store.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing.final + @typing_extensions.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -1042,7 +1056,7 @@ class GetBulkSecretRequest(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... STORE_NAME_FIELD_NUMBER: builtins.int METADATA_FIELD_NUMBER: builtins.int @@ -1051,24 +1065,23 @@ class GetBulkSecretRequest(google.protobuf.message.Message): @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """The metadata which will be sent to secret store components.""" - def __init__( self, *, store_name: builtins.str = ..., metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["metadata", b"metadata", "store_name", b"store_name"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["metadata", b"metadata", "store_name", b"store_name"]) -> None: ... global___GetBulkSecretRequest = GetBulkSecretRequest -@typing.final +@typing_extensions.final class SecretResponse(google.protobuf.message.Message): """SecretResponse is a map of decrypted string/string values""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing.final + @typing_extensions.final class SecretsEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -1082,7 +1095,7 @@ class SecretResponse(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... SECRETS_FIELD_NUMBER: builtins.int @property @@ -1092,17 +1105,17 @@ class SecretResponse(google.protobuf.message.Message): *, secrets: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["secrets", b"secrets"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["secrets", b"secrets"]) -> None: ... global___SecretResponse = SecretResponse -@typing.final +@typing_extensions.final class GetBulkSecretResponse(google.protobuf.message.Message): """GetBulkSecretResponse is the response message to convey the requested secrets.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing.final + @typing_extensions.final class DataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -1117,8 +1130,8 @@ class GetBulkSecretResponse(google.protobuf.message.Message): key: builtins.str = ..., value: global___SecretResponse | None = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["value", b"value"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["value", b"value"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... DATA_FIELD_NUMBER: builtins.int @property @@ -1126,17 +1139,16 @@ class GetBulkSecretResponse(google.protobuf.message.Message): """data hold the secret values. Some secret store, such as kubernetes secret store, can save multiple secrets for single secret key. """ - def __init__( self, *, data: collections.abc.Mapping[builtins.str, global___SecretResponse] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["data", b"data"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["data", b"data"]) -> None: ... global___GetBulkSecretResponse = GetBulkSecretResponse -@typing.final +@typing_extensions.final class TransactionalStateOperation(google.protobuf.message.Message): """TransactionalStateOperation is the message to execute a specified operation with a key-value pair.""" @@ -1149,25 +1161,24 @@ class TransactionalStateOperation(google.protobuf.message.Message): @property def request(self) -> dapr.proto.common.v1.common_pb2.StateItem: """State values to be operated on""" - def __init__( self, *, operationType: builtins.str = ..., request: dapr.proto.common.v1.common_pb2.StateItem | None = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["request", b"request"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["operationType", b"operationType", "request", b"request"]) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["request", b"request"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["operationType", b"operationType", "request", b"request"]) -> None: ... global___TransactionalStateOperation = TransactionalStateOperation -@typing.final +@typing_extensions.final class ExecuteStateTransactionRequest(google.protobuf.message.Message): """ExecuteStateTransactionRequest is the message to execute multiple operations on a specified store.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing.final + @typing_extensions.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -1181,7 +1192,7 @@ class ExecuteStateTransactionRequest(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... STORENAME_FIELD_NUMBER: builtins.int OPERATIONS_FIELD_NUMBER: builtins.int @@ -1191,11 +1202,9 @@ class ExecuteStateTransactionRequest(google.protobuf.message.Message): @property def operations(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___TransactionalStateOperation]: """Required. transactional operation list.""" - @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """The metadata used for transactional operations.""" - def __init__( self, *, @@ -1203,11 +1212,11 @@ class ExecuteStateTransactionRequest(google.protobuf.message.Message): operations: collections.abc.Iterable[global___TransactionalStateOperation] | None = ..., metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["metadata", b"metadata", "operations", b"operations", "storeName", b"storeName"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["metadata", b"metadata", "operations", b"operations", "storeName", b"storeName"]) -> None: ... global___ExecuteStateTransactionRequest = ExecuteStateTransactionRequest -@typing.final +@typing_extensions.final class RegisterActorTimerRequest(google.protobuf.message.Message): """RegisterActorTimerRequest is the message to register a timer for an actor of a given type and id.""" @@ -1241,11 +1250,11 @@ class RegisterActorTimerRequest(google.protobuf.message.Message): data: builtins.bytes = ..., ttl: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["actor_id", b"actor_id", "actor_type", b"actor_type", "callback", b"callback", "data", b"data", "due_time", b"due_time", "name", b"name", "period", b"period", "ttl", b"ttl"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["actor_id", b"actor_id", "actor_type", b"actor_type", "callback", b"callback", "data", b"data", "due_time", b"due_time", "name", b"name", "period", b"period", "ttl", b"ttl"]) -> None: ... global___RegisterActorTimerRequest = RegisterActorTimerRequest -@typing.final +@typing_extensions.final class UnregisterActorTimerRequest(google.protobuf.message.Message): """UnregisterActorTimerRequest is the message to unregister an actor timer""" @@ -1264,11 +1273,11 @@ class UnregisterActorTimerRequest(google.protobuf.message.Message): actor_id: builtins.str = ..., name: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["actor_id", b"actor_id", "actor_type", b"actor_type", "name", b"name"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["actor_id", b"actor_id", "actor_type", b"actor_type", "name", b"name"]) -> None: ... global___UnregisterActorTimerRequest = UnregisterActorTimerRequest -@typing.final +@typing_extensions.final class RegisterActorReminderRequest(google.protobuf.message.Message): """RegisterActorReminderRequest is the message to register a reminder for an actor of a given type and id.""" @@ -1299,11 +1308,11 @@ class RegisterActorReminderRequest(google.protobuf.message.Message): data: builtins.bytes = ..., ttl: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["actor_id", b"actor_id", "actor_type", b"actor_type", "data", b"data", "due_time", b"due_time", "name", b"name", "period", b"period", "ttl", b"ttl"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["actor_id", b"actor_id", "actor_type", b"actor_type", "data", b"data", "due_time", b"due_time", "name", b"name", "period", b"period", "ttl", b"ttl"]) -> None: ... global___RegisterActorReminderRequest = RegisterActorReminderRequest -@typing.final +@typing_extensions.final class UnregisterActorReminderRequest(google.protobuf.message.Message): """UnregisterActorReminderRequest is the message to unregister an actor reminder.""" @@ -1322,11 +1331,11 @@ class UnregisterActorReminderRequest(google.protobuf.message.Message): actor_id: builtins.str = ..., name: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["actor_id", b"actor_id", "actor_type", b"actor_type", "name", b"name"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["actor_id", b"actor_id", "actor_type", b"actor_type", "name", b"name"]) -> None: ... global___UnregisterActorReminderRequest = UnregisterActorReminderRequest -@typing.final +@typing_extensions.final class GetActorStateRequest(google.protobuf.message.Message): """GetActorStateRequest is the message to get key-value states from specific actor.""" @@ -1345,17 +1354,17 @@ class GetActorStateRequest(google.protobuf.message.Message): actor_id: builtins.str = ..., key: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["actor_id", b"actor_id", "actor_type", b"actor_type", "key", b"key"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["actor_id", b"actor_id", "actor_type", b"actor_type", "key", b"key"]) -> None: ... global___GetActorStateRequest = GetActorStateRequest -@typing.final +@typing_extensions.final class GetActorStateResponse(google.protobuf.message.Message): """GetActorStateResponse is the response conveying the actor's state value.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing.final + @typing_extensions.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -1369,7 +1378,7 @@ class GetActorStateResponse(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... DATA_FIELD_NUMBER: builtins.int METADATA_FIELD_NUMBER: builtins.int @@ -1377,18 +1386,17 @@ class GetActorStateResponse(google.protobuf.message.Message): @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """The metadata which will be sent to app.""" - def __init__( self, *, data: builtins.bytes = ..., metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["data", b"data", "metadata", b"metadata"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["data", b"data", "metadata", b"metadata"]) -> None: ... global___GetActorStateResponse = GetActorStateResponse -@typing.final +@typing_extensions.final class ExecuteActorStateTransactionRequest(google.protobuf.message.Message): """ExecuteActorStateTransactionRequest is the message to execute multiple operations on a specified actor.""" @@ -1408,17 +1416,17 @@ class ExecuteActorStateTransactionRequest(google.protobuf.message.Message): actor_id: builtins.str = ..., operations: collections.abc.Iterable[global___TransactionalActorStateOperation] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["actor_id", b"actor_id", "actor_type", b"actor_type", "operations", b"operations"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["actor_id", b"actor_id", "actor_type", b"actor_type", "operations", b"operations"]) -> None: ... global___ExecuteActorStateTransactionRequest = ExecuteActorStateTransactionRequest -@typing.final +@typing_extensions.final class TransactionalActorStateOperation(google.protobuf.message.Message): """TransactionalActorStateOperation is the message to execute a specified operation with a key-value pair.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing.final + @typing_extensions.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -1432,7 +1440,7 @@ class TransactionalActorStateOperation(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... OPERATIONTYPE_FIELD_NUMBER: builtins.int KEY_FIELD_NUMBER: builtins.int @@ -1449,7 +1457,6 @@ class TransactionalActorStateOperation(google.protobuf.message.Message): Common metadata property: - ttlInSeconds : the time to live in seconds for the stored value. """ - def __init__( self, *, @@ -1458,18 +1465,18 @@ class TransactionalActorStateOperation(google.protobuf.message.Message): value: google.protobuf.any_pb2.Any | None = ..., metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["value", b"value"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["key", b"key", "metadata", b"metadata", "operationType", b"operationType", "value", b"value"]) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["value", b"value"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "metadata", b"metadata", "operationType", b"operationType", "value", b"value"]) -> None: ... global___TransactionalActorStateOperation = TransactionalActorStateOperation -@typing.final +@typing_extensions.final class InvokeActorRequest(google.protobuf.message.Message): """InvokeActorRequest is the message to call an actor.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing.final + @typing_extensions.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -1483,7 +1490,7 @@ class InvokeActorRequest(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... ACTOR_TYPE_FIELD_NUMBER: builtins.int ACTOR_ID_FIELD_NUMBER: builtins.int @@ -1505,11 +1512,11 @@ class InvokeActorRequest(google.protobuf.message.Message): data: builtins.bytes = ..., metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["actor_id", b"actor_id", "actor_type", b"actor_type", "data", b"data", "metadata", b"metadata", "method", b"method"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["actor_id", b"actor_id", "actor_type", b"actor_type", "data", b"data", "metadata", b"metadata", "method", b"method"]) -> None: ... global___InvokeActorRequest = InvokeActorRequest -@typing.final +@typing_extensions.final class InvokeActorResponse(google.protobuf.message.Message): """InvokeActorResponse is the method that returns an actor invocation response.""" @@ -1522,11 +1529,11 @@ class InvokeActorResponse(google.protobuf.message.Message): *, data: builtins.bytes = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["data", b"data"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["data", b"data"]) -> None: ... global___InvokeActorResponse = InvokeActorResponse -@typing.final +@typing_extensions.final class GetMetadataRequest(google.protobuf.message.Message): """GetMetadataRequest is the message for the GetMetadata request. Empty @@ -1540,13 +1547,13 @@ class GetMetadataRequest(google.protobuf.message.Message): global___GetMetadataRequest = GetMetadataRequest -@typing.final +@typing_extensions.final class GetMetadataResponse(google.protobuf.message.Message): """GetMetadataResponse is a message that is returned on GetMetadata rpc call.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing.final + @typing_extensions.final class ExtendedMetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -1560,7 +1567,7 @@ class GetMetadataResponse(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... ID_FIELD_NUMBER: builtins.int ACTIVE_ACTORS_COUNT_FIELD_NUMBER: builtins.int @@ -1573,11 +1580,9 @@ class GetMetadataResponse(google.protobuf.message.Message): ENABLED_FEATURES_FIELD_NUMBER: builtins.int ACTOR_RUNTIME_FIELD_NUMBER: builtins.int id: builtins.str - runtime_version: builtins.str @property def active_actors_count(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___ActiveActorsCount]: """Deprecated alias for actor_runtime.active_actors.""" - @property def registered_components(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___RegisteredComponents]: ... @property @@ -1588,12 +1593,12 @@ class GetMetadataResponse(google.protobuf.message.Message): def http_endpoints(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___MetadataHTTPEndpoint]: ... @property def app_connection_properties(self) -> global___AppConnectionProperties: ... + runtime_version: builtins.str @property def enabled_features(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]: ... @property def actor_runtime(self) -> global___ActorRuntime: """TODO: Cassie: probably add scheduler runtime status""" - def __init__( self, *, @@ -1608,12 +1613,12 @@ class GetMetadataResponse(google.protobuf.message.Message): enabled_features: collections.abc.Iterable[builtins.str] | None = ..., actor_runtime: global___ActorRuntime | None = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["actor_runtime", b"actor_runtime", "app_connection_properties", b"app_connection_properties"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["active_actors_count", b"active_actors_count", "actor_runtime", b"actor_runtime", "app_connection_properties", b"app_connection_properties", "enabled_features", b"enabled_features", "extended_metadata", b"extended_metadata", "http_endpoints", b"http_endpoints", "id", b"id", "registered_components", b"registered_components", "runtime_version", b"runtime_version", "subscriptions", b"subscriptions"]) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["actor_runtime", b"actor_runtime", "app_connection_properties", b"app_connection_properties"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["active_actors_count", b"active_actors_count", "actor_runtime", b"actor_runtime", "app_connection_properties", b"app_connection_properties", "enabled_features", b"enabled_features", "extended_metadata", b"extended_metadata", "http_endpoints", b"http_endpoints", "id", b"id", "registered_components", b"registered_components", "runtime_version", b"runtime_version", "subscriptions", b"subscriptions"]) -> None: ... global___GetMetadataResponse = GetMetadataResponse -@typing.final +@typing_extensions.final class ActorRuntime(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -1648,14 +1653,13 @@ class ActorRuntime(google.protobuf.message.Message): PLACEMENT_FIELD_NUMBER: builtins.int runtime_status: global___ActorRuntime.ActorRuntimeStatus.ValueType """Contains an enum indicating whether the actor runtime has been initialized.""" + @property + def active_actors(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___ActiveActorsCount]: + """Count of active actors per type.""" host_ready: builtins.bool """Indicates whether the actor runtime is ready to host actors.""" placement: builtins.str """Custom message from the placement provider.""" - @property - def active_actors(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___ActiveActorsCount]: - """Count of active actors per type.""" - def __init__( self, *, @@ -1664,11 +1668,11 @@ class ActorRuntime(google.protobuf.message.Message): host_ready: builtins.bool = ..., placement: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["active_actors", b"active_actors", "host_ready", b"host_ready", "placement", b"placement", "runtime_status", b"runtime_status"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["active_actors", b"active_actors", "host_ready", b"host_ready", "placement", b"placement", "runtime_status", b"runtime_status"]) -> None: ... global___ActorRuntime = ActorRuntime -@typing.final +@typing_extensions.final class ActiveActorsCount(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -1682,11 +1686,11 @@ class ActiveActorsCount(google.protobuf.message.Message): type: builtins.str = ..., count: builtins.int = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["count", b"count", "type", b"type"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["count", b"count", "type", b"type"]) -> None: ... global___ActiveActorsCount = ActiveActorsCount -@typing.final +@typing_extensions.final class RegisteredComponents(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -1707,11 +1711,11 @@ class RegisteredComponents(google.protobuf.message.Message): version: builtins.str = ..., capabilities: collections.abc.Iterable[builtins.str] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["capabilities", b"capabilities", "name", b"name", "type", b"type", "version", b"version"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["capabilities", b"capabilities", "name", b"name", "type", b"type", "version", b"version"]) -> None: ... global___RegisteredComponents = RegisteredComponents -@typing.final +@typing_extensions.final class MetadataHTTPEndpoint(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -1722,11 +1726,11 @@ class MetadataHTTPEndpoint(google.protobuf.message.Message): *, name: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["name", b"name"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["name", b"name"]) -> None: ... global___MetadataHTTPEndpoint = MetadataHTTPEndpoint -@typing.final +@typing_extensions.final class AppConnectionProperties(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -1750,12 +1754,12 @@ class AppConnectionProperties(google.protobuf.message.Message): max_concurrency: builtins.int = ..., health: global___AppConnectionHealthProperties | None = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["health", b"health"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["channel_address", b"channel_address", "health", b"health", "max_concurrency", b"max_concurrency", "port", b"port", "protocol", b"protocol"]) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["health", b"health"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["channel_address", b"channel_address", "health", b"health", "max_concurrency", b"max_concurrency", "port", b"port", "protocol", b"protocol"]) -> None: ... global___AppConnectionProperties = AppConnectionProperties -@typing.final +@typing_extensions.final class AppConnectionHealthProperties(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -1775,15 +1779,15 @@ class AppConnectionHealthProperties(google.protobuf.message.Message): health_probe_timeout: builtins.str = ..., health_threshold: builtins.int = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["health_check_path", b"health_check_path", "health_probe_interval", b"health_probe_interval", "health_probe_timeout", b"health_probe_timeout", "health_threshold", b"health_threshold"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["health_check_path", b"health_check_path", "health_probe_interval", b"health_probe_interval", "health_probe_timeout", b"health_probe_timeout", "health_threshold", b"health_threshold"]) -> None: ... global___AppConnectionHealthProperties = AppConnectionHealthProperties -@typing.final +@typing_extensions.final class PubsubSubscription(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing.final + @typing_extensions.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -1797,7 +1801,7 @@ class PubsubSubscription(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... PUBSUB_NAME_FIELD_NUMBER: builtins.int TOPIC_FIELD_NUMBER: builtins.int @@ -1807,12 +1811,12 @@ class PubsubSubscription(google.protobuf.message.Message): TYPE_FIELD_NUMBER: builtins.int pubsub_name: builtins.str topic: builtins.str - dead_letter_topic: builtins.str - type: global___PubsubSubscriptionType.ValueType @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: ... @property def rules(self) -> global___PubsubSubscriptionRules: ... + dead_letter_topic: builtins.str + type: global___PubsubSubscriptionType.ValueType def __init__( self, *, @@ -1823,12 +1827,12 @@ class PubsubSubscription(google.protobuf.message.Message): dead_letter_topic: builtins.str = ..., type: global___PubsubSubscriptionType.ValueType = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["rules", b"rules"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["dead_letter_topic", b"dead_letter_topic", "metadata", b"metadata", "pubsub_name", b"pubsub_name", "rules", b"rules", "topic", b"topic", "type", b"type"]) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["rules", b"rules"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["dead_letter_topic", b"dead_letter_topic", "metadata", b"metadata", "pubsub_name", b"pubsub_name", "rules", b"rules", "topic", b"topic", "type", b"type"]) -> None: ... global___PubsubSubscription = PubsubSubscription -@typing.final +@typing_extensions.final class PubsubSubscriptionRules(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -1840,11 +1844,11 @@ class PubsubSubscriptionRules(google.protobuf.message.Message): *, rules: collections.abc.Iterable[global___PubsubSubscriptionRule] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["rules", b"rules"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["rules", b"rules"]) -> None: ... global___PubsubSubscriptionRules = PubsubSubscriptionRules -@typing.final +@typing_extensions.final class PubsubSubscriptionRule(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -1858,11 +1862,11 @@ class PubsubSubscriptionRule(google.protobuf.message.Message): match: builtins.str = ..., path: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["match", b"match", "path", b"path"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["match", b"match", "path", b"path"]) -> None: ... global___PubsubSubscriptionRule = PubsubSubscriptionRule -@typing.final +@typing_extensions.final class SetMetadataRequest(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -1876,17 +1880,17 @@ class SetMetadataRequest(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... global___SetMetadataRequest = SetMetadataRequest -@typing.final +@typing_extensions.final class GetConfigurationRequest(google.protobuf.message.Message): """GetConfigurationRequest is the message to get a list of key-value configuration from specified configuration store.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing.final + @typing_extensions.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -1900,7 +1904,7 @@ class GetConfigurationRequest(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... STORE_NAME_FIELD_NUMBER: builtins.int KEYS_FIELD_NUMBER: builtins.int @@ -1913,11 +1917,9 @@ class GetConfigurationRequest(google.protobuf.message.Message): If set, only query for the specified configuration items. Empty list means fetch all. """ - @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """Optional. The metadata which will be sent to configuration store components.""" - def __init__( self, *, @@ -1925,11 +1927,11 @@ class GetConfigurationRequest(google.protobuf.message.Message): keys: collections.abc.Iterable[builtins.str] | None = ..., metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["keys", b"keys", "metadata", b"metadata", "store_name", b"store_name"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["keys", b"keys", "metadata", b"metadata", "store_name", b"store_name"]) -> None: ... global___GetConfigurationRequest = GetConfigurationRequest -@typing.final +@typing_extensions.final class GetConfigurationResponse(google.protobuf.message.Message): """GetConfigurationResponse is the response conveying the list of configuration values. It should be the FULL configuration of specified application which contains all of its configuration items. @@ -1937,7 +1939,7 @@ class GetConfigurationResponse(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing.final + @typing_extensions.final class ItemsEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -1952,8 +1954,8 @@ class GetConfigurationResponse(google.protobuf.message.Message): key: builtins.str = ..., value: dapr.proto.common.v1.common_pb2.ConfigurationItem | None = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["value", b"value"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["value", b"value"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... ITEMS_FIELD_NUMBER: builtins.int @property @@ -1963,17 +1965,17 @@ class GetConfigurationResponse(google.protobuf.message.Message): *, items: collections.abc.Mapping[builtins.str, dapr.proto.common.v1.common_pb2.ConfigurationItem] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["items", b"items"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["items", b"items"]) -> None: ... global___GetConfigurationResponse = GetConfigurationResponse -@typing.final +@typing_extensions.final class SubscribeConfigurationRequest(google.protobuf.message.Message): """SubscribeConfigurationRequest is the message to get a list of key-value configuration from specified configuration store.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing.final + @typing_extensions.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -1987,7 +1989,7 @@ class SubscribeConfigurationRequest(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... STORE_NAME_FIELD_NUMBER: builtins.int KEYS_FIELD_NUMBER: builtins.int @@ -2000,11 +2002,9 @@ class SubscribeConfigurationRequest(google.protobuf.message.Message): If set, only query for the specified configuration items. Empty list means fetch all. """ - @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """The metadata which will be sent to configuration store components.""" - def __init__( self, *, @@ -2012,11 +2012,11 @@ class SubscribeConfigurationRequest(google.protobuf.message.Message): keys: collections.abc.Iterable[builtins.str] | None = ..., metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["keys", b"keys", "metadata", b"metadata", "store_name", b"store_name"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["keys", b"keys", "metadata", b"metadata", "store_name", b"store_name"]) -> None: ... global___SubscribeConfigurationRequest = SubscribeConfigurationRequest -@typing.final +@typing_extensions.final class UnsubscribeConfigurationRequest(google.protobuf.message.Message): """UnSubscribeConfigurationRequest is the message to stop watching the key-value configuration.""" @@ -2034,15 +2034,15 @@ class UnsubscribeConfigurationRequest(google.protobuf.message.Message): store_name: builtins.str = ..., id: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["id", b"id", "store_name", b"store_name"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["id", b"id", "store_name", b"store_name"]) -> None: ... global___UnsubscribeConfigurationRequest = UnsubscribeConfigurationRequest -@typing.final +@typing_extensions.final class SubscribeConfigurationResponse(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing.final + @typing_extensions.final class ItemsEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -2057,8 +2057,8 @@ class SubscribeConfigurationResponse(google.protobuf.message.Message): key: builtins.str = ..., value: dapr.proto.common.v1.common_pb2.ConfigurationItem | None = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["value", b"value"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["value", b"value"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... ID_FIELD_NUMBER: builtins.int ITEMS_FIELD_NUMBER: builtins.int @@ -2067,18 +2067,17 @@ class SubscribeConfigurationResponse(google.protobuf.message.Message): @property def items(self) -> google.protobuf.internal.containers.MessageMap[builtins.str, dapr.proto.common.v1.common_pb2.ConfigurationItem]: """The list of items containing configuration values""" - def __init__( self, *, id: builtins.str = ..., items: collections.abc.Mapping[builtins.str, dapr.proto.common.v1.common_pb2.ConfigurationItem] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["id", b"id", "items", b"items"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["id", b"id", "items", b"items"]) -> None: ... global___SubscribeConfigurationResponse = SubscribeConfigurationResponse -@typing.final +@typing_extensions.final class UnsubscribeConfigurationResponse(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -2092,11 +2091,11 @@ class UnsubscribeConfigurationResponse(google.protobuf.message.Message): ok: builtins.bool = ..., message: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["message", b"message", "ok", b"ok"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["message", b"message", "ok", b"ok"]) -> None: ... global___UnsubscribeConfigurationResponse = UnsubscribeConfigurationResponse -@typing.final +@typing_extensions.final class TryLockRequest(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -2121,11 +2120,11 @@ class TryLockRequest(google.protobuf.message.Message): The reason why we don't make it automatically generated is: 1. If it is automatically generated,there must be a 'my_lock_owner_id' field in the response. - This name is so weird that we think it is inappropriate to put it into the api spec + This name is so weird that we think it is inappropriate to put it into the api spec 2. If we change the field 'my_lock_owner_id' in the response to 'lock_owner',which means the current lock owner of this lock, - we find that in some lock services users can't get the current lock owner.Actually users don't need it at all. + we find that in some lock services users can't get the current lock owner.Actually users don't need it at all. 3. When reentrant lock is needed,the existing lock_owner is required to identify client and check "whether this client can reenter this lock". - So this field in the request shouldn't be removed. + So this field in the request shouldn't be removed. """ expiry_in_seconds: builtins.int """Required. The time before expiry.The time unit is second.""" @@ -2137,11 +2136,11 @@ class TryLockRequest(google.protobuf.message.Message): lock_owner: builtins.str = ..., expiry_in_seconds: builtins.int = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["expiry_in_seconds", b"expiry_in_seconds", "lock_owner", b"lock_owner", "resource_id", b"resource_id", "store_name", b"store_name"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["expiry_in_seconds", b"expiry_in_seconds", "lock_owner", b"lock_owner", "resource_id", b"resource_id", "store_name", b"store_name"]) -> None: ... global___TryLockRequest = TryLockRequest -@typing.final +@typing_extensions.final class TryLockResponse(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -2152,11 +2151,11 @@ class TryLockResponse(google.protobuf.message.Message): *, success: builtins.bool = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["success", b"success"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["success", b"success"]) -> None: ... global___TryLockResponse = TryLockResponse -@typing.final +@typing_extensions.final class UnlockRequest(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -2174,11 +2173,11 @@ class UnlockRequest(google.protobuf.message.Message): resource_id: builtins.str = ..., lock_owner: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["lock_owner", b"lock_owner", "resource_id", b"resource_id", "store_name", b"store_name"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["lock_owner", b"lock_owner", "resource_id", b"resource_id", "store_name", b"store_name"]) -> None: ... global___UnlockRequest = UnlockRequest -@typing.final +@typing_extensions.final class UnlockResponse(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -2206,11 +2205,11 @@ class UnlockResponse(google.protobuf.message.Message): *, status: global___UnlockResponse.Status.ValueType = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["status", b"status"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["status", b"status"]) -> None: ... global___UnlockResponse = UnlockResponse -@typing.final +@typing_extensions.final class SubtleGetKeyRequest(google.protobuf.message.Message): """SubtleGetKeyRequest is the request object for SubtleGetKeyAlpha1.""" @@ -2249,11 +2248,11 @@ class SubtleGetKeyRequest(google.protobuf.message.Message): name: builtins.str = ..., format: global___SubtleGetKeyRequest.KeyFormat.ValueType = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["component_name", b"component_name", "format", b"format", "name", b"name"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["component_name", b"component_name", "format", b"format", "name", b"name"]) -> None: ... global___SubtleGetKeyRequest = SubtleGetKeyRequest -@typing.final +@typing_extensions.final class SubtleGetKeyResponse(google.protobuf.message.Message): """SubtleGetKeyResponse is the response for SubtleGetKeyAlpha1.""" @@ -2273,11 +2272,11 @@ class SubtleGetKeyResponse(google.protobuf.message.Message): name: builtins.str = ..., public_key: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["name", b"name", "public_key", b"public_key"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["name", b"name", "public_key", b"public_key"]) -> None: ... global___SubtleGetKeyResponse = SubtleGetKeyResponse -@typing.final +@typing_extensions.final class SubtleEncryptRequest(google.protobuf.message.Message): """SubtleEncryptRequest is the request for SubtleEncryptAlpha1.""" @@ -2313,11 +2312,11 @@ class SubtleEncryptRequest(google.protobuf.message.Message): nonce: builtins.bytes = ..., associated_data: builtins.bytes = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["algorithm", b"algorithm", "associated_data", b"associated_data", "component_name", b"component_name", "key_name", b"key_name", "nonce", b"nonce", "plaintext", b"plaintext"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["algorithm", b"algorithm", "associated_data", b"associated_data", "component_name", b"component_name", "key_name", b"key_name", "nonce", b"nonce", "plaintext", b"plaintext"]) -> None: ... global___SubtleEncryptRequest = SubtleEncryptRequest -@typing.final +@typing_extensions.final class SubtleEncryptResponse(google.protobuf.message.Message): """SubtleEncryptResponse is the response for SubtleEncryptAlpha1.""" @@ -2337,11 +2336,11 @@ class SubtleEncryptResponse(google.protobuf.message.Message): ciphertext: builtins.bytes = ..., tag: builtins.bytes = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["ciphertext", b"ciphertext", "tag", b"tag"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["ciphertext", b"ciphertext", "tag", b"tag"]) -> None: ... global___SubtleEncryptResponse = SubtleEncryptResponse -@typing.final +@typing_extensions.final class SubtleDecryptRequest(google.protobuf.message.Message): """SubtleDecryptRequest is the request for SubtleDecryptAlpha1.""" @@ -2383,11 +2382,11 @@ class SubtleDecryptRequest(google.protobuf.message.Message): tag: builtins.bytes = ..., associated_data: builtins.bytes = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["algorithm", b"algorithm", "associated_data", b"associated_data", "ciphertext", b"ciphertext", "component_name", b"component_name", "key_name", b"key_name", "nonce", b"nonce", "tag", b"tag"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["algorithm", b"algorithm", "associated_data", b"associated_data", "ciphertext", b"ciphertext", "component_name", b"component_name", "key_name", b"key_name", "nonce", b"nonce", "tag", b"tag"]) -> None: ... global___SubtleDecryptRequest = SubtleDecryptRequest -@typing.final +@typing_extensions.final class SubtleDecryptResponse(google.protobuf.message.Message): """SubtleDecryptResponse is the response for SubtleDecryptAlpha1.""" @@ -2401,11 +2400,11 @@ class SubtleDecryptResponse(google.protobuf.message.Message): *, plaintext: builtins.bytes = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["plaintext", b"plaintext"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["plaintext", b"plaintext"]) -> None: ... global___SubtleDecryptResponse = SubtleDecryptResponse -@typing.final +@typing_extensions.final class SubtleWrapKeyRequest(google.protobuf.message.Message): """SubtleWrapKeyRequest is the request for SubtleWrapKeyAlpha1.""" @@ -2441,11 +2440,11 @@ class SubtleWrapKeyRequest(google.protobuf.message.Message): nonce: builtins.bytes = ..., associated_data: builtins.bytes = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["algorithm", b"algorithm", "associated_data", b"associated_data", "component_name", b"component_name", "key_name", b"key_name", "nonce", b"nonce", "plaintext_key", b"plaintext_key"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["algorithm", b"algorithm", "associated_data", b"associated_data", "component_name", b"component_name", "key_name", b"key_name", "nonce", b"nonce", "plaintext_key", b"plaintext_key"]) -> None: ... global___SubtleWrapKeyRequest = SubtleWrapKeyRequest -@typing.final +@typing_extensions.final class SubtleWrapKeyResponse(google.protobuf.message.Message): """SubtleWrapKeyResponse is the response for SubtleWrapKeyAlpha1.""" @@ -2465,11 +2464,11 @@ class SubtleWrapKeyResponse(google.protobuf.message.Message): wrapped_key: builtins.bytes = ..., tag: builtins.bytes = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["tag", b"tag", "wrapped_key", b"wrapped_key"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["tag", b"tag", "wrapped_key", b"wrapped_key"]) -> None: ... global___SubtleWrapKeyResponse = SubtleWrapKeyResponse -@typing.final +@typing_extensions.final class SubtleUnwrapKeyRequest(google.protobuf.message.Message): """SubtleUnwrapKeyRequest is the request for SubtleUnwrapKeyAlpha1.""" @@ -2511,11 +2510,11 @@ class SubtleUnwrapKeyRequest(google.protobuf.message.Message): tag: builtins.bytes = ..., associated_data: builtins.bytes = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["algorithm", b"algorithm", "associated_data", b"associated_data", "component_name", b"component_name", "key_name", b"key_name", "nonce", b"nonce", "tag", b"tag", "wrapped_key", b"wrapped_key"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["algorithm", b"algorithm", "associated_data", b"associated_data", "component_name", b"component_name", "key_name", b"key_name", "nonce", b"nonce", "tag", b"tag", "wrapped_key", b"wrapped_key"]) -> None: ... global___SubtleUnwrapKeyRequest = SubtleUnwrapKeyRequest -@typing.final +@typing_extensions.final class SubtleUnwrapKeyResponse(google.protobuf.message.Message): """SubtleUnwrapKeyResponse is the response for SubtleUnwrapKeyAlpha1.""" @@ -2529,11 +2528,11 @@ class SubtleUnwrapKeyResponse(google.protobuf.message.Message): *, plaintext_key: builtins.bytes = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["plaintext_key", b"plaintext_key"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["plaintext_key", b"plaintext_key"]) -> None: ... global___SubtleUnwrapKeyResponse = SubtleUnwrapKeyResponse -@typing.final +@typing_extensions.final class SubtleSignRequest(google.protobuf.message.Message): """SubtleSignRequest is the request for SubtleSignAlpha1.""" @@ -2559,11 +2558,11 @@ class SubtleSignRequest(google.protobuf.message.Message): algorithm: builtins.str = ..., key_name: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["algorithm", b"algorithm", "component_name", b"component_name", "digest", b"digest", "key_name", b"key_name"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["algorithm", b"algorithm", "component_name", b"component_name", "digest", b"digest", "key_name", b"key_name"]) -> None: ... global___SubtleSignRequest = SubtleSignRequest -@typing.final +@typing_extensions.final class SubtleSignResponse(google.protobuf.message.Message): """SubtleSignResponse is the response for SubtleSignAlpha1.""" @@ -2577,11 +2576,11 @@ class SubtleSignResponse(google.protobuf.message.Message): *, signature: builtins.bytes = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["signature", b"signature"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["signature", b"signature"]) -> None: ... global___SubtleSignResponse = SubtleSignResponse -@typing.final +@typing_extensions.final class SubtleVerifyRequest(google.protobuf.message.Message): """SubtleVerifyRequest is the request for SubtleVerifyAlpha1.""" @@ -2611,11 +2610,11 @@ class SubtleVerifyRequest(google.protobuf.message.Message): key_name: builtins.str = ..., signature: builtins.bytes = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["algorithm", b"algorithm", "component_name", b"component_name", "digest", b"digest", "key_name", b"key_name", "signature", b"signature"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["algorithm", b"algorithm", "component_name", b"component_name", "digest", b"digest", "key_name", b"key_name", "signature", b"signature"]) -> None: ... global___SubtleVerifyRequest = SubtleVerifyRequest -@typing.final +@typing_extensions.final class SubtleVerifyResponse(google.protobuf.message.Message): """SubtleVerifyResponse is the response for SubtleVerifyAlpha1.""" @@ -2629,11 +2628,11 @@ class SubtleVerifyResponse(google.protobuf.message.Message): *, valid: builtins.bool = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["valid", b"valid"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["valid", b"valid"]) -> None: ... global___SubtleVerifyResponse = SubtleVerifyResponse -@typing.final +@typing_extensions.final class EncryptRequest(google.protobuf.message.Message): """EncryptRequest is the request for EncryptAlpha1.""" @@ -2644,23 +2643,21 @@ class EncryptRequest(google.protobuf.message.Message): @property def options(self) -> global___EncryptRequestOptions: """Request details. Must be present in the first message only.""" - @property def payload(self) -> dapr.proto.common.v1.common_pb2.StreamPayload: """Chunk of data of arbitrary size.""" - def __init__( self, *, options: global___EncryptRequestOptions | None = ..., payload: dapr.proto.common.v1.common_pb2.StreamPayload | None = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["options", b"options", "payload", b"payload"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["options", b"options", "payload", b"payload"]) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["options", b"options", "payload", b"payload"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["options", b"options", "payload", b"payload"]) -> None: ... global___EncryptRequest = EncryptRequest -@typing.final +@typing_extensions.final class EncryptRequestOptions(google.protobuf.message.Message): """EncryptRequestOptions contains options for the first message in the EncryptAlpha1 request.""" @@ -2703,11 +2700,11 @@ class EncryptRequestOptions(google.protobuf.message.Message): omit_decryption_key_name: builtins.bool = ..., decryption_key_name: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["component_name", b"component_name", "data_encryption_cipher", b"data_encryption_cipher", "decryption_key_name", b"decryption_key_name", "key_name", b"key_name", "key_wrap_algorithm", b"key_wrap_algorithm", "omit_decryption_key_name", b"omit_decryption_key_name"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["component_name", b"component_name", "data_encryption_cipher", b"data_encryption_cipher", "decryption_key_name", b"decryption_key_name", "key_name", b"key_name", "key_wrap_algorithm", b"key_wrap_algorithm", "omit_decryption_key_name", b"omit_decryption_key_name"]) -> None: ... global___EncryptRequestOptions = EncryptRequestOptions -@typing.final +@typing_extensions.final class EncryptResponse(google.protobuf.message.Message): """EncryptResponse is the response for EncryptAlpha1.""" @@ -2717,18 +2714,17 @@ class EncryptResponse(google.protobuf.message.Message): @property def payload(self) -> dapr.proto.common.v1.common_pb2.StreamPayload: """Chunk of data.""" - def __init__( self, *, payload: dapr.proto.common.v1.common_pb2.StreamPayload | None = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["payload", b"payload"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["payload", b"payload"]) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["payload", b"payload"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["payload", b"payload"]) -> None: ... global___EncryptResponse = EncryptResponse -@typing.final +@typing_extensions.final class DecryptRequest(google.protobuf.message.Message): """DecryptRequest is the request for DecryptAlpha1.""" @@ -2739,23 +2735,21 @@ class DecryptRequest(google.protobuf.message.Message): @property def options(self) -> global___DecryptRequestOptions: """Request details. Must be present in the first message only.""" - @property def payload(self) -> dapr.proto.common.v1.common_pb2.StreamPayload: """Chunk of data of arbitrary size.""" - def __init__( self, *, options: global___DecryptRequestOptions | None = ..., payload: dapr.proto.common.v1.common_pb2.StreamPayload | None = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["options", b"options", "payload", b"payload"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["options", b"options", "payload", b"payload"]) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["options", b"options", "payload", b"payload"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["options", b"options", "payload", b"payload"]) -> None: ... global___DecryptRequest = DecryptRequest -@typing.final +@typing_extensions.final class DecryptRequestOptions(google.protobuf.message.Message): """DecryptRequestOptions contains options for the first message in the DecryptAlpha1 request.""" @@ -2776,11 +2770,11 @@ class DecryptRequestOptions(google.protobuf.message.Message): component_name: builtins.str = ..., key_name: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["component_name", b"component_name", "key_name", b"key_name"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["component_name", b"component_name", "key_name", b"key_name"]) -> None: ... global___DecryptRequestOptions = DecryptRequestOptions -@typing.final +@typing_extensions.final class DecryptResponse(google.protobuf.message.Message): """DecryptResponse is the response for DecryptAlpha1.""" @@ -2790,18 +2784,17 @@ class DecryptResponse(google.protobuf.message.Message): @property def payload(self) -> dapr.proto.common.v1.common_pb2.StreamPayload: """Chunk of data.""" - def __init__( self, *, payload: dapr.proto.common.v1.common_pb2.StreamPayload | None = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["payload", b"payload"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["payload", b"payload"]) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["payload", b"payload"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["payload", b"payload"]) -> None: ... global___DecryptResponse = DecryptResponse -@typing.final +@typing_extensions.final class GetWorkflowRequest(google.protobuf.message.Message): """GetWorkflowRequest is the request for GetWorkflowBeta1.""" @@ -2819,17 +2812,17 @@ class GetWorkflowRequest(google.protobuf.message.Message): instance_id: builtins.str = ..., workflow_component: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["instance_id", b"instance_id", "workflow_component", b"workflow_component"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["instance_id", b"instance_id", "workflow_component", b"workflow_component"]) -> None: ... global___GetWorkflowRequest = GetWorkflowRequest -@typing.final +@typing_extensions.final class GetWorkflowResponse(google.protobuf.message.Message): """GetWorkflowResponse is the response for GetWorkflowBeta1.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing.final + @typing_extensions.final class PropertiesEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -2843,7 +2836,7 @@ class GetWorkflowResponse(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... INSTANCE_ID_FIELD_NUMBER: builtins.int WORKFLOW_NAME_FIELD_NUMBER: builtins.int @@ -2855,20 +2848,17 @@ class GetWorkflowResponse(google.protobuf.message.Message): """ID of the workflow instance.""" workflow_name: builtins.str """Name of the workflow.""" - runtime_status: builtins.str - """The current status of the workflow instance, for example, "PENDING", "RUNNING", "SUSPENDED", "COMPLETED", "FAILED", and "TERMINATED".""" @property def created_at(self) -> google.protobuf.timestamp_pb2.Timestamp: """The time at which the workflow instance was created.""" - @property def last_updated_at(self) -> google.protobuf.timestamp_pb2.Timestamp: """The last time at which the workflow instance had its state changed.""" - + runtime_status: builtins.str + """The current status of the workflow instance, for example, "PENDING", "RUNNING", "SUSPENDED", "COMPLETED", "FAILED", and "TERMINATED".""" @property def properties(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """Additional component-specific properties of the workflow instance.""" - def __init__( self, *, @@ -2879,18 +2869,18 @@ class GetWorkflowResponse(google.protobuf.message.Message): runtime_status: builtins.str = ..., properties: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["created_at", b"created_at", "last_updated_at", b"last_updated_at"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["created_at", b"created_at", "instance_id", b"instance_id", "last_updated_at", b"last_updated_at", "properties", b"properties", "runtime_status", b"runtime_status", "workflow_name", b"workflow_name"]) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["created_at", b"created_at", "last_updated_at", b"last_updated_at"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["created_at", b"created_at", "instance_id", b"instance_id", "last_updated_at", b"last_updated_at", "properties", b"properties", "runtime_status", b"runtime_status", "workflow_name", b"workflow_name"]) -> None: ... global___GetWorkflowResponse = GetWorkflowResponse -@typing.final +@typing_extensions.final class StartWorkflowRequest(google.protobuf.message.Message): """StartWorkflowRequest is the request for StartWorkflowBeta1.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing.final + @typing_extensions.final class OptionsEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -2904,7 +2894,7 @@ class StartWorkflowRequest(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... INSTANCE_ID_FIELD_NUMBER: builtins.int WORKFLOW_COMPONENT_FIELD_NUMBER: builtins.int @@ -2917,12 +2907,11 @@ class StartWorkflowRequest(google.protobuf.message.Message): """Name of the workflow component.""" workflow_name: builtins.str """Name of the workflow.""" - input: builtins.bytes - """Input data for the workflow instance.""" @property def options(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """Additional component-specific options for starting the workflow instance.""" - + input: builtins.bytes + """Input data for the workflow instance.""" def __init__( self, *, @@ -2932,11 +2921,11 @@ class StartWorkflowRequest(google.protobuf.message.Message): options: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., input: builtins.bytes = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["input", b"input", "instance_id", b"instance_id", "options", b"options", "workflow_component", b"workflow_component", "workflow_name", b"workflow_name"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["input", b"input", "instance_id", b"instance_id", "options", b"options", "workflow_component", b"workflow_component", "workflow_name", b"workflow_name"]) -> None: ... global___StartWorkflowRequest = StartWorkflowRequest -@typing.final +@typing_extensions.final class StartWorkflowResponse(google.protobuf.message.Message): """StartWorkflowResponse is the response for StartWorkflowBeta1.""" @@ -2950,11 +2939,11 @@ class StartWorkflowResponse(google.protobuf.message.Message): *, instance_id: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["instance_id", b"instance_id"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["instance_id", b"instance_id"]) -> None: ... global___StartWorkflowResponse = StartWorkflowResponse -@typing.final +@typing_extensions.final class TerminateWorkflowRequest(google.protobuf.message.Message): """TerminateWorkflowRequest is the request for TerminateWorkflowBeta1.""" @@ -2972,11 +2961,11 @@ class TerminateWorkflowRequest(google.protobuf.message.Message): instance_id: builtins.str = ..., workflow_component: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["instance_id", b"instance_id", "workflow_component", b"workflow_component"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["instance_id", b"instance_id", "workflow_component", b"workflow_component"]) -> None: ... global___TerminateWorkflowRequest = TerminateWorkflowRequest -@typing.final +@typing_extensions.final class PauseWorkflowRequest(google.protobuf.message.Message): """PauseWorkflowRequest is the request for PauseWorkflowBeta1.""" @@ -2994,11 +2983,11 @@ class PauseWorkflowRequest(google.protobuf.message.Message): instance_id: builtins.str = ..., workflow_component: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["instance_id", b"instance_id", "workflow_component", b"workflow_component"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["instance_id", b"instance_id", "workflow_component", b"workflow_component"]) -> None: ... global___PauseWorkflowRequest = PauseWorkflowRequest -@typing.final +@typing_extensions.final class ResumeWorkflowRequest(google.protobuf.message.Message): """ResumeWorkflowRequest is the request for ResumeWorkflowBeta1.""" @@ -3016,11 +3005,11 @@ class ResumeWorkflowRequest(google.protobuf.message.Message): instance_id: builtins.str = ..., workflow_component: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["instance_id", b"instance_id", "workflow_component", b"workflow_component"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["instance_id", b"instance_id", "workflow_component", b"workflow_component"]) -> None: ... global___ResumeWorkflowRequest = ResumeWorkflowRequest -@typing.final +@typing_extensions.final class RaiseEventWorkflowRequest(google.protobuf.message.Message): """RaiseEventWorkflowRequest is the request for RaiseEventWorkflowBeta1.""" @@ -3046,11 +3035,11 @@ class RaiseEventWorkflowRequest(google.protobuf.message.Message): event_name: builtins.str = ..., event_data: builtins.bytes = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["event_data", b"event_data", "event_name", b"event_name", "instance_id", b"instance_id", "workflow_component", b"workflow_component"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["event_data", b"event_data", "event_name", b"event_name", "instance_id", b"instance_id", "workflow_component", b"workflow_component"]) -> None: ... global___RaiseEventWorkflowRequest = RaiseEventWorkflowRequest -@typing.final +@typing_extensions.final class PurgeWorkflowRequest(google.protobuf.message.Message): """PurgeWorkflowRequest is the request for PurgeWorkflowBeta1.""" @@ -3068,11 +3057,11 @@ class PurgeWorkflowRequest(google.protobuf.message.Message): instance_id: builtins.str = ..., workflow_component: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["instance_id", b"instance_id", "workflow_component", b"workflow_component"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["instance_id", b"instance_id", "workflow_component", b"workflow_component"]) -> None: ... global___PurgeWorkflowRequest = PurgeWorkflowRequest -@typing.final +@typing_extensions.final class ShutdownRequest(google.protobuf.message.Message): """ShutdownRequest is the request for Shutdown. Empty @@ -3086,9 +3075,11 @@ class ShutdownRequest(google.protobuf.message.Message): global___ShutdownRequest = ShutdownRequest -@typing.final +@typing_extensions.final class Job(google.protobuf.message.Message): - """Job is the definition of a job.""" + """Job is the definition of a job. At least one of schedule or due_time must be + provided but can also be provided together. + """ DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -3101,17 +3092,47 @@ class Job(google.protobuf.message.Message): name: builtins.str """The unique name for the job.""" schedule: builtins.str - """The schedule for the job.""" + """schedule is an optional schedule at which the job is to be run. + Accepts both systemd timer style cron expressions, as well as human + readable '@' prefixed period strings as defined below. + + Systemd timer style cron accepts 6 fields: + seconds | minutes | hours | day of month | month | day of week + 0-59 | 0-59 | 0-23 | 1-31 | 1-12/jan-dec | 0-6/sun-sat + + "0 30 * * * *" - every hour on the half hour + "0 15 3 * * *" - every day at 03:15 + + Period string expressions: + Entry | Description | Equivalent To + ----- | ----------- | ------------- + @every `` | Run every `` (e.g. '@every 1h30m') | N/A + @yearly (or @annually) | Run once a year, midnight, Jan. 1st | 0 0 0 1 1 * + @monthly | Run once a month, midnight, first of month | 0 0 0 1 * * + @weekly | Run once a week, midnight on Sunday | 0 0 0 * * 0 + @daily (or @midnight) | Run once a day, midnight | 0 0 0 * * * + @hourly | Run once an hour, beginning of hour | 0 0 * * * * + """ repeats: builtins.int - """Optional: jobs with fixed repeat counts (accounting for Actor Reminders).""" + """repeats is the optional number of times in which the job should be + triggered. If not set, the job will run indefinitely or until expiration. + """ due_time: builtins.str - """Optional: sets time at which or time interval before the callback is invoked for the first time.""" + """due_time is the optional time at which the job should be active, or the + "one shot" time if other scheduling type fields are not provided. Accepts + a "point in time" string in the format of RFC3339, Go duration string + (calculated from job creation time), or non-repeating ISO8601. + """ ttl: builtins.str - """Optional: Time To Live to allow for auto deletes (accounting for Actor Reminders).""" + """ttl is the optional time to live or expiration of the job. Accepts a + "point in time" string in the format of RFC3339, Go duration string + (calculated from job creation time), or non-repeating ISO8601. + """ @property def data(self) -> google.protobuf.any_pb2.Any: - """Job data.""" - + """payload is the serialized job payload that will be sent to the recipient + when the job is triggered. + """ def __init__( self, *, @@ -3122,20 +3143,20 @@ class Job(google.protobuf.message.Message): ttl: builtins.str | None = ..., data: google.protobuf.any_pb2.Any | None = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["_due_time", b"_due_time", "_repeats", b"_repeats", "_schedule", b"_schedule", "_ttl", b"_ttl", "data", b"data", "due_time", b"due_time", "repeats", b"repeats", "schedule", b"schedule", "ttl", b"ttl"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["_due_time", b"_due_time", "_repeats", b"_repeats", "_schedule", b"_schedule", "_ttl", b"_ttl", "data", b"data", "due_time", b"due_time", "name", b"name", "repeats", b"repeats", "schedule", b"schedule", "ttl", b"ttl"]) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["_due_time", b"_due_time", "_repeats", b"_repeats", "_schedule", b"_schedule", "_ttl", b"_ttl", "data", b"data", "due_time", b"due_time", "repeats", b"repeats", "schedule", b"schedule", "ttl", b"ttl"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["_due_time", b"_due_time", "_repeats", b"_repeats", "_schedule", b"_schedule", "_ttl", b"_ttl", "data", b"data", "due_time", b"due_time", "name", b"name", "repeats", b"repeats", "schedule", b"schedule", "ttl", b"ttl"]) -> None: ... @typing.overload - def WhichOneof(self, oneof_group: typing.Literal["_due_time", b"_due_time"]) -> typing.Literal["due_time"] | None: ... + def WhichOneof(self, oneof_group: typing_extensions.Literal["_due_time", b"_due_time"]) -> typing_extensions.Literal["due_time"] | None: ... @typing.overload - def WhichOneof(self, oneof_group: typing.Literal["_repeats", b"_repeats"]) -> typing.Literal["repeats"] | None: ... + def WhichOneof(self, oneof_group: typing_extensions.Literal["_repeats", b"_repeats"]) -> typing_extensions.Literal["repeats"] | None: ... @typing.overload - def WhichOneof(self, oneof_group: typing.Literal["_schedule", b"_schedule"]) -> typing.Literal["schedule"] | None: ... + def WhichOneof(self, oneof_group: typing_extensions.Literal["_schedule", b"_schedule"]) -> typing_extensions.Literal["schedule"] | None: ... @typing.overload - def WhichOneof(self, oneof_group: typing.Literal["_ttl", b"_ttl"]) -> typing.Literal["ttl"] | None: ... + def WhichOneof(self, oneof_group: typing_extensions.Literal["_ttl", b"_ttl"]) -> typing_extensions.Literal["ttl"] | None: ... global___Job = Job -@typing.final +@typing_extensions.final class ScheduleJobRequest(google.protobuf.message.Message): """ScheduleJobRequest is the message to create/schedule the job.""" @@ -3145,18 +3166,17 @@ class ScheduleJobRequest(google.protobuf.message.Message): @property def job(self) -> global___Job: """The job details.""" - def __init__( self, *, job: global___Job | None = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["job", b"job"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["job", b"job"]) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["job", b"job"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["job", b"job"]) -> None: ... global___ScheduleJobRequest = ScheduleJobRequest -@typing.final +@typing_extensions.final class ScheduleJobResponse(google.protobuf.message.Message): """ScheduleJobResponse is the message response to create/schedule the job. Empty @@ -3170,7 +3190,7 @@ class ScheduleJobResponse(google.protobuf.message.Message): global___ScheduleJobResponse = ScheduleJobResponse -@typing.final +@typing_extensions.final class GetJobRequest(google.protobuf.message.Message): """GetJobRequest is the message to retrieve a job.""" @@ -3184,11 +3204,11 @@ class GetJobRequest(google.protobuf.message.Message): *, name: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["name", b"name"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["name", b"name"]) -> None: ... global___GetJobRequest = GetJobRequest -@typing.final +@typing_extensions.final class GetJobResponse(google.protobuf.message.Message): """GetJobResponse is the message's response for a job retrieved.""" @@ -3198,18 +3218,17 @@ class GetJobResponse(google.protobuf.message.Message): @property def job(self) -> global___Job: """The job details.""" - def __init__( self, *, job: global___Job | None = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["job", b"job"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["job", b"job"]) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["job", b"job"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["job", b"job"]) -> None: ... global___GetJobResponse = GetJobResponse -@typing.final +@typing_extensions.final class DeleteJobRequest(google.protobuf.message.Message): """DeleteJobRequest is the message to delete the job by name.""" @@ -3223,11 +3242,11 @@ class DeleteJobRequest(google.protobuf.message.Message): *, name: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["name", b"name"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["name", b"name"]) -> None: ... global___DeleteJobRequest = DeleteJobRequest -@typing.final +@typing_extensions.final class DeleteJobResponse(google.protobuf.message.Message): """DeleteJobResponse is the message response to delete the job by name. Empty @@ -3240,3 +3259,184 @@ class DeleteJobResponse(google.protobuf.message.Message): ) -> None: ... global___DeleteJobResponse = DeleteJobResponse + +@typing_extensions.final +class ConversationAlpha1Request(google.protobuf.message.Message): + """ConversationAlpha1Request is the request object for Conversation.""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + @typing_extensions.final + class ParametersEntry(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + KEY_FIELD_NUMBER: builtins.int + VALUE_FIELD_NUMBER: builtins.int + key: builtins.str + @property + def value(self) -> google.protobuf.any_pb2.Any: ... + def __init__( + self, + *, + key: builtins.str = ..., + value: google.protobuf.any_pb2.Any | None = ..., + ) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["value", b"value"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... + + @typing_extensions.final + class MetadataEntry(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + KEY_FIELD_NUMBER: builtins.int + VALUE_FIELD_NUMBER: builtins.int + key: builtins.str + value: builtins.str + def __init__( + self, + *, + key: builtins.str = ..., + value: builtins.str = ..., + ) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... + + NAME_FIELD_NUMBER: builtins.int + CONTEXTID_FIELD_NUMBER: builtins.int + INPUTS_FIELD_NUMBER: builtins.int + PARAMETERS_FIELD_NUMBER: builtins.int + METADATA_FIELD_NUMBER: builtins.int + SCRUBPII_FIELD_NUMBER: builtins.int + TEMPERATURE_FIELD_NUMBER: builtins.int + name: builtins.str + """The name of Coverstaion component""" + contextID: builtins.str + """The ID of an existing chat (like in ChatGPT)""" + @property + def inputs(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___ConversationInput]: + """Inputs for the conversation, support multiple input in one time.""" + @property + def parameters(self) -> google.protobuf.internal.containers.MessageMap[builtins.str, google.protobuf.any_pb2.Any]: + """Parameters for all custom fields.""" + @property + def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: + """The metadata passing to conversation components.""" + scrubPII: builtins.bool + """Scrub PII data that comes back from the LLM""" + temperature: builtins.float + """Temperature for the LLM to optimize for creativity or predictability""" + def __init__( + self, + *, + name: builtins.str = ..., + contextID: builtins.str | None = ..., + inputs: collections.abc.Iterable[global___ConversationInput] | None = ..., + parameters: collections.abc.Mapping[builtins.str, google.protobuf.any_pb2.Any] | None = ..., + metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., + scrubPII: builtins.bool | None = ..., + temperature: builtins.float | None = ..., + ) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["_contextID", b"_contextID", "_scrubPII", b"_scrubPII", "_temperature", b"_temperature", "contextID", b"contextID", "scrubPII", b"scrubPII", "temperature", b"temperature"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["_contextID", b"_contextID", "_scrubPII", b"_scrubPII", "_temperature", b"_temperature", "contextID", b"contextID", "inputs", b"inputs", "metadata", b"metadata", "name", b"name", "parameters", b"parameters", "scrubPII", b"scrubPII", "temperature", b"temperature"]) -> None: ... + @typing.overload + def WhichOneof(self, oneof_group: typing_extensions.Literal["_contextID", b"_contextID"]) -> typing_extensions.Literal["contextID"] | None: ... + @typing.overload + def WhichOneof(self, oneof_group: typing_extensions.Literal["_scrubPII", b"_scrubPII"]) -> typing_extensions.Literal["scrubPII"] | None: ... + @typing.overload + def WhichOneof(self, oneof_group: typing_extensions.Literal["_temperature", b"_temperature"]) -> typing_extensions.Literal["temperature"] | None: ... + +global___ConversationAlpha1Request = ConversationAlpha1Request + +@typing_extensions.final +class ConversationInput(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + MESSAGE_FIELD_NUMBER: builtins.int + ROLE_FIELD_NUMBER: builtins.int + SCRUBPII_FIELD_NUMBER: builtins.int + message: builtins.str + """The message to send to the llm""" + role: builtins.str + """The role to set for the message""" + scrubPII: builtins.bool + """Scrub PII data that goes into the LLM""" + def __init__( + self, + *, + message: builtins.str = ..., + role: builtins.str | None = ..., + scrubPII: builtins.bool | None = ..., + ) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["_role", b"_role", "_scrubPII", b"_scrubPII", "role", b"role", "scrubPII", b"scrubPII"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["_role", b"_role", "_scrubPII", b"_scrubPII", "message", b"message", "role", b"role", "scrubPII", b"scrubPII"]) -> None: ... + @typing.overload + def WhichOneof(self, oneof_group: typing_extensions.Literal["_role", b"_role"]) -> typing_extensions.Literal["role"] | None: ... + @typing.overload + def WhichOneof(self, oneof_group: typing_extensions.Literal["_scrubPII", b"_scrubPII"]) -> typing_extensions.Literal["scrubPII"] | None: ... + +global___ConversationInput = ConversationInput + +@typing_extensions.final +class ConversationAlpha1Result(google.protobuf.message.Message): + """ConversationAlpha1Result is the result for one input.""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + @typing_extensions.final + class ParametersEntry(google.protobuf.message.Message): + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + KEY_FIELD_NUMBER: builtins.int + VALUE_FIELD_NUMBER: builtins.int + key: builtins.str + @property + def value(self) -> google.protobuf.any_pb2.Any: ... + def __init__( + self, + *, + key: builtins.str = ..., + value: google.protobuf.any_pb2.Any | None = ..., + ) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["value", b"value"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... + + RESULT_FIELD_NUMBER: builtins.int + PARAMETERS_FIELD_NUMBER: builtins.int + result: builtins.str + """Result for the one conversation input.""" + @property + def parameters(self) -> google.protobuf.internal.containers.MessageMap[builtins.str, google.protobuf.any_pb2.Any]: + """Parameters for all custom fields.""" + def __init__( + self, + *, + result: builtins.str = ..., + parameters: collections.abc.Mapping[builtins.str, google.protobuf.any_pb2.Any] | None = ..., + ) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["parameters", b"parameters", "result", b"result"]) -> None: ... + +global___ConversationAlpha1Result = ConversationAlpha1Result + +@typing_extensions.final +class ConversationAlpha1Response(google.protobuf.message.Message): + """ConversationAlpha1Response is the response for Conversation.""" + + DESCRIPTOR: google.protobuf.descriptor.Descriptor + + CONTEXTID_FIELD_NUMBER: builtins.int + OUTPUTS_FIELD_NUMBER: builtins.int + contextID: builtins.str + """The ID of an existing chat (like in ChatGPT)""" + @property + def outputs(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___ConversationAlpha1Result]: + """An array of results.""" + def __init__( + self, + *, + contextID: builtins.str | None = ..., + outputs: collections.abc.Iterable[global___ConversationAlpha1Result] | None = ..., + ) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["_contextID", b"_contextID", "contextID", b"contextID"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["_contextID", b"_contextID", "contextID", b"contextID", "outputs", b"outputs"]) -> None: ... + def WhichOneof(self, oneof_group: typing_extensions.Literal["_contextID", b"_contextID"]) -> typing_extensions.Literal["contextID"] | None: ... + +global___ConversationAlpha1Response = ConversationAlpha1Response diff --git a/dapr/proto/runtime/v1/dapr_pb2_grpc.py b/dapr/proto/runtime/v1/dapr_pb2_grpc.py index da7ae756..60b4c241 100644 --- a/dapr/proto/runtime/v1/dapr_pb2_grpc.py +++ b/dapr/proto/runtime/v1/dapr_pb2_grpc.py @@ -1,37 +1,11 @@ # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! """Client and server classes corresponding to protobuf-defined services.""" import grpc -import warnings from dapr.proto.common.v1 import common_pb2 as dapr_dot_proto_dot_common_dot_v1_dot_common__pb2 -from dapr.proto.runtime.v1 import appcallback_pb2 as dapr_dot_proto_dot_runtime_dot_v1_dot_appcallback__pb2 from dapr.proto.runtime.v1 import dapr_pb2 as dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2 from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 -GRPC_GENERATED_VERSION = '1.63.0' -GRPC_VERSION = grpc.__version__ -EXPECTED_ERROR_RELEASE = '1.65.0' -SCHEDULED_RELEASE_DATE = 'June 25, 2024' -_version_not_supported = False - -try: - from grpc._utilities import first_version_is_lower - _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) -except ImportError: - _version_not_supported = True - -if _version_not_supported: - warnings.warn( - f'The grpc package installed is at version {GRPC_VERSION},' - + f' but the generated code in dapr/proto/runtime/v1/dapr_pb2_grpc.py depends on' - + f' grpcio>={GRPC_GENERATED_VERSION}.' - + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' - + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' - + f' This warning will become an error in {EXPECTED_ERROR_RELEASE},' - + f' scheduled for release on {SCHEDULED_RELEASE_DATE}.', - RuntimeWarning - ) - class DaprStub(object): """Dapr service provides APIs to user application to access Dapr building blocks. @@ -47,292 +21,297 @@ def __init__(self, channel): '/dapr.proto.runtime.v1.Dapr/InvokeService', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.InvokeServiceRequest.SerializeToString, response_deserializer=dapr_dot_proto_dot_common_dot_v1_dot_common__pb2.InvokeResponse.FromString, - _registered_method=True) + ) self.GetState = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/GetState', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.GetStateRequest.SerializeToString, response_deserializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.GetStateResponse.FromString, - _registered_method=True) + ) self.GetBulkState = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/GetBulkState', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.GetBulkStateRequest.SerializeToString, response_deserializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.GetBulkStateResponse.FromString, - _registered_method=True) + ) self.SaveState = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/SaveState', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.SaveStateRequest.SerializeToString, response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, - _registered_method=True) + ) self.QueryStateAlpha1 = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/QueryStateAlpha1', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.QueryStateRequest.SerializeToString, response_deserializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.QueryStateResponse.FromString, - _registered_method=True) + ) self.DeleteState = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/DeleteState', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.DeleteStateRequest.SerializeToString, response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, - _registered_method=True) + ) self.DeleteBulkState = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/DeleteBulkState', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.DeleteBulkStateRequest.SerializeToString, response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, - _registered_method=True) + ) self.ExecuteStateTransaction = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/ExecuteStateTransaction', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.ExecuteStateTransactionRequest.SerializeToString, response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, - _registered_method=True) + ) self.PublishEvent = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/PublishEvent', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.PublishEventRequest.SerializeToString, response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, - _registered_method=True) + ) self.BulkPublishEventAlpha1 = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/BulkPublishEventAlpha1', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.BulkPublishRequest.SerializeToString, response_deserializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.BulkPublishResponse.FromString, - _registered_method=True) + ) self.SubscribeTopicEventsAlpha1 = channel.stream_stream( '/dapr.proto.runtime.v1.Dapr/SubscribeTopicEventsAlpha1', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.SubscribeTopicEventsRequestAlpha1.SerializeToString, - response_deserializer=dapr_dot_proto_dot_runtime_dot_v1_dot_appcallback__pb2.TopicEventRequest.FromString, - _registered_method=True) + response_deserializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.SubscribeTopicEventsResponseAlpha1.FromString, + ) self.InvokeBinding = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/InvokeBinding', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.InvokeBindingRequest.SerializeToString, response_deserializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.InvokeBindingResponse.FromString, - _registered_method=True) + ) self.GetSecret = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/GetSecret', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.GetSecretRequest.SerializeToString, response_deserializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.GetSecretResponse.FromString, - _registered_method=True) + ) self.GetBulkSecret = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/GetBulkSecret', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.GetBulkSecretRequest.SerializeToString, response_deserializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.GetBulkSecretResponse.FromString, - _registered_method=True) + ) self.RegisterActorTimer = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/RegisterActorTimer', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.RegisterActorTimerRequest.SerializeToString, response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, - _registered_method=True) + ) self.UnregisterActorTimer = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/UnregisterActorTimer', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.UnregisterActorTimerRequest.SerializeToString, response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, - _registered_method=True) + ) self.RegisterActorReminder = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/RegisterActorReminder', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.RegisterActorReminderRequest.SerializeToString, response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, - _registered_method=True) + ) self.UnregisterActorReminder = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/UnregisterActorReminder', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.UnregisterActorReminderRequest.SerializeToString, response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, - _registered_method=True) + ) self.GetActorState = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/GetActorState', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.GetActorStateRequest.SerializeToString, response_deserializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.GetActorStateResponse.FromString, - _registered_method=True) + ) self.ExecuteActorStateTransaction = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/ExecuteActorStateTransaction', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.ExecuteActorStateTransactionRequest.SerializeToString, response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, - _registered_method=True) + ) self.InvokeActor = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/InvokeActor', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.InvokeActorRequest.SerializeToString, response_deserializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.InvokeActorResponse.FromString, - _registered_method=True) + ) self.GetConfigurationAlpha1 = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/GetConfigurationAlpha1', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.GetConfigurationRequest.SerializeToString, response_deserializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.GetConfigurationResponse.FromString, - _registered_method=True) + ) self.GetConfiguration = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/GetConfiguration', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.GetConfigurationRequest.SerializeToString, response_deserializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.GetConfigurationResponse.FromString, - _registered_method=True) + ) self.SubscribeConfigurationAlpha1 = channel.unary_stream( '/dapr.proto.runtime.v1.Dapr/SubscribeConfigurationAlpha1', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.SubscribeConfigurationRequest.SerializeToString, response_deserializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.SubscribeConfigurationResponse.FromString, - _registered_method=True) + ) self.SubscribeConfiguration = channel.unary_stream( '/dapr.proto.runtime.v1.Dapr/SubscribeConfiguration', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.SubscribeConfigurationRequest.SerializeToString, response_deserializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.SubscribeConfigurationResponse.FromString, - _registered_method=True) + ) self.UnsubscribeConfigurationAlpha1 = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/UnsubscribeConfigurationAlpha1', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.UnsubscribeConfigurationRequest.SerializeToString, response_deserializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.UnsubscribeConfigurationResponse.FromString, - _registered_method=True) + ) self.UnsubscribeConfiguration = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/UnsubscribeConfiguration', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.UnsubscribeConfigurationRequest.SerializeToString, response_deserializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.UnsubscribeConfigurationResponse.FromString, - _registered_method=True) + ) self.TryLockAlpha1 = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/TryLockAlpha1', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.TryLockRequest.SerializeToString, response_deserializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.TryLockResponse.FromString, - _registered_method=True) + ) self.UnlockAlpha1 = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/UnlockAlpha1', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.UnlockRequest.SerializeToString, response_deserializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.UnlockResponse.FromString, - _registered_method=True) + ) self.EncryptAlpha1 = channel.stream_stream( '/dapr.proto.runtime.v1.Dapr/EncryptAlpha1', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.EncryptRequest.SerializeToString, response_deserializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.EncryptResponse.FromString, - _registered_method=True) + ) self.DecryptAlpha1 = channel.stream_stream( '/dapr.proto.runtime.v1.Dapr/DecryptAlpha1', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.DecryptRequest.SerializeToString, response_deserializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.DecryptResponse.FromString, - _registered_method=True) + ) self.GetMetadata = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/GetMetadata', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.GetMetadataRequest.SerializeToString, response_deserializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.GetMetadataResponse.FromString, - _registered_method=True) + ) self.SetMetadata = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/SetMetadata', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.SetMetadataRequest.SerializeToString, response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, - _registered_method=True) + ) self.SubtleGetKeyAlpha1 = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/SubtleGetKeyAlpha1', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.SubtleGetKeyRequest.SerializeToString, response_deserializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.SubtleGetKeyResponse.FromString, - _registered_method=True) + ) self.SubtleEncryptAlpha1 = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/SubtleEncryptAlpha1', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.SubtleEncryptRequest.SerializeToString, response_deserializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.SubtleEncryptResponse.FromString, - _registered_method=True) + ) self.SubtleDecryptAlpha1 = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/SubtleDecryptAlpha1', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.SubtleDecryptRequest.SerializeToString, response_deserializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.SubtleDecryptResponse.FromString, - _registered_method=True) + ) self.SubtleWrapKeyAlpha1 = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/SubtleWrapKeyAlpha1', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.SubtleWrapKeyRequest.SerializeToString, response_deserializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.SubtleWrapKeyResponse.FromString, - _registered_method=True) + ) self.SubtleUnwrapKeyAlpha1 = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/SubtleUnwrapKeyAlpha1', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.SubtleUnwrapKeyRequest.SerializeToString, response_deserializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.SubtleUnwrapKeyResponse.FromString, - _registered_method=True) + ) self.SubtleSignAlpha1 = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/SubtleSignAlpha1', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.SubtleSignRequest.SerializeToString, response_deserializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.SubtleSignResponse.FromString, - _registered_method=True) + ) self.SubtleVerifyAlpha1 = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/SubtleVerifyAlpha1', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.SubtleVerifyRequest.SerializeToString, response_deserializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.SubtleVerifyResponse.FromString, - _registered_method=True) + ) self.StartWorkflowAlpha1 = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/StartWorkflowAlpha1', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.StartWorkflowRequest.SerializeToString, response_deserializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.StartWorkflowResponse.FromString, - _registered_method=True) + ) self.GetWorkflowAlpha1 = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/GetWorkflowAlpha1', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.GetWorkflowRequest.SerializeToString, response_deserializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.GetWorkflowResponse.FromString, - _registered_method=True) + ) self.PurgeWorkflowAlpha1 = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/PurgeWorkflowAlpha1', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.PurgeWorkflowRequest.SerializeToString, response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, - _registered_method=True) + ) self.TerminateWorkflowAlpha1 = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/TerminateWorkflowAlpha1', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.TerminateWorkflowRequest.SerializeToString, response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, - _registered_method=True) + ) self.PauseWorkflowAlpha1 = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/PauseWorkflowAlpha1', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.PauseWorkflowRequest.SerializeToString, response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, - _registered_method=True) + ) self.ResumeWorkflowAlpha1 = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/ResumeWorkflowAlpha1', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.ResumeWorkflowRequest.SerializeToString, response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, - _registered_method=True) + ) self.RaiseEventWorkflowAlpha1 = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/RaiseEventWorkflowAlpha1', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.RaiseEventWorkflowRequest.SerializeToString, response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, - _registered_method=True) + ) self.StartWorkflowBeta1 = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/StartWorkflowBeta1', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.StartWorkflowRequest.SerializeToString, response_deserializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.StartWorkflowResponse.FromString, - _registered_method=True) + ) self.GetWorkflowBeta1 = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/GetWorkflowBeta1', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.GetWorkflowRequest.SerializeToString, response_deserializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.GetWorkflowResponse.FromString, - _registered_method=True) + ) self.PurgeWorkflowBeta1 = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/PurgeWorkflowBeta1', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.PurgeWorkflowRequest.SerializeToString, response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, - _registered_method=True) + ) self.TerminateWorkflowBeta1 = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/TerminateWorkflowBeta1', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.TerminateWorkflowRequest.SerializeToString, response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, - _registered_method=True) + ) self.PauseWorkflowBeta1 = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/PauseWorkflowBeta1', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.PauseWorkflowRequest.SerializeToString, response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, - _registered_method=True) + ) self.ResumeWorkflowBeta1 = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/ResumeWorkflowBeta1', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.ResumeWorkflowRequest.SerializeToString, response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, - _registered_method=True) + ) self.RaiseEventWorkflowBeta1 = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/RaiseEventWorkflowBeta1', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.RaiseEventWorkflowRequest.SerializeToString, response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, - _registered_method=True) + ) self.Shutdown = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/Shutdown', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.ShutdownRequest.SerializeToString, response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, - _registered_method=True) + ) self.ScheduleJobAlpha1 = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/ScheduleJobAlpha1', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.ScheduleJobRequest.SerializeToString, response_deserializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.ScheduleJobResponse.FromString, - _registered_method=True) + ) self.GetJobAlpha1 = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/GetJobAlpha1', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.GetJobRequest.SerializeToString, response_deserializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.GetJobResponse.FromString, - _registered_method=True) + ) self.DeleteJobAlpha1 = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/DeleteJobAlpha1', request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.DeleteJobRequest.SerializeToString, response_deserializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.DeleteJobResponse.FromString, - _registered_method=True) + ) + self.ConverseAlpha1 = channel.unary_unary( + '/dapr.proto.runtime.v1.Dapr/ConverseAlpha1', + request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.ConversationAlpha1Request.SerializeToString, + response_deserializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.ConversationAlpha1Response.FromString, + ) class DaprServicer(object): @@ -747,6 +726,13 @@ def DeleteJobAlpha1(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def ConverseAlpha1(self, request, context): + """Converse with a LLM service + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def add_DaprServicer_to_server(servicer, server): rpc_method_handlers = { @@ -803,7 +789,7 @@ def add_DaprServicer_to_server(servicer, server): 'SubscribeTopicEventsAlpha1': grpc.stream_stream_rpc_method_handler( servicer.SubscribeTopicEventsAlpha1, request_deserializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.SubscribeTopicEventsRequestAlpha1.FromString, - response_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_appcallback__pb2.TopicEventRequest.SerializeToString, + response_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.SubscribeTopicEventsResponseAlpha1.SerializeToString, ), 'InvokeBinding': grpc.unary_unary_rpc_method_handler( servicer.InvokeBinding, @@ -1040,6 +1026,11 @@ def add_DaprServicer_to_server(servicer, server): request_deserializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.DeleteJobRequest.FromString, response_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.DeleteJobResponse.SerializeToString, ), + 'ConverseAlpha1': grpc.unary_unary_rpc_method_handler( + servicer.ConverseAlpha1, + request_deserializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.ConversationAlpha1Request.FromString, + response_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.ConversationAlpha1Response.SerializeToString, + ), } generic_handler = grpc.method_handlers_generic_handler( 'dapr.proto.runtime.v1.Dapr', rpc_method_handlers) @@ -1062,21 +1053,11 @@ def InvokeService(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/InvokeService', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/InvokeService', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.InvokeServiceRequest.SerializeToString, dapr_dot_proto_dot_common_dot_v1_dot_common__pb2.InvokeResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def GetState(request, @@ -1089,21 +1070,11 @@ def GetState(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/GetState', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/GetState', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.GetStateRequest.SerializeToString, dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.GetStateResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def GetBulkState(request, @@ -1116,21 +1087,11 @@ def GetBulkState(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/GetBulkState', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/GetBulkState', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.GetBulkStateRequest.SerializeToString, dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.GetBulkStateResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def SaveState(request, @@ -1143,21 +1104,11 @@ def SaveState(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/SaveState', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/SaveState', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.SaveStateRequest.SerializeToString, google_dot_protobuf_dot_empty__pb2.Empty.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def QueryStateAlpha1(request, @@ -1170,21 +1121,11 @@ def QueryStateAlpha1(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/QueryStateAlpha1', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/QueryStateAlpha1', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.QueryStateRequest.SerializeToString, dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.QueryStateResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def DeleteState(request, @@ -1197,21 +1138,11 @@ def DeleteState(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/DeleteState', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/DeleteState', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.DeleteStateRequest.SerializeToString, google_dot_protobuf_dot_empty__pb2.Empty.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def DeleteBulkState(request, @@ -1224,21 +1155,11 @@ def DeleteBulkState(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/DeleteBulkState', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/DeleteBulkState', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.DeleteBulkStateRequest.SerializeToString, google_dot_protobuf_dot_empty__pb2.Empty.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def ExecuteStateTransaction(request, @@ -1251,21 +1172,11 @@ def ExecuteStateTransaction(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/ExecuteStateTransaction', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/ExecuteStateTransaction', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.ExecuteStateTransactionRequest.SerializeToString, google_dot_protobuf_dot_empty__pb2.Empty.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def PublishEvent(request, @@ -1278,21 +1189,11 @@ def PublishEvent(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/PublishEvent', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/PublishEvent', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.PublishEventRequest.SerializeToString, google_dot_protobuf_dot_empty__pb2.Empty.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def BulkPublishEventAlpha1(request, @@ -1305,21 +1206,11 @@ def BulkPublishEventAlpha1(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/BulkPublishEventAlpha1', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/BulkPublishEventAlpha1', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.BulkPublishRequest.SerializeToString, dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.BulkPublishResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def SubscribeTopicEventsAlpha1(request_iterator, @@ -1332,21 +1223,11 @@ def SubscribeTopicEventsAlpha1(request_iterator, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.stream_stream( - request_iterator, - target, - '/dapr.proto.runtime.v1.Dapr/SubscribeTopicEventsAlpha1', + return grpc.experimental.stream_stream(request_iterator, target, '/dapr.proto.runtime.v1.Dapr/SubscribeTopicEventsAlpha1', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.SubscribeTopicEventsRequestAlpha1.SerializeToString, - dapr_dot_proto_dot_runtime_dot_v1_dot_appcallback__pb2.TopicEventRequest.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.SubscribeTopicEventsResponseAlpha1.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def InvokeBinding(request, @@ -1359,21 +1240,11 @@ def InvokeBinding(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/InvokeBinding', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/InvokeBinding', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.InvokeBindingRequest.SerializeToString, dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.InvokeBindingResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def GetSecret(request, @@ -1386,21 +1257,11 @@ def GetSecret(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/GetSecret', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/GetSecret', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.GetSecretRequest.SerializeToString, dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.GetSecretResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def GetBulkSecret(request, @@ -1413,21 +1274,11 @@ def GetBulkSecret(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/GetBulkSecret', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/GetBulkSecret', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.GetBulkSecretRequest.SerializeToString, dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.GetBulkSecretResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def RegisterActorTimer(request, @@ -1440,21 +1291,11 @@ def RegisterActorTimer(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/RegisterActorTimer', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/RegisterActorTimer', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.RegisterActorTimerRequest.SerializeToString, google_dot_protobuf_dot_empty__pb2.Empty.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def UnregisterActorTimer(request, @@ -1467,21 +1308,11 @@ def UnregisterActorTimer(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/UnregisterActorTimer', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/UnregisterActorTimer', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.UnregisterActorTimerRequest.SerializeToString, google_dot_protobuf_dot_empty__pb2.Empty.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def RegisterActorReminder(request, @@ -1494,21 +1325,11 @@ def RegisterActorReminder(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/RegisterActorReminder', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/RegisterActorReminder', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.RegisterActorReminderRequest.SerializeToString, google_dot_protobuf_dot_empty__pb2.Empty.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def UnregisterActorReminder(request, @@ -1521,21 +1342,11 @@ def UnregisterActorReminder(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/UnregisterActorReminder', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/UnregisterActorReminder', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.UnregisterActorReminderRequest.SerializeToString, google_dot_protobuf_dot_empty__pb2.Empty.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def GetActorState(request, @@ -1548,21 +1359,11 @@ def GetActorState(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/GetActorState', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/GetActorState', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.GetActorStateRequest.SerializeToString, dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.GetActorStateResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def ExecuteActorStateTransaction(request, @@ -1575,21 +1376,11 @@ def ExecuteActorStateTransaction(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/ExecuteActorStateTransaction', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/ExecuteActorStateTransaction', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.ExecuteActorStateTransactionRequest.SerializeToString, google_dot_protobuf_dot_empty__pb2.Empty.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def InvokeActor(request, @@ -1602,21 +1393,11 @@ def InvokeActor(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/InvokeActor', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/InvokeActor', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.InvokeActorRequest.SerializeToString, dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.InvokeActorResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def GetConfigurationAlpha1(request, @@ -1629,21 +1410,11 @@ def GetConfigurationAlpha1(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/GetConfigurationAlpha1', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/GetConfigurationAlpha1', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.GetConfigurationRequest.SerializeToString, dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.GetConfigurationResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def GetConfiguration(request, @@ -1656,21 +1427,11 @@ def GetConfiguration(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/GetConfiguration', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/GetConfiguration', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.GetConfigurationRequest.SerializeToString, dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.GetConfigurationResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def SubscribeConfigurationAlpha1(request, @@ -1683,21 +1444,11 @@ def SubscribeConfigurationAlpha1(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_stream( - request, - target, - '/dapr.proto.runtime.v1.Dapr/SubscribeConfigurationAlpha1', + return grpc.experimental.unary_stream(request, target, '/dapr.proto.runtime.v1.Dapr/SubscribeConfigurationAlpha1', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.SubscribeConfigurationRequest.SerializeToString, dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.SubscribeConfigurationResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def SubscribeConfiguration(request, @@ -1710,21 +1461,11 @@ def SubscribeConfiguration(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_stream( - request, - target, - '/dapr.proto.runtime.v1.Dapr/SubscribeConfiguration', + return grpc.experimental.unary_stream(request, target, '/dapr.proto.runtime.v1.Dapr/SubscribeConfiguration', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.SubscribeConfigurationRequest.SerializeToString, dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.SubscribeConfigurationResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def UnsubscribeConfigurationAlpha1(request, @@ -1737,21 +1478,11 @@ def UnsubscribeConfigurationAlpha1(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/UnsubscribeConfigurationAlpha1', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/UnsubscribeConfigurationAlpha1', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.UnsubscribeConfigurationRequest.SerializeToString, dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.UnsubscribeConfigurationResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def UnsubscribeConfiguration(request, @@ -1764,21 +1495,11 @@ def UnsubscribeConfiguration(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/UnsubscribeConfiguration', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/UnsubscribeConfiguration', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.UnsubscribeConfigurationRequest.SerializeToString, dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.UnsubscribeConfigurationResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def TryLockAlpha1(request, @@ -1791,21 +1512,11 @@ def TryLockAlpha1(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/TryLockAlpha1', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/TryLockAlpha1', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.TryLockRequest.SerializeToString, dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.TryLockResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def UnlockAlpha1(request, @@ -1818,21 +1529,11 @@ def UnlockAlpha1(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/UnlockAlpha1', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/UnlockAlpha1', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.UnlockRequest.SerializeToString, dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.UnlockResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def EncryptAlpha1(request_iterator, @@ -1845,21 +1546,11 @@ def EncryptAlpha1(request_iterator, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.stream_stream( - request_iterator, - target, - '/dapr.proto.runtime.v1.Dapr/EncryptAlpha1', + return grpc.experimental.stream_stream(request_iterator, target, '/dapr.proto.runtime.v1.Dapr/EncryptAlpha1', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.EncryptRequest.SerializeToString, dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.EncryptResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def DecryptAlpha1(request_iterator, @@ -1872,21 +1563,11 @@ def DecryptAlpha1(request_iterator, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.stream_stream( - request_iterator, - target, - '/dapr.proto.runtime.v1.Dapr/DecryptAlpha1', + return grpc.experimental.stream_stream(request_iterator, target, '/dapr.proto.runtime.v1.Dapr/DecryptAlpha1', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.DecryptRequest.SerializeToString, dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.DecryptResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def GetMetadata(request, @@ -1899,21 +1580,11 @@ def GetMetadata(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/GetMetadata', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/GetMetadata', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.GetMetadataRequest.SerializeToString, dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.GetMetadataResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def SetMetadata(request, @@ -1926,21 +1597,11 @@ def SetMetadata(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/SetMetadata', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/SetMetadata', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.SetMetadataRequest.SerializeToString, google_dot_protobuf_dot_empty__pb2.Empty.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def SubtleGetKeyAlpha1(request, @@ -1953,21 +1614,11 @@ def SubtleGetKeyAlpha1(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/SubtleGetKeyAlpha1', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/SubtleGetKeyAlpha1', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.SubtleGetKeyRequest.SerializeToString, dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.SubtleGetKeyResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def SubtleEncryptAlpha1(request, @@ -1980,21 +1631,11 @@ def SubtleEncryptAlpha1(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/SubtleEncryptAlpha1', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/SubtleEncryptAlpha1', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.SubtleEncryptRequest.SerializeToString, dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.SubtleEncryptResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def SubtleDecryptAlpha1(request, @@ -2007,21 +1648,11 @@ def SubtleDecryptAlpha1(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/SubtleDecryptAlpha1', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/SubtleDecryptAlpha1', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.SubtleDecryptRequest.SerializeToString, dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.SubtleDecryptResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def SubtleWrapKeyAlpha1(request, @@ -2034,21 +1665,11 @@ def SubtleWrapKeyAlpha1(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/SubtleWrapKeyAlpha1', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/SubtleWrapKeyAlpha1', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.SubtleWrapKeyRequest.SerializeToString, dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.SubtleWrapKeyResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def SubtleUnwrapKeyAlpha1(request, @@ -2061,21 +1682,11 @@ def SubtleUnwrapKeyAlpha1(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/SubtleUnwrapKeyAlpha1', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/SubtleUnwrapKeyAlpha1', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.SubtleUnwrapKeyRequest.SerializeToString, dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.SubtleUnwrapKeyResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def SubtleSignAlpha1(request, @@ -2088,21 +1699,11 @@ def SubtleSignAlpha1(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/SubtleSignAlpha1', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/SubtleSignAlpha1', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.SubtleSignRequest.SerializeToString, dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.SubtleSignResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def SubtleVerifyAlpha1(request, @@ -2115,21 +1716,11 @@ def SubtleVerifyAlpha1(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/SubtleVerifyAlpha1', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/SubtleVerifyAlpha1', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.SubtleVerifyRequest.SerializeToString, dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.SubtleVerifyResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def StartWorkflowAlpha1(request, @@ -2142,21 +1733,11 @@ def StartWorkflowAlpha1(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/StartWorkflowAlpha1', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/StartWorkflowAlpha1', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.StartWorkflowRequest.SerializeToString, dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.StartWorkflowResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def GetWorkflowAlpha1(request, @@ -2169,21 +1750,11 @@ def GetWorkflowAlpha1(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/GetWorkflowAlpha1', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/GetWorkflowAlpha1', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.GetWorkflowRequest.SerializeToString, dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.GetWorkflowResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def PurgeWorkflowAlpha1(request, @@ -2196,21 +1767,11 @@ def PurgeWorkflowAlpha1(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/PurgeWorkflowAlpha1', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/PurgeWorkflowAlpha1', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.PurgeWorkflowRequest.SerializeToString, google_dot_protobuf_dot_empty__pb2.Empty.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def TerminateWorkflowAlpha1(request, @@ -2223,21 +1784,11 @@ def TerminateWorkflowAlpha1(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/TerminateWorkflowAlpha1', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/TerminateWorkflowAlpha1', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.TerminateWorkflowRequest.SerializeToString, google_dot_protobuf_dot_empty__pb2.Empty.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def PauseWorkflowAlpha1(request, @@ -2250,21 +1801,11 @@ def PauseWorkflowAlpha1(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/PauseWorkflowAlpha1', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/PauseWorkflowAlpha1', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.PauseWorkflowRequest.SerializeToString, google_dot_protobuf_dot_empty__pb2.Empty.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def ResumeWorkflowAlpha1(request, @@ -2277,21 +1818,11 @@ def ResumeWorkflowAlpha1(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/ResumeWorkflowAlpha1', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/ResumeWorkflowAlpha1', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.ResumeWorkflowRequest.SerializeToString, google_dot_protobuf_dot_empty__pb2.Empty.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def RaiseEventWorkflowAlpha1(request, @@ -2304,21 +1835,11 @@ def RaiseEventWorkflowAlpha1(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/RaiseEventWorkflowAlpha1', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/RaiseEventWorkflowAlpha1', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.RaiseEventWorkflowRequest.SerializeToString, google_dot_protobuf_dot_empty__pb2.Empty.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def StartWorkflowBeta1(request, @@ -2331,21 +1852,11 @@ def StartWorkflowBeta1(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/StartWorkflowBeta1', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/StartWorkflowBeta1', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.StartWorkflowRequest.SerializeToString, dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.StartWorkflowResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def GetWorkflowBeta1(request, @@ -2358,21 +1869,11 @@ def GetWorkflowBeta1(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/GetWorkflowBeta1', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/GetWorkflowBeta1', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.GetWorkflowRequest.SerializeToString, dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.GetWorkflowResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def PurgeWorkflowBeta1(request, @@ -2385,21 +1886,11 @@ def PurgeWorkflowBeta1(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/PurgeWorkflowBeta1', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/PurgeWorkflowBeta1', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.PurgeWorkflowRequest.SerializeToString, google_dot_protobuf_dot_empty__pb2.Empty.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def TerminateWorkflowBeta1(request, @@ -2412,21 +1903,11 @@ def TerminateWorkflowBeta1(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/TerminateWorkflowBeta1', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/TerminateWorkflowBeta1', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.TerminateWorkflowRequest.SerializeToString, google_dot_protobuf_dot_empty__pb2.Empty.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def PauseWorkflowBeta1(request, @@ -2439,21 +1920,11 @@ def PauseWorkflowBeta1(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/PauseWorkflowBeta1', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/PauseWorkflowBeta1', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.PauseWorkflowRequest.SerializeToString, google_dot_protobuf_dot_empty__pb2.Empty.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def ResumeWorkflowBeta1(request, @@ -2466,21 +1937,11 @@ def ResumeWorkflowBeta1(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/ResumeWorkflowBeta1', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/ResumeWorkflowBeta1', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.ResumeWorkflowRequest.SerializeToString, google_dot_protobuf_dot_empty__pb2.Empty.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def RaiseEventWorkflowBeta1(request, @@ -2493,21 +1954,11 @@ def RaiseEventWorkflowBeta1(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/RaiseEventWorkflowBeta1', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/RaiseEventWorkflowBeta1', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.RaiseEventWorkflowRequest.SerializeToString, google_dot_protobuf_dot_empty__pb2.Empty.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def Shutdown(request, @@ -2520,21 +1971,11 @@ def Shutdown(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/Shutdown', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/Shutdown', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.ShutdownRequest.SerializeToString, google_dot_protobuf_dot_empty__pb2.Empty.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def ScheduleJobAlpha1(request, @@ -2547,21 +1988,11 @@ def ScheduleJobAlpha1(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/ScheduleJobAlpha1', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/ScheduleJobAlpha1', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.ScheduleJobRequest.SerializeToString, dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.ScheduleJobResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def GetJobAlpha1(request, @@ -2574,21 +2005,11 @@ def GetJobAlpha1(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/GetJobAlpha1', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/GetJobAlpha1', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.GetJobRequest.SerializeToString, dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.GetJobResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def DeleteJobAlpha1(request, @@ -2601,18 +2022,25 @@ def DeleteJobAlpha1(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary( - request, - target, - '/dapr.proto.runtime.v1.Dapr/DeleteJobAlpha1', + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/DeleteJobAlpha1', dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.DeleteJobRequest.SerializeToString, dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.DeleteJobResponse.FromString, - options, - channel_credentials, - insecure, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - _registered_method=True) + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def ConverseAlpha1(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/ConverseAlpha1', + dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.ConversationAlpha1Request.SerializeToString, + dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.ConversationAlpha1Response.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/daprdocs/content/en/python-sdk-docs/python-client.md b/daprdocs/content/en/python-sdk-docs/python-client.md index 52d8b2e8..b4e92a9b 100644 --- a/daprdocs/content/en/python-sdk-docs/python-client.md +++ b/daprdocs/content/en/python-sdk-docs/python-client.md @@ -216,7 +216,7 @@ with DaprClient() as d: - For a full list of state store query options visit [How-To: Query state]({{< ref howto-state-query-api.md >}}). - Visit [Python SDK examples](https://github.com/dapr/python-sdk/tree/master/examples/state_store_query) for code samples and instructions to try out state store querying. -### Publish & subscribe to messages +### Publish & subscribe #### Publish messages @@ -255,6 +255,126 @@ def mytopic_important(event: v1.Event) -> None: - For more information about pub/sub, visit [How-To: Publish & subscribe]({{< ref howto-publish-subscribe.md >}}). - Visit [Python SDK examples](https://github.com/dapr/python-sdk/tree/master/examples/pubsub-simple) for code samples and instructions to try out pub/sub. +#### Streaming message subscription + +You can create a streaming subscription to a PubSub topic using either the `subscribe` +or `subscribe_handler` methods. + +The `subscribe` method returns a `Subscription` object, which allows you to pull messages from the +stream by +calling the `next_message` method. This will block on the main thread while waiting for messages. +When done, you should call the close method to terminate the +subscription and stop receiving messages. + +The `subscribe_with_handler` method accepts a callback function that is executed for each message +received from the stream. +It runs in a separate thread, so it doesn't block the main thread. The callback should return a +`TopicEventResponse` (ex. `TopicEventResponse('success')`), indicating whether the message was +processed successfully, should be retried, or should be discarded. The method will automatically +manage message acknowledgements based on the returned status. The call to `subscribe_with_handler` +method returns a close function, which should be called to terminate the subscription when you're +done. + +Here's an example of using the `subscribe` method: + +```python +import time + +from dapr.clients import DaprClient +from dapr.clients.grpc.subscription import StreamInactiveError + +counter = 0 + + +def process_message(message): + global counter + counter += 1 + # Process the message here + print(f'Processing message: {message.data()} from {message.topic()}...') + return 'success' + + +def main(): + with DaprClient() as client: + global counter + + subscription = client.subscribe( + pubsub_name='pubsub', topic='TOPIC_A', dead_letter_topic='TOPIC_A_DEAD' + ) + + try: + while counter < 5: + try: + message = subscription.next_message() + + except StreamInactiveError as e: + print('Stream is inactive. Retrying...') + time.sleep(1) + continue + if message is None: + print('No message received within timeout period.') + continue + + # Process the message + response_status = process_message(message) + + if response_status == 'success': + subscription.respond_success(message) + elif response_status == 'retry': + subscription.respond_retry(message) + elif response_status == 'drop': + subscription.respond_drop(message) + + finally: + print("Closing subscription...") + subscription.close() + + +if __name__ == '__main__': + main() +``` + +And here's an example of using the `subscribe_with_handler` method: + +```python +import time + +from dapr.clients import DaprClient +from dapr.clients.grpc._response import TopicEventResponse + +counter = 0 + + +def process_message(message): + # Process the message here + global counter + counter += 1 + print(f'Processing message: {message.data()} from {message.topic()}...') + return TopicEventResponse('success') + + +def main(): + with (DaprClient() as client): + # This will start a new thread that will listen for messages + # and process them in the `process_message` function + close_fn = client.subscribe_with_handler( + pubsub_name='pubsub', topic='TOPIC_A', handler_fn=process_message, + dead_letter_topic='TOPIC_A_DEAD' + ) + + while counter < 5: + time.sleep(1) + + print("Closing subscription...") + close_fn() + + +if __name__ == '__main__': + main() +``` + +- For more information about pub/sub, visit [How-To: Publish & subscribe]({{< ref howto-publish-subscribe.md >}}). +- Visit [Python SDK examples](https://github.com/dapr/python-sdk/tree/main/examples/pubsub-simple) for code samples and instructions to try out streaming pub/sub. ### Interact with output bindings @@ -266,7 +386,7 @@ with DaprClient() as d: ``` - For a full guide on output bindings visit [How-To: Use bindings]({{< ref howto-bindings.md >}}). -- Visit [Python SDK examples](https://github.com/dapr/python-sdk/tree/master/examples/invoke-binding) for code samples and instructions to try out output bindings. +- Visit [Python SDK examples](https://github.com/dapr/python-sdk/tree/main/examples/invoke-binding) for code samples and instructions to try out output bindings. ### Retrieve secrets diff --git a/examples/pubsub-streaming-async/README.md b/examples/pubsub-streaming-async/README.md new file mode 100644 index 00000000..60c1cdef --- /dev/null +++ b/examples/pubsub-streaming-async/README.md @@ -0,0 +1,122 @@ +# Example - Publish and subscribe to messages + +This example utilizes a publisher and a subscriber to show the bidirectional pubsub pattern. +It creates a publisher and calls the `publish_event` method in the `DaprClient`. +In the s`subscriber.py` file it creates a subscriber object that can call the `next_message` method to get new messages from the stream. After processing the new message, it returns a status to the stream. + + +> **Note:** Make sure to use the latest proto bindings + +## Pre-requisites + +- [Dapr CLI and initialized environment](https://docs.dapr.io/getting-started) +- [Install Python 3.8+](https://www.python.org/downloads/) + +## Install Dapr python-SDK + + + +```bash +pip3 install dapr +``` + +## Run async example where users control reading messages off the stream + +Run the following command in a terminal/command prompt: + + + +```bash +# 1. Start Subscriber +dapr run --app-id python-subscriber --app-protocol grpc -- python3 subscriber.py --topic=TOPIC_B1 +``` + + + +In another terminal/command prompt run: + + + +```bash +# 2. Start Publisher +dapr run --app-id python-publisher --app-protocol grpc --dapr-grpc-port=3500 --enable-app-health-check -- python3 publisher.py --topic=TOPIC_B1 +``` + + + +## Run async example with a handler function + +Run the following command in a terminal/command prompt: + + + +```bash +# 1. Start Subscriber +dapr run --app-id python-subscriber --app-protocol grpc -- python3 subscriber-handler.py --topic=TOPIC_B2 +``` + + + +In another terminal/command prompt run: + + + +```bash +# 2. Start Publisher +dapr run --app-id python-publisher --app-protocol grpc --dapr-grpc-port=3500 --enable-app-health-check -- python3 publisher.py --topic=TOPIC_B2 +``` + + + + +## Cleanup + + diff --git a/examples/pubsub-streaming-async/publisher.py b/examples/pubsub-streaming-async/publisher.py new file mode 100644 index 00000000..e4abf359 --- /dev/null +++ b/examples/pubsub-streaming-async/publisher.py @@ -0,0 +1,52 @@ +# ------------------------------------------------------------ +# Copyright 2022 The Dapr Authors +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ------------------------------------------------------------ +import argparse +import asyncio +import json + +from dapr.aio.clients import DaprClient + +parser = argparse.ArgumentParser(description='Publish events to a Dapr pub/sub topic.') +parser.add_argument('--topic', type=str, required=True, help='The topic name to publish to.') +args = parser.parse_args() + +topic_name = args.topic + + +async def publish_events(): + """ + Publishes events to a pubsub topic asynchronously + """ + + async with DaprClient() as d: + id = 0 + while id < 5: + id += 1 + req_data = {'id': id, 'message': 'hello world'} + + # Create a typed message with content type and body + await d.publish_event( + pubsub_name='pubsub', + topic_name=topic_name, + data=json.dumps(req_data), + data_content_type='application/json', + publish_metadata={'ttlInSeconds': '100', 'rawPayload': 'false'}, + ) + + # Print the request + print(req_data, flush=True) + + await asyncio.sleep(1) + + +asyncio.run(publish_events()) diff --git a/examples/pubsub-streaming-async/subscriber-handler.py b/examples/pubsub-streaming-async/subscriber-handler.py new file mode 100644 index 00000000..34129ee7 --- /dev/null +++ b/examples/pubsub-streaming-async/subscriber-handler.py @@ -0,0 +1,50 @@ +import argparse +import asyncio +from dapr.aio.clients import DaprClient +from dapr.clients.grpc._response import TopicEventResponse + +parser = argparse.ArgumentParser(description='Publish events to a Dapr pub/sub topic.') +parser.add_argument('--topic', type=str, required=True, help='The topic name to publish to.') +args = parser.parse_args() + +topic_name = args.topic +dlq_topic_name = topic_name + '_DEAD' + +counter = 0 + + +async def process_message(message) -> TopicEventResponse: + """ + Asynchronously processes the message and returns a TopicEventResponse. + """ + + print(f'Processing message: {message.data()} from {message.topic()}...') + global counter + counter += 1 + return TopicEventResponse('success') + + +async def main(): + """ + Main function to subscribe to a pubsub topic and handle messages asynchronously. + """ + async with DaprClient() as client: + # Subscribe to the pubsub topic with the message handler + close_fn = await client.subscribe_with_handler( + pubsub_name='pubsub', + topic=topic_name, + handler_fn=process_message, + dead_letter_topic=dlq_topic_name, + ) + + # Wait until 5 messages are processed + global counter + while counter < 5: + await asyncio.sleep(1) + + print('Closing subscription...') + await close_fn() + + +if __name__ == '__main__': + asyncio.run(main()) diff --git a/examples/pubsub-streaming-async/subscriber.py b/examples/pubsub-streaming-async/subscriber.py new file mode 100644 index 00000000..7907bb5f --- /dev/null +++ b/examples/pubsub-streaming-async/subscriber.py @@ -0,0 +1,67 @@ +import argparse +import asyncio + +from dapr.aio.clients import DaprClient +from dapr.clients.grpc.subscription import StreamInactiveError +from dapr.common.pubsub.subscription import StreamCancelledError + +parser = argparse.ArgumentParser(description='Publish events to a Dapr pub/sub topic.') +parser.add_argument('--topic', type=str, required=True, help='The topic name to publish to.') +args = parser.parse_args() + +topic_name = args.topic +dlq_topic_name = topic_name + '_DEAD' + +counter = 0 + + +def process_message(message): + global counter + counter += 1 + # Process the message here + print(f'Processing message: {message.data()} from {message.topic()}...') + return 'success' + + +async def main(): + async with DaprClient() as client: + global counter + subscription = await client.subscribe( + pubsub_name='pubsub', topic=topic_name, dead_letter_topic=dlq_topic_name + ) + + try: + while counter < 5: + try: + message = await subscription.next_message() + if message is None: + print( + 'No message received within timeout period. ' + 'The stream might have been cancelled.' + ) + continue + + except StreamInactiveError: + print('Stream is inactive. Retrying...') + await asyncio.sleep(1) + continue + except StreamCancelledError as e: + print('Stream was cancelled') + break + # Process the message + response_status = process_message(message) + + if response_status == 'success': + await subscription.respond_success(message) + elif response_status == 'retry': + await subscription.respond_retry(message) + elif response_status == 'drop': + await subscription.respond_drop(message) + + finally: + print('Closing subscription...') + await subscription.close() + + +if __name__ == '__main__': + asyncio.run(main()) diff --git a/examples/pubsub-streaming/README.md b/examples/pubsub-streaming/README.md new file mode 100644 index 00000000..15664522 --- /dev/null +++ b/examples/pubsub-streaming/README.md @@ -0,0 +1,121 @@ +# Example - Publish and subscribe to messages + +This example utilizes a publisher and a subscriber to show the bidirectional pubsub pattern. +It creates a publisher and calls the `publish_event` method in the `DaprClient`. +In the s`subscriber.py` file it creates a subscriber object that can call the `next_message` method to get new messages from the stream. After processing the new message, it returns a status to the stream. + + +> **Note:** Make sure to use the latest proto bindings + +## Pre-requisites + +- [Dapr CLI and initialized environment](https://docs.dapr.io/getting-started) +- [Install Python 3.8+](https://www.python.org/downloads/) + +## Install Dapr python-SDK + + + +```bash +pip3 install dapr +``` + +## Run example where users control reading messages off the stream + +Run the following command in a terminal/command prompt: + + + +```bash +# 1. Start Subscriber +dapr run --app-id python-subscriber --app-protocol grpc -- python3 subscriber.py --topic=TOPIC_A1 +``` + + + +In another terminal/command prompt run: + + + +```bash +# 2. Start Publisher +dapr run --app-id python-publisher --app-protocol grpc --dapr-grpc-port=3500 --enable-app-health-check -- python3 publisher.py --topic=TOPIC_A1 +``` + + + +## Run example with a handler function + +Run the following command in a terminal/command prompt: + + + +```bash +# 1. Start Subscriber +dapr run --app-id python-subscriber --app-protocol grpc -- python3 subscriber-handler.py --topic=TOPIC_A2 +``` + + + +In another terminal/command prompt run: + + + +```bash +# 2. Start Publisher +dapr run --app-id python-publisher --app-protocol grpc --dapr-grpc-port=3500 --enable-app-health-check -- python3 publisher.py --topic=TOPIC_A2 +``` + + + +## Cleanup + + diff --git a/examples/pubsub-streaming/publisher.py b/examples/pubsub-streaming/publisher.py new file mode 100644 index 00000000..6ae68c22 --- /dev/null +++ b/examples/pubsub-streaming/publisher.py @@ -0,0 +1,43 @@ +# ------------------------------------------------------------ +# Copyright 2022 The Dapr Authors +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ------------------------------------------------------------ +import argparse +import json +import time + +from dapr.clients import DaprClient + +parser = argparse.ArgumentParser(description='Publish events to a Dapr pub/sub topic.') +parser.add_argument('--topic', type=str, required=True, help='The topic name to publish to.') +args = parser.parse_args() + +topic_name = args.topic + +with DaprClient() as d: + id = 0 + while id < 5: + id += 1 + req_data = {'id': id, 'message': 'hello world'} + + # Create a typed message with content type and body + resp = d.publish_event( + pubsub_name='pubsub', + topic_name=topic_name, + data=json.dumps(req_data), + data_content_type='application/json', + publish_metadata={'ttlInSeconds': '100', 'rawPayload': 'false'}, + ) + + # Print the request + print(req_data, flush=True) + + time.sleep(1) diff --git a/examples/pubsub-streaming/subscriber-handler.py b/examples/pubsub-streaming/subscriber-handler.py new file mode 100644 index 00000000..3a963fd2 --- /dev/null +++ b/examples/pubsub-streaming/subscriber-handler.py @@ -0,0 +1,44 @@ +import argparse +import time + +from dapr.clients import DaprClient +from dapr.clients.grpc._response import TopicEventResponse + +counter = 0 + +parser = argparse.ArgumentParser(description='Publish events to a Dapr pub/sub topic.') +parser.add_argument('--topic', type=str, required=True, help='The topic name to publish to.') +args = parser.parse_args() + +topic_name = args.topic +dlq_topic_name = topic_name + '_DEAD' + + +def process_message(message): + # Process the message here + global counter + counter += 1 + print(f'Processing message: {message.data()} from {message.topic()}...') + return TopicEventResponse('success') + + +def main(): + with DaprClient() as client: + # This will start a new thread that will listen for messages + # and process them in the `process_message` function + close_fn = client.subscribe_with_handler( + pubsub_name='pubsub', + topic=topic_name, + handler_fn=process_message, + dead_letter_topic=dlq_topic_name, + ) + + while counter < 5: + time.sleep(1) + + print('Closing subscription...') + close_fn() + + +if __name__ == '__main__': + main() diff --git a/examples/pubsub-streaming/subscriber.py b/examples/pubsub-streaming/subscriber.py new file mode 100644 index 00000000..88744c88 --- /dev/null +++ b/examples/pubsub-streaming/subscriber.py @@ -0,0 +1,76 @@ +import argparse +import time + +from dapr.clients import DaprClient +from dapr.clients.grpc.subscription import StreamInactiveError +from dapr.common.pubsub.subscription import StreamCancelledError + +counter = 0 + +parser = argparse.ArgumentParser(description='Publish events to a Dapr pub/sub topic.') +parser.add_argument('--topic', type=str, required=True, help='The topic name to publish to.') +args = parser.parse_args() + +topic_name = args.topic +dlq_topic_name = topic_name + '_DEAD' + + +def process_message(message): + global counter + counter += 1 + # Process the message here + print(f'Processing message: {message.data()} from {message.topic()}...') + return 'success' + + +def main(): + with DaprClient() as client: + global counter + + try: + subscription = client.subscribe( + pubsub_name='pubsub', topic=topic_name, dead_letter_topic=dlq_topic_name + ) + except Exception as e: + print(f'Error occurred: {e}') + return + + try: + while counter < 5: + try: + message = subscription.next_message() + if message is None: + print( + 'No message received within timeout period. ' + 'The stream might have been cancelled.' + ) + continue + + except StreamInactiveError as e: + print('Stream is inactive. Retrying...') + time.sleep(1) + continue + except StreamCancelledError as e: + print('Stream was cancelled') + break + except Exception as e: + print(f'Error occurred: {e}') + pass + + # Process the message + response_status = process_message(message) + + if response_status == 'success': + subscription.respond_success(message) + elif response_status == 'retry': + subscription.respond_retry(message) + elif response_status == 'drop': + subscription.respond_drop(message) + + finally: + print('Closing subscription...') + subscription.close() + + +if __name__ == '__main__': + main() diff --git a/tests/clients/fake_dapr_server.py b/tests/clients/fake_dapr_server.py index d2f57a82..9ae39aa1 100644 --- a/tests/clients/fake_dapr_server.py +++ b/tests/clients/fake_dapr_server.py @@ -3,11 +3,12 @@ from concurrent import futures from google.protobuf.any_pb2 import Any as GrpcAny -from google.protobuf import empty_pb2 +from google.protobuf import empty_pb2, struct_pb2 +from google.rpc import status_pb2, code_pb2 from grpc_status import rpc_status from dapr.clients.grpc._helpers import to_bytes -from dapr.proto import api_service_v1, common_v1, api_v1 +from dapr.proto import api_service_v1, common_v1, api_v1, appcallback_v1 from dapr.proto.common.v1.common_pb2 import ConfigurationItem from dapr.clients.grpc._response import WorkflowRuntimeStatus from dapr.proto.runtime.v1.dapr_pb2 import ( @@ -177,6 +178,58 @@ def PublishEvent(self, request, context): context.set_trailing_metadata(trailers) return empty_pb2.Empty() + def SubscribeTopicEventsAlpha1(self, request_iterator, context): + for request in request_iterator: + if request.HasField('initial_request'): + yield api_v1.SubscribeTopicEventsResponseAlpha1( + initial_response=api_v1.SubscribeTopicEventsResponseInitialAlpha1() + ) + break + + extensions = struct_pb2.Struct() + extensions.update({'field1': 'value1', 'field2': 42, 'field3': True}) + + msg1 = appcallback_v1.TopicEventRequest( + id='111', + topic='TOPIC_A', + data=b'hello2', + source='app1', + data_content_type='text/plain', + type='com.example.type2', + pubsub_name='pubsub', + spec_version='1.0', + extensions=extensions, + ) + yield api_v1.SubscribeTopicEventsResponseAlpha1(event_message=msg1) + + for request in request_iterator: + if request.HasField('event_processed'): + break + + msg2 = appcallback_v1.TopicEventRequest( + id='222', + topic='TOPIC_A', + data=b'{"a": 1}', + source='app1', + data_content_type='application/json', + type='com.example.type2', + pubsub_name='pubsub', + spec_version='1.0', + extensions=extensions, + ) + yield api_v1.SubscribeTopicEventsResponseAlpha1(event_message=msg2) + + for request in request_iterator: + if request.HasField('event_processed'): + break + + # On the third message simulate a disconnection + context.abort_with_status( + rpc_status.to_status( + status_pb2.Status(code=code_pb2.UNAVAILABLE, message='Simulated disconnection') + ) + ) + def SaveState(self, request, context): self.check_for_exception(context) diff --git a/tests/clients/test_dapr_grpc_client.py b/tests/clients/test_dapr_grpc_client.py index 1ddb8bc2..d3eab236 100644 --- a/tests/clients/test_dapr_grpc_client.py +++ b/tests/clients/test_dapr_grpc_client.py @@ -16,6 +16,7 @@ import json import socket import tempfile +import time import unittest import uuid import asyncio @@ -27,6 +28,7 @@ from dapr.clients.exceptions import DaprGrpcError from dapr.clients.grpc.client import DaprGrpcClient from dapr.clients import DaprClient +from dapr.clients.grpc.subscription import StreamInactiveError from dapr.proto import common_v1 from .fake_dapr_server import FakeDaprSidecar from dapr.conf import settings @@ -40,6 +42,7 @@ ConfigurationWatcher, UnlockResponseStatus, WorkflowRuntimeStatus, + TopicEventResponse, ) @@ -262,6 +265,128 @@ def test_publish_error(self): data=111, ) + def test_subscribe_topic(self): + # The fake server we're using sends two messages and then closes the stream + # The client should be able to read both messages, handle the stream closure and reconnect + # which will result in reading the same two messages again. + # That's why message 3 should be the same as message 1 + dapr = DaprGrpcClient(f'{self.scheme}localhost:{self.grpc_port}') + subscription = dapr.subscribe(pubsub_name='pubsub', topic='example') + + # First message - text + message1 = subscription.next_message() + subscription.respond_success(message1) + + self.assertEqual('111', message1.id()) + self.assertEqual('app1', message1.source()) + self.assertEqual('com.example.type2', message1.type()) + self.assertEqual('1.0', message1.spec_version()) + self.assertEqual('text/plain', message1.data_content_type()) + self.assertEqual('TOPIC_A', message1.topic()) + self.assertEqual('pubsub', message1.pubsub_name()) + self.assertEqual(b'hello2', message1.raw_data()) + self.assertEqual('text/plain', message1.data_content_type()) + self.assertEqual('hello2', message1.data()) + + # Second message - json + message2 = subscription.next_message() + subscription.respond_success(message2) + + self.assertEqual('222', message2.id()) + self.assertEqual('app1', message2.source()) + self.assertEqual('com.example.type2', message2.type()) + self.assertEqual('1.0', message2.spec_version()) + self.assertEqual('TOPIC_A', message2.topic()) + self.assertEqual('pubsub', message2.pubsub_name()) + self.assertEqual(b'{"a": 1}', message2.raw_data()) + self.assertEqual('application/json', message2.data_content_type()) + self.assertEqual({'a': 1}, message2.data()) + + # On this call the stream will be closed and return an error, so the message will be none + # but the client will try to reconnect + message3 = subscription.next_message() + self.assertIsNone(message3) + + # The client already reconnected and will start reading the messages again + # Since we're working with a fake server, the messages will be the same + message4 = subscription.next_message() + subscription.respond_success(message4) + self.assertEqual('111', message4.id()) + self.assertEqual('app1', message4.source()) + self.assertEqual('com.example.type2', message4.type()) + self.assertEqual('1.0', message4.spec_version()) + self.assertEqual('text/plain', message4.data_content_type()) + self.assertEqual('TOPIC_A', message4.topic()) + self.assertEqual('pubsub', message4.pubsub_name()) + self.assertEqual(b'hello2', message4.raw_data()) + self.assertEqual('text/plain', message4.data_content_type()) + self.assertEqual('hello2', message4.data()) + + subscription.close() + + def test_subscribe_topic_early_close(self): + dapr = DaprGrpcClient(f'{self.scheme}localhost:{self.grpc_port}') + subscription = dapr.subscribe(pubsub_name='pubsub', topic='example') + subscription.close() + + with self.assertRaises(StreamInactiveError): + subscription.next_message() + + def test_subscribe_topic_with_handler(self): + # The fake server we're using sends two messages and then closes the stream + # The client should be able to read both messages, handle the stream closure and reconnect + # which will result in reading the same two messages again. + # That's why message 3 should be the same as message 1 + dapr = DaprGrpcClient(f'{self.scheme}localhost:{self.grpc_port}') + counter = 0 + + def handler(message): + nonlocal counter + if counter == 0: + self.assertEqual('111', message.id()) + self.assertEqual('app1', message.source()) + self.assertEqual('com.example.type2', message.type()) + self.assertEqual('1.0', message.spec_version()) + self.assertEqual('text/plain', message.data_content_type()) + self.assertEqual('TOPIC_A', message.topic()) + self.assertEqual('pubsub', message.pubsub_name()) + self.assertEqual(b'hello2', message.raw_data()) + self.assertEqual('text/plain', message.data_content_type()) + self.assertEqual('hello2', message.data()) + elif counter == 1: + self.assertEqual('222', message.id()) + self.assertEqual('app1', message.source()) + self.assertEqual('com.example.type2', message.type()) + self.assertEqual('1.0', message.spec_version()) + self.assertEqual('TOPIC_A', message.topic()) + self.assertEqual('pubsub', message.pubsub_name()) + self.assertEqual(b'{"a": 1}', message.raw_data()) + self.assertEqual('application/json', message.data_content_type()) + self.assertEqual({'a': 1}, message.data()) + elif counter == 2: + self.assertEqual('111', message.id()) + self.assertEqual('app1', message.source()) + self.assertEqual('com.example.type2', message.type()) + self.assertEqual('1.0', message.spec_version()) + self.assertEqual('text/plain', message.data_content_type()) + self.assertEqual('TOPIC_A', message.topic()) + self.assertEqual('pubsub', message.pubsub_name()) + self.assertEqual(b'hello2', message.raw_data()) + self.assertEqual('text/plain', message.data_content_type()) + self.assertEqual('hello2', message.data()) + + counter += 1 + + return TopicEventResponse('success') + + close_fn = dapr.subscribe_with_handler( + pubsub_name='pubsub', topic='example', handler_fn=handler + ) + + while counter < 3: + time.sleep(0.1) # Use sleep to prevent a busy-wait loop + close_fn() + @patch.object(settings, 'DAPR_API_TOKEN', 'test-token') def test_dapr_api_token_insertion(self): dapr = DaprGrpcClient(f'{self.scheme}localhost:{self.grpc_port}') diff --git a/tests/clients/test_dapr_grpc_client_async.py b/tests/clients/test_dapr_grpc_client_async.py index 8099e3ab..f15a2d1a 100644 --- a/tests/clients/test_dapr_grpc_client_async.py +++ b/tests/clients/test_dapr_grpc_client_async.py @@ -12,13 +12,11 @@ See the License for the specific language governing permissions and limitations under the License. """ - import json import socket import tempfile import unittest import uuid - from unittest.mock import patch from google.rpc import status_pb2, code_pb2 @@ -26,6 +24,7 @@ from dapr.aio.clients.grpc.client import DaprGrpcClientAsync from dapr.aio.clients import DaprClient from dapr.clients.exceptions import DaprGrpcError +from dapr.common.pubsub.subscription import StreamInactiveError from dapr.proto import common_v1 from .fake_dapr_server import FakeDaprSidecar from dapr.conf import settings @@ -262,6 +261,128 @@ async def test_publish_error(self): data=111, ) + async def test_subscribe_topic(self): + # The fake server we're using sends two messages and then closes the stream + # The client should be able to read both messages, handle the stream closure and reconnect + # which will result in reading the same two messages again. + # That's why message 3 should be the same as message 1 + dapr = DaprGrpcClientAsync(f'{self.scheme}localhost:{self.grpc_port}') + subscription = await dapr.subscribe(pubsub_name='pubsub', topic='example') + + # First message - text + message1 = await subscription.next_message() + await subscription.respond_success(message1) + + self.assertEqual('111', message1.id()) + self.assertEqual('app1', message1.source()) + self.assertEqual('com.example.type2', message1.type()) + self.assertEqual('1.0', message1.spec_version()) + self.assertEqual('text/plain', message1.data_content_type()) + self.assertEqual('TOPIC_A', message1.topic()) + self.assertEqual('pubsub', message1.pubsub_name()) + self.assertEqual(b'hello2', message1.raw_data()) + self.assertEqual('text/plain', message1.data_content_type()) + self.assertEqual('hello2', message1.data()) + + # Second message - json + message2 = await subscription.next_message() + await subscription.respond_success(message2) + + self.assertEqual('222', message2.id()) + self.assertEqual('app1', message2.source()) + self.assertEqual('com.example.type2', message2.type()) + self.assertEqual('1.0', message2.spec_version()) + self.assertEqual('TOPIC_A', message2.topic()) + self.assertEqual('pubsub', message2.pubsub_name()) + self.assertEqual(b'{"a": 1}', message2.raw_data()) + self.assertEqual('application/json', message2.data_content_type()) + self.assertEqual({'a': 1}, message2.data()) + + # On this call the stream will be closed and return an error, so the message will be none + # but the client will try to reconnect + message3 = await subscription.next_message() + self.assertIsNone(message3) + + # # The client already reconnected and will start reading the messages again + # # Since we're working with a fake server, the messages will be the same + message4 = await subscription.next_message() + await subscription.respond_success(message4) + self.assertEqual('111', message4.id()) + self.assertEqual('app1', message4.source()) + self.assertEqual('com.example.type2', message4.type()) + self.assertEqual('1.0', message4.spec_version()) + self.assertEqual('text/plain', message4.data_content_type()) + self.assertEqual('TOPIC_A', message4.topic()) + self.assertEqual('pubsub', message4.pubsub_name()) + self.assertEqual(b'hello2', message4.raw_data()) + self.assertEqual('text/plain', message4.data_content_type()) + self.assertEqual('hello2', message4.data()) + + await subscription.close() + + async def test_subscribe_topic_early_close(self): + dapr = DaprGrpcClientAsync(f'{self.scheme}localhost:{self.grpc_port}') + subscription = await dapr.subscribe(pubsub_name='pubsub', topic='example') + await subscription.close() + + with self.assertRaises(StreamInactiveError): + await subscription.next_message() + + # async def test_subscribe_topic_with_handler(self): + # # The fake server we're using sends two messages and then closes the stream + # # The client should be able to read both messages, handle the stream closure and reconnect + # # which will result in reading the same two messages again. + # # That's why message 3 should be the same as message 1 + # dapr = DaprGrpcClientAsync(f'{self.scheme}localhost:{self.grpc_port}') + # counter = 0 + # + # async def handler(message): + # nonlocal counter + # if counter == 0: + # self.assertEqual('111', message.id()) + # self.assertEqual('app1', message.source()) + # self.assertEqual('com.example.type2', message.type()) + # self.assertEqual('1.0', message.spec_version()) + # self.assertEqual('text/plain', message.data_content_type()) + # self.assertEqual('TOPIC_A', message.topic()) + # self.assertEqual('pubsub', message.pubsub_name()) + # self.assertEqual(b'hello2', message.raw_data()) + # self.assertEqual('text/plain', message.data_content_type()) + # self.assertEqual('hello2', message.data()) + # elif counter == 1: + # self.assertEqual('222', message.id()) + # self.assertEqual('app1', message.source()) + # self.assertEqual('com.example.type2', message.type()) + # self.assertEqual('1.0', message.spec_version()) + # self.assertEqual('TOPIC_A', message.topic()) + # self.assertEqual('pubsub', message.pubsub_name()) + # self.assertEqual(b'{"a": 1}', message.raw_data()) + # self.assertEqual('application/json', message.data_content_type()) + # self.assertEqual({'a': 1}, message.data()) + # elif counter == 2: + # self.assertEqual('111', message.id()) + # self.assertEqual('app1', message.source()) + # self.assertEqual('com.example.type2', message.type()) + # self.assertEqual('1.0', message.spec_version()) + # self.assertEqual('text/plain', message.data_content_type()) + # self.assertEqual('TOPIC_A', message.topic()) + # self.assertEqual('pubsub', message.pubsub_name()) + # self.assertEqual(b'hello2', message.raw_data()) + # self.assertEqual('text/plain', message.data_content_type()) + # self.assertEqual('hello2', message.data()) + # + # counter += 1 + # + # return TopicEventResponse("success") + # + # close_fn = await dapr.subscribe_with_handler( + # pubsub_name='pubsub', topic='example', handler_fn=handler + # ) + # + # while counter < 3: + # await asyncio.sleep(0.1) # sleep to prevent a busy loop + # await close_fn() + @patch.object(settings, 'DAPR_API_TOKEN', 'test-token') async def test_dapr_api_token_insertion(self): dapr = DaprGrpcClientAsync(f'{self.scheme}localhost:{self.grpc_port}') diff --git a/tests/clients/test_subscription.py b/tests/clients/test_subscription.py new file mode 100644 index 00000000..ed2eae3f --- /dev/null +++ b/tests/clients/test_subscription.py @@ -0,0 +1,109 @@ +from dapr.clients.grpc.subscription import SubscriptionMessage +from dapr.proto.runtime.v1.appcallback_pb2 import TopicEventRequest +from google.protobuf.struct_pb2 import Struct + +import unittest + + +class SubscriptionMessageTests(unittest.TestCase): + def test_subscription_message_init_raw_text(self): + extensions = Struct() + extensions['field1'] = 'value1' + extensions['field2'] = 42 + extensions['field3'] = True + + msg = TopicEventRequest( + id='id', + data=b'hello', + data_content_type='text/plain', + topic='topicA', + pubsub_name='pubsub_name', + source='source', + type='type', + spec_version='spec_version', + path='path', + extensions=extensions, + ) + subscription_message = SubscriptionMessage(msg=msg) + + self.assertEqual('id', subscription_message.id()) + self.assertEqual('source', subscription_message.source()) + self.assertEqual('type', subscription_message.type()) + self.assertEqual('spec_version', subscription_message.spec_version()) + self.assertEqual('text/plain', subscription_message.data_content_type()) + self.assertEqual('topicA', subscription_message.topic()) + self.assertEqual('pubsub_name', subscription_message.pubsub_name()) + self.assertEqual(b'hello', subscription_message.raw_data()) + self.assertEqual('hello', subscription_message.data()) + self.assertEqual( + {'field1': 'value1', 'field2': 42, 'field3': True}, subscription_message.extensions() + ) + + def test_subscription_message_init_raw_text_non_utf(self): + msg = TopicEventRequest( + id='id', + data=b'\x80\x81\x82', + data_content_type='text/plain', + topic='topicA', + pubsub_name='pubsub_name', + source='source', + type='type', + spec_version='spec_version', + path='path', + ) + subscription_message = SubscriptionMessage(msg=msg) + + self.assertEqual(b'\x80\x81\x82', subscription_message.raw_data()) + self.assertIsNone(subscription_message.data()) + + def test_subscription_message_init_json(self): + msg = TopicEventRequest( + id='id', + data=b'{"a": 1}', + data_content_type='application/json', + topic='topicA', + pubsub_name='pubsub_name', + source='source', + type='type', + spec_version='spec_version', + path='path', + ) + subscription_message = SubscriptionMessage(msg=msg) + + self.assertEqual(b'{"a": 1}', subscription_message.raw_data()) + self.assertEqual({'a': 1}, subscription_message.data()) + print(subscription_message.data()['a']) + + def test_subscription_message_init_json_faimly(self): + msg = TopicEventRequest( + id='id', + data=b'{"a": 1}', + data_content_type='application/vnd.api+json', + topic='topicA', + pubsub_name='pubsub_name', + source='source', + type='type', + spec_version='spec_version', + path='path', + ) + subscription_message = SubscriptionMessage(msg=msg) + + self.assertEqual(b'{"a": 1}', subscription_message.raw_data()) + self.assertEqual({'a': 1}, subscription_message.data()) + + def test_subscription_message_init_unknown_content_type(self): + msg = TopicEventRequest( + id='id', + data=b'{"a": 1}', + data_content_type='unknown/content-type', + topic='topicA', + pubsub_name='pubsub_name', + source='source', + type='type', + spec_version='spec_version', + path='path', + ) + subscription_message = SubscriptionMessage(msg=msg) + + self.assertEqual(b'{"a": 1}', subscription_message.raw_data()) + self.assertIsNone(subscription_message.data()) diff --git a/tools/requirements.txt b/tools/requirements.txt index d0503c99..d3d503c9 100644 --- a/tools/requirements.txt +++ b/tools/requirements.txt @@ -1 +1 @@ -grpcio-tools>=1.49 +grpcio-tools>=1.57.0 diff --git a/tox.ini b/tox.ini index e7f9a672..78f23086 100644 --- a/tox.ini +++ b/tox.ini @@ -50,6 +50,8 @@ commands = ./validate.sh metadata ./validate.sh error_handling ./validate.sh pubsub-simple + ./validate.sh pubsub-streaming + ./validate.sh pubsub-streaming-async ./validate.sh state_store ./validate.sh state_store_query ./validate.sh secret_store From 4802cf078625c7a660dd7df0c76666961ec76156 Mon Sep 17 00:00:00 2001 From: Elena Kolevska Date: Mon, 11 Nov 2024 16:34:09 +0000 Subject: [PATCH 04/38] Makes streaming Subscription iterable (#751) * Make Streaming Subscription iterable Signed-off-by: Elena Kolevska * Adds iter for async client Signed-off-by: Elena Kolevska * linter and updates docs Signed-off-by: Elena Kolevska --------- Signed-off-by: Elena Kolevska --- dapr/aio/clients/grpc/client.py | 15 +++--- dapr/aio/clients/grpc/subscription.py | 7 +++ dapr/clients/grpc/client.py | 22 +++++---- dapr/clients/grpc/subscription.py | 6 +++ .../en/python-sdk-docs/python-client.md | 47 ++++++++++--------- .../subscriber-handler.py | 2 +- examples/pubsub-streaming-async/subscriber.py | 42 +++++++++-------- .../pubsub-streaming/subscriber-handler.py | 2 +- examples/pubsub-streaming/subscriber.py | 44 ++++++++--------- 9 files changed, 105 insertions(+), 82 deletions(-) diff --git a/dapr/aio/clients/grpc/client.py b/dapr/aio/clients/grpc/client.py index 2b40101c..e4d4e902 100644 --- a/dapr/aio/clients/grpc/client.py +++ b/dapr/aio/clients/grpc/client.py @@ -534,13 +534,14 @@ async def subscribe_with_handler( async def stream_messages(sub: Subscription): while True: try: - message = await sub.next_message() - if message: - response = await handler_fn(message) - if response: - await subscription.respond(message, response.status) - else: - continue + async for message in subscription: + if message: + response = await handler_fn(message) + if response: + await subscription.respond(message, response.status) + else: + continue + except StreamInactiveError: break diff --git a/dapr/aio/clients/grpc/subscription.py b/dapr/aio/clients/grpc/subscription.py index a526ee86..9aabf8b2 100644 --- a/dapr/aio/clients/grpc/subscription.py +++ b/dapr/aio/clients/grpc/subscription.py @@ -114,3 +114,10 @@ async def close(self): raise Exception(f'Error while closing stream: {e}') except Exception as e: raise Exception(f'Error while closing stream: {e}') + + def __aiter__(self): + """Make the subscription async iterable.""" + return self + + async def __anext__(self): + return await self.next_message() diff --git a/dapr/clients/grpc/client.py b/dapr/clients/grpc/client.py index 94793907..19f4a3df 100644 --- a/dapr/clients/grpc/client.py +++ b/dapr/clients/grpc/client.py @@ -45,6 +45,7 @@ from dapr.clients.grpc.interceptors import DaprClientInterceptor, DaprClientTimeoutInterceptor from dapr.clients.health import DaprHealth from dapr.clients.retry import RetryPolicy +from dapr.common.pubsub.subscription import StreamCancelledError from dapr.conf import settings from dapr.proto import api_v1, api_service_v1, common_v1 from dapr.proto.runtime.v1.dapr_pb2 import UnsubscribeConfigurationResponse @@ -535,17 +536,20 @@ def subscribe_with_handler( def stream_messages(sub): while True: try: - message = sub.next_message() - if message: - # Process the message - response = handler_fn(message) - if response: - subscription.respond(message, response.status) - else: - # No message received - continue + for message in sub: + if message: + # Process the message + response = handler_fn(message) + if response: + subscription.respond(message, response.status) + else: + # No message received + continue + except StreamInactiveError: break + except StreamCancelledError: + break def close_subscription(): subscription.close() diff --git a/dapr/clients/grpc/subscription.py b/dapr/clients/grpc/subscription.py index d67bed9d..6022d618 100644 --- a/dapr/clients/grpc/subscription.py +++ b/dapr/clients/grpc/subscription.py @@ -143,3 +143,9 @@ def close(self): raise Exception(f'Error while closing stream: {e}') except Exception as e: raise Exception(f'Error while closing stream: {e}') + + def __iter__(self): + return self + + def __next__(self): + return self.next_message() diff --git a/daprdocs/content/en/python-sdk-docs/python-client.md b/daprdocs/content/en/python-sdk-docs/python-client.md index b4e92a9b..fc6ef496 100644 --- a/daprdocs/content/en/python-sdk-docs/python-client.md +++ b/daprdocs/content/en/python-sdk-docs/python-client.md @@ -260,8 +260,8 @@ def mytopic_important(event: v1.Event) -> None: You can create a streaming subscription to a PubSub topic using either the `subscribe` or `subscribe_handler` methods. -The `subscribe` method returns a `Subscription` object, which allows you to pull messages from the -stream by +The `subscribe` method returns an iterable `Subscription` object, which allows you to pull messages from the +stream by using a `for` loop (ex. `for message in subscription`) or by calling the `next_message` method. This will block on the main thread while waiting for messages. When done, you should call the close method to terminate the subscription and stop receiving messages. @@ -281,7 +281,7 @@ Here's an example of using the `subscribe` method: import time from dapr.clients import DaprClient -from dapr.clients.grpc.subscription import StreamInactiveError +from dapr.clients.grpc.subscription import StreamInactiveError, StreamCancelledError counter = 0 @@ -303,30 +303,35 @@ def main(): ) try: - while counter < 5: - try: - message = subscription.next_message() + for message in subscription: + if message is None: + print('No message received. The stream might have been cancelled.') + continue - except StreamInactiveError as e: + try: + response_status = process_message(message) + + if response_status == 'success': + subscription.respond_success(message) + elif response_status == 'retry': + subscription.respond_retry(message) + elif response_status == 'drop': + subscription.respond_drop(message) + + if counter >= 5: + break + except StreamInactiveError: print('Stream is inactive. Retrying...') time.sleep(1) continue - if message is None: - print('No message received within timeout period.') - continue - - # Process the message - response_status = process_message(message) - - if response_status == 'success': - subscription.respond_success(message) - elif response_status == 'retry': - subscription.respond_retry(message) - elif response_status == 'drop': - subscription.respond_drop(message) + except StreamCancelledError: + print('Stream was cancelled') + break + except Exception as e: + print(f'Error occurred during message processing: {e}') finally: - print("Closing subscription...") + print('Closing subscription...') subscription.close() diff --git a/examples/pubsub-streaming-async/subscriber-handler.py b/examples/pubsub-streaming-async/subscriber-handler.py index 34129ee7..06a492af 100644 --- a/examples/pubsub-streaming-async/subscriber-handler.py +++ b/examples/pubsub-streaming-async/subscriber-handler.py @@ -18,7 +18,7 @@ async def process_message(message) -> TopicEventResponse: Asynchronously processes the message and returns a TopicEventResponse. """ - print(f'Processing message: {message.data()} from {message.topic()}...') + print(f'Processing message: {message.data()} from {message.topic()}...', flush=True) global counter counter += 1 return TopicEventResponse('success') diff --git a/examples/pubsub-streaming-async/subscriber.py b/examples/pubsub-streaming-async/subscriber.py index 7907bb5f..de51a797 100644 --- a/examples/pubsub-streaming-async/subscriber.py +++ b/examples/pubsub-streaming-async/subscriber.py @@ -19,7 +19,7 @@ def process_message(message): global counter counter += 1 # Process the message here - print(f'Processing message: {message.data()} from {message.topic()}...') + print(f'Processing message: {message.data()} from {message.topic()}...', flush=True) return 'success' @@ -31,32 +31,36 @@ async def main(): ) try: - while counter < 5: + async for message in subscription: + if message is None: + print( + 'No message received within timeout period. ' + 'The stream might have been cancelled.' + ) + continue + try: - message = await subscription.next_message() - if message is None: - print( - 'No message received within timeout period. ' - 'The stream might have been cancelled.' - ) - continue + # Process the message + response_status = process_message(message) + + # Respond based on the processing result + if response_status == 'success': + await subscription.respond_success(message) + elif response_status == 'retry': + await subscription.respond_retry(message) + elif response_status == 'drop': + await subscription.respond_drop(message) + + if counter >= 5: + break except StreamInactiveError: print('Stream is inactive. Retrying...') await asyncio.sleep(1) continue - except StreamCancelledError as e: + except StreamCancelledError: print('Stream was cancelled') break - # Process the message - response_status = process_message(message) - - if response_status == 'success': - await subscription.respond_success(message) - elif response_status == 'retry': - await subscription.respond_retry(message) - elif response_status == 'drop': - await subscription.respond_drop(message) finally: print('Closing subscription...') diff --git a/examples/pubsub-streaming/subscriber-handler.py b/examples/pubsub-streaming/subscriber-handler.py index 3a963fd2..c7aac318 100644 --- a/examples/pubsub-streaming/subscriber-handler.py +++ b/examples/pubsub-streaming/subscriber-handler.py @@ -18,7 +18,7 @@ def process_message(message): # Process the message here global counter counter += 1 - print(f'Processing message: {message.data()} from {message.topic()}...') + print(f'Processing message: {message.data()} from {message.topic()}...', flush=True) return TopicEventResponse('success') diff --git a/examples/pubsub-streaming/subscriber.py b/examples/pubsub-streaming/subscriber.py index 88744c88..50e64c13 100644 --- a/examples/pubsub-streaming/subscriber.py +++ b/examples/pubsub-streaming/subscriber.py @@ -19,7 +19,7 @@ def process_message(message): global counter counter += 1 # Process the message here - print(f'Processing message: {message.data()} from {message.topic()}...') + print(f'Processing message: {message.data()} from {message.topic()}...', flush=True) return 'success' @@ -36,36 +36,32 @@ def main(): return try: - while counter < 5: + for message in subscription: + if message is None: + print('No message received. The stream might have been cancelled.') + continue + try: - message = subscription.next_message() - if message is None: - print( - 'No message received within timeout period. ' - 'The stream might have been cancelled.' - ) - continue - - except StreamInactiveError as e: + response_status = process_message(message) + + if response_status == 'success': + subscription.respond_success(message) + elif response_status == 'retry': + subscription.respond_retry(message) + elif response_status == 'drop': + subscription.respond_drop(message) + + if counter >= 5: + break + except StreamInactiveError: print('Stream is inactive. Retrying...') time.sleep(1) continue - except StreamCancelledError as e: + except StreamCancelledError: print('Stream was cancelled') break except Exception as e: - print(f'Error occurred: {e}') - pass - - # Process the message - response_status = process_message(message) - - if response_status == 'success': - subscription.respond_success(message) - elif response_status == 'retry': - subscription.respond_retry(message) - elif response_status == 'drop': - subscription.respond_drop(message) + print(f'Error occurred during message processing: {e}') finally: print('Closing subscription...') From 1ebe2e5130c4b426edec746524089abca72814c4 Mon Sep 17 00:00:00 2001 From: Elena Kolevska Date: Thu, 21 Nov 2024 20:28:06 +0000 Subject: [PATCH 05/38] Makes data argument optional on transactional delete (#752) * Makes data argument optional on transactional delete Signed-off-by: Elena Kolevska * linter Signed-off-by: Elena Kolevska * Linter/type check Signed-off-by: Elena Kolevska --------- Signed-off-by: Elena Kolevska Co-authored-by: Bernd Verst Signed-off-by: Elena Kolevska --- dapr/clients/grpc/_request.py | 6 +++--- dapr/clients/grpc/client.py | 2 +- examples/state_store/README.md | 3 +++ examples/state_store/state_store.py | 24 ++++++++++++++++++++++-- tests/clients/test_dapr_grpc_client.py | 19 ++++++++++++++++++- 5 files changed, 47 insertions(+), 7 deletions(-) diff --git a/dapr/clients/grpc/_request.py b/dapr/clients/grpc/_request.py index 0f149e1f..9ad291cf 100644 --- a/dapr/clients/grpc/_request.py +++ b/dapr/clients/grpc/_request.py @@ -281,7 +281,7 @@ class TransactionalStateOperation: def __init__( self, key: str, - data: Union[bytes, str], + data: Optional[Union[bytes, str]] = None, etag: Optional[str] = None, operation_type: TransactionOperationType = TransactionOperationType.upsert, ): @@ -297,7 +297,7 @@ def __init__( Raises: ValueError: data is not bytes or str. """ - if not isinstance(data, (bytes, str)): + if operation_type != TransactionOperationType.delete and not isinstance(data, (bytes, str)): raise ValueError(f'invalid type for data {type(data)}') self._key = key @@ -311,7 +311,7 @@ def key(self) -> str: return self._key @property - def data(self) -> Union[bytes, str]: + def data(self) -> Union[bytes, str, None]: """Gets raw data.""" return self._data diff --git a/dapr/clients/grpc/client.py b/dapr/clients/grpc/client.py index 19f4a3df..4aa75b55 100644 --- a/dapr/clients/grpc/client.py +++ b/dapr/clients/grpc/client.py @@ -933,7 +933,7 @@ def execute_state_transaction( operationType=o.operation_type.value, request=common_v1.StateItem( key=o.key, - value=to_bytes(o.data), + value=to_bytes(o.data) if o.data is not None else to_bytes(''), etag=common_v1.Etag(value=o.etag) if o.etag is not None else None, ), ) diff --git a/examples/state_store/README.md b/examples/state_store/README.md index 7c323873..67ea5791 100644 --- a/examples/state_store/README.md +++ b/examples/state_store/README.md @@ -41,6 +41,7 @@ expected_stdout_lines: - "== APP == Cannot save bulk due to bad etags. ErrorCode=StatusCode.ABORTED" - "== APP == Got value=b'value_1' eTag=1" - "== APP == Got items with etags: [(b'value_1_updated', '2'), (b'value_2', '2')]" + - "== APP == Got values after transaction delete: [b'', b'']" - "== APP == Got value after delete: b''" timeout_seconds: 5 --> @@ -67,6 +68,8 @@ The output should be as follows: == APP == Got items with etags: [(b'value_1_updated', '2'), (b'value_2', '2')] +== APP == Got values after transaction delete: [b'', b''] + == APP == Got value after delete: b'' ``` diff --git a/examples/state_store/state_store.py b/examples/state_store/state_store.py index f87167f5..a7b449d6 100644 --- a/examples/state_store/state_store.py +++ b/examples/state_store/state_store.py @@ -78,6 +78,7 @@ etag=state.etag, ), TransactionalStateOperation(key=another_key, data=another_value), + TransactionalStateOperation(key=yet_another_key, data=yet_another_value), ], ) @@ -87,7 +88,26 @@ ).items print(f'Got items with etags: {[(i.data, i.etag) for i in items]}') + # Transaction delete + d.execute_state_transaction( + store_name=storeName, + operations=[ + TransactionalStateOperation(operation_type=TransactionOperationType.delete, key=key), + TransactionalStateOperation( + operation_type=TransactionOperationType.delete, key=another_key + ), + ], + ) + + # Batch get + items = d.get_bulk_state( + store_name=storeName, keys=[key, another_key], states_metadata={'metakey': 'metavalue'} + ).items + print(f'Got values after transaction delete: {[data.data for data in items]}') + # Delete one state by key. - d.delete_state(store_name=storeName, key=key, state_metadata={'metakey': 'metavalue'}) - data = d.get_state(store_name=storeName, key=key).data + d.delete_state( + store_name=storeName, key=yet_another_key, state_metadata={'metakey': 'metavalue'} + ) + data = d.get_state(store_name=storeName, key=yet_another_key).data print(f'Got value after delete: {data}') diff --git a/tests/clients/test_dapr_grpc_client.py b/tests/clients/test_dapr_grpc_client.py index d3eab236..ad90d8cc 100644 --- a/tests/clients/test_dapr_grpc_client.py +++ b/tests/clients/test_dapr_grpc_client.py @@ -33,7 +33,7 @@ from .fake_dapr_server import FakeDaprSidecar from dapr.conf import settings from dapr.clients.grpc._helpers import to_bytes -from dapr.clients.grpc._request import TransactionalStateOperation +from dapr.clients.grpc._request import TransactionalStateOperation, TransactionOperationType from dapr.clients.grpc._state import StateOptions, Consistency, Concurrency, StateItem from dapr.clients.grpc._crypto import EncryptOptions, DecryptOptions from dapr.clients.grpc._response import ( @@ -508,6 +508,23 @@ def test_transaction_then_get_states(self): self.assertEqual(resp.items[1].key, another_key) self.assertEqual(resp.items[1].data, to_bytes(another_value.upper())) + dapr.execute_state_transaction( + store_name='statestore', + operations=[ + TransactionalStateOperation( + key=key, operation_type=TransactionOperationType.delete + ), + TransactionalStateOperation( + key=another_key, operation_type=TransactionOperationType.delete + ), + ], + ) + resp = dapr.get_state(store_name='statestore', key=key) + self.assertEqual(resp.data, b'') + + resp = dapr.get_state(store_name='statestore', key=another_key) + self.assertEqual(resp.data, b'') + self._fake_dapr_server.raise_exception_on_next_call( status_pb2.Status(code=code_pb2.INVALID_ARGUMENT, message='my invalid argument message') ) From 1947d49a95059920b42d3180d09c571bcc32c5dd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 21 Nov 2024 12:28:44 -0800 Subject: [PATCH 06/38] Bump codecov/codecov-action from 4 to 5 (#753) Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 4 to 5. - [Release notes](https://github.com/codecov/codecov-action/releases) - [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/codecov/codecov-action/compare/v4...v5) --- updated-dependencies: - dependency-name: codecov/codecov-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Signed-off-by: Elena Kolevska --- .github/workflows/build-push-to-main.yaml | 2 +- .github/workflows/build-tag.yaml | 2 +- .github/workflows/build.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-push-to-main.yaml b/.github/workflows/build-push-to-main.yaml index 4b1382fa..f176144a 100644 --- a/.github/workflows/build-push-to-main.yaml +++ b/.github/workflows/build-push-to-main.yaml @@ -58,7 +58,7 @@ jobs: run: | tox -e py`echo "${{ matrix.python_ver }}" | sed 's/\.//g'` - name: Upload test coverage - uses: codecov/codecov-action@v4 + uses: codecov/codecov-action@v5 publish: needs: build if: github.event_name != 'pull_request' diff --git a/.github/workflows/build-tag.yaml b/.github/workflows/build-tag.yaml index 99bdb1c3..24628f55 100644 --- a/.github/workflows/build-tag.yaml +++ b/.github/workflows/build-tag.yaml @@ -61,7 +61,7 @@ jobs: run: | tox -e py`echo "${{ matrix.python_ver }}" | sed 's/\.//g'` - name: Upload test coverage - uses: codecov/codecov-action@v4 + uses: codecov/codecov-action@v5 publish: needs: build if: github.event_name != 'pull_request' diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 76c6c74d..806c9c88 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -64,4 +64,4 @@ jobs: run: | tox -e py`echo "${{ matrix.python_ver }}" | sed 's/\.//g'` - name: Upload test coverage - uses: codecov/codecov-action@v4 \ No newline at end of file + uses: codecov/codecov-action@v5 \ No newline at end of file From 7881ba3faa1e1114fbfc2c5402ba4a88145a0041 Mon Sep 17 00:00:00 2001 From: Hannah Hunter <94493363+hhunter-ms@users.noreply.github.com> Date: Thu, 19 Dec 2024 10:19:55 -0500 Subject: [PATCH 07/38] remove alpha for workflow stable release (#760) Signed-off-by: Hannah Hunter Signed-off-by: Elena Kolevska --- .../python-workflow-ext/python-workflow.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/daprdocs/content/en/python-sdk-docs/python-sdk-extensions/python-workflow-ext/python-workflow.md b/daprdocs/content/en/python-sdk-docs/python-sdk-extensions/python-workflow-ext/python-workflow.md index 984b2cb8..17f45ec4 100644 --- a/daprdocs/content/en/python-sdk-docs/python-sdk-extensions/python-workflow-ext/python-workflow.md +++ b/daprdocs/content/en/python-sdk-docs/python-sdk-extensions/python-workflow-ext/python-workflow.md @@ -6,10 +6,6 @@ weight: 30000 description: How to get up and running with workflows using the Dapr Python SDK --- -{{% alert title="Note" color="primary" %}} -Dapr Workflow is currently in alpha. -{{% /alert %}} - Let’s create a Dapr workflow and invoke it using the console. With the [provided hello world workflow example](https://github.com/dapr/python-sdk/tree/master/examples/demo_workflow), you will: - Run a [Python console application using `DaprClient`](https://github.com/dapr/python-sdk/blob/master/examples/demo_workflow/app.py) From cd4bd58680d296a31957a660cbe396a47b34f557 Mon Sep 17 00:00:00 2001 From: Eric Searcy Date: Thu, 19 Dec 2024 07:36:44 -0800 Subject: [PATCH 08/38] Replace deprecated tox.ini option (#762) This option was replaced in 2020, deprecated, and eventually removed in tox 4. The correct option already appears elseware in this tox.ini file. This fix is necessary to run `tox -e doc` per the README.md instructions on tox 4. Signed-off-by: Eric Searcy Co-authored-by: Elena Kolevska Signed-off-by: Elena Kolevska --- tox.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tox.ini b/tox.ini index 78f23086..5e7a2539 100644 --- a/tox.ini +++ b/tox.ini @@ -88,7 +88,7 @@ commands_pre = [testenv:doc] basepython = python3 usedevelop = False -whitelist_externals = make +allowlist_externals = make deps = sphinx commands = sphinx-apidoc -E -o docs/actor dapr/actor From cbf836137cc6eacc7c4598401224051994f2108e Mon Sep 17 00:00:00 2001 From: Lorenzo Curcio Date: Thu, 2 Jan 2025 13:25:25 +0100 Subject: [PATCH 09/38] Add Actor Mocks (#750) * Moved files to new branch to avoid weird git bug Signed-off-by: Lorenzo Curcio * requested documentation changes Signed-off-by: Lorenzo Curcio * forgot to move file back to starting point Signed-off-by: Lorenzo Curcio * result of ruff format Signed-off-by: Lorenzo Curcio * fixed minor formatting issues, fixed type issues Signed-off-by: Lorenzo Curcio * minor test fix Signed-off-by: Lorenzo Curcio * fixes try_add_state Signed-off-by: Elena Kolevska Signed-off-by: Lorenzo Curcio * Revert "fixes try_add_state" This reverts commit 254ad17bfb184310b2ceae37c1eb82c947466ce6. Signed-off-by: Lorenzo Curcio * Update dapr/actor/runtime/mock_state_manager.py Fixing bug in try_add_state as mentioned in PR #756 Co-authored-by: Elena Kolevska Signed-off-by: Lorenzo Curcio Signed-off-by: Lorenzo Curcio * Update dapr/actor/runtime/mock_actor.py Whoops missed this Co-authored-by: Elena Kolevska Signed-off-by: Lorenzo Curcio * Update daprdocs/content/en/python-sdk-docs/python-actor.md Co-authored-by: Elena Kolevska Signed-off-by: Lorenzo Curcio * Update daprdocs/content/en/python-sdk-docs/python-actor.md Co-authored-by: Elena Kolevska Signed-off-by: Lorenzo Curcio * Update daprdocs/content/en/python-sdk-docs/python-actor.md Co-authored-by: Elena Kolevska Signed-off-by: Lorenzo Curcio * Update daprdocs/content/en/python-sdk-docs/python-actor.md Co-authored-by: Elena Kolevska Signed-off-by: Lorenzo Curcio * Update daprdocs/content/en/python-sdk-docs/python-actor.md Co-authored-by: Elena Kolevska Signed-off-by: Lorenzo Curcio * Update daprdocs/content/en/python-sdk-docs/python-actor.md Co-authored-by: Elena Kolevska Signed-off-by: Lorenzo Curcio * Update daprdocs/content/en/python-sdk-docs/python-actor.md Co-authored-by: Elena Kolevska Signed-off-by: Lorenzo Curcio * minor error in docs Signed-off-by: Lorenzo Curcio * fixed and added more unit tests. Added example Signed-off-by: Lorenzo Curcio * unittest fix Signed-off-by: Lorenzo Curcio * Update examples/demo_actor/README.md Co-authored-by: Elena Kolevska Signed-off-by: Lorenzo Curcio * concentrated some tests Signed-off-by: Lorenzo Curcio * removed unnecessary type hint Signed-off-by: Lorenzo Curcio * Update daprdocs/content/en/python-sdk-docs/python-actor.md didnt see this earlier whoops Co-authored-by: Elena Kolevska Signed-off-by: Lorenzo Curcio * Update examples/demo_actor/README.md Co-authored-by: Elena Kolevska Signed-off-by: Lorenzo Curcio * documentation changes Signed-off-by: Lorenzo Curcio * now requires #type: ignore Signed-off-by: Lorenzo Curcio * small docs change Signed-off-by: Elena Kolevska * examples test fix Signed-off-by: Elena Kolevska --------- Signed-off-by: Lorenzo Curcio Signed-off-by: Lorenzo Curcio Signed-off-by: Elena Kolevska Co-authored-by: Elena Kolevska Co-authored-by: Lorenzo Curcio Co-authored-by: Elena Kolevska Signed-off-by: Elena Kolevska --- dapr/actor/runtime/mock_actor.py | 122 +++++++ dapr/actor/runtime/mock_state_manager.py | 238 +++++++++++++ dapr/actor/runtime/state_manager.py | 5 +- .../en/python-sdk-docs/python-actor.md | 71 +++- docs/clients/clients.grpc.rst | 31 ++ docs/proto/proto.runtime.rst | 18 + docs/proto/proto.runtime.v1.rst | 37 +++ examples/demo_actor/README.md | 55 +++ .../demo_actor/demo_actor/test_demo_actor.py | 40 +++ tests/actor/test_mock_actor.py | 314 ++++++++++++++++++ tests/actor/test_mock_state_manager.py | 73 ++++ 11 files changed, 1000 insertions(+), 4 deletions(-) create mode 100644 dapr/actor/runtime/mock_actor.py create mode 100644 dapr/actor/runtime/mock_state_manager.py create mode 100644 docs/clients/clients.grpc.rst create mode 100644 docs/proto/proto.runtime.rst create mode 100644 docs/proto/proto.runtime.v1.rst create mode 100644 examples/demo_actor/demo_actor/test_demo_actor.py create mode 100644 tests/actor/test_mock_actor.py create mode 100644 tests/actor/test_mock_state_manager.py diff --git a/dapr/actor/runtime/mock_actor.py b/dapr/actor/runtime/mock_actor.py new file mode 100644 index 00000000..e35baac5 --- /dev/null +++ b/dapr/actor/runtime/mock_actor.py @@ -0,0 +1,122 @@ +""" +Copyright 2023 The Dapr Authors +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +""" + +from __future__ import annotations + +from datetime import timedelta +from typing import Any, Optional, TypeVar + +from dapr.actor.id import ActorId +from dapr.actor.runtime._reminder_data import ActorReminderData +from dapr.actor.runtime._timer_data import TIMER_CALLBACK, ActorTimerData +from dapr.actor.runtime.actor import Actor +from dapr.actor.runtime.mock_state_manager import MockStateManager + + +class MockActor(Actor): + """A mock actor class to be used to override certain Actor methods for unit testing. + To be used only via the create_mock_actor function, which takes in a class and returns a + mock actor object for that class. + + Examples: + class SomeActorInterface(ActorInterface): + @actor_method(name="method") + async def set_state(self, data: dict) -> None: + + class SomeActor(Actor, SomeActorInterface): + async def set_state(self, data: dict) -> None: + await self._state_manager.set_state('state', data) + await self._state_manager.save_state() + + mock_actor = create_mock_actor(SomeActor, "actor_1") + assert mock_actor._state_manager._mock_state == {} + await mock_actor.set_state({"test":10}) + assert mock_actor._state_manager._mock_state == {"test":10} + """ + + def __init__(self, actor_id: str, initstate: Optional[dict]): + self.id = ActorId(actor_id) + self._runtime_ctx = None # type: ignore + self._state_manager = MockStateManager(self, initstate) + + async def register_timer( + self, + name: Optional[str], + callback: TIMER_CALLBACK, + state: Any, + due_time: timedelta, + period: timedelta, + ttl: Optional[timedelta] = None, + ) -> None: + """Adds actor timer to self._state_manager._mock_timers. + Args: + name (str): the name of the timer to register. + callback (Callable): An awaitable callable which will be called when the timer fires. + state (Any): An object which will pass to the callback method, or None. + due_time (datetime.timedelta): the amount of time to delay before the awaitable + callback is first invoked. + period (datetime.timedelta): the time interval between invocations + of the awaitable callback. + ttl (Optional[datetime.timedelta]): the time interval before the timer stops firing + """ + name = name or self.__get_new_timer_name() + timer = ActorTimerData(name, callback, state, due_time, period, ttl) + self._state_manager._mock_timers[name] = timer # type: ignore + + async def unregister_timer(self, name: str) -> None: + """Unregisters actor timer from self._state_manager._mock_timers. + + Args: + name (str): the name of the timer to unregister. + """ + self._state_manager._mock_timers.pop(name, None) # type: ignore + + async def register_reminder( + self, + name: str, + state: bytes, + due_time: timedelta, + period: timedelta, + ttl: Optional[timedelta] = None, + ) -> None: + """Adds actor reminder to self._state_manager._mock_reminders. + + Args: + name (str): the name of the reminder to register. the name must be unique per actor. + state (bytes): the user state passed to the reminder invocation. + due_time (datetime.timedelta): the amount of time to delay before invoking the reminder + for the first time. + period (datetime.timedelta): the time interval between reminder invocations after + the first invocation. + ttl (datetime.timedelta): the time interval before the reminder stops firing + """ + reminder = ActorReminderData(name, state, due_time, period, ttl) + self._state_manager._mock_reminders[name] = reminder # type: ignore + + async def unregister_reminder(self, name: str) -> None: + """Unregisters actor reminder from self._state_manager._mock_reminders.. + + Args: + name (str): the name of the reminder to unregister. + """ + self._state_manager._mock_reminders.pop(name, None) # type: ignore + + +T = TypeVar('T', bound=Actor) + + +def create_mock_actor(cls1: type[T], actor_id: str, initstate: Optional[dict] = None) -> T: + class MockSuperClass(MockActor, cls1): # type: ignore + pass + + return MockSuperClass(actor_id, initstate) # type: ignore diff --git a/dapr/actor/runtime/mock_state_manager.py b/dapr/actor/runtime/mock_state_manager.py new file mode 100644 index 00000000..bcac6d95 --- /dev/null +++ b/dapr/actor/runtime/mock_state_manager.py @@ -0,0 +1,238 @@ +""" +Copyright 2023 The Dapr Authors +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +""" + +import asyncio +from contextvars import ContextVar +from typing import TYPE_CHECKING, Any, Callable, Dict, List, Optional, Tuple, TypeVar + +from dapr.actor.runtime._reminder_data import ActorReminderData +from dapr.actor.runtime._timer_data import ActorTimerData +from dapr.actor.runtime.state_change import ActorStateChange, StateChangeKind +from dapr.actor.runtime.state_manager import ActorStateManager, StateMetadata + +if TYPE_CHECKING: + from dapr.actor.runtime.mock_actor import MockActor + +T = TypeVar('T') +CONTEXT: ContextVar[Optional[Dict[str, Any]]] = ContextVar('state_tracker_context') + + +class MockStateManager(ActorStateManager): + def __init__(self, actor: 'MockActor', initstate: Optional[dict]): + self._actor = actor + self._default_state_change_tracker: Dict[str, StateMetadata] = {} + self._mock_state: Dict[str, Any] = {} + self._mock_timers: Dict[str, ActorTimerData] = {} + self._mock_reminders: Dict[str, ActorReminderData] = {} + if initstate: + self._mock_state = initstate + + async def add_state(self, state_name: str, value: T) -> None: + if not await self.try_add_state(state_name, value): + raise ValueError(f'The actor state name {state_name} already exist.') + + async def try_add_state(self, state_name: str, value: T) -> bool: + if state_name in self._default_state_change_tracker: + state_metadata = self._default_state_change_tracker[state_name] + if state_metadata.change_kind == StateChangeKind.remove: + self._default_state_change_tracker[state_name] = StateMetadata( + value, StateChangeKind.update + ) + return True + return False + existed = state_name in self._mock_state + if existed: + return False + self._default_state_change_tracker[state_name] = StateMetadata(value, StateChangeKind.add) + self._mock_state[state_name] = value + return True + + async def get_state(self, state_name: str) -> Optional[T]: + has_value, val = await self.try_get_state(state_name) + if has_value: + return val + else: + raise KeyError(f'Actor State with name {state_name} was not found.') + + async def try_get_state(self, state_name: str) -> Tuple[bool, Optional[T]]: + if state_name in self._default_state_change_tracker: + state_metadata = self._default_state_change_tracker[state_name] + if state_metadata.change_kind == StateChangeKind.remove: + return False, None + return True, state_metadata.value + has_value = state_name in self._mock_state + val = self._mock_state.get(state_name) + if has_value: + self._default_state_change_tracker[state_name] = StateMetadata( + val, StateChangeKind.none + ) + return has_value, val + + async def set_state(self, state_name: str, value: T) -> None: + await self.set_state_ttl(state_name, value, None) + + async def set_state_ttl(self, state_name: str, value: T, ttl_in_seconds: Optional[int]) -> None: + if ttl_in_seconds is not None and ttl_in_seconds < 0: + return + + if state_name in self._default_state_change_tracker: + state_metadata = self._default_state_change_tracker[state_name] + state_metadata.value = value + state_metadata.ttl_in_seconds = ttl_in_seconds + + if ( + state_metadata.change_kind == StateChangeKind.none + or state_metadata.change_kind == StateChangeKind.remove + ): + state_metadata.change_kind = StateChangeKind.update + self._default_state_change_tracker[state_name] = state_metadata + self._mock_state[state_name] = value + return + + existed = state_name in self._mock_state + if existed: + self._default_state_change_tracker[state_name] = StateMetadata( + value, StateChangeKind.update, ttl_in_seconds + ) + else: + self._default_state_change_tracker[state_name] = StateMetadata( + value, StateChangeKind.add, ttl_in_seconds + ) + self._mock_state[state_name] = value + + async def remove_state(self, state_name: str) -> None: + if not await self.try_remove_state(state_name): + raise KeyError(f'Actor State with name {state_name} was not found.') + + async def try_remove_state(self, state_name: str) -> bool: + if state_name in self._default_state_change_tracker: + state_metadata = self._default_state_change_tracker[state_name] + if state_metadata.change_kind == StateChangeKind.remove: + return False + elif state_metadata.change_kind == StateChangeKind.add: + self._default_state_change_tracker.pop(state_name, None) + self._mock_state.pop(state_name, None) + return True + self._mock_state.pop(state_name, None) + state_metadata.change_kind = StateChangeKind.remove + return True + + existed = state_name in self._mock_state + if existed: + self._default_state_change_tracker[state_name] = StateMetadata( + None, StateChangeKind.remove + ) + self._mock_state.pop(state_name, None) + return True + return False + + async def contains_state(self, state_name: str) -> bool: + if state_name in self._default_state_change_tracker: + state_metadata = self._default_state_change_tracker[state_name] + return state_metadata.change_kind != StateChangeKind.remove + return state_name in self._mock_state + + async def get_or_add_state(self, state_name: str, value: T) -> Optional[T]: + has_value, val = await self.try_get_state(state_name) + if has_value: + return val + change_kind = ( + StateChangeKind.update + if self.is_state_marked_for_remove(state_name) + else StateChangeKind.add + ) + self._mock_state[state_name] = value + self._default_state_change_tracker[state_name] = StateMetadata(value, change_kind) + return value + + async def add_or_update_state( + self, state_name: str, value: T, update_value_factory: Callable[[str, T], T] + ) -> T: + if not callable(update_value_factory): + raise AttributeError('update_value_factory is not callable') + + if state_name in self._default_state_change_tracker: + state_metadata = self._default_state_change_tracker[state_name] + if state_metadata.change_kind == StateChangeKind.remove: + self._default_state_change_tracker[state_name] = StateMetadata( + value, StateChangeKind.update + ) + self._mock_state[state_name] = value + return value + new_value = update_value_factory(state_name, state_metadata.value) + state_metadata.value = new_value + if state_metadata.change_kind == StateChangeKind.none: + state_metadata.change_kind = StateChangeKind.update + self._default_state_change_tracker[state_name] = state_metadata + self._mock_state[state_name] = new_value + return new_value + + has_value = state_name in self._mock_state + val: Any = self._mock_state.get(state_name) + if has_value: + new_value = update_value_factory(state_name, val) + self._default_state_change_tracker[state_name] = StateMetadata( + new_value, StateChangeKind.update + ) + self._mock_state[state_name] = new_value + return new_value + self._default_state_change_tracker[state_name] = StateMetadata(value, StateChangeKind.add) + self._mock_state[state_name] = value + return value + + async def get_state_names(self) -> List[str]: + # TODO: Get all state names from Dapr once implemented. + def append_names_sync(): + state_names = [] + for key, value in self._default_state_change_tracker.items(): + if value.change_kind == StateChangeKind.add: + state_names.append(key) + elif value.change_kind == StateChangeKind.remove: + state_names.append(key) + return state_names + + default_loop = asyncio.get_running_loop() + return await default_loop.run_in_executor(None, append_names_sync) + + async def clear_cache(self) -> None: + self._default_state_change_tracker.clear() + + async def save_state(self) -> None: + if len(self._default_state_change_tracker) == 0: + return + + state_changes = [] + states_to_remove = [] + for state_name, state_metadata in self._default_state_change_tracker.items(): + if state_metadata.change_kind == StateChangeKind.none: + continue + state_changes.append( + ActorStateChange( + state_name, + state_metadata.value, + state_metadata.change_kind, + state_metadata.ttl_in_seconds, + ) + ) + if state_metadata.change_kind == StateChangeKind.remove: + states_to_remove.append(state_name) + # Mark the states as unmodified so that tracking for next invocation is done correctly. + state_metadata.change_kind = StateChangeKind.none + for state_name in states_to_remove: + self._default_state_change_tracker.pop(state_name, None) + + def is_state_marked_for_remove(self, state_name: str) -> bool: + return ( + state_name in self._default_state_change_tracker + and self._default_state_change_tracker[state_name].change_kind == StateChangeKind.remove + ) diff --git a/dapr/actor/runtime/state_manager.py b/dapr/actor/runtime/state_manager.py index 7132175b..35cc33fb 100644 --- a/dapr/actor/runtime/state_manager.py +++ b/dapr/actor/runtime/state_manager.py @@ -15,11 +15,10 @@ import asyncio from contextvars import ContextVar +from typing import TYPE_CHECKING, Any, Callable, Dict, Generic, List, Optional, Tuple, TypeVar -from dapr.actor.runtime.state_change import StateChangeKind, ActorStateChange from dapr.actor.runtime.reentrancy_context import reentrancy_ctx - -from typing import Any, Callable, Dict, Generic, List, Tuple, TypeVar, Optional, TYPE_CHECKING +from dapr.actor.runtime.state_change import ActorStateChange, StateChangeKind if TYPE_CHECKING: from dapr.actor.runtime.actor import Actor diff --git a/daprdocs/content/en/python-sdk-docs/python-actor.md b/daprdocs/content/en/python-sdk-docs/python-actor.md index 565435aa..bd85e996 100644 --- a/daprdocs/content/en/python-sdk-docs/python-actor.md +++ b/daprdocs/content/en/python-sdk-docs/python-actor.md @@ -56,4 +56,73 @@ async def main(): ## Sample -Visit [this page](https://github.com/dapr/python-sdk/tree/release-1.0/examples/demo_actor) for a runnable actor sample. \ No newline at end of file +Visit [this page](https://github.com/dapr/python-sdk/tree/v1.14.0/examples/demo_actor) for a runnable actor sample. + + +## Mock Actor Testing + +The Dapr Python SDK provides the ability to create mock actors to unit test your actor methods and see how they interact with the actor state. + +### Sample Usage + + +``` +from dapr.actor.runtime.mock_actor import create_mock_actor + +class MyActor(Actor, MyActorInterface): + async def save_state(self, data) -> None: + await self._state_manager.set_state('mystate', data) + await self._state_manager.save_state() + +mock_actor = create_mock_actor(MyActor, "id") + +await mock_actor.save_state(5) +assert mockactor._state_manager._mock_state['mystate'] == 5 #True +``` +Mock actors are created by passing your actor class and an actor ID (a string) to the create_mock_actor function. This function returns an instance of the actor with many internal methods overridden. Instead of interacting with Dapr for tasks like saving state or managing timers, the mock actor uses in-memory state to simulate these behaviors. + +This state can be accessed through the following variables: + +**IMPORTANT NOTE: Due to type hinting issues as discussed further down, these variables will not be visible to type hinters/linters/etc, who will think they are invalid variables. You will need to use them with #type: ignore in order to satisfy any such systems.** + +- **_state_manager._mock_state()** +A `[str, object]` dict where all the actor state is stored. Any variable saved via `_state_manager.save_state(key, value)`, or any other statemanager method is stored in the dict as that key, value pair. Any value loaded via `try_get_state` or any other statemanager method is taken from this dict. + +- **_state_manager._mock_timers()** +A `[str, ActorTimerData]` dict which holds the active actor timers. Any actor method which would add or remove a timer adds or pops the appropriate `ActorTimerData` object from this dict. + +- **_state_manager._mock_reminders()** +A [str, ActorReminderData] dict which holds the active actor reminders. Any actor method which would add or remove a timer adds or pops the appropriate ActorReminderData object from this dict. + +**Note: The timers and reminders will never actually trigger. The dictionaries exist only so methods that should add or remove timers/reminders can be tested. If you need to test the callbacks they should activate, you should call them directly with the appropriate values:** +``` +result = await mock_actor.recieve_reminder(name, state, due_time, period, _ttl) +# Test the result directly or test for side effects (like changing state) by querying `_state_manager._mock_state` +``` + +### Usage and Limitations + +**To allow for more fine-grained control, the `_on_activate` method will not be called automatically the way it is when Dapr initializes a new Actor instance. You should call it manually as needed as part of your tests.** + +The `__init__`, `register_timer`, `unregister_timer`, `register_reminder`, `unregister_reminder` methods are all overwritten by the MockActor class that gets applied as a mixin via `create_mock_actor`. If your actor itself overwrites these methods, those modifications will themselves be overwritten and the actor will likely not behave as you expect. + +*note: `__init__` is a special case where you are expected to define it as* +``` + def __init__(self, ctx, actor_id): + super().__init__(ctx, actor_id) +``` +*Mock actors work fine with this, but if you have added any extra logic into `__init__`, it will be overwritten. It is worth noting that the correct way to apply logic on initialization is via `_on_activate` (which can also be safely used with mock actors) instead of `__init__`.* + +*If you have an actor which does override default Dapr actor methods, you can create a custom subclass of the MockActor class (from MockActor.py) which implements whatever custom logic you have along with interacting with `_mock_state`, `_mock_timers`, and `_mock_reminders` as normal, and then applying that custom class as a mixin via a `create_mock_actor` function you define yourself.* + +The actor `_runtime_ctx` variable is set to None. All the normal actor methods have been overwritten such as to not call it, but if your code itself interacts directly with `_runtime_ctx`, tests may fail. + +The actor _state_manager is overwritten with an instance of `MockStateManager`. This has all the same methods and functionality of the base `ActorStateManager`, except for using the various `_mock` variables for storing data instead of the `_runtime_ctx`. If your code implements its own custom state manager it will be overwritten and tests will likely fail. + +### Type Hinting + +Because of Python's lack of a unified method for type hinting type intersections (see: [python/typing #213](https://github.com/python/typing/issues/213)), type hinting unfortunately doesn't work with Mock Actors. The return type is type hinted as "instance of Actor subclass T" when it should really be type hinted as "instance of MockActor subclass T" or "instance of type intersection `[Actor subclass T, MockActor]`" (where, it is worth noting, `MockActor` is itself a subclass of `Actor`). + +This means that, for example, if you hover over `mockactor._state_manager` in a code editor, it will come up as an instance of ActorStateManager (instead of MockStateManager), and various IDE helper functions (like VSCode's `Go to Definition`, which will bring you to the definition of ActorStateManager instead of MockStateManager) won't work properly. + +For now, this issue is unfixable, so it's merely something to be noted because of the confusion it might cause. If in the future it becomes possible to accurately type hint cases like this feel free to open an issue about implementing it. \ No newline at end of file diff --git a/docs/clients/clients.grpc.rst b/docs/clients/clients.grpc.rst new file mode 100644 index 00000000..472cbce6 --- /dev/null +++ b/docs/clients/clients.grpc.rst @@ -0,0 +1,31 @@ +clients.grpc package +==================== + +Submodules +---------- + + +.. automodule:: clients.grpc.client + :members: + :undoc-members: + :show-inheritance: + + +.. automodule:: clients.grpc.interceptors + :members: + :undoc-members: + :show-inheritance: + + +.. automodule:: clients.grpc.subscription + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: clients.grpc + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/proto/proto.runtime.rst b/docs/proto/proto.runtime.rst new file mode 100644 index 00000000..ccad378d --- /dev/null +++ b/docs/proto/proto.runtime.rst @@ -0,0 +1,18 @@ +proto.runtime package +===================== + +Subpackages +----------- + +.. toctree:: + :maxdepth: 4 + + proto.runtime.v1 + +Module contents +--------------- + +.. automodule:: proto.runtime + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/proto/proto.runtime.v1.rst b/docs/proto/proto.runtime.v1.rst new file mode 100644 index 00000000..3d4fb150 --- /dev/null +++ b/docs/proto/proto.runtime.v1.rst @@ -0,0 +1,37 @@ +proto.runtime.v1 package +======================== + +Submodules +---------- + + +.. automodule:: proto.runtime.v1.appcallback_pb2 + :members: + :undoc-members: + :show-inheritance: + + +.. automodule:: proto.runtime.v1.appcallback_pb2_grpc + :members: + :undoc-members: + :show-inheritance: + + +.. automodule:: proto.runtime.v1.dapr_pb2 + :members: + :undoc-members: + :show-inheritance: + + +.. automodule:: proto.runtime.v1.dapr_pb2_grpc + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: proto.runtime.v1 + :members: + :undoc-members: + :show-inheritance: diff --git a/examples/demo_actor/README.md b/examples/demo_actor/README.md index c5ece71e..64ca7ca5 100644 --- a/examples/demo_actor/README.md +++ b/examples/demo_actor/README.md @@ -6,6 +6,7 @@ This document describes how to create an Actor(DemoActor) and invoke its methods - **The actor service(demo_actor_service.py).** This implements FastAPI service that is going to host the actor. It contains the implementation of the actor, `demo_actor.py`. An actor implementation is a class that derives from the base type `Actor` and implements the interfaces defined in `demo_actor_interface.py`. - **The actor service for flask(demo_actor_flask.py).** This implements Flask web service that is going to host the actor. - **The actor client(demo_actor_client.py)** This contains the implementation of the actor client which calls DemoActor's method defined in Actor Interfaces. +- **Actor tests(test_demo_actor.py)** This contains actor unit tests using mock actor testing functionality. ## Pre-requisites @@ -183,3 +184,57 @@ expected_stdout_lines: kubectl logs -l app="demoactor-client" -c demoactor-client ``` +## Run DemoActor mock actor tests + + + +1. Run Tests + + ```bash + cd demo_actor + python -m unittest test_demo_actor.py + ``` + + Expected output (note that the unit test print outputs might not necessarily be in this order - what really matters is that all tests pass anyway): + + ``` + set_my_data: {'state': 5} + has_value: True + clear_my_data + has_value: False + has_value: False + set reminder to True + set reminder is done + set reminder to False + set reminder is done + set_my_data: {'state': 5} + has_value: True + ---------------------------------------------------------------------- + Ran 5 tests in 0.052s + + OK + ``` + + + diff --git a/examples/demo_actor/demo_actor/test_demo_actor.py b/examples/demo_actor/demo_actor/test_demo_actor.py new file mode 100644 index 00000000..e4289dda --- /dev/null +++ b/examples/demo_actor/demo_actor/test_demo_actor.py @@ -0,0 +1,40 @@ +import unittest + +from demo_actor import DemoActor + +from dapr.actor.runtime.mock_actor import create_mock_actor + + +class DemoActorTests(unittest.IsolatedAsyncioTestCase): + def test_create_actor(self): + mockactor = create_mock_actor(DemoActor, '1') + self.assertEqual(mockactor.id.id, '1') + + async def test_get_data(self): + mockactor = create_mock_actor(DemoActor, '1') + self.assertFalse(mockactor._state_manager._mock_state) # type: ignore + val = await mockactor.get_my_data() + self.assertIsNone(val) + + async def test_set_data(self): + mockactor = create_mock_actor(DemoActor, '1') + await mockactor.set_my_data({'state': 5}) + val = await mockactor.get_my_data() + self.assertIs(val['state'], 5) # type: ignore + + async def test_clear_data(self): + mockactor = create_mock_actor(DemoActor, '1') + await mockactor.set_my_data({'state': 5}) + val = await mockactor.get_my_data() + self.assertIs(val['state'], 5) # type: ignore + await mockactor.clear_my_data() + val = await mockactor.get_my_data() + self.assertIsNone(val) + + async def test_reminder(self): + mockactor = create_mock_actor(DemoActor, '1') + self.assertFalse(mockactor._state_manager._mock_reminders) # type: ignore + await mockactor.set_reminder(True) + self.assertTrue('demo_reminder' in mockactor._state_manager._mock_reminders) # type: ignore + await mockactor.set_reminder(False) + self.assertFalse(mockactor._state_manager._mock_reminders) # type: ignore diff --git a/tests/actor/test_mock_actor.py b/tests/actor/test_mock_actor.py new file mode 100644 index 00000000..c37cdf4f --- /dev/null +++ b/tests/actor/test_mock_actor.py @@ -0,0 +1,314 @@ +import datetime +import unittest +from typing import Optional + +from dapr.actor import Actor, ActorInterface, Remindable, actormethod +from dapr.actor.runtime.mock_actor import create_mock_actor +from dapr.actor.runtime.state_change import StateChangeKind + + +class MockTestActorInterface(ActorInterface): + @actormethod(name='GetData') + async def get_data(self) -> object: + ... + + @actormethod(name='SetData') + async def set_data(self, data: object) -> None: + ... + + @actormethod(name='ClearData') + async def clear_data(self) -> None: + ... + + @actormethod(name='TestData') + async def test_data(self) -> int: + ... + + @actormethod(name='AddState') + async def add_state(self, name: str, data: object) -> None: + ... + + @actormethod(name='UpdateState') + async def update_state(self, name: str, data: object) -> None: + ... + + @actormethod(name='AddDataNoSave') + async def add_data_no_save(self, data: object) -> None: + ... + + @actormethod(name='RemoveDataNoSave') + async def remove_data_no_save(self) -> None: + ... + + @actormethod(name='SaveState') + async def save_state(self) -> None: + ... + + @actormethod(name='ToggleReminder') + async def toggle_reminder(self, name: str, enabled: bool) -> None: + ... + + @actormethod(name='ToggleTimer') + async def toggle_timer(self, name: str, enabled: bool) -> None: + ... + + +class MockTestActor(Actor, MockTestActorInterface, Remindable): + def __init__(self, ctx, actor_id): + super().__init__(ctx, actor_id) + + async def _on_activate(self) -> None: + await self._state_manager.set_state('state', {'test': 5}) + await self._state_manager.save_state() + + async def get_data(self) -> object: + _, val = await self._state_manager.try_get_state('state') + return val + + async def set_data(self, data) -> None: + await self._state_manager.set_state('state', data) + await self._state_manager.save_state() + + async def clear_data(self) -> None: + await self._state_manager.remove_state('state') + await self._state_manager.save_state() + + async def test_data(self) -> int: + _, val = await self._state_manager.try_get_state('state') + if val is None: + return 0 + if 'test' not in val: + return 1 + if val['test'] % 2 == 1: + return 2 + elif val['test'] % 2 == 0: + return 3 + return 4 + + async def add_state(self, name: str, data: object) -> None: + await self._state_manager.add_state(name, data) + + async def update_state(self, name: str, data: object) -> None: + def double(_: str, x: int) -> int: + return 2 * x + + await self._state_manager.add_or_update_state(name, data, double) + + async def add_data_no_save(self, data: object) -> None: + await self._state_manager.set_state('state', data) + + async def remove_data_no_save(self) -> None: + await self._state_manager.remove_state('state') + + async def save_state(self) -> None: + await self._state_manager.save_state() + + async def toggle_reminder(self, name: str, enabled: bool) -> None: + if enabled: + await self.register_reminder( + name, + b'reminder_state', + datetime.timedelta(seconds=5), + datetime.timedelta(seconds=10), + datetime.timedelta(seconds=15), + ) + else: + await self.unregister_reminder(name) + + async def toggle_timer(self, name: str, enabled: bool) -> None: + if enabled: + await self.register_timer( + name, + self.timer_callback, + 'timer_state', + datetime.timedelta(seconds=5), + datetime.timedelta(seconds=10), + datetime.timedelta(seconds=15), + ) + else: + await self.unregister_timer(name) + + async def receive_reminder( + self, + name: str, + state: bytes, + due_time: datetime.timedelta, + period: datetime.timedelta, + ttl: Optional[datetime.timedelta] = None, + ) -> None: + await self._state_manager.set_state(name, True) + await self._state_manager.save_state() + + async def timer_callback(self, state) -> None: + print('Timer triggered') + + +class ActorMockActorTests(unittest.IsolatedAsyncioTestCase): + def test_create_actor(self): + mockactor = create_mock_actor(MockTestActor, '1') + self.assertEqual(mockactor.id.id, '1') + + async def test_inistate(self): + mockactor = create_mock_actor(MockTestActor, '1', initstate={'state': 5}) + self.assertTrue('state' in mockactor._state_manager._mock_state) # type: ignore + self.assertEqual(mockactor._state_manager._mock_state['state'], 5) # type: ignore + + async def test_on_activate(self): + mockactor = create_mock_actor(MockTestActor, '1') + await mockactor._on_activate() + self.assertTrue('state' in mockactor._state_manager._mock_state) # type: ignore + self.assertEqual(mockactor._state_manager._mock_state['state'], {'test': 5}) # type: ignore + + async def test_get_data(self): + mockactor = create_mock_actor(MockTestActor, '1') + await mockactor._on_activate() + out1 = await mockactor.get_data() + self.assertEqual(out1, {'test': 5}) + + async def test_get_data_initstate(self): + mockactor = create_mock_actor(MockTestActor, '1', initstate={'state': {'test': 6}}) + out1 = await mockactor.get_data() + self.assertEqual(out1, {'test': 6}) + + async def test_set_data(self): + mockactor = create_mock_actor(MockTestActor, '1') + await mockactor._on_activate() + self.assertTrue('state' in mockactor._state_manager._mock_state) # type: ignore + self.assertEqual(mockactor._state_manager._mock_state['state'], {'test': 5}) # type: ignore + await mockactor.set_data({'test': 10}) + self.assertTrue('state' in mockactor._state_manager._mock_state) # type: ignore + self.assertEqual(mockactor._state_manager._mock_state['state'], {'test': 10}) # type: ignore + out1 = await mockactor.get_data() + self.assertEqual(out1, {'test': 10}) + + async def test_clear_data(self): + mockactor = create_mock_actor(MockTestActor, '1') + await mockactor._on_activate() + self.assertTrue('state' in mockactor._state_manager._mock_state) # type: ignore + self.assertEqual(mockactor._state_manager._mock_state['state'], {'test': 5}) # type: ignore + await mockactor.clear_data() + self.assertFalse('state' in mockactor._state_manager._mock_state) # type: ignore + self.assertIsNone(mockactor._state_manager._mock_state.get('state')) # type: ignore + out1 = await mockactor.get_data() + self.assertIsNone(out1) + + async def test_toggle_reminder(self): + mockactor = create_mock_actor(MockTestActor, '1') + await mockactor._on_activate() + self.assertEqual(len(mockactor._state_manager._mock_reminders), 0) # type: ignore + await mockactor.toggle_reminder('test', True) + self.assertEqual(len(mockactor._state_manager._mock_reminders), 1) # type: ignore + self.assertTrue('test' in mockactor._state_manager._mock_reminders) # type: ignore + reminderstate = mockactor._state_manager._mock_reminders['test'] # type: ignore + self.assertTrue(reminderstate.reminder_name, 'test') + await mockactor.toggle_reminder('test', False) + self.assertEqual(len(mockactor._state_manager._mock_reminders), 0) # type: ignore + + async def test_toggle_timer(self): + mockactor = create_mock_actor(MockTestActor, '1') + await mockactor._on_activate() + self.assertEqual(len(mockactor._state_manager._mock_timers), 0) # type: ignore + await mockactor.toggle_timer('test', True) + self.assertEqual(len(mockactor._state_manager._mock_timers), 1) # type: ignore + self.assertTrue('test' in mockactor._state_manager._mock_timers) # type: ignore + timerstate = mockactor._state_manager._mock_timers['test'] # type: ignore + self.assertTrue(timerstate.timer_name, 'test') + await mockactor.toggle_timer('test', False) + self.assertEqual(len(mockactor._state_manager._mock_timers), 0) # type: ignore + + async def test_activate_reminder(self): + mockactor = create_mock_actor(MockTestActor, '1') + await mockactor.receive_reminder( + 'test', + b'test1', + datetime.timedelta(days=1), + datetime.timedelta(days=1), + datetime.timedelta(days=1), + ) + self.assertEqual(mockactor._state_manager._mock_state['test'], True) # type: ignore + + async def test_test_data(self): + mockactor = create_mock_actor(MockTestActor, '1') + result = await mockactor.test_data() + self.assertEqual(result, 0) + await mockactor.set_data('lol') + result = await mockactor.test_data() + self.assertEqual(result, 1) + await mockactor.set_data({'test': 'lol'}) + with self.assertRaises(TypeError): + await mockactor.test_data() + await mockactor.set_data({'test': 1}) + result = await mockactor.test_data() + self.assertEqual(result, 2) + await mockactor.set_data({'test': 2}) + result = await mockactor.test_data() + self.assertEqual(result, 3) + + async def test_add_state(self): + mockactor = create_mock_actor(MockTestActor, '1') + self.assertFalse(mockactor._state_manager._mock_state) # type: ignore + await mockactor.add_state('test', 5) + self.assertTrue('test' in mockactor._state_manager._mock_state) # type: ignore + self.assertEqual(mockactor._state_manager._mock_state['test'], 5) # type: ignore + await mockactor.add_state('test2', 10) + self.assertTrue('test2' in mockactor._state_manager._mock_state) # type: ignore + self.assertEqual(mockactor._state_manager._mock_state['test2'], 10) # type: ignore + self.assertEqual(len(mockactor._state_manager._mock_state), 2) # type: ignore + with self.assertRaises(ValueError): + await mockactor.add_state('test', 10) + + async def test_update_state(self): + mockactor = create_mock_actor(MockTestActor, '1') + self.assertFalse(mockactor._state_manager._mock_state) # type: ignore + await mockactor.update_state('test', 10) + self.assertTrue('test' in mockactor._state_manager._mock_state) # type: ignore + self.assertEqual(mockactor._state_manager._mock_state['test'], 10) # type: ignore + await mockactor.update_state('test', 10) + self.assertTrue('test' in mockactor._state_manager._mock_state) # type: ignore + self.assertEqual(mockactor._state_manager._mock_state['test'], 20) # type: ignore + self.assertEqual(len(mockactor._state_manager._mock_state), 1) # type: ignore + + async def test_state_change_tracker(self): + mockactor = create_mock_actor(MockTestActor, '1') + self.assertEqual(len(mockactor._state_manager._default_state_change_tracker), 0) + await mockactor._on_activate() + self.assertEqual(len(mockactor._state_manager._default_state_change_tracker), 1) + self.assertTrue('state' in mockactor._state_manager._default_state_change_tracker) + self.assertEqual( + mockactor._state_manager._default_state_change_tracker['state'].change_kind, + StateChangeKind.none, + ) + self.assertEqual( + mockactor._state_manager._default_state_change_tracker['state'].value, {'test': 5} + ) + self.assertEqual(mockactor._state_manager._mock_state['state'], {'test': 5}) # type: ignore + await mockactor.remove_data_no_save() + self.assertEqual( + mockactor._state_manager._default_state_change_tracker['state'].change_kind, + StateChangeKind.remove, + ) + self.assertEqual( + mockactor._state_manager._default_state_change_tracker['state'].value, {'test': 5} + ) + self.assertTrue('state' not in mockactor._state_manager._mock_state) # type: ignore + await mockactor.save_state() + self.assertEqual(len(mockactor._state_manager._default_state_change_tracker), 0) + self.assertTrue('state' not in mockactor._state_manager._mock_state) # type: ignore + await mockactor.add_data_no_save({'test': 6}) + self.assertEqual( + mockactor._state_manager._default_state_change_tracker['state'].change_kind, + StateChangeKind.add, + ) + self.assertEqual( + mockactor._state_manager._default_state_change_tracker['state'].value, {'test': 6} + ) + self.assertEqual(mockactor._state_manager._mock_state['state'], {'test': 6}) # type: ignore + await mockactor.save_state() + self.assertEqual( + mockactor._state_manager._default_state_change_tracker['state'].change_kind, + StateChangeKind.none, + ) + self.assertEqual( + mockactor._state_manager._default_state_change_tracker['state'].value, {'test': 6} + ) + self.assertEqual(mockactor._state_manager._mock_state['state'], {'test': 6}) # type: ignore diff --git a/tests/actor/test_mock_state_manager.py b/tests/actor/test_mock_state_manager.py new file mode 100644 index 00000000..81af9307 --- /dev/null +++ b/tests/actor/test_mock_state_manager.py @@ -0,0 +1,73 @@ +import unittest + +from dapr.actor import Actor, ActorInterface +from dapr.actor.runtime.mock_actor import create_mock_actor +from dapr.actor.runtime.mock_state_manager import MockStateManager + + +def double(_: str, x: int) -> int: + return 2 * x + + +class MockTestActorInterface(ActorInterface): + pass + + +class MockTestActor(Actor, MockTestActorInterface): + def __init__(self, ctx, actor_id): + super().__init__(ctx, actor_id) + + +class ActorMockActorTests(unittest.IsolatedAsyncioTestCase): + def test_init_state(self): + mock_actor = create_mock_actor(MockTestActor, 'test') + state_manager = mock_actor._state_manager + self.assertIsInstance(state_manager, MockStateManager) + self.assertFalse(state_manager._mock_state) # type: ignore + self.assertFalse(state_manager._mock_reminders) # type: ignore + self.assertFalse(state_manager._mock_timers) # type: ignore + + async def test_state_methods(self): + mock_actor = create_mock_actor(MockTestActor, 'test') + state_manager = mock_actor._state_manager + self.assertFalse(await state_manager.contains_state('state')) + self.assertFalse(state_manager._default_state_change_tracker) + names = await state_manager.get_state_names() + self.assertFalse(names) + with self.assertRaises(KeyError): + await state_manager.get_state('state') + await state_manager.add_state('state', 5) + names = await state_manager.get_state_names() + self.assertCountEqual(names, ['state']) + self.assertIs(state_manager._mock_state['state'], 5) # type: ignore + value = await state_manager.get_state('state') + self.assertIs(value, 5) + await state_manager.add_state('state2', 5) + self.assertIs(state_manager._mock_state['state2'], 5) # type: ignore + with self.assertRaises(ValueError): + await state_manager.add_state('state', 5) + await state_manager.set_state('state3', 5) + self.assertIs(state_manager._mock_state['state3'], 5) # type: ignore + await state_manager.set_state('state3', 10) + self.assertIs(state_manager._mock_state['state3'], 10) # type: ignore + self.assertTrue(await state_manager.contains_state('state3')) + await state_manager.remove_state('state3') + self.assertFalse('state3' in state_manager._mock_state) # type: ignore + with self.assertRaises(KeyError): + await state_manager.remove_state('state3') + self.assertFalse(await state_manager.contains_state('state3')) + await state_manager.add_or_update_state('state3', 5, double) + self.assertIs(state_manager._mock_state['state3'], 5) # type: ignore + await state_manager.add_or_update_state('state3', 1000, double) + self.assertIs(state_manager._mock_state['state3'], 10) # type: ignore + out = await state_manager.get_or_add_state('state4', 5) + self.assertIs(out, 5) + self.assertIs(state_manager._mock_state['state4'], 5) # type: ignore + out = await state_manager.get_or_add_state('state4', 10) + self.assertIs(out, 5) + self.assertIs(state_manager._mock_state['state4'], 5) # type: ignore + names = await state_manager.get_state_names() + self.assertCountEqual(names, ['state', 'state2', 'state3', 'state4']) + self.assertTrue('state', state_manager._default_state_change_tracker) + await state_manager.clear_cache() + self.assertFalse(state_manager._default_state_change_tracker) From beff217e9d7853625ddf68ae1f68e9087da363c2 Mon Sep 17 00:00:00 2001 From: Elena Kolevska Date: Thu, 2 Jan 2025 12:39:42 +0000 Subject: [PATCH 10/38] Fixes try_add_state in actor state manger (#756) Signed-off-by: Elena Kolevska --- dapr/actor/runtime/state_manager.py | 2 +- tests/actor/test_state_manager.py | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/dapr/actor/runtime/state_manager.py b/dapr/actor/runtime/state_manager.py index 35cc33fb..dc7ec033 100644 --- a/dapr/actor/runtime/state_manager.py +++ b/dapr/actor/runtime/state_manager.py @@ -85,7 +85,7 @@ async def try_add_state(self, state_name: str, value: T) -> bool: existed = await self._actor.runtime_ctx.state_provider.contains_state( self._type_name, self._actor.id.id, state_name ) - if not existed: + if existed: return False state_change_tracker[state_name] = StateMetadata(value, StateChangeKind.add) diff --git a/tests/actor/test_state_manager.py b/tests/actor/test_state_manager.py index 98db0228..c9406dbd 100644 --- a/tests/actor/test_state_manager.py +++ b/tests/actor/test_state_manager.py @@ -46,7 +46,7 @@ def setUp(self): @mock.patch( 'tests.actor.fake_client.FakeDaprActorClient.get_state', - new=_async_mock(return_value=base64.b64encode(b'"value1"')), + new=_async_mock(), ) @mock.patch( 'tests.actor.fake_client.FakeDaprActorClient.save_state_transactionally', new=_async_mock() @@ -67,6 +67,20 @@ def test_add_state(self): added = _run(state_manager.try_add_state('state1', 'value1')) self.assertFalse(added) + @mock.patch( + 'tests.actor.fake_client.FakeDaprActorClient.get_state', + new=_async_mock(return_value=base64.b64encode(b'"value1"')), + ) + @mock.patch( + 'tests.actor.fake_client.FakeDaprActorClient.save_state_transactionally', new=_async_mock() + ) + def test_add_state_with_existing_state(self): + state_manager = ActorStateManager(self._fake_actor) + + # Add first 'state1' + added = _run(state_manager.try_add_state('state1', 'value1')) + self.assertFalse(added) + @mock.patch('tests.actor.fake_client.FakeDaprActorClient.get_state', new=_async_mock()) def test_get_state_for_no_state(self): state_manager = ActorStateManager(self._fake_actor) From 901af34bebfe2f893fcbb54e5d1418d1bb2326d9 Mon Sep 17 00:00:00 2001 From: Elena Kolevska Date: Thu, 2 Jan 2025 12:40:22 +0000 Subject: [PATCH 11/38] Integration test for http invocation (#758) Signed-off-by: Elena Kolevska --- examples/invoke-http/README.md | 75 +++++++++++++++++++++++++ examples/invoke-http/invoke-caller.py | 33 +++++++---- examples/invoke-http/invoke-receiver.py | 9 +++ 3 files changed, 106 insertions(+), 11 deletions(-) create mode 100644 examples/invoke-http/README.md diff --git a/examples/invoke-http/README.md b/examples/invoke-http/README.md new file mode 100644 index 00000000..08e8738e --- /dev/null +++ b/examples/invoke-http/README.md @@ -0,0 +1,75 @@ +# Example - Invoke a service + +This example utilizes a receiver and a caller for the `invoke_method` functionality. + +> **Note:** Make sure to use the latest proto bindings + +## Pre-requisites + +- [Dapr CLI and initialized environment](https://docs.dapr.io/getting-started) +- [Install Python 3.8+](https://www.python.org/downloads/) + +### Install requirements + +You can install dapr SDK package using pip command: + + + +```sh +pip3 install dapr Flask +``` + + + +## Run the example + +To run this example, the following code can be utilized: + +Start the receiver: + + +```bash +dapr run --app-id=invoke-receiver --app-port=8088 --app-protocol http -- python3 invoke-receiver.py +``` + + +Start the caller: + + +```bash +dapr run --app-id=invoke-caller -- python3 invoke-caller.py +``` + + +## Cleanup + + + +```bash +dapr stop --app-id invoke-receiver +``` + + \ No newline at end of file diff --git a/examples/invoke-http/invoke-caller.py b/examples/invoke-http/invoke-caller.py index 6e2c3120..ebc5876b 100644 --- a/examples/invoke-http/invoke-caller.py +++ b/examples/invoke-http/invoke-caller.py @@ -6,18 +6,29 @@ with DaprClient() as d: req_data = {'id': 1, 'message': 'hello world'} - while True: - # Create a typed message with content type and body - resp = d.invoke_method( + # First message: success + # Create a typed message with content type and body + resp1 = d.invoke_method( + 'invoke-receiver', + 'my-method', + http_verb='POST', + data=json.dumps(req_data), + ) + + # Print the response + print(resp1.content_type, flush=True) + print(resp1.text(), flush=True) + print(str(resp1.status_code), flush=True) + + # Second message: error + req_data = {'id': 2, 'message': 'hello world'} + try: + resp2 = d.invoke_method( 'invoke-receiver', - 'my-method', + 'my-method-err', http_verb='POST', data=json.dumps(req_data), ) - - # Print the response - print(resp.content_type, flush=True) - print(resp.text(), flush=True) - print(str(resp.status_code), flush=True) - - time.sleep(2) + except Exception as e: + print(e._message, flush=True) + print(e._error_code, flush=True) diff --git a/examples/invoke-http/invoke-receiver.py b/examples/invoke-http/invoke-receiver.py index 95ac3192..8609464a 100644 --- a/examples/invoke-http/invoke-receiver.py +++ b/examples/invoke-http/invoke-receiver.py @@ -12,4 +12,13 @@ def getOrder(): return json.dumps({'success': True}), 200, {'ContentType': 'application/json'} +@app.route('/my-method-err', methods=['POST']) +def getOrderErr(): + data = request.json + print('Order error : ' + json.dumps(data), flush=True) + resp = {'message': 'error occurred', 'errorCode': 'MY_CODE'} + return json.dumps(resp), 503, {'ContentType': 'application/json'} + + +print('Starting Flask app on port 8088...', flush=True) app.run(port=8088) From 6105bd30f3390026b5a643cefa0422e5e39234fc Mon Sep 17 00:00:00 2001 From: Elena Kolevska Date: Thu, 2 Jan 2025 12:48:35 +0000 Subject: [PATCH 12/38] fixes missing state store in test (#759) Signed-off-by: Elena Kolevska --- examples/error_handling/README.md | 2 +- .../error_handling/components/state_redis.yaml | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 examples/error_handling/components/state_redis.yaml diff --git a/examples/error_handling/README.md b/examples/error_handling/README.md index 1d24bc82..0ce190d3 100644 --- a/examples/error_handling/README.md +++ b/examples/error_handling/README.md @@ -38,7 +38,7 @@ timeout_seconds: 5 --> ```bash -dapr run -- python3 error_handling.py +dapr run --resources-path components -- python3 error_handling.py ``` diff --git a/examples/error_handling/components/state_redis.yaml b/examples/error_handling/components/state_redis.yaml new file mode 100644 index 00000000..7c45ff88 --- /dev/null +++ b/examples/error_handling/components/state_redis.yaml @@ -0,0 +1,15 @@ +apiVersion: dapr.io/v1alpha1 +kind: Component +metadata: + name: statestore +spec: + type: state.redis + version: v1 + initTimeout: 1m + metadata: + - name: redisHost + value: localhost:6379 + - name: redisPassword + value: "" + - name: actorStateStore + value: "true" \ No newline at end of file From c4c12551a877183f1f62978855005050d81a9b69 Mon Sep 17 00:00:00 2001 From: Fabian Martinez <46371672+famarting@users.noreply.github.com> Date: Thu, 2 Jan 2025 13:49:49 +0100 Subject: [PATCH 13/38] Mark workflows API functions as deprecated (#749) * workflows, remove deprecated functions Signed-off-by: Fabian Martinez <46371672+famarting@users.noreply.github.com> * revert changes to example Signed-off-by: Fabian Martinez <46371672+famarting@users.noreply.github.com> * update warning messages Signed-off-by: Fabian Martinez <46371672+famarting@users.noreply.github.com> * Typos Signed-off-by: Elena Kolevska * fixes linter Signed-off-by: Elena Kolevska * Apply suggestions from code review Signed-off-by: Elena Kolevska * Apply suggestions from code review Signed-off-by: Elena Kolevska --------- Signed-off-by: Fabian Martinez <46371672+famarting@users.noreply.github.com> Signed-off-by: Elena Kolevska Signed-off-by: Elena Kolevska Co-authored-by: Elena Kolevska Co-authored-by: Elena Kolevska Signed-off-by: Elena Kolevska --- dapr/aio/clients/grpc/client.py | 21 ++++++++++++------- dapr/clients/grpc/client.py | 21 ++++++++++++------- examples/demo_workflow/app.py | 3 +++ .../demo_workflow/requirements.txt | 2 +- tests/clients/test_dapr_grpc_client.py | 2 +- 5 files changed, 33 insertions(+), 16 deletions(-) diff --git a/dapr/aio/clients/grpc/client.py b/dapr/aio/clients/grpc/client.py index e4d4e902..7bcf4a13 100644 --- a/dapr/aio/clients/grpc/client.py +++ b/dapr/aio/clients/grpc/client.py @@ -1409,6 +1409,7 @@ async def start_workflow( send_raw_bytes: bool = False, ) -> StartWorkflowResponse: """Starts a workflow. + Deprecated: use dapr-ext-workflow instead Args: workflow_component (str): the name of the workflow component @@ -1430,7 +1431,7 @@ async def start_workflow( """ # Warnings and input validation warn( - 'The Workflow API is a Beta version and is subject to change.', + 'This Workflow API (Beta) method is deprecated and will be removed in a future version. Use the dapr-ext-workflow package instead.', UserWarning, stacklevel=2, ) @@ -1470,6 +1471,7 @@ async def start_workflow( async def get_workflow(self, instance_id: str, workflow_component: str) -> GetWorkflowResponse: """Gets information on a workflow. + Deprecated: use dapr-ext-workflow instead Args: instance_id (str): the ID of the workflow instance, @@ -1482,7 +1484,7 @@ async def get_workflow(self, instance_id: str, workflow_component: str) -> GetWo """ # Warnings and input validation warn( - 'The Workflow API is a Beta version and is subject to change.', + 'This Workflow API (Beta) method is deprecated and will be removed in a future version. Use the dapr-ext-workflow package instead.', UserWarning, stacklevel=2, ) @@ -1511,6 +1513,7 @@ async def get_workflow(self, instance_id: str, workflow_component: str) -> GetWo async def terminate_workflow(self, instance_id: str, workflow_component: str) -> DaprResponse: """Terminates a workflow. + Deprecated: use dapr-ext-workflow instead Args: instance_id (str): the ID of the workflow instance, e.g. @@ -1523,7 +1526,7 @@ async def terminate_workflow(self, instance_id: str, workflow_component: str) -> """ # Warnings and input validation warn( - 'The Workflow API is a Beta version and is subject to change.', + 'This Workflow API (Beta) method is deprecated and will be removed in a future version. Use the dapr-ext-workflow package instead.', UserWarning, stacklevel=2, ) @@ -1548,6 +1551,7 @@ async def raise_workflow_event( send_raw_bytes: bool = False, ) -> DaprResponse: """Raises an event on a workflow. + Deprecated: use dapr-ext-workflow instead Args: instance_id (str): the ID of the workflow instance, @@ -1568,7 +1572,7 @@ async def raise_workflow_event( """ # Warnings and input validation warn( - 'The Workflow API is a Beta version and is subject to change.', + 'This Workflow API (Beta) method is deprecated and will be removed in a future version. Use the dapr-ext-workflow package instead.', UserWarning, stacklevel=2, ) @@ -1611,6 +1615,7 @@ async def raise_workflow_event( async def pause_workflow(self, instance_id: str, workflow_component: str) -> DaprResponse: """Pause a workflow. + Deprecated: use dapr-ext-workflow instead Args: instance_id (str): the ID of the workflow instance, @@ -1624,7 +1629,7 @@ async def pause_workflow(self, instance_id: str, workflow_component: str) -> Dap """ # Warnings and input validation warn( - 'The Workflow API is a Beta version and is subject to change.', + 'This Workflow API (Beta) method is deprecated and will be removed in a future version. Use the dapr-ext-workflow package instead.', UserWarning, stacklevel=2, ) @@ -1643,6 +1648,7 @@ async def pause_workflow(self, instance_id: str, workflow_component: str) -> Dap async def resume_workflow(self, instance_id: str, workflow_component: str) -> DaprResponse: """Resumes a workflow. + Deprecated: use dapr-ext-workflow instead Args: instance_id (str): the ID of the workflow instance, @@ -1655,7 +1661,7 @@ async def resume_workflow(self, instance_id: str, workflow_component: str) -> Da """ # Warnings and input validation warn( - 'The Workflow API is a Beta version and is subject to change.', + 'This Workflow API (Beta) method is deprecated and will be removed in a future version. Use the dapr-ext-workflow package instead.', UserWarning, stacklevel=2, ) @@ -1674,6 +1680,7 @@ async def resume_workflow(self, instance_id: str, workflow_component: str) -> Da async def purge_workflow(self, instance_id: str, workflow_component: str) -> DaprResponse: """Purges a workflow. + Deprecated: use dapr-ext-workflow instead Args: instance_id (str): the ID of the workflow instance, @@ -1686,7 +1693,7 @@ async def purge_workflow(self, instance_id: str, workflow_component: str) -> Dap """ # Warnings and input validation warn( - 'The Workflow API is a Beta version and is subject to change.', + 'This Workflow API (Beta) method is deprecated and will be removed in a future version. Use the dapr-ext-workflow package instead.', UserWarning, stacklevel=2, ) diff --git a/dapr/clients/grpc/client.py b/dapr/clients/grpc/client.py index 4aa75b55..f7c7b850 100644 --- a/dapr/clients/grpc/client.py +++ b/dapr/clients/grpc/client.py @@ -1413,6 +1413,7 @@ def start_workflow( send_raw_bytes: bool = False, ) -> StartWorkflowResponse: """Starts a workflow. + Deprecated: use dapr-ext-workflow instead Args: workflow_component (str): the name of the workflow component @@ -1434,7 +1435,7 @@ def start_workflow( """ # Warnings and input validation warn( - 'The Workflow API is a Beta version and is subject to change.', + 'This Workflow API (Beta) method is deprecated and will be removed in a future version. Use the dapr-ext-workflow package instead.', UserWarning, stacklevel=2, ) @@ -1470,6 +1471,7 @@ def start_workflow( def get_workflow(self, instance_id: str, workflow_component: str) -> GetWorkflowResponse: """Gets information on a workflow. + Deprecated: use dapr-ext-workflow instead Args: instance_id (str): the ID of the workflow instance, @@ -1482,7 +1484,7 @@ def get_workflow(self, instance_id: str, workflow_component: str) -> GetWorkflow """ # Warnings and input validation warn( - 'The Workflow API is a Beta version and is subject to change.', + 'This Workflow API (Beta) method is deprecated and will be removed in a future version. Use the dapr-ext-workflow package instead.', UserWarning, stacklevel=2, ) @@ -1511,6 +1513,7 @@ def get_workflow(self, instance_id: str, workflow_component: str) -> GetWorkflow def terminate_workflow(self, instance_id: str, workflow_component: str) -> DaprResponse: """Terminates a workflow. + Deprecated: use dapr-ext-workflow instead Args: instance_id (str): the ID of the workflow instance, e.g. @@ -1524,7 +1527,7 @@ def terminate_workflow(self, instance_id: str, workflow_component: str) -> DaprR """ # Warnings and input validation warn( - 'The Workflow API is a Beta version and is subject to change.', + 'This Workflow API (Beta) method is deprecated and will be removed in a future version. Use the dapr-ext-workflow package instead.', UserWarning, stacklevel=2, ) @@ -1549,6 +1552,7 @@ def raise_workflow_event( send_raw_bytes: bool = False, ) -> DaprResponse: """Raises an event on a workflow. + Deprecated: use dapr-ext-workflow instead Args: instance_id (str): the ID of the workflow instance, @@ -1568,7 +1572,7 @@ def raise_workflow_event( """ # Warnings and input validation warn( - 'The Workflow API is a Beta version and is subject to change.', + 'This Workflow API (Beta) method is deprecated and will be removed in a future version. Use the dapr-ext-workflow package instead.', UserWarning, stacklevel=2, ) @@ -1613,6 +1617,7 @@ def raise_workflow_event( def pause_workflow(self, instance_id: str, workflow_component: str) -> DaprResponse: """Pause a workflow. + Deprecated: use dapr-ext-workflow instead Args: instance_id (str): the ID of the workflow instance, @@ -1626,7 +1631,7 @@ def pause_workflow(self, instance_id: str, workflow_component: str) -> DaprRespo """ # Warnings and input validation warn( - 'The Workflow API is a Beta version and is subject to change.', + 'This Workflow API (Beta) method is deprecated and will be removed in a future version. Use the dapr-ext-workflow package instead.', UserWarning, stacklevel=2, ) @@ -1645,6 +1650,7 @@ def pause_workflow(self, instance_id: str, workflow_component: str) -> DaprRespo def resume_workflow(self, instance_id: str, workflow_component: str) -> DaprResponse: """Resumes a workflow. + Deprecated: use dapr-ext-workflow instead Args: instance_id (str): the ID of the workflow instance, @@ -1657,7 +1663,7 @@ def resume_workflow(self, instance_id: str, workflow_component: str) -> DaprResp """ # Warnings and input validation warn( - 'The Workflow API is a Beta version and is subject to change.', + 'This Workflow API (Beta) method is deprecated and will be removed in a future version. Use the dapr-ext-workflow package instead.', UserWarning, stacklevel=2, ) @@ -1676,6 +1682,7 @@ def resume_workflow(self, instance_id: str, workflow_component: str) -> DaprResp def purge_workflow(self, instance_id: str, workflow_component: str) -> DaprResponse: """Purges a workflow. + Deprecated: use dapr-ext-workflow instead Args: instance_id (str): the ID of the workflow instance, @@ -1688,7 +1695,7 @@ def purge_workflow(self, instance_id: str, workflow_component: str) -> DaprRespo """ # Warnings and input validation warn( - 'The Workflow API is a Beta version and is subject to change.', + 'This Workflow API (Beta) method is deprecated and will be removed in a future version. Use the dapr-ext-workflow package instead.', UserWarning, stacklevel=2, ) diff --git a/examples/demo_workflow/app.py b/examples/demo_workflow/app.py index 73965562..8f67fdbd 100644 --- a/examples/demo_workflow/app.py +++ b/examples/demo_workflow/app.py @@ -106,6 +106,9 @@ def act_for_child_wf(ctx: WorkflowActivityContext, inp): def main(): + # DEPRECATION NOTICE! + # The workflow methods in the DaprClient are deprecated, instead use the client provided in dapr-ext-workflow + # You can use the examples in https://github.com/dapr/python-sdk/tree/main/examples/workflow with DaprClient() as d: workflow_runtime = WorkflowRuntime() workflow_runtime.register_workflow(hello_world_wf) diff --git a/examples/demo_workflow/demo_workflow/requirements.txt b/examples/demo_workflow/demo_workflow/requirements.txt index 61f7f5c8..c19dc97f 100644 --- a/examples/demo_workflow/demo_workflow/requirements.txt +++ b/examples/demo_workflow/demo_workflow/requirements.txt @@ -1 +1 @@ -dapr-ext-workflow-dev>=0.0.1rc1.dev +dapr-ext-workflow-dev>=0.0.1rc1.dev \ No newline at end of file diff --git a/tests/clients/test_dapr_grpc_client.py b/tests/clients/test_dapr_grpc_client.py index ad90d8cc..f0644ec7 100644 --- a/tests/clients/test_dapr_grpc_client.py +++ b/tests/clients/test_dapr_grpc_client.py @@ -881,7 +881,7 @@ def test_unlock_input_validation(self): # Tests for workflow # - def test_workflow(self): + def test_workflow_deprecated(self): dapr = DaprGrpcClient(f'{self.scheme}localhost:{self.grpc_port}') # Sane parameters workflow_name = 'test_workflow' From 726067fd33a8e995339502a16f5c0f42fc9a6919 Mon Sep 17 00:00:00 2001 From: Elena Kolevska Date: Thu, 2 Jan 2025 13:02:41 +0000 Subject: [PATCH 14/38] Removes support for 3.8 and adds 3.13 to test version matrix (#763) Signed-off-by: Elena Kolevska --- .github/workflows/build-push-to-main.yaml | 2 +- .github/workflows/build-tag.yaml | 2 +- .github/workflows/build.yaml | 2 +- .github/workflows/validate_examples.yaml | 2 +- README.md | 2 +- daprdocs/content/en/python-sdk-docs/_index.md | 2 +- daprdocs/content/en/python-sdk-docs/python-actor.md | 2 +- .../python-workflow-ext/python-workflow.md | 2 +- examples/configuration/README.md | 2 +- examples/crypto/README.md | 2 +- examples/demo_actor/README.md | 2 +- examples/demo_workflow/README.md | 2 +- examples/distributed_lock/README.md | 2 +- examples/error_handling/README.md | 2 +- examples/grpc_proxying/README.md | 2 +- examples/invoke-binding/README.md | 2 +- examples/invoke-custom-data/README.md | 2 +- examples/invoke-simple/README.md | 2 +- examples/metadata/README.md | 2 +- examples/pubsub-simple/README.md | 2 +- examples/pubsub-streaming-async/README.md | 2 +- examples/pubsub-streaming/README.md | 2 +- examples/secret_store/README.md | 2 +- examples/state_store/README.md | 2 +- examples/state_store_query/README.md | 2 +- examples/w3c-tracing/README.md | 2 +- examples/workflow/README.md | 2 +- ext/dapr-ext-fastapi/setup.cfg | 4 ++-- ext/dapr-ext-grpc/setup.cfg | 4 ++-- ext/dapr-ext-workflow/setup.cfg | 4 ++-- ext/flask_dapr/setup.cfg | 4 ++-- mypy.ini | 2 +- setup.cfg | 4 ++-- tox.ini | 4 ++-- 34 files changed, 40 insertions(+), 40 deletions(-) diff --git a/.github/workflows/build-push-to-main.yaml b/.github/workflows/build-push-to-main.yaml index f176144a..61e212b3 100644 --- a/.github/workflows/build-push-to-main.yaml +++ b/.github/workflows/build-push-to-main.yaml @@ -40,7 +40,7 @@ jobs: strategy: fail-fast: false matrix: - python_ver: ["3.8", "3.9", "3.10", "3.11", "3.12"] + python_ver: ["3.9", "3.10", "3.11", "3.12", "3.13"] steps: - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python_ver }} diff --git a/.github/workflows/build-tag.yaml b/.github/workflows/build-tag.yaml index 24628f55..2d0969b5 100644 --- a/.github/workflows/build-tag.yaml +++ b/.github/workflows/build-tag.yaml @@ -43,7 +43,7 @@ jobs: strategy: fail-fast: false matrix: - python_ver: ["3.8", "3.9", "3.10", "3.11", "3.12"] + python_ver: ["3.9", "3.10", "3.11", "3.12", "3.13"] steps: - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python_ver }} diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 806c9c88..0d49a8b1 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -46,7 +46,7 @@ jobs: strategy: fail-fast: false matrix: - python_ver: ["3.8", "3.9", "3.10", "3.11", "3.12"] + python_ver: ["3.9", "3.10", "3.11", "3.12", "3.13"] steps: - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python_ver }} diff --git a/.github/workflows/validate_examples.yaml b/.github/workflows/validate_examples.yaml index 423e4317..9617223a 100644 --- a/.github/workflows/validate_examples.yaml +++ b/.github/workflows/validate_examples.yaml @@ -46,7 +46,7 @@ jobs: strategy: fail-fast: false matrix: - python_ver: [3.8, 3.9, "3.10", "3.11", "3.12"] + python_ver: ["3.9", "3.10", "3.11", "3.12", "3.13"] steps: - name: Parse repository_dispatch payload if: github.event_name == 'repository_dispatch' diff --git a/README.md b/README.md index 84da5bd8..c639cd73 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ This includes the following packages: ### Prerequisites * [Install Dapr standalone mode](https://github.com/dapr/cli#install-dapr-on-your-local-machine-self-hosted) -* [Install Python 3.8+](https://www.python.org/downloads/) +* [Install Python 3.9+](https://www.python.org/downloads/) ### Install Dapr python sdk diff --git a/daprdocs/content/en/python-sdk-docs/_index.md b/daprdocs/content/en/python-sdk-docs/_index.md index b098c21d..a22d0843 100644 --- a/daprdocs/content/en/python-sdk-docs/_index.md +++ b/daprdocs/content/en/python-sdk-docs/_index.md @@ -18,7 +18,7 @@ Dapr offers a variety of subpackages to help with the development of Python appl - [Dapr CLI]({{< ref install-dapr-cli.md >}}) installed - Initialized [Dapr environment]({{< ref install-dapr-selfhost.md >}}) -- [Python 3.8+](https://www.python.org/downloads/) installed +- [Python 3.9+](https://www.python.org/downloads/) installed ## Installation diff --git a/daprdocs/content/en/python-sdk-docs/python-actor.md b/daprdocs/content/en/python-sdk-docs/python-actor.md index bd85e996..cc6ba570 100644 --- a/daprdocs/content/en/python-sdk-docs/python-actor.md +++ b/daprdocs/content/en/python-sdk-docs/python-actor.md @@ -12,7 +12,7 @@ The Dapr actor package allows you to interact with Dapr virtual actors from a Py - [Dapr CLI]({{< ref install-dapr-cli.md >}}) installed - Initialized [Dapr environment]({{< ref install-dapr-selfhost.md >}}) -- [Python 3.8+](https://www.python.org/downloads/) installed +- [Python 3.9+](https://www.python.org/downloads/) installed - [Dapr Python package]({{< ref "python#installation" >}}) installed ## Actor interface diff --git a/daprdocs/content/en/python-sdk-docs/python-sdk-extensions/python-workflow-ext/python-workflow.md b/daprdocs/content/en/python-sdk-docs/python-sdk-extensions/python-workflow-ext/python-workflow.md index 17f45ec4..b241c9c1 100644 --- a/daprdocs/content/en/python-sdk-docs/python-sdk-extensions/python-workflow-ext/python-workflow.md +++ b/daprdocs/content/en/python-sdk-docs/python-sdk-extensions/python-workflow-ext/python-workflow.md @@ -21,7 +21,7 @@ In the Python example project, the `app.py` file contains the setup of the app, ## Prerequisites - [Dapr CLI]({{< ref install-dapr-cli.md >}}) installed - Initialized [Dapr environment]({{< ref install-dapr-selfhost.md >}}) -- [Python 3.8+](https://www.python.org/downloads/) installed +- [Python 3.9+](https://www.python.org/downloads/) installed - [Dapr Python package]({{< ref "python#installation" >}}) and the [workflow extension]({{< ref "python-workflow/_index.md" >}}) installed - Verify you're using the latest proto bindings diff --git a/examples/configuration/README.md b/examples/configuration/README.md index 3ecfddd8..a9023888 100644 --- a/examples/configuration/README.md +++ b/examples/configuration/README.md @@ -9,7 +9,7 @@ It demonstrates the following APIs: ## Pre-requisites - [Dapr CLI and initialized environment](https://docs.dapr.io/getting-started) -- [Install Python 3.8+](https://www.python.org/downloads/) +- [Install Python 3.9+](https://www.python.org/downloads/) ## Install Dapr python-SDK diff --git a/examples/crypto/README.md b/examples/crypto/README.md index 2202982a..a176b4c9 100644 --- a/examples/crypto/README.md +++ b/examples/crypto/README.md @@ -11,7 +11,7 @@ It creates a client using `DaprClient`, uses a local store defined in ## Pre-requisites - [Dapr CLI and initialized environment](https://docs.dapr.io/getting-started) -- [Install Python 3.8+](https://www.python.org/downloads/) +- [Install Python 3.9+](https://www.python.org/downloads/) > In order to run this sample, make sure that OpenSSL is available on your system. diff --git a/examples/demo_actor/README.md b/examples/demo_actor/README.md index 64ca7ca5..f1b1bbe2 100644 --- a/examples/demo_actor/README.md +++ b/examples/demo_actor/README.md @@ -11,7 +11,7 @@ This document describes how to create an Actor(DemoActor) and invoke its methods ## Pre-requisites - [Dapr CLI and initialized environment](https://docs.dapr.io/getting-started) -- [Install Python 3.8+](https://www.python.org/downloads/) +- [Install Python 3.9+](https://www.python.org/downloads/) ### Install requirements diff --git a/examples/demo_workflow/README.md b/examples/demo_workflow/README.md index 12b84ae2..7570f8f0 100644 --- a/examples/demo_workflow/README.md +++ b/examples/demo_workflow/README.md @@ -12,7 +12,7 @@ It demonstrates the following APIs: ## Pre-requisites - [Dapr CLI and initialized environment](https://docs.dapr.io/getting-started) -- [Install Python 3.8+](https://www.python.org/downloads/) +- [Install Python 3.9+](https://www.python.org/downloads/) ### Install requirements diff --git a/examples/distributed_lock/README.md b/examples/distributed_lock/README.md index 80696c13..367b0e17 100644 --- a/examples/distributed_lock/README.md +++ b/examples/distributed_lock/README.md @@ -12,7 +12,7 @@ all the distributed lock API methods available as example. ## Pre-requisites - [Dapr CLI and initialized environment](https://docs.dapr.io/getting-started) -- [Install Python 3.8+](https://www.python.org/downloads/) +- [Install Python 3.9+](https://www.python.org/downloads/) ## Install Dapr python-SDK diff --git a/examples/error_handling/README.md b/examples/error_handling/README.md index 0ce190d3..067b3ed1 100644 --- a/examples/error_handling/README.md +++ b/examples/error_handling/README.md @@ -8,7 +8,7 @@ It uses the default configuration from Dapr init in [self-hosted mode](https://g ## Pre-requisites - [Dapr CLI and initialized environment](https://docs.dapr.io/getting-started) -- [Install Python 3.8+](https://www.python.org/downloads/) +- [Install Python 3.9+](https://www.python.org/downloads/) ## Install Dapr python-SDK diff --git a/examples/grpc_proxying/README.md b/examples/grpc_proxying/README.md index e31913de..2cd13947 100644 --- a/examples/grpc_proxying/README.md +++ b/examples/grpc_proxying/README.md @@ -7,7 +7,7 @@ This example creates a gRPC service using the protobuf file and adds it to the P ## Pre-requisites - [Dapr CLI and initialized environment](https://docs.dapr.io/getting-started) -- [Install Python 3.8+](https://www.python.org/downloads/) +- [Install Python 3.9+](https://www.python.org/downloads/) ## Install Dapr python-SDK diff --git a/examples/invoke-binding/README.md b/examples/invoke-binding/README.md index d006f76d..74e39576 100644 --- a/examples/invoke-binding/README.md +++ b/examples/invoke-binding/README.md @@ -7,7 +7,7 @@ This example utilizes a publisher and a receiver for the InvokeBinding / OnBindi ## Pre-requisites - [Dapr CLI and initialized environment](https://docs.dapr.io/getting-started) -- [Install Python 3.8+](https://www.python.org/downloads/) +- [Install Python 3.9+](https://www.python.org/downloads/) ## Install Dapr python-SDK diff --git a/examples/invoke-custom-data/README.md b/examples/invoke-custom-data/README.md index e72d74a7..c25a565b 100644 --- a/examples/invoke-custom-data/README.md +++ b/examples/invoke-custom-data/README.md @@ -7,7 +7,7 @@ This example utilizes a receiver and a caller for the OnInvoke / Invoke function ## Pre-requisites - [Dapr CLI and initialized environment](https://docs.dapr.io/getting-started) -- [Install Python 3.8+](https://www.python.org/downloads/) +- [Install Python 3.9+](https://www.python.org/downloads/) ## Install Dapr python-SDK diff --git a/examples/invoke-simple/README.md b/examples/invoke-simple/README.md index 7d78f0cc..08cf68e7 100644 --- a/examples/invoke-simple/README.md +++ b/examples/invoke-simple/README.md @@ -7,7 +7,7 @@ This example utilizes a receiver and a caller for the OnInvoke / Invoke function ## Pre-requisites - [Dapr CLI and initialized environment](https://docs.dapr.io/getting-started) -- [Install Python 3.8+](https://www.python.org/downloads/) +- [Install Python 3.9+](https://www.python.org/downloads/) ## Install Dapr python-SDK diff --git a/examples/metadata/README.md b/examples/metadata/README.md index 3f913285..eafe3723 100644 --- a/examples/metadata/README.md +++ b/examples/metadata/README.md @@ -15,7 +15,7 @@ It creates a client using `DaprClient`, uses a set of components defined in the ## Pre-requisites - [Dapr CLI and initialized environment](https://docs.dapr.io/getting-started) -- [Install Python 3.8+](https://www.python.org/downloads/) +- [Install Python 3.9+](https://www.python.org/downloads/) ## Install Dapr python-SDK diff --git a/examples/pubsub-simple/README.md b/examples/pubsub-simple/README.md index 97af9a4a..f4730a42 100644 --- a/examples/pubsub-simple/README.md +++ b/examples/pubsub-simple/README.md @@ -10,7 +10,7 @@ The subscriber will tell dapr to retry delivery of the first message it receives ## Pre-requisites - [Dapr CLI and initialized environment](https://docs.dapr.io/getting-started) -- [Install Python 3.8+](https://www.python.org/downloads/) +- [Install Python 3.9+](https://www.python.org/downloads/) ## Install Dapr python-SDK diff --git a/examples/pubsub-streaming-async/README.md b/examples/pubsub-streaming-async/README.md index 60c1cdef..4a399a5b 100644 --- a/examples/pubsub-streaming-async/README.md +++ b/examples/pubsub-streaming-async/README.md @@ -10,7 +10,7 @@ In the s`subscriber.py` file it creates a subscriber object that can call the `n ## Pre-requisites - [Dapr CLI and initialized environment](https://docs.dapr.io/getting-started) -- [Install Python 3.8+](https://www.python.org/downloads/) +- [Install Python 3.9+](https://www.python.org/downloads/) ## Install Dapr python-SDK diff --git a/examples/pubsub-streaming/README.md b/examples/pubsub-streaming/README.md index 15664522..d03ff045 100644 --- a/examples/pubsub-streaming/README.md +++ b/examples/pubsub-streaming/README.md @@ -10,7 +10,7 @@ In the s`subscriber.py` file it creates a subscriber object that can call the `n ## Pre-requisites - [Dapr CLI and initialized environment](https://docs.dapr.io/getting-started) -- [Install Python 3.8+](https://www.python.org/downloads/) +- [Install Python 3.9+](https://www.python.org/downloads/) ## Install Dapr python-SDK diff --git a/examples/secret_store/README.md b/examples/secret_store/README.md index cf5b86e0..1bb8e3ae 100644 --- a/examples/secret_store/README.md +++ b/examples/secret_store/README.md @@ -9,7 +9,7 @@ This example also illustrates the use of access control for secrets. ## Pre-requisites - [Dapr CLI and initialized environment](https://docs.dapr.io/getting-started) -- [Install Python 3.8+](https://www.python.org/downloads/) +- [Install Python 3.9+](https://www.python.org/downloads/) ## Install Dapr python-SDK diff --git a/examples/state_store/README.md b/examples/state_store/README.md index 67ea5791..f4207476 100644 --- a/examples/state_store/README.md +++ b/examples/state_store/README.md @@ -17,7 +17,7 @@ It uses the default configuration from Dapr init in [self-hosted mode](https://g ## Pre-requisites - [Dapr CLI and initialized environment](https://docs.dapr.io/getting-started) -- [Install Python 3.8+](https://www.python.org/downloads/) +- [Install Python 3.9+](https://www.python.org/downloads/) ## Install Dapr python-SDK diff --git a/examples/state_store_query/README.md b/examples/state_store_query/README.md index a6e8fceb..bdfa9416 100644 --- a/examples/state_store_query/README.md +++ b/examples/state_store_query/README.md @@ -9,7 +9,7 @@ It demonstrates the following APIs: ## Pre-requisites - [Dapr CLI and initialized environment](https://docs.dapr.io/getting-started) -- [Install Python 3.8+](https://www.python.org/downloads/) +- [Install Python 3.9+](https://www.python.org/downloads/) ## Install Dapr python-SDK diff --git a/examples/w3c-tracing/README.md b/examples/w3c-tracing/README.md index 8f694e8b..d8ed7d6b 100644 --- a/examples/w3c-tracing/README.md +++ b/examples/w3c-tracing/README.md @@ -15,7 +15,7 @@ This sample uses the Client provided in Dapr's Python SDK invoking a remote meth ## Pre-requisites - [Dapr CLI and initialized environment](https://docs.dapr.io/getting-started) -- [Install Python 3.8+](https://www.python.org/downloads/) +- [Install Python 3.9+](https://www.python.org/downloads/) ### Install dependencies diff --git a/examples/workflow/README.md b/examples/workflow/README.md index 63208c8e..6b936b31 100644 --- a/examples/workflow/README.md +++ b/examples/workflow/README.md @@ -5,7 +5,7 @@ This directory contains examples of using the [Dapr Workflow](https://docs.dapr. ## Prerequisites - [Dapr CLI and initialized environment](https://docs.dapr.io/getting-started) -- [Install Python 3.8+](https://www.python.org/downloads/) +- [Install Python 3.9+](https://www.python.org/downloads/) ### Install requirements diff --git a/ext/dapr-ext-fastapi/setup.cfg b/ext/dapr-ext-fastapi/setup.cfg index f4f5ead4..ed5a6810 100644 --- a/ext/dapr-ext-fastapi/setup.cfg +++ b/ext/dapr-ext-fastapi/setup.cfg @@ -10,17 +10,17 @@ classifiers = License :: OSI Approved :: Apache Software License Operating System :: OS Independent Programming Language :: Python - Programming Language :: Python :: 3.8 Programming Language :: Python :: 3.9 Programming Language :: Python :: 3.10 Programming Language :: Python :: 3.11 Programming Language :: Python :: 3.12 + Programming Language :: Python :: 3.13 project_urls = Documentation = https://github.com/dapr/docs Source = https://github.com/dapr/python-sdk [options] -python_requires = >=3.8 +python_requires = >=3.9 packages = find_namespace: include_package_data = True install_requires = diff --git a/ext/dapr-ext-grpc/setup.cfg b/ext/dapr-ext-grpc/setup.cfg index 7a25b628..1a87234c 100644 --- a/ext/dapr-ext-grpc/setup.cfg +++ b/ext/dapr-ext-grpc/setup.cfg @@ -10,17 +10,17 @@ classifiers = License :: OSI Approved :: Apache Software License Operating System :: OS Independent Programming Language :: Python - Programming Language :: Python :: 3.8 Programming Language :: Python :: 3.9 Programming Language :: Python :: 3.10 Programming Language :: Python :: 3.11 Programming Language :: Python :: 3.12 + Programming Language :: Python :: 3.13 project_urls = Documentation = https://github.com/dapr/docs Source = https://github.com/dapr/python-sdk [options] -python_requires = >=3.8 +python_requires = >=3.9 packages = find_namespace: include_package_data = True install_requires = diff --git a/ext/dapr-ext-workflow/setup.cfg b/ext/dapr-ext-workflow/setup.cfg index 475b2bdf..0cd3949a 100644 --- a/ext/dapr-ext-workflow/setup.cfg +++ b/ext/dapr-ext-workflow/setup.cfg @@ -10,17 +10,17 @@ classifiers = License :: OSI Approved :: Apache Software License Operating System :: OS Independent Programming Language :: Python - Programming Language :: Python :: 3.8 Programming Language :: Python :: 3.9 Programming Language :: Python :: 3.10 Programming Language :: Python :: 3.11 Programming Language :: Python :: 3.12 + Programming Language :: Python :: 3.13 project_urls = Documentation = https://github.com/dapr/docs Source = https://github.com/dapr/python-sdk [options] -python_requires = >=3.8 +python_requires = >=3.9 packages = find_namespace: include_package_data = True install_requires = diff --git a/ext/flask_dapr/setup.cfg b/ext/flask_dapr/setup.cfg index 4cccbd36..ed98c443 100644 --- a/ext/flask_dapr/setup.cfg +++ b/ext/flask_dapr/setup.cfg @@ -10,17 +10,17 @@ classifiers = License :: OSI Approved :: Apache Software License Operating System :: OS Independent Programming Language :: Python - Programming Language :: Python :: 3.8 Programming Language :: Python :: 3.9 Programming Language :: Python :: 3.10 Programming Language :: Python :: 3.11 Programming Language :: Python :: 3.12 + Programming Language :: Python :: 3.13 project_urls = Documentation = https://github.com/dapr/docs Source = https://github.com/dapr/python-sdk [options] -python_requires = >=3.8 +python_requires = >=3.9 packages = find: include_package_data = true zip_safe = false diff --git a/mypy.ini b/mypy.ini index 9ae893ad..8c0fee4f 100644 --- a/mypy.ini +++ b/mypy.ini @@ -1,5 +1,5 @@ [mypy] -python_version = 3.8 +python_version = 3.9 warn_unused_configs = True warn_redundant_casts = True show_error_codes = True diff --git a/setup.cfg b/setup.cfg index 87c00f36..dcb6ba8d 100644 --- a/setup.cfg +++ b/setup.cfg @@ -10,17 +10,17 @@ classifiers = License :: OSI Approved :: Apache Software License Operating System :: OS Independent Programming Language :: Python - Programming Language :: Python :: 3.8 Programming Language :: Python :: 3.9 Programming Language :: Python :: 3.10 Programming Language :: Python :: 3.11 Programming Language :: Python :: 3.12 + Programming Language :: Python :: 3.13 project_urls = Documentation = https://github.com/dapr/docs Source = https://github.com/dapr/python-sdk [options] -python_requires = >=3.8 +python_requires = >=3.9 packages = find_namespace: include_package_data = True zip_safe = False diff --git a/tox.ini b/tox.ini index 5e7a2539..d81984a3 100644 --- a/tox.ini +++ b/tox.ini @@ -1,8 +1,8 @@ [tox] skipsdist = True -minversion = 3.8.0 +minversion = 3.9.0 envlist = - py{38,39,310,311,312} + py{39,310,311,312,313} flake8, ruff, mypy, From 18a865ee551e0fac497ef9af8962b6eb320abd02 Mon Sep 17 00:00:00 2001 From: Elena Kolevska Date: Thu, 9 Jan 2025 11:44:30 +0000 Subject: [PATCH 15/38] Updates protos and fixes grpc-tools for protos generation (#766) * Updates protos and fixes grpc-tools for protos generation Signed-off-by: Elena Kolevska * bumps grpcio tools version Signed-off-by: Elena Kolevska --------- Signed-off-by: Elena Kolevska --- README.md | 3 +- dapr/proto/README.md | 2 +- dapr/proto/common/v1/common_pb2.py | 14 +- dapr/proto/runtime/v1/appcallback_pb2.py | 22 +-- dapr/proto/runtime/v1/dapr_pb2.py | 194 ++++++++++++----------- dapr/proto/runtime/v1/dapr_pb2.pyi | 24 +-- dapr/proto/runtime/v1/dapr_pb2_grpc.py | 12 +- tools/requirements.txt | 2 +- 8 files changed, 143 insertions(+), 130 deletions(-) diff --git a/README.md b/README.md index c639cd73..b6f7d0a7 100644 --- a/README.md +++ b/README.md @@ -137,8 +137,7 @@ The generated files will be found in `docs/_build`. ## Generate gRPC Protobuf client ```sh -pip3 install -r dev-requirements.txt - +pip3 install -r tools/requirements.txt ./tools/regen_grpcclient.sh ``` diff --git a/dapr/proto/README.md b/dapr/proto/README.md index 8ce19995..d6639541 100644 --- a/dapr/proto/README.md +++ b/dapr/proto/README.md @@ -12,7 +12,7 @@ source /bin/activate Run the following commands: ```sh -pip3 install -r dev-requirements.txt +pip3 install -r tools/requirements.txt ./tools/regen_grpcclient.sh ``` diff --git a/dapr/proto/common/v1/common_pb2.py b/dapr/proto/common/v1/common_pb2.py index a1bf2566..673bac1b 100644 --- a/dapr/proto/common/v1/common_pb2.py +++ b/dapr/proto/common/v1/common_pb2.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: dapr/proto/common/v1/common.proto +# Protobuf Python Version: 4.25.1 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool @@ -20,13 +21,12 @@ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'dapr.proto.common.v1.common_pb2', _globals) if _descriptor._USE_C_DESCRIPTORS == False: - - DESCRIPTOR._options = None - DESCRIPTOR._serialized_options = b'\n\nio.dapr.v1B\014CommonProtosZ/github.com/dapr/dapr/pkg/proto/common/v1;common\252\002\033Dapr.Client.Autogen.Grpc.v1' - _STATEITEM_METADATAENTRY._options = None - _STATEITEM_METADATAENTRY._serialized_options = b'8\001' - _CONFIGURATIONITEM_METADATAENTRY._options = None - _CONFIGURATIONITEM_METADATAENTRY._serialized_options = b'8\001' + _globals['DESCRIPTOR']._options = None + _globals['DESCRIPTOR']._serialized_options = b'\n\nio.dapr.v1B\014CommonProtosZ/github.com/dapr/dapr/pkg/proto/common/v1;common\252\002\033Dapr.Client.Autogen.Grpc.v1' + _globals['_STATEITEM_METADATAENTRY']._options = None + _globals['_STATEITEM_METADATAENTRY']._serialized_options = b'8\001' + _globals['_CONFIGURATIONITEM_METADATAENTRY']._options = None + _globals['_CONFIGURATIONITEM_METADATAENTRY']._serialized_options = b'8\001' _globals['_HTTPEXTENSION']._serialized_start=87 _globals['_HTTPEXTENSION']._serialized_end=295 _globals['_HTTPEXTENSION_VERB']._serialized_start=181 diff --git a/dapr/proto/runtime/v1/appcallback_pb2.py b/dapr/proto/runtime/v1/appcallback_pb2.py index f661ff99..6773f762 100644 --- a/dapr/proto/runtime/v1/appcallback_pb2.py +++ b/dapr/proto/runtime/v1/appcallback_pb2.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: dapr/proto/runtime/v1/appcallback.proto +# Protobuf Python Version: 4.25.1 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool @@ -23,17 +24,16 @@ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'dapr.proto.runtime.v1.appcallback_pb2', _globals) if _descriptor._USE_C_DESCRIPTORS == False: - - DESCRIPTOR._options = None - DESCRIPTOR._serialized_options = b'\n\nio.dapr.v1B\025DaprAppCallbackProtosZ1github.com/dapr/dapr/pkg/proto/runtime/v1;runtime\252\002 Dapr.AppCallback.Autogen.Grpc.v1' - _TOPICEVENTBULKREQUESTENTRY_METADATAENTRY._options = None - _TOPICEVENTBULKREQUESTENTRY_METADATAENTRY._serialized_options = b'8\001' - _TOPICEVENTBULKREQUEST_METADATAENTRY._options = None - _TOPICEVENTBULKREQUEST_METADATAENTRY._serialized_options = b'8\001' - _BINDINGEVENTREQUEST_METADATAENTRY._options = None - _BINDINGEVENTREQUEST_METADATAENTRY._serialized_options = b'8\001' - _TOPICSUBSCRIPTION_METADATAENTRY._options = None - _TOPICSUBSCRIPTION_METADATAENTRY._serialized_options = b'8\001' + _globals['DESCRIPTOR']._options = None + _globals['DESCRIPTOR']._serialized_options = b'\n\nio.dapr.v1B\025DaprAppCallbackProtosZ1github.com/dapr/dapr/pkg/proto/runtime/v1;runtime\252\002 Dapr.AppCallback.Autogen.Grpc.v1' + _globals['_TOPICEVENTBULKREQUESTENTRY_METADATAENTRY']._options = None + _globals['_TOPICEVENTBULKREQUESTENTRY_METADATAENTRY']._serialized_options = b'8\001' + _globals['_TOPICEVENTBULKREQUEST_METADATAENTRY']._options = None + _globals['_TOPICEVENTBULKREQUEST_METADATAENTRY']._serialized_options = b'8\001' + _globals['_BINDINGEVENTREQUEST_METADATAENTRY']._options = None + _globals['_BINDINGEVENTREQUEST_METADATAENTRY']._serialized_options = b'8\001' + _globals['_TOPICSUBSCRIPTION_METADATAENTRY']._options = None + _globals['_TOPICSUBSCRIPTION_METADATAENTRY']._serialized_options = b'8\001' _globals['_JOBEVENTREQUEST']._serialized_start=188 _globals['_JOBEVENTREQUEST']._serialized_end=354 _globals['_JOBEVENTRESPONSE']._serialized_start=356 diff --git a/dapr/proto/runtime/v1/dapr_pb2.py b/dapr/proto/runtime/v1/dapr_pb2.py index e2e9ccbc..7c1520de 100644 --- a/dapr/proto/runtime/v1/dapr_pb2.py +++ b/dapr/proto/runtime/v1/dapr_pb2.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: dapr/proto/runtime/v1/dapr.proto +# Protobuf Python Version: 4.25.1 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool @@ -18,85 +19,98 @@ from dapr.proto.runtime.v1 import appcallback_pb2 as dapr_dot_proto_dot_runtime_dot_v1_dot_appcallback__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n dapr/proto/runtime/v1/dapr.proto\x12\x15\x64\x61pr.proto.runtime.v1\x1a\x19google/protobuf/any.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a!dapr/proto/common/v1/common.proto\x1a\'dapr/proto/runtime/v1/appcallback.proto\"X\n\x14InvokeServiceRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x34\n\x07message\x18\x03 \x01(\x0b\x32#.dapr.proto.common.v1.InvokeRequest\"\xf5\x01\n\x0fGetStateRequest\x12\x12\n\nstore_name\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\t\x12H\n\x0b\x63onsistency\x18\x03 \x01(\x0e\x32\x33.dapr.proto.common.v1.StateOptions.StateConsistency\x12\x46\n\x08metadata\x18\x04 \x03(\x0b\x32\x34.dapr.proto.runtime.v1.GetStateRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xc9\x01\n\x13GetBulkStateRequest\x12\x12\n\nstore_name\x18\x01 \x01(\t\x12\x0c\n\x04keys\x18\x02 \x03(\t\x12\x13\n\x0bparallelism\x18\x03 \x01(\x05\x12J\n\x08metadata\x18\x04 \x03(\x0b\x32\x38.dapr.proto.runtime.v1.GetBulkStateRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"K\n\x14GetBulkStateResponse\x12\x33\n\x05items\x18\x01 \x03(\x0b\x32$.dapr.proto.runtime.v1.BulkStateItem\"\xbe\x01\n\rBulkStateItem\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\x12\x0c\n\x04\x65tag\x18\x03 \x01(\t\x12\r\n\x05\x65rror\x18\x04 \x01(\t\x12\x44\n\x08metadata\x18\x05 \x03(\x0b\x32\x32.dapr.proto.runtime.v1.BulkStateItem.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xa8\x01\n\x10GetStateResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\x12\x0c\n\x04\x65tag\x18\x02 \x01(\t\x12G\n\x08metadata\x18\x03 \x03(\x0b\x32\x35.dapr.proto.runtime.v1.GetStateResponse.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x90\x02\n\x12\x44\x65leteStateRequest\x12\x12\n\nstore_name\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\t\x12(\n\x04\x65tag\x18\x03 \x01(\x0b\x32\x1a.dapr.proto.common.v1.Etag\x12\x33\n\x07options\x18\x04 \x01(\x0b\x32\".dapr.proto.common.v1.StateOptions\x12I\n\x08metadata\x18\x05 \x03(\x0b\x32\x37.dapr.proto.runtime.v1.DeleteStateRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"]\n\x16\x44\x65leteBulkStateRequest\x12\x12\n\nstore_name\x18\x01 \x01(\t\x12/\n\x06states\x18\x02 \x03(\x0b\x32\x1f.dapr.proto.common.v1.StateItem\"W\n\x10SaveStateRequest\x12\x12\n\nstore_name\x18\x01 \x01(\t\x12/\n\x06states\x18\x02 \x03(\x0b\x32\x1f.dapr.proto.common.v1.StateItem\"\xbc\x01\n\x11QueryStateRequest\x12\x1d\n\nstore_name\x18\x01 \x01(\tR\tstoreName\x12\r\n\x05query\x18\x02 \x01(\t\x12H\n\x08metadata\x18\x03 \x03(\x0b\x32\x36.dapr.proto.runtime.v1.QueryStateRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"H\n\x0eQueryStateItem\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\x12\x0c\n\x04\x65tag\x18\x03 \x01(\t\x12\r\n\x05\x65rror\x18\x04 \x01(\t\"\xd7\x01\n\x12QueryStateResponse\x12\x36\n\x07results\x18\x01 \x03(\x0b\x32%.dapr.proto.runtime.v1.QueryStateItem\x12\r\n\x05token\x18\x02 \x01(\t\x12I\n\x08metadata\x18\x03 \x03(\x0b\x32\x37.dapr.proto.runtime.v1.QueryStateResponse.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xdf\x01\n\x13PublishEventRequest\x12\x13\n\x0bpubsub_name\x18\x01 \x01(\t\x12\r\n\x05topic\x18\x02 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\x0c\x12\x19\n\x11\x64\x61ta_content_type\x18\x04 \x01(\t\x12J\n\x08metadata\x18\x05 \x03(\x0b\x32\x38.dapr.proto.runtime.v1.PublishEventRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xf5\x01\n\x12\x42ulkPublishRequest\x12\x13\n\x0bpubsub_name\x18\x01 \x01(\t\x12\r\n\x05topic\x18\x02 \x01(\t\x12?\n\x07\x65ntries\x18\x03 \x03(\x0b\x32..dapr.proto.runtime.v1.BulkPublishRequestEntry\x12I\n\x08metadata\x18\x04 \x03(\x0b\x32\x37.dapr.proto.runtime.v1.BulkPublishRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xd1\x01\n\x17\x42ulkPublishRequestEntry\x12\x10\n\x08\x65ntry_id\x18\x01 \x01(\t\x12\r\n\x05\x65vent\x18\x02 \x01(\x0c\x12\x14\n\x0c\x63ontent_type\x18\x03 \x01(\t\x12N\n\x08metadata\x18\x04 \x03(\x0b\x32<.dapr.proto.runtime.v1.BulkPublishRequestEntry.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"c\n\x13\x42ulkPublishResponse\x12L\n\rfailedEntries\x18\x01 \x03(\x0b\x32\x35.dapr.proto.runtime.v1.BulkPublishResponseFailedEntry\"A\n\x1e\x42ulkPublishResponseFailedEntry\x12\x10\n\x08\x65ntry_id\x18\x01 \x01(\t\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"\x84\x02\n!SubscribeTopicEventsRequestAlpha1\x12Z\n\x0finitial_request\x18\x01 \x01(\x0b\x32?.dapr.proto.runtime.v1.SubscribeTopicEventsRequestInitialAlpha1H\x00\x12\\\n\x0f\x65vent_processed\x18\x02 \x01(\x0b\x32\x41.dapr.proto.runtime.v1.SubscribeTopicEventsRequestProcessedAlpha1H\x00\x42%\n#subscribe_topic_events_request_type\"\x96\x02\n(SubscribeTopicEventsRequestInitialAlpha1\x12\x13\n\x0bpubsub_name\x18\x01 \x01(\t\x12\r\n\x05topic\x18\x02 \x01(\t\x12_\n\x08metadata\x18\x03 \x03(\x0b\x32M.dapr.proto.runtime.v1.SubscribeTopicEventsRequestInitialAlpha1.MetadataEntry\x12\x1e\n\x11\x64\x65\x61\x64_letter_topic\x18\x04 \x01(\tH\x00\x88\x01\x01\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x14\n\x12_dead_letter_topic\"s\n*SubscribeTopicEventsRequestProcessedAlpha1\x12\n\n\x02id\x18\x01 \x01(\t\x12\x39\n\x06status\x18\x02 \x01(\x0b\x32).dapr.proto.runtime.v1.TopicEventResponse\"\xed\x01\n\"SubscribeTopicEventsResponseAlpha1\x12\\\n\x10initial_response\x18\x01 \x01(\x0b\x32@.dapr.proto.runtime.v1.SubscribeTopicEventsResponseInitialAlpha1H\x00\x12\x41\n\revent_message\x18\x02 \x01(\x0b\x32(.dapr.proto.runtime.v1.TopicEventRequestH\x00\x42&\n$subscribe_topic_events_response_type\"+\n)SubscribeTopicEventsResponseInitialAlpha1\"\xc3\x01\n\x14InvokeBindingRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\x12K\n\x08metadata\x18\x03 \x03(\x0b\x32\x39.dapr.proto.runtime.v1.InvokeBindingRequest.MetadataEntry\x12\x11\n\toperation\x18\x04 \x01(\t\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xa4\x01\n\x15InvokeBindingResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\x12L\n\x08metadata\x18\x02 \x03(\x0b\x32:.dapr.proto.runtime.v1.InvokeBindingResponse.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xb8\x01\n\x10GetSecretRequest\x12\x1d\n\nstore_name\x18\x01 \x01(\tR\tstoreName\x12\x0b\n\x03key\x18\x02 \x01(\t\x12G\n\x08metadata\x18\x03 \x03(\x0b\x32\x35.dapr.proto.runtime.v1.GetSecretRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x82\x01\n\x11GetSecretResponse\x12@\n\x04\x64\x61ta\x18\x01 \x03(\x0b\x32\x32.dapr.proto.runtime.v1.GetSecretResponse.DataEntry\x1a+\n\tDataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xb3\x01\n\x14GetBulkSecretRequest\x12\x1d\n\nstore_name\x18\x01 \x01(\tR\tstoreName\x12K\n\x08metadata\x18\x02 \x03(\x0b\x32\x39.dapr.proto.runtime.v1.GetBulkSecretRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x85\x01\n\x0eSecretResponse\x12\x43\n\x07secrets\x18\x01 \x03(\x0b\x32\x32.dapr.proto.runtime.v1.SecretResponse.SecretsEntry\x1a.\n\x0cSecretsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xb1\x01\n\x15GetBulkSecretResponse\x12\x44\n\x04\x64\x61ta\x18\x01 \x03(\x0b\x32\x36.dapr.proto.runtime.v1.GetBulkSecretResponse.DataEntry\x1aR\n\tDataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x34\n\x05value\x18\x02 \x01(\x0b\x32%.dapr.proto.runtime.v1.SecretResponse:\x02\x38\x01\"f\n\x1bTransactionalStateOperation\x12\x15\n\roperationType\x18\x01 \x01(\t\x12\x30\n\x07request\x18\x02 \x01(\x0b\x32\x1f.dapr.proto.common.v1.StateItem\"\x83\x02\n\x1e\x45xecuteStateTransactionRequest\x12\x11\n\tstoreName\x18\x01 \x01(\t\x12\x46\n\noperations\x18\x02 \x03(\x0b\x32\x32.dapr.proto.runtime.v1.TransactionalStateOperation\x12U\n\x08metadata\x18\x03 \x03(\x0b\x32\x43.dapr.proto.runtime.v1.ExecuteStateTransactionRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xbb\x01\n\x19RegisterActorTimerRequest\x12\x1d\n\nactor_type\x18\x01 \x01(\tR\tactorType\x12\x19\n\x08\x61\x63tor_id\x18\x02 \x01(\tR\x07\x61\x63torId\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x19\n\x08\x64ue_time\x18\x04 \x01(\tR\x07\x64ueTime\x12\x0e\n\x06period\x18\x05 \x01(\t\x12\x10\n\x08\x63\x61llback\x18\x06 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x07 \x01(\x0c\x12\x0b\n\x03ttl\x18\x08 \x01(\t\"e\n\x1bUnregisterActorTimerRequest\x12\x1d\n\nactor_type\x18\x01 \x01(\tR\tactorType\x12\x19\n\x08\x61\x63tor_id\x18\x02 \x01(\tR\x07\x61\x63torId\x12\x0c\n\x04name\x18\x03 \x01(\t\"\xac\x01\n\x1cRegisterActorReminderRequest\x12\x1d\n\nactor_type\x18\x01 \x01(\tR\tactorType\x12\x19\n\x08\x61\x63tor_id\x18\x02 \x01(\tR\x07\x61\x63torId\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x19\n\x08\x64ue_time\x18\x04 \x01(\tR\x07\x64ueTime\x12\x0e\n\x06period\x18\x05 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x06 \x01(\x0c\x12\x0b\n\x03ttl\x18\x07 \x01(\t\"h\n\x1eUnregisterActorReminderRequest\x12\x1d\n\nactor_type\x18\x01 \x01(\tR\tactorType\x12\x19\n\x08\x61\x63tor_id\x18\x02 \x01(\tR\x07\x61\x63torId\x12\x0c\n\x04name\x18\x03 \x01(\t\"]\n\x14GetActorStateRequest\x12\x1d\n\nactor_type\x18\x01 \x01(\tR\tactorType\x12\x19\n\x08\x61\x63tor_id\x18\x02 \x01(\tR\x07\x61\x63torId\x12\x0b\n\x03key\x18\x03 \x01(\t\"\xa4\x01\n\x15GetActorStateResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\x12L\n\x08metadata\x18\x02 \x03(\x0b\x32:.dapr.proto.runtime.v1.GetActorStateResponse.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xac\x01\n#ExecuteActorStateTransactionRequest\x12\x1d\n\nactor_type\x18\x01 \x01(\tR\tactorType\x12\x19\n\x08\x61\x63tor_id\x18\x02 \x01(\tR\x07\x61\x63torId\x12K\n\noperations\x18\x03 \x03(\x0b\x32\x37.dapr.proto.runtime.v1.TransactionalActorStateOperation\"\xf5\x01\n TransactionalActorStateOperation\x12\x15\n\roperationType\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\t\x12#\n\x05value\x18\x03 \x01(\x0b\x32\x14.google.protobuf.Any\x12W\n\x08metadata\x18\x04 \x03(\x0b\x32\x45.dapr.proto.runtime.v1.TransactionalActorStateOperation.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xe8\x01\n\x12InvokeActorRequest\x12\x1d\n\nactor_type\x18\x01 \x01(\tR\tactorType\x12\x19\n\x08\x61\x63tor_id\x18\x02 \x01(\tR\x07\x61\x63torId\x12\x0e\n\x06method\x18\x03 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\x0c\x12I\n\x08metadata\x18\x05 \x03(\x0b\x32\x37.dapr.proto.runtime.v1.InvokeActorRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"#\n\x13InvokeActorResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\"\x14\n\x12GetMetadataRequest\"\x9b\x06\n\x13GetMetadataResponse\x12\n\n\x02id\x18\x01 \x01(\t\x12Q\n\x13\x61\x63tive_actors_count\x18\x02 \x03(\x0b\x32(.dapr.proto.runtime.v1.ActiveActorsCountB\x02\x18\x01R\x06\x61\x63tors\x12V\n\x15registered_components\x18\x03 \x03(\x0b\x32+.dapr.proto.runtime.v1.RegisteredComponentsR\ncomponents\x12\x65\n\x11\x65xtended_metadata\x18\x04 \x03(\x0b\x32@.dapr.proto.runtime.v1.GetMetadataResponse.ExtendedMetadataEntryR\x08\x65xtended\x12O\n\rsubscriptions\x18\x05 \x03(\x0b\x32).dapr.proto.runtime.v1.PubsubSubscriptionR\rsubscriptions\x12R\n\x0ehttp_endpoints\x18\x06 \x03(\x0b\x32+.dapr.proto.runtime.v1.MetadataHTTPEndpointR\rhttpEndpoints\x12j\n\x19\x61pp_connection_properties\x18\x07 \x01(\x0b\x32..dapr.proto.runtime.v1.AppConnectionPropertiesR\x17\x61ppConnectionProperties\x12\'\n\x0fruntime_version\x18\x08 \x01(\tR\x0eruntimeVersion\x12)\n\x10\x65nabled_features\x18\t \x03(\tR\x0f\x65nabledFeatures\x12H\n\ractor_runtime\x18\n \x01(\x0b\x32#.dapr.proto.runtime.v1.ActorRuntimeR\x0c\x61\x63torRuntime\x1a\x37\n\x15\x45xtendedMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xbc\x02\n\x0c\x41\x63torRuntime\x12]\n\x0eruntime_status\x18\x01 \x01(\x0e\x32\x36.dapr.proto.runtime.v1.ActorRuntime.ActorRuntimeStatusR\rruntimeStatus\x12M\n\ractive_actors\x18\x02 \x03(\x0b\x32(.dapr.proto.runtime.v1.ActiveActorsCountR\x0c\x61\x63tiveActors\x12\x1d\n\nhost_ready\x18\x03 \x01(\x08R\thostReady\x12\x1c\n\tplacement\x18\x04 \x01(\tR\tplacement\"A\n\x12\x41\x63torRuntimeStatus\x12\x10\n\x0cINITIALIZING\x10\x00\x12\x0c\n\x08\x44ISABLED\x10\x01\x12\x0b\n\x07RUNNING\x10\x02\"0\n\x11\x41\x63tiveActorsCount\x12\x0c\n\x04type\x18\x01 \x01(\t\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"Y\n\x14RegisteredComponents\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04type\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\t\x12\x14\n\x0c\x63\x61pabilities\x18\x04 \x03(\t\"*\n\x14MetadataHTTPEndpoint\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\"\xd1\x01\n\x17\x41ppConnectionProperties\x12\x0c\n\x04port\x18\x01 \x01(\x05\x12\x10\n\x08protocol\x18\x02 \x01(\t\x12\'\n\x0f\x63hannel_address\x18\x03 \x01(\tR\x0e\x63hannelAddress\x12\'\n\x0fmax_concurrency\x18\x04 \x01(\x05R\x0emaxConcurrency\x12\x44\n\x06health\x18\x05 \x01(\x0b\x32\x34.dapr.proto.runtime.v1.AppConnectionHealthProperties\"\xdc\x01\n\x1d\x41ppConnectionHealthProperties\x12*\n\x11health_check_path\x18\x01 \x01(\tR\x0fhealthCheckPath\x12\x32\n\x15health_probe_interval\x18\x02 \x01(\tR\x13healthProbeInterval\x12\x30\n\x14health_probe_timeout\x18\x03 \x01(\tR\x12healthProbeTimeout\x12)\n\x10health_threshold\x18\x04 \x01(\x05R\x0fhealthThreshold\"\x86\x03\n\x12PubsubSubscription\x12\x1f\n\x0bpubsub_name\x18\x01 \x01(\tR\npubsubname\x12\x14\n\x05topic\x18\x02 \x01(\tR\x05topic\x12S\n\x08metadata\x18\x03 \x03(\x0b\x32\x37.dapr.proto.runtime.v1.PubsubSubscription.MetadataEntryR\x08metadata\x12\x44\n\x05rules\x18\x04 \x01(\x0b\x32..dapr.proto.runtime.v1.PubsubSubscriptionRulesR\x05rules\x12*\n\x11\x64\x65\x61\x64_letter_topic\x18\x05 \x01(\tR\x0f\x64\x65\x61\x64LetterTopic\x12\x41\n\x04type\x18\x06 \x01(\x0e\x32-.dapr.proto.runtime.v1.PubsubSubscriptionTypeR\x04type\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"W\n\x17PubsubSubscriptionRules\x12<\n\x05rules\x18\x01 \x03(\x0b\x32-.dapr.proto.runtime.v1.PubsubSubscriptionRule\"5\n\x16PubsubSubscriptionRule\x12\r\n\x05match\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\t\"0\n\x12SetMetadataRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"\xbc\x01\n\x17GetConfigurationRequest\x12\x12\n\nstore_name\x18\x01 \x01(\t\x12\x0c\n\x04keys\x18\x02 \x03(\t\x12N\n\x08metadata\x18\x03 \x03(\x0b\x32<.dapr.proto.runtime.v1.GetConfigurationRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xbc\x01\n\x18GetConfigurationResponse\x12I\n\x05items\x18\x01 \x03(\x0b\x32:.dapr.proto.runtime.v1.GetConfigurationResponse.ItemsEntry\x1aU\n\nItemsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x36\n\x05value\x18\x02 \x01(\x0b\x32\'.dapr.proto.common.v1.ConfigurationItem:\x02\x38\x01\"\xc8\x01\n\x1dSubscribeConfigurationRequest\x12\x12\n\nstore_name\x18\x01 \x01(\t\x12\x0c\n\x04keys\x18\x02 \x03(\t\x12T\n\x08metadata\x18\x03 \x03(\x0b\x32\x42.dapr.proto.runtime.v1.SubscribeConfigurationRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"A\n\x1fUnsubscribeConfigurationRequest\x12\x12\n\nstore_name\x18\x01 \x01(\t\x12\n\n\x02id\x18\x02 \x01(\t\"\xd4\x01\n\x1eSubscribeConfigurationResponse\x12\n\n\x02id\x18\x01 \x01(\t\x12O\n\x05items\x18\x02 \x03(\x0b\x32@.dapr.proto.runtime.v1.SubscribeConfigurationResponse.ItemsEntry\x1aU\n\nItemsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x36\n\x05value\x18\x02 \x01(\x0b\x32\'.dapr.proto.common.v1.ConfigurationItem:\x02\x38\x01\"?\n UnsubscribeConfigurationResponse\x12\n\n\x02ok\x18\x01 \x01(\x08\x12\x0f\n\x07message\x18\x02 \x01(\t\"\x9b\x01\n\x0eTryLockRequest\x12\x1d\n\nstore_name\x18\x01 \x01(\tR\tstoreName\x12\x1f\n\x0bresource_id\x18\x02 \x01(\tR\nresourceId\x12\x1d\n\nlock_owner\x18\x03 \x01(\tR\tlockOwner\x12*\n\x11\x65xpiry_in_seconds\x18\x04 \x01(\x05R\x0f\x65xpiryInSeconds\"\"\n\x0fTryLockResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\"n\n\rUnlockRequest\x12\x1d\n\nstore_name\x18\x01 \x01(\tR\tstoreName\x12\x1f\n\x0bresource_id\x18\x02 \x01(\tR\nresourceId\x12\x1d\n\nlock_owner\x18\x03 \x01(\tR\tlockOwner\"\xae\x01\n\x0eUnlockResponse\x12<\n\x06status\x18\x01 \x01(\x0e\x32,.dapr.proto.runtime.v1.UnlockResponse.Status\"^\n\x06Status\x12\x0b\n\x07SUCCESS\x10\x00\x12\x17\n\x13LOCK_DOES_NOT_EXIST\x10\x01\x12\x1a\n\x16LOCK_BELONGS_TO_OTHERS\x10\x02\x12\x12\n\x0eINTERNAL_ERROR\x10\x03\"\xb0\x01\n\x13SubtleGetKeyRequest\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x44\n\x06\x66ormat\x18\x03 \x01(\x0e\x32\x34.dapr.proto.runtime.v1.SubtleGetKeyRequest.KeyFormat\"\x1e\n\tKeyFormat\x12\x07\n\x03PEM\x10\x00\x12\x08\n\x04JSON\x10\x01\"C\n\x14SubtleGetKeyResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x1d\n\npublic_key\x18\x02 \x01(\tR\tpublicKey\"\xb6\x01\n\x14SubtleEncryptRequest\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12\x11\n\tplaintext\x18\x02 \x01(\x0c\x12\x11\n\talgorithm\x18\x03 \x01(\t\x12\x19\n\x08key_name\x18\x04 \x01(\tR\x07keyName\x12\r\n\x05nonce\x18\x05 \x01(\x0c\x12\'\n\x0f\x61ssociated_data\x18\x06 \x01(\x0cR\x0e\x61ssociatedData\"8\n\x15SubtleEncryptResponse\x12\x12\n\nciphertext\x18\x01 \x01(\x0c\x12\x0b\n\x03tag\x18\x02 \x01(\x0c\"\xc4\x01\n\x14SubtleDecryptRequest\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12\x12\n\nciphertext\x18\x02 \x01(\x0c\x12\x11\n\talgorithm\x18\x03 \x01(\t\x12\x19\n\x08key_name\x18\x04 \x01(\tR\x07keyName\x12\r\n\x05nonce\x18\x05 \x01(\x0c\x12\x0b\n\x03tag\x18\x06 \x01(\x0c\x12\'\n\x0f\x61ssociated_data\x18\x07 \x01(\x0cR\x0e\x61ssociatedData\"*\n\x15SubtleDecryptResponse\x12\x11\n\tplaintext\x18\x01 \x01(\x0c\"\xc8\x01\n\x14SubtleWrapKeyRequest\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12#\n\rplaintext_key\x18\x02 \x01(\x0cR\x0cplaintextKey\x12\x11\n\talgorithm\x18\x03 \x01(\t\x12\x19\n\x08key_name\x18\x04 \x01(\tR\x07keyName\x12\r\n\x05nonce\x18\x05 \x01(\x0c\x12\'\n\x0f\x61ssociated_data\x18\x06 \x01(\x0cR\x0e\x61ssociatedData\"E\n\x15SubtleWrapKeyResponse\x12\x1f\n\x0bwrapped_key\x18\x01 \x01(\x0cR\nwrappedKey\x12\x0b\n\x03tag\x18\x02 \x01(\x0c\"\xd3\x01\n\x16SubtleUnwrapKeyRequest\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12\x1f\n\x0bwrapped_key\x18\x02 \x01(\x0cR\nwrappedKey\x12\x11\n\talgorithm\x18\x03 \x01(\t\x12\x19\n\x08key_name\x18\x04 \x01(\tR\x07keyName\x12\r\n\x05nonce\x18\x05 \x01(\x0c\x12\x0b\n\x03tag\x18\x06 \x01(\x0c\x12\'\n\x0f\x61ssociated_data\x18\x07 \x01(\x0cR\x0e\x61ssociatedData\">\n\x17SubtleUnwrapKeyResponse\x12#\n\rplaintext_key\x18\x01 \x01(\x0cR\x0cplaintextKey\"x\n\x11SubtleSignRequest\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12\x0e\n\x06\x64igest\x18\x02 \x01(\x0c\x12\x11\n\talgorithm\x18\x03 \x01(\t\x12\x19\n\x08key_name\x18\x04 \x01(\tR\x07keyName\"\'\n\x12SubtleSignResponse\x12\x11\n\tsignature\x18\x01 \x01(\x0c\"\x8d\x01\n\x13SubtleVerifyRequest\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12\x0e\n\x06\x64igest\x18\x02 \x01(\x0c\x12\x11\n\talgorithm\x18\x03 \x01(\t\x12\x19\n\x08key_name\x18\x04 \x01(\tR\x07keyName\x12\x11\n\tsignature\x18\x05 \x01(\x0c\"%\n\x14SubtleVerifyResponse\x12\r\n\x05valid\x18\x01 \x01(\x08\"\x85\x01\n\x0e\x45ncryptRequest\x12=\n\x07options\x18\x01 \x01(\x0b\x32,.dapr.proto.runtime.v1.EncryptRequestOptions\x12\x34\n\x07payload\x18\x02 \x01(\x0b\x32#.dapr.proto.common.v1.StreamPayload\"\xfe\x01\n\x15\x45ncryptRequestOptions\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12\x19\n\x08key_name\x18\x02 \x01(\tR\x07keyName\x12\x1a\n\x12key_wrap_algorithm\x18\x03 \x01(\t\x12\x1e\n\x16\x64\x61ta_encryption_cipher\x18\n \x01(\t\x12\x37\n\x18omit_decryption_key_name\x18\x0b \x01(\x08R\x15omitDecryptionKeyName\x12.\n\x13\x64\x65\x63ryption_key_name\x18\x0c \x01(\tR\x11\x64\x65\x63ryptionKeyName\"G\n\x0f\x45ncryptResponse\x12\x34\n\x07payload\x18\x01 \x01(\x0b\x32#.dapr.proto.common.v1.StreamPayload\"\x85\x01\n\x0e\x44\x65\x63ryptRequest\x12=\n\x07options\x18\x01 \x01(\x0b\x32,.dapr.proto.runtime.v1.DecryptRequestOptions\x12\x34\n\x07payload\x18\x02 \x01(\x0b\x32#.dapr.proto.common.v1.StreamPayload\"Y\n\x15\x44\x65\x63ryptRequestOptions\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12\x19\n\x08key_name\x18\x0c \x01(\tR\x07keyName\"G\n\x0f\x44\x65\x63ryptResponse\x12\x34\n\x07payload\x18\x01 \x01(\x0b\x32#.dapr.proto.common.v1.StreamPayload\"d\n\x12GetWorkflowRequest\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\x12-\n\x12workflow_component\x18\x02 \x01(\tR\x11workflowComponent\"\x84\x03\n\x13GetWorkflowResponse\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\x12#\n\rworkflow_name\x18\x02 \x01(\tR\x0cworkflowName\x12\x39\n\ncreated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\x12\x42\n\x0flast_updated_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\rlastUpdatedAt\x12%\n\x0eruntime_status\x18\x05 \x01(\tR\rruntimeStatus\x12N\n\nproperties\x18\x06 \x03(\x0b\x32:.dapr.proto.runtime.v1.GetWorkflowResponse.PropertiesEntry\x1a\x31\n\x0fPropertiesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x95\x02\n\x14StartWorkflowRequest\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\x12-\n\x12workflow_component\x18\x02 \x01(\tR\x11workflowComponent\x12#\n\rworkflow_name\x18\x03 \x01(\tR\x0cworkflowName\x12I\n\x07options\x18\x04 \x03(\x0b\x32\x38.dapr.proto.runtime.v1.StartWorkflowRequest.OptionsEntry\x12\r\n\x05input\x18\x05 \x01(\x0c\x1a.\n\x0cOptionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"8\n\x15StartWorkflowResponse\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\"j\n\x18TerminateWorkflowRequest\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\x12-\n\x12workflow_component\x18\x02 \x01(\tR\x11workflowComponent\"f\n\x14PauseWorkflowRequest\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\x12-\n\x12workflow_component\x18\x02 \x01(\tR\x11workflowComponent\"g\n\x15ResumeWorkflowRequest\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\x12-\n\x12workflow_component\x18\x02 \x01(\tR\x11workflowComponent\"\x9e\x01\n\x19RaiseEventWorkflowRequest\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\x12-\n\x12workflow_component\x18\x02 \x01(\tR\x11workflowComponent\x12\x1d\n\nevent_name\x18\x03 \x01(\tR\teventName\x12\x12\n\nevent_data\x18\x04 \x01(\x0c\"f\n\x14PurgeWorkflowRequest\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\x12-\n\x12workflow_component\x18\x02 \x01(\tR\x11workflowComponent\"\x11\n\x0fShutdownRequest\"\xe8\x01\n\x03Job\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x1f\n\x08schedule\x18\x02 \x01(\tH\x00R\x08schedule\x88\x01\x01\x12\x1d\n\x07repeats\x18\x03 \x01(\rH\x01R\x07repeats\x88\x01\x01\x12\x1e\n\x08\x64ue_time\x18\x04 \x01(\tH\x02R\x07\x64ueTime\x88\x01\x01\x12\x15\n\x03ttl\x18\x05 \x01(\tH\x03R\x03ttl\x88\x01\x01\x12(\n\x04\x64\x61ta\x18\x06 \x01(\x0b\x32\x14.google.protobuf.AnyR\x04\x64\x61taB\x0b\n\t_scheduleB\n\n\x08_repeatsB\x0b\n\t_due_timeB\x06\n\x04_ttl\"=\n\x12ScheduleJobRequest\x12\'\n\x03job\x18\x01 \x01(\x0b\x32\x1a.dapr.proto.runtime.v1.Job\"\x15\n\x13ScheduleJobResponse\"\x1d\n\rGetJobRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"9\n\x0eGetJobResponse\x12\'\n\x03job\x18\x01 \x01(\x0b\x32\x1a.dapr.proto.runtime.v1.Job\" \n\x10\x44\x65leteJobRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"\x13\n\x11\x44\x65leteJobResponse\"\xf9\x03\n\x19\x43onversationAlpha1Request\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x16\n\tcontextID\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x38\n\x06inputs\x18\x03 \x03(\x0b\x32(.dapr.proto.runtime.v1.ConversationInput\x12T\n\nparameters\x18\x04 \x03(\x0b\x32@.dapr.proto.runtime.v1.ConversationAlpha1Request.ParametersEntry\x12P\n\x08metadata\x18\x05 \x03(\x0b\x32>.dapr.proto.runtime.v1.ConversationAlpha1Request.MetadataEntry\x12\x15\n\x08scrubPII\x18\x06 \x01(\x08H\x01\x88\x01\x01\x12\x18\n\x0btemperature\x18\x07 \x01(\x01H\x02\x88\x01\x01\x1aG\n\x0fParametersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12#\n\x05value\x18\x02 \x01(\x0b\x32\x14.google.protobuf.Any:\x02\x38\x01\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x0c\n\n_contextIDB\x0b\n\t_scrubPIIB\x0e\n\x0c_temperature\"d\n\x11\x43onversationInput\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\x11\n\x04role\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x15\n\x08scrubPII\x18\x03 \x01(\x08H\x01\x88\x01\x01\x42\x07\n\x05_roleB\x0b\n\t_scrubPII\"\xc8\x01\n\x18\x43onversationAlpha1Result\x12\x0e\n\x06result\x18\x01 \x01(\t\x12S\n\nparameters\x18\x02 \x03(\x0b\x32?.dapr.proto.runtime.v1.ConversationAlpha1Result.ParametersEntry\x1aG\n\x0fParametersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12#\n\x05value\x18\x02 \x01(\x0b\x32\x14.google.protobuf.Any:\x02\x38\x01\"\x84\x01\n\x1a\x43onversationAlpha1Response\x12\x16\n\tcontextID\x18\x01 \x01(\tH\x00\x88\x01\x01\x12@\n\x07outputs\x18\x02 \x03(\x0b\x32/.dapr.proto.runtime.v1.ConversationAlpha1ResultB\x0c\n\n_contextID*W\n\x16PubsubSubscriptionType\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x0f\n\x0b\x44\x45\x43LARATIVE\x10\x01\x12\x10\n\x0cPROGRAMMATIC\x10\x02\x12\r\n\tSTREAMING\x10\x03\x32\xb5\x31\n\x04\x44\x61pr\x12\x64\n\rInvokeService\x12+.dapr.proto.runtime.v1.InvokeServiceRequest\x1a$.dapr.proto.common.v1.InvokeResponse\"\x00\x12]\n\x08GetState\x12&.dapr.proto.runtime.v1.GetStateRequest\x1a\'.dapr.proto.runtime.v1.GetStateResponse\"\x00\x12i\n\x0cGetBulkState\x12*.dapr.proto.runtime.v1.GetBulkStateRequest\x1a+.dapr.proto.runtime.v1.GetBulkStateResponse\"\x00\x12N\n\tSaveState\x12\'.dapr.proto.runtime.v1.SaveStateRequest\x1a\x16.google.protobuf.Empty\"\x00\x12i\n\x10QueryStateAlpha1\x12(.dapr.proto.runtime.v1.QueryStateRequest\x1a).dapr.proto.runtime.v1.QueryStateResponse\"\x00\x12R\n\x0b\x44\x65leteState\x12).dapr.proto.runtime.v1.DeleteStateRequest\x1a\x16.google.protobuf.Empty\"\x00\x12Z\n\x0f\x44\x65leteBulkState\x12-.dapr.proto.runtime.v1.DeleteBulkStateRequest\x1a\x16.google.protobuf.Empty\"\x00\x12j\n\x17\x45xecuteStateTransaction\x12\x35.dapr.proto.runtime.v1.ExecuteStateTransactionRequest\x1a\x16.google.protobuf.Empty\"\x00\x12T\n\x0cPublishEvent\x12*.dapr.proto.runtime.v1.PublishEventRequest\x1a\x16.google.protobuf.Empty\"\x00\x12q\n\x16\x42ulkPublishEventAlpha1\x12).dapr.proto.runtime.v1.BulkPublishRequest\x1a*.dapr.proto.runtime.v1.BulkPublishResponse\"\x00\x12\x97\x01\n\x1aSubscribeTopicEventsAlpha1\x12\x38.dapr.proto.runtime.v1.SubscribeTopicEventsRequestAlpha1\x1a\x39.dapr.proto.runtime.v1.SubscribeTopicEventsResponseAlpha1\"\x00(\x01\x30\x01\x12l\n\rInvokeBinding\x12+.dapr.proto.runtime.v1.InvokeBindingRequest\x1a,.dapr.proto.runtime.v1.InvokeBindingResponse\"\x00\x12`\n\tGetSecret\x12\'.dapr.proto.runtime.v1.GetSecretRequest\x1a(.dapr.proto.runtime.v1.GetSecretResponse\"\x00\x12l\n\rGetBulkSecret\x12+.dapr.proto.runtime.v1.GetBulkSecretRequest\x1a,.dapr.proto.runtime.v1.GetBulkSecretResponse\"\x00\x12`\n\x12RegisterActorTimer\x12\x30.dapr.proto.runtime.v1.RegisterActorTimerRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x64\n\x14UnregisterActorTimer\x12\x32.dapr.proto.runtime.v1.UnregisterActorTimerRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x66\n\x15RegisterActorReminder\x12\x33.dapr.proto.runtime.v1.RegisterActorReminderRequest\x1a\x16.google.protobuf.Empty\"\x00\x12j\n\x17UnregisterActorReminder\x12\x35.dapr.proto.runtime.v1.UnregisterActorReminderRequest\x1a\x16.google.protobuf.Empty\"\x00\x12l\n\rGetActorState\x12+.dapr.proto.runtime.v1.GetActorStateRequest\x1a,.dapr.proto.runtime.v1.GetActorStateResponse\"\x00\x12t\n\x1c\x45xecuteActorStateTransaction\x12:.dapr.proto.runtime.v1.ExecuteActorStateTransactionRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x66\n\x0bInvokeActor\x12).dapr.proto.runtime.v1.InvokeActorRequest\x1a*.dapr.proto.runtime.v1.InvokeActorResponse\"\x00\x12{\n\x16GetConfigurationAlpha1\x12..dapr.proto.runtime.v1.GetConfigurationRequest\x1a/.dapr.proto.runtime.v1.GetConfigurationResponse\"\x00\x12u\n\x10GetConfiguration\x12..dapr.proto.runtime.v1.GetConfigurationRequest\x1a/.dapr.proto.runtime.v1.GetConfigurationResponse\"\x00\x12\x8f\x01\n\x1cSubscribeConfigurationAlpha1\x12\x34.dapr.proto.runtime.v1.SubscribeConfigurationRequest\x1a\x35.dapr.proto.runtime.v1.SubscribeConfigurationResponse\"\x00\x30\x01\x12\x89\x01\n\x16SubscribeConfiguration\x12\x34.dapr.proto.runtime.v1.SubscribeConfigurationRequest\x1a\x35.dapr.proto.runtime.v1.SubscribeConfigurationResponse\"\x00\x30\x01\x12\x93\x01\n\x1eUnsubscribeConfigurationAlpha1\x12\x36.dapr.proto.runtime.v1.UnsubscribeConfigurationRequest\x1a\x37.dapr.proto.runtime.v1.UnsubscribeConfigurationResponse\"\x00\x12\x8d\x01\n\x18UnsubscribeConfiguration\x12\x36.dapr.proto.runtime.v1.UnsubscribeConfigurationRequest\x1a\x37.dapr.proto.runtime.v1.UnsubscribeConfigurationResponse\"\x00\x12`\n\rTryLockAlpha1\x12%.dapr.proto.runtime.v1.TryLockRequest\x1a&.dapr.proto.runtime.v1.TryLockResponse\"\x00\x12]\n\x0cUnlockAlpha1\x12$.dapr.proto.runtime.v1.UnlockRequest\x1a%.dapr.proto.runtime.v1.UnlockResponse\"\x00\x12\x62\n\rEncryptAlpha1\x12%.dapr.proto.runtime.v1.EncryptRequest\x1a&.dapr.proto.runtime.v1.EncryptResponse(\x01\x30\x01\x12\x62\n\rDecryptAlpha1\x12%.dapr.proto.runtime.v1.DecryptRequest\x1a&.dapr.proto.runtime.v1.DecryptResponse(\x01\x30\x01\x12\x66\n\x0bGetMetadata\x12).dapr.proto.runtime.v1.GetMetadataRequest\x1a*.dapr.proto.runtime.v1.GetMetadataResponse\"\x00\x12R\n\x0bSetMetadata\x12).dapr.proto.runtime.v1.SetMetadataRequest\x1a\x16.google.protobuf.Empty\"\x00\x12m\n\x12SubtleGetKeyAlpha1\x12*.dapr.proto.runtime.v1.SubtleGetKeyRequest\x1a+.dapr.proto.runtime.v1.SubtleGetKeyResponse\x12p\n\x13SubtleEncryptAlpha1\x12+.dapr.proto.runtime.v1.SubtleEncryptRequest\x1a,.dapr.proto.runtime.v1.SubtleEncryptResponse\x12p\n\x13SubtleDecryptAlpha1\x12+.dapr.proto.runtime.v1.SubtleDecryptRequest\x1a,.dapr.proto.runtime.v1.SubtleDecryptResponse\x12p\n\x13SubtleWrapKeyAlpha1\x12+.dapr.proto.runtime.v1.SubtleWrapKeyRequest\x1a,.dapr.proto.runtime.v1.SubtleWrapKeyResponse\x12v\n\x15SubtleUnwrapKeyAlpha1\x12-.dapr.proto.runtime.v1.SubtleUnwrapKeyRequest\x1a..dapr.proto.runtime.v1.SubtleUnwrapKeyResponse\x12g\n\x10SubtleSignAlpha1\x12(.dapr.proto.runtime.v1.SubtleSignRequest\x1a).dapr.proto.runtime.v1.SubtleSignResponse\x12m\n\x12SubtleVerifyAlpha1\x12*.dapr.proto.runtime.v1.SubtleVerifyRequest\x1a+.dapr.proto.runtime.v1.SubtleVerifyResponse\x12r\n\x13StartWorkflowAlpha1\x12+.dapr.proto.runtime.v1.StartWorkflowRequest\x1a,.dapr.proto.runtime.v1.StartWorkflowResponse\"\x00\x12l\n\x11GetWorkflowAlpha1\x12).dapr.proto.runtime.v1.GetWorkflowRequest\x1a*.dapr.proto.runtime.v1.GetWorkflowResponse\"\x00\x12\\\n\x13PurgeWorkflowAlpha1\x12+.dapr.proto.runtime.v1.PurgeWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x64\n\x17TerminateWorkflowAlpha1\x12/.dapr.proto.runtime.v1.TerminateWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\\\n\x13PauseWorkflowAlpha1\x12+.dapr.proto.runtime.v1.PauseWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x00\x12^\n\x14ResumeWorkflowAlpha1\x12,.dapr.proto.runtime.v1.ResumeWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x66\n\x18RaiseEventWorkflowAlpha1\x12\x30.dapr.proto.runtime.v1.RaiseEventWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x00\x12q\n\x12StartWorkflowBeta1\x12+.dapr.proto.runtime.v1.StartWorkflowRequest\x1a,.dapr.proto.runtime.v1.StartWorkflowResponse\"\x00\x12k\n\x10GetWorkflowBeta1\x12).dapr.proto.runtime.v1.GetWorkflowRequest\x1a*.dapr.proto.runtime.v1.GetWorkflowResponse\"\x00\x12[\n\x12PurgeWorkflowBeta1\x12+.dapr.proto.runtime.v1.PurgeWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x63\n\x16TerminateWorkflowBeta1\x12/.dapr.proto.runtime.v1.TerminateWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x00\x12[\n\x12PauseWorkflowBeta1\x12+.dapr.proto.runtime.v1.PauseWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x00\x12]\n\x13ResumeWorkflowBeta1\x12,.dapr.proto.runtime.v1.ResumeWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x65\n\x17RaiseEventWorkflowBeta1\x12\x30.dapr.proto.runtime.v1.RaiseEventWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x00\x12L\n\x08Shutdown\x12&.dapr.proto.runtime.v1.ShutdownRequest\x1a\x16.google.protobuf.Empty\"\x00\x12l\n\x11ScheduleJobAlpha1\x12).dapr.proto.runtime.v1.ScheduleJobRequest\x1a*.dapr.proto.runtime.v1.ScheduleJobResponse\"\x00\x12]\n\x0cGetJobAlpha1\x12$.dapr.proto.runtime.v1.GetJobRequest\x1a%.dapr.proto.runtime.v1.GetJobResponse\"\x00\x12\x66\n\x0f\x44\x65leteJobAlpha1\x12\'.dapr.proto.runtime.v1.DeleteJobRequest\x1a(.dapr.proto.runtime.v1.DeleteJobResponse\"\x00\x12w\n\x0e\x43onverseAlpha1\x12\x30.dapr.proto.runtime.v1.ConversationAlpha1Request\x1a\x31.dapr.proto.runtime.v1.ConversationAlpha1Response\"\x00\x42i\n\nio.dapr.v1B\nDaprProtosZ1github.com/dapr/dapr/pkg/proto/runtime/v1;runtime\xaa\x02\x1b\x44\x61pr.Client.Autogen.Grpc.v1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n dapr/proto/runtime/v1/dapr.proto\x12\x15\x64\x61pr.proto.runtime.v1\x1a\x19google/protobuf/any.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a!dapr/proto/common/v1/common.proto\x1a\'dapr/proto/runtime/v1/appcallback.proto\"X\n\x14InvokeServiceRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x34\n\x07message\x18\x03 \x01(\x0b\x32#.dapr.proto.common.v1.InvokeRequest\"\xf5\x01\n\x0fGetStateRequest\x12\x12\n\nstore_name\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\t\x12H\n\x0b\x63onsistency\x18\x03 \x01(\x0e\x32\x33.dapr.proto.common.v1.StateOptions.StateConsistency\x12\x46\n\x08metadata\x18\x04 \x03(\x0b\x32\x34.dapr.proto.runtime.v1.GetStateRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xc9\x01\n\x13GetBulkStateRequest\x12\x12\n\nstore_name\x18\x01 \x01(\t\x12\x0c\n\x04keys\x18\x02 \x03(\t\x12\x13\n\x0bparallelism\x18\x03 \x01(\x05\x12J\n\x08metadata\x18\x04 \x03(\x0b\x32\x38.dapr.proto.runtime.v1.GetBulkStateRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"K\n\x14GetBulkStateResponse\x12\x33\n\x05items\x18\x01 \x03(\x0b\x32$.dapr.proto.runtime.v1.BulkStateItem\"\xbe\x01\n\rBulkStateItem\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\x12\x0c\n\x04\x65tag\x18\x03 \x01(\t\x12\r\n\x05\x65rror\x18\x04 \x01(\t\x12\x44\n\x08metadata\x18\x05 \x03(\x0b\x32\x32.dapr.proto.runtime.v1.BulkStateItem.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xa8\x01\n\x10GetStateResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\x12\x0c\n\x04\x65tag\x18\x02 \x01(\t\x12G\n\x08metadata\x18\x03 \x03(\x0b\x32\x35.dapr.proto.runtime.v1.GetStateResponse.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x90\x02\n\x12\x44\x65leteStateRequest\x12\x12\n\nstore_name\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\t\x12(\n\x04\x65tag\x18\x03 \x01(\x0b\x32\x1a.dapr.proto.common.v1.Etag\x12\x33\n\x07options\x18\x04 \x01(\x0b\x32\".dapr.proto.common.v1.StateOptions\x12I\n\x08metadata\x18\x05 \x03(\x0b\x32\x37.dapr.proto.runtime.v1.DeleteStateRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"]\n\x16\x44\x65leteBulkStateRequest\x12\x12\n\nstore_name\x18\x01 \x01(\t\x12/\n\x06states\x18\x02 \x03(\x0b\x32\x1f.dapr.proto.common.v1.StateItem\"W\n\x10SaveStateRequest\x12\x12\n\nstore_name\x18\x01 \x01(\t\x12/\n\x06states\x18\x02 \x03(\x0b\x32\x1f.dapr.proto.common.v1.StateItem\"\xbc\x01\n\x11QueryStateRequest\x12\x1d\n\nstore_name\x18\x01 \x01(\tR\tstoreName\x12\r\n\x05query\x18\x02 \x01(\t\x12H\n\x08metadata\x18\x03 \x03(\x0b\x32\x36.dapr.proto.runtime.v1.QueryStateRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"H\n\x0eQueryStateItem\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\x12\x0c\n\x04\x65tag\x18\x03 \x01(\t\x12\r\n\x05\x65rror\x18\x04 \x01(\t\"\xd7\x01\n\x12QueryStateResponse\x12\x36\n\x07results\x18\x01 \x03(\x0b\x32%.dapr.proto.runtime.v1.QueryStateItem\x12\r\n\x05token\x18\x02 \x01(\t\x12I\n\x08metadata\x18\x03 \x03(\x0b\x32\x37.dapr.proto.runtime.v1.QueryStateResponse.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xdf\x01\n\x13PublishEventRequest\x12\x13\n\x0bpubsub_name\x18\x01 \x01(\t\x12\r\n\x05topic\x18\x02 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\x0c\x12\x19\n\x11\x64\x61ta_content_type\x18\x04 \x01(\t\x12J\n\x08metadata\x18\x05 \x03(\x0b\x32\x38.dapr.proto.runtime.v1.PublishEventRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xf5\x01\n\x12\x42ulkPublishRequest\x12\x13\n\x0bpubsub_name\x18\x01 \x01(\t\x12\r\n\x05topic\x18\x02 \x01(\t\x12?\n\x07\x65ntries\x18\x03 \x03(\x0b\x32..dapr.proto.runtime.v1.BulkPublishRequestEntry\x12I\n\x08metadata\x18\x04 \x03(\x0b\x32\x37.dapr.proto.runtime.v1.BulkPublishRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xd1\x01\n\x17\x42ulkPublishRequestEntry\x12\x10\n\x08\x65ntry_id\x18\x01 \x01(\t\x12\r\n\x05\x65vent\x18\x02 \x01(\x0c\x12\x14\n\x0c\x63ontent_type\x18\x03 \x01(\t\x12N\n\x08metadata\x18\x04 \x03(\x0b\x32<.dapr.proto.runtime.v1.BulkPublishRequestEntry.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"c\n\x13\x42ulkPublishResponse\x12L\n\rfailedEntries\x18\x01 \x03(\x0b\x32\x35.dapr.proto.runtime.v1.BulkPublishResponseFailedEntry\"A\n\x1e\x42ulkPublishResponseFailedEntry\x12\x10\n\x08\x65ntry_id\x18\x01 \x01(\t\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"\x84\x02\n!SubscribeTopicEventsRequestAlpha1\x12Z\n\x0finitial_request\x18\x01 \x01(\x0b\x32?.dapr.proto.runtime.v1.SubscribeTopicEventsRequestInitialAlpha1H\x00\x12\\\n\x0f\x65vent_processed\x18\x02 \x01(\x0b\x32\x41.dapr.proto.runtime.v1.SubscribeTopicEventsRequestProcessedAlpha1H\x00\x42%\n#subscribe_topic_events_request_type\"\x96\x02\n(SubscribeTopicEventsRequestInitialAlpha1\x12\x13\n\x0bpubsub_name\x18\x01 \x01(\t\x12\r\n\x05topic\x18\x02 \x01(\t\x12_\n\x08metadata\x18\x03 \x03(\x0b\x32M.dapr.proto.runtime.v1.SubscribeTopicEventsRequestInitialAlpha1.MetadataEntry\x12\x1e\n\x11\x64\x65\x61\x64_letter_topic\x18\x04 \x01(\tH\x00\x88\x01\x01\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x14\n\x12_dead_letter_topic\"s\n*SubscribeTopicEventsRequestProcessedAlpha1\x12\n\n\x02id\x18\x01 \x01(\t\x12\x39\n\x06status\x18\x02 \x01(\x0b\x32).dapr.proto.runtime.v1.TopicEventResponse\"\xed\x01\n\"SubscribeTopicEventsResponseAlpha1\x12\\\n\x10initial_response\x18\x01 \x01(\x0b\x32@.dapr.proto.runtime.v1.SubscribeTopicEventsResponseInitialAlpha1H\x00\x12\x41\n\revent_message\x18\x02 \x01(\x0b\x32(.dapr.proto.runtime.v1.TopicEventRequestH\x00\x42&\n$subscribe_topic_events_response_type\"+\n)SubscribeTopicEventsResponseInitialAlpha1\"\xc3\x01\n\x14InvokeBindingRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\x12K\n\x08metadata\x18\x03 \x03(\x0b\x32\x39.dapr.proto.runtime.v1.InvokeBindingRequest.MetadataEntry\x12\x11\n\toperation\x18\x04 \x01(\t\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xa4\x01\n\x15InvokeBindingResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\x12L\n\x08metadata\x18\x02 \x03(\x0b\x32:.dapr.proto.runtime.v1.InvokeBindingResponse.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xb8\x01\n\x10GetSecretRequest\x12\x1d\n\nstore_name\x18\x01 \x01(\tR\tstoreName\x12\x0b\n\x03key\x18\x02 \x01(\t\x12G\n\x08metadata\x18\x03 \x03(\x0b\x32\x35.dapr.proto.runtime.v1.GetSecretRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x82\x01\n\x11GetSecretResponse\x12@\n\x04\x64\x61ta\x18\x01 \x03(\x0b\x32\x32.dapr.proto.runtime.v1.GetSecretResponse.DataEntry\x1a+\n\tDataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xb3\x01\n\x14GetBulkSecretRequest\x12\x1d\n\nstore_name\x18\x01 \x01(\tR\tstoreName\x12K\n\x08metadata\x18\x02 \x03(\x0b\x32\x39.dapr.proto.runtime.v1.GetBulkSecretRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x85\x01\n\x0eSecretResponse\x12\x43\n\x07secrets\x18\x01 \x03(\x0b\x32\x32.dapr.proto.runtime.v1.SecretResponse.SecretsEntry\x1a.\n\x0cSecretsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xb1\x01\n\x15GetBulkSecretResponse\x12\x44\n\x04\x64\x61ta\x18\x01 \x03(\x0b\x32\x36.dapr.proto.runtime.v1.GetBulkSecretResponse.DataEntry\x1aR\n\tDataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x34\n\x05value\x18\x02 \x01(\x0b\x32%.dapr.proto.runtime.v1.SecretResponse:\x02\x38\x01\"f\n\x1bTransactionalStateOperation\x12\x15\n\roperationType\x18\x01 \x01(\t\x12\x30\n\x07request\x18\x02 \x01(\x0b\x32\x1f.dapr.proto.common.v1.StateItem\"\x83\x02\n\x1e\x45xecuteStateTransactionRequest\x12\x11\n\tstoreName\x18\x01 \x01(\t\x12\x46\n\noperations\x18\x02 \x03(\x0b\x32\x32.dapr.proto.runtime.v1.TransactionalStateOperation\x12U\n\x08metadata\x18\x03 \x03(\x0b\x32\x43.dapr.proto.runtime.v1.ExecuteStateTransactionRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xbb\x01\n\x19RegisterActorTimerRequest\x12\x1d\n\nactor_type\x18\x01 \x01(\tR\tactorType\x12\x19\n\x08\x61\x63tor_id\x18\x02 \x01(\tR\x07\x61\x63torId\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x19\n\x08\x64ue_time\x18\x04 \x01(\tR\x07\x64ueTime\x12\x0e\n\x06period\x18\x05 \x01(\t\x12\x10\n\x08\x63\x61llback\x18\x06 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x07 \x01(\x0c\x12\x0b\n\x03ttl\x18\x08 \x01(\t\"e\n\x1bUnregisterActorTimerRequest\x12\x1d\n\nactor_type\x18\x01 \x01(\tR\tactorType\x12\x19\n\x08\x61\x63tor_id\x18\x02 \x01(\tR\x07\x61\x63torId\x12\x0c\n\x04name\x18\x03 \x01(\t\"\xac\x01\n\x1cRegisterActorReminderRequest\x12\x1d\n\nactor_type\x18\x01 \x01(\tR\tactorType\x12\x19\n\x08\x61\x63tor_id\x18\x02 \x01(\tR\x07\x61\x63torId\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x19\n\x08\x64ue_time\x18\x04 \x01(\tR\x07\x64ueTime\x12\x0e\n\x06period\x18\x05 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x06 \x01(\x0c\x12\x0b\n\x03ttl\x18\x07 \x01(\t\"h\n\x1eUnregisterActorReminderRequest\x12\x1d\n\nactor_type\x18\x01 \x01(\tR\tactorType\x12\x19\n\x08\x61\x63tor_id\x18\x02 \x01(\tR\x07\x61\x63torId\x12\x0c\n\x04name\x18\x03 \x01(\t\"]\n\x14GetActorStateRequest\x12\x1d\n\nactor_type\x18\x01 \x01(\tR\tactorType\x12\x19\n\x08\x61\x63tor_id\x18\x02 \x01(\tR\x07\x61\x63torId\x12\x0b\n\x03key\x18\x03 \x01(\t\"\xa4\x01\n\x15GetActorStateResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\x12L\n\x08metadata\x18\x02 \x03(\x0b\x32:.dapr.proto.runtime.v1.GetActorStateResponse.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xac\x01\n#ExecuteActorStateTransactionRequest\x12\x1d\n\nactor_type\x18\x01 \x01(\tR\tactorType\x12\x19\n\x08\x61\x63tor_id\x18\x02 \x01(\tR\x07\x61\x63torId\x12K\n\noperations\x18\x03 \x03(\x0b\x32\x37.dapr.proto.runtime.v1.TransactionalActorStateOperation\"\xf5\x01\n TransactionalActorStateOperation\x12\x15\n\roperationType\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\t\x12#\n\x05value\x18\x03 \x01(\x0b\x32\x14.google.protobuf.Any\x12W\n\x08metadata\x18\x04 \x03(\x0b\x32\x45.dapr.proto.runtime.v1.TransactionalActorStateOperation.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xe8\x01\n\x12InvokeActorRequest\x12\x1d\n\nactor_type\x18\x01 \x01(\tR\tactorType\x12\x19\n\x08\x61\x63tor_id\x18\x02 \x01(\tR\x07\x61\x63torId\x12\x0e\n\x06method\x18\x03 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\x0c\x12I\n\x08metadata\x18\x05 \x03(\x0b\x32\x37.dapr.proto.runtime.v1.InvokeActorRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"#\n\x13InvokeActorResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\"\x14\n\x12GetMetadataRequest\"\x9b\x06\n\x13GetMetadataResponse\x12\n\n\x02id\x18\x01 \x01(\t\x12Q\n\x13\x61\x63tive_actors_count\x18\x02 \x03(\x0b\x32(.dapr.proto.runtime.v1.ActiveActorsCountB\x02\x18\x01R\x06\x61\x63tors\x12V\n\x15registered_components\x18\x03 \x03(\x0b\x32+.dapr.proto.runtime.v1.RegisteredComponentsR\ncomponents\x12\x65\n\x11\x65xtended_metadata\x18\x04 \x03(\x0b\x32@.dapr.proto.runtime.v1.GetMetadataResponse.ExtendedMetadataEntryR\x08\x65xtended\x12O\n\rsubscriptions\x18\x05 \x03(\x0b\x32).dapr.proto.runtime.v1.PubsubSubscriptionR\rsubscriptions\x12R\n\x0ehttp_endpoints\x18\x06 \x03(\x0b\x32+.dapr.proto.runtime.v1.MetadataHTTPEndpointR\rhttpEndpoints\x12j\n\x19\x61pp_connection_properties\x18\x07 \x01(\x0b\x32..dapr.proto.runtime.v1.AppConnectionPropertiesR\x17\x61ppConnectionProperties\x12\'\n\x0fruntime_version\x18\x08 \x01(\tR\x0eruntimeVersion\x12)\n\x10\x65nabled_features\x18\t \x03(\tR\x0f\x65nabledFeatures\x12H\n\ractor_runtime\x18\n \x01(\x0b\x32#.dapr.proto.runtime.v1.ActorRuntimeR\x0c\x61\x63torRuntime\x1a\x37\n\x15\x45xtendedMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xbc\x02\n\x0c\x41\x63torRuntime\x12]\n\x0eruntime_status\x18\x01 \x01(\x0e\x32\x36.dapr.proto.runtime.v1.ActorRuntime.ActorRuntimeStatusR\rruntimeStatus\x12M\n\ractive_actors\x18\x02 \x03(\x0b\x32(.dapr.proto.runtime.v1.ActiveActorsCountR\x0c\x61\x63tiveActors\x12\x1d\n\nhost_ready\x18\x03 \x01(\x08R\thostReady\x12\x1c\n\tplacement\x18\x04 \x01(\tR\tplacement\"A\n\x12\x41\x63torRuntimeStatus\x12\x10\n\x0cINITIALIZING\x10\x00\x12\x0c\n\x08\x44ISABLED\x10\x01\x12\x0b\n\x07RUNNING\x10\x02\"0\n\x11\x41\x63tiveActorsCount\x12\x0c\n\x04type\x18\x01 \x01(\t\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"Y\n\x14RegisteredComponents\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04type\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\t\x12\x14\n\x0c\x63\x61pabilities\x18\x04 \x03(\t\"*\n\x14MetadataHTTPEndpoint\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\"\xd1\x01\n\x17\x41ppConnectionProperties\x12\x0c\n\x04port\x18\x01 \x01(\x05\x12\x10\n\x08protocol\x18\x02 \x01(\t\x12\'\n\x0f\x63hannel_address\x18\x03 \x01(\tR\x0e\x63hannelAddress\x12\'\n\x0fmax_concurrency\x18\x04 \x01(\x05R\x0emaxConcurrency\x12\x44\n\x06health\x18\x05 \x01(\x0b\x32\x34.dapr.proto.runtime.v1.AppConnectionHealthProperties\"\xdc\x01\n\x1d\x41ppConnectionHealthProperties\x12*\n\x11health_check_path\x18\x01 \x01(\tR\x0fhealthCheckPath\x12\x32\n\x15health_probe_interval\x18\x02 \x01(\tR\x13healthProbeInterval\x12\x30\n\x14health_probe_timeout\x18\x03 \x01(\tR\x12healthProbeTimeout\x12)\n\x10health_threshold\x18\x04 \x01(\x05R\x0fhealthThreshold\"\x86\x03\n\x12PubsubSubscription\x12\x1f\n\x0bpubsub_name\x18\x01 \x01(\tR\npubsubname\x12\x14\n\x05topic\x18\x02 \x01(\tR\x05topic\x12S\n\x08metadata\x18\x03 \x03(\x0b\x32\x37.dapr.proto.runtime.v1.PubsubSubscription.MetadataEntryR\x08metadata\x12\x44\n\x05rules\x18\x04 \x01(\x0b\x32..dapr.proto.runtime.v1.PubsubSubscriptionRulesR\x05rules\x12*\n\x11\x64\x65\x61\x64_letter_topic\x18\x05 \x01(\tR\x0f\x64\x65\x61\x64LetterTopic\x12\x41\n\x04type\x18\x06 \x01(\x0e\x32-.dapr.proto.runtime.v1.PubsubSubscriptionTypeR\x04type\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"W\n\x17PubsubSubscriptionRules\x12<\n\x05rules\x18\x01 \x03(\x0b\x32-.dapr.proto.runtime.v1.PubsubSubscriptionRule\"5\n\x16PubsubSubscriptionRule\x12\r\n\x05match\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\t\"0\n\x12SetMetadataRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"\xbc\x01\n\x17GetConfigurationRequest\x12\x12\n\nstore_name\x18\x01 \x01(\t\x12\x0c\n\x04keys\x18\x02 \x03(\t\x12N\n\x08metadata\x18\x03 \x03(\x0b\x32<.dapr.proto.runtime.v1.GetConfigurationRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xbc\x01\n\x18GetConfigurationResponse\x12I\n\x05items\x18\x01 \x03(\x0b\x32:.dapr.proto.runtime.v1.GetConfigurationResponse.ItemsEntry\x1aU\n\nItemsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x36\n\x05value\x18\x02 \x01(\x0b\x32\'.dapr.proto.common.v1.ConfigurationItem:\x02\x38\x01\"\xc8\x01\n\x1dSubscribeConfigurationRequest\x12\x12\n\nstore_name\x18\x01 \x01(\t\x12\x0c\n\x04keys\x18\x02 \x03(\t\x12T\n\x08metadata\x18\x03 \x03(\x0b\x32\x42.dapr.proto.runtime.v1.SubscribeConfigurationRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"A\n\x1fUnsubscribeConfigurationRequest\x12\x12\n\nstore_name\x18\x01 \x01(\t\x12\n\n\x02id\x18\x02 \x01(\t\"\xd4\x01\n\x1eSubscribeConfigurationResponse\x12\n\n\x02id\x18\x01 \x01(\t\x12O\n\x05items\x18\x02 \x03(\x0b\x32@.dapr.proto.runtime.v1.SubscribeConfigurationResponse.ItemsEntry\x1aU\n\nItemsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x36\n\x05value\x18\x02 \x01(\x0b\x32\'.dapr.proto.common.v1.ConfigurationItem:\x02\x38\x01\"?\n UnsubscribeConfigurationResponse\x12\n\n\x02ok\x18\x01 \x01(\x08\x12\x0f\n\x07message\x18\x02 \x01(\t\"\x9b\x01\n\x0eTryLockRequest\x12\x1d\n\nstore_name\x18\x01 \x01(\tR\tstoreName\x12\x1f\n\x0bresource_id\x18\x02 \x01(\tR\nresourceId\x12\x1d\n\nlock_owner\x18\x03 \x01(\tR\tlockOwner\x12*\n\x11\x65xpiry_in_seconds\x18\x04 \x01(\x05R\x0f\x65xpiryInSeconds\"\"\n\x0fTryLockResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\"n\n\rUnlockRequest\x12\x1d\n\nstore_name\x18\x01 \x01(\tR\tstoreName\x12\x1f\n\x0bresource_id\x18\x02 \x01(\tR\nresourceId\x12\x1d\n\nlock_owner\x18\x03 \x01(\tR\tlockOwner\"\xae\x01\n\x0eUnlockResponse\x12<\n\x06status\x18\x01 \x01(\x0e\x32,.dapr.proto.runtime.v1.UnlockResponse.Status\"^\n\x06Status\x12\x0b\n\x07SUCCESS\x10\x00\x12\x17\n\x13LOCK_DOES_NOT_EXIST\x10\x01\x12\x1a\n\x16LOCK_BELONGS_TO_OTHERS\x10\x02\x12\x12\n\x0eINTERNAL_ERROR\x10\x03\"\xb0\x01\n\x13SubtleGetKeyRequest\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x44\n\x06\x66ormat\x18\x03 \x01(\x0e\x32\x34.dapr.proto.runtime.v1.SubtleGetKeyRequest.KeyFormat\"\x1e\n\tKeyFormat\x12\x07\n\x03PEM\x10\x00\x12\x08\n\x04JSON\x10\x01\"C\n\x14SubtleGetKeyResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x1d\n\npublic_key\x18\x02 \x01(\tR\tpublicKey\"\xb6\x01\n\x14SubtleEncryptRequest\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12\x11\n\tplaintext\x18\x02 \x01(\x0c\x12\x11\n\talgorithm\x18\x03 \x01(\t\x12\x19\n\x08key_name\x18\x04 \x01(\tR\x07keyName\x12\r\n\x05nonce\x18\x05 \x01(\x0c\x12\'\n\x0f\x61ssociated_data\x18\x06 \x01(\x0cR\x0e\x61ssociatedData\"8\n\x15SubtleEncryptResponse\x12\x12\n\nciphertext\x18\x01 \x01(\x0c\x12\x0b\n\x03tag\x18\x02 \x01(\x0c\"\xc4\x01\n\x14SubtleDecryptRequest\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12\x12\n\nciphertext\x18\x02 \x01(\x0c\x12\x11\n\talgorithm\x18\x03 \x01(\t\x12\x19\n\x08key_name\x18\x04 \x01(\tR\x07keyName\x12\r\n\x05nonce\x18\x05 \x01(\x0c\x12\x0b\n\x03tag\x18\x06 \x01(\x0c\x12\'\n\x0f\x61ssociated_data\x18\x07 \x01(\x0cR\x0e\x61ssociatedData\"*\n\x15SubtleDecryptResponse\x12\x11\n\tplaintext\x18\x01 \x01(\x0c\"\xc8\x01\n\x14SubtleWrapKeyRequest\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12#\n\rplaintext_key\x18\x02 \x01(\x0cR\x0cplaintextKey\x12\x11\n\talgorithm\x18\x03 \x01(\t\x12\x19\n\x08key_name\x18\x04 \x01(\tR\x07keyName\x12\r\n\x05nonce\x18\x05 \x01(\x0c\x12\'\n\x0f\x61ssociated_data\x18\x06 \x01(\x0cR\x0e\x61ssociatedData\"E\n\x15SubtleWrapKeyResponse\x12\x1f\n\x0bwrapped_key\x18\x01 \x01(\x0cR\nwrappedKey\x12\x0b\n\x03tag\x18\x02 \x01(\x0c\"\xd3\x01\n\x16SubtleUnwrapKeyRequest\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12\x1f\n\x0bwrapped_key\x18\x02 \x01(\x0cR\nwrappedKey\x12\x11\n\talgorithm\x18\x03 \x01(\t\x12\x19\n\x08key_name\x18\x04 \x01(\tR\x07keyName\x12\r\n\x05nonce\x18\x05 \x01(\x0c\x12\x0b\n\x03tag\x18\x06 \x01(\x0c\x12\'\n\x0f\x61ssociated_data\x18\x07 \x01(\x0cR\x0e\x61ssociatedData\">\n\x17SubtleUnwrapKeyResponse\x12#\n\rplaintext_key\x18\x01 \x01(\x0cR\x0cplaintextKey\"x\n\x11SubtleSignRequest\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12\x0e\n\x06\x64igest\x18\x02 \x01(\x0c\x12\x11\n\talgorithm\x18\x03 \x01(\t\x12\x19\n\x08key_name\x18\x04 \x01(\tR\x07keyName\"\'\n\x12SubtleSignResponse\x12\x11\n\tsignature\x18\x01 \x01(\x0c\"\x8d\x01\n\x13SubtleVerifyRequest\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12\x0e\n\x06\x64igest\x18\x02 \x01(\x0c\x12\x11\n\talgorithm\x18\x03 \x01(\t\x12\x19\n\x08key_name\x18\x04 \x01(\tR\x07keyName\x12\x11\n\tsignature\x18\x05 \x01(\x0c\"%\n\x14SubtleVerifyResponse\x12\r\n\x05valid\x18\x01 \x01(\x08\"\x85\x01\n\x0e\x45ncryptRequest\x12=\n\x07options\x18\x01 \x01(\x0b\x32,.dapr.proto.runtime.v1.EncryptRequestOptions\x12\x34\n\x07payload\x18\x02 \x01(\x0b\x32#.dapr.proto.common.v1.StreamPayload\"\xfe\x01\n\x15\x45ncryptRequestOptions\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12\x19\n\x08key_name\x18\x02 \x01(\tR\x07keyName\x12\x1a\n\x12key_wrap_algorithm\x18\x03 \x01(\t\x12\x1e\n\x16\x64\x61ta_encryption_cipher\x18\n \x01(\t\x12\x37\n\x18omit_decryption_key_name\x18\x0b \x01(\x08R\x15omitDecryptionKeyName\x12.\n\x13\x64\x65\x63ryption_key_name\x18\x0c \x01(\tR\x11\x64\x65\x63ryptionKeyName\"G\n\x0f\x45ncryptResponse\x12\x34\n\x07payload\x18\x01 \x01(\x0b\x32#.dapr.proto.common.v1.StreamPayload\"\x85\x01\n\x0e\x44\x65\x63ryptRequest\x12=\n\x07options\x18\x01 \x01(\x0b\x32,.dapr.proto.runtime.v1.DecryptRequestOptions\x12\x34\n\x07payload\x18\x02 \x01(\x0b\x32#.dapr.proto.common.v1.StreamPayload\"Y\n\x15\x44\x65\x63ryptRequestOptions\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12\x19\n\x08key_name\x18\x0c \x01(\tR\x07keyName\"G\n\x0f\x44\x65\x63ryptResponse\x12\x34\n\x07payload\x18\x01 \x01(\x0b\x32#.dapr.proto.common.v1.StreamPayload\"d\n\x12GetWorkflowRequest\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\x12-\n\x12workflow_component\x18\x02 \x01(\tR\x11workflowComponent\"\x84\x03\n\x13GetWorkflowResponse\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\x12#\n\rworkflow_name\x18\x02 \x01(\tR\x0cworkflowName\x12\x39\n\ncreated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\x12\x42\n\x0flast_updated_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\rlastUpdatedAt\x12%\n\x0eruntime_status\x18\x05 \x01(\tR\rruntimeStatus\x12N\n\nproperties\x18\x06 \x03(\x0b\x32:.dapr.proto.runtime.v1.GetWorkflowResponse.PropertiesEntry\x1a\x31\n\x0fPropertiesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x95\x02\n\x14StartWorkflowRequest\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\x12-\n\x12workflow_component\x18\x02 \x01(\tR\x11workflowComponent\x12#\n\rworkflow_name\x18\x03 \x01(\tR\x0cworkflowName\x12I\n\x07options\x18\x04 \x03(\x0b\x32\x38.dapr.proto.runtime.v1.StartWorkflowRequest.OptionsEntry\x12\r\n\x05input\x18\x05 \x01(\x0c\x1a.\n\x0cOptionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"8\n\x15StartWorkflowResponse\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\"j\n\x18TerminateWorkflowRequest\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\x12-\n\x12workflow_component\x18\x02 \x01(\tR\x11workflowComponent\"f\n\x14PauseWorkflowRequest\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\x12-\n\x12workflow_component\x18\x02 \x01(\tR\x11workflowComponent\"g\n\x15ResumeWorkflowRequest\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\x12-\n\x12workflow_component\x18\x02 \x01(\tR\x11workflowComponent\"\x9e\x01\n\x19RaiseEventWorkflowRequest\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\x12-\n\x12workflow_component\x18\x02 \x01(\tR\x11workflowComponent\x12\x1d\n\nevent_name\x18\x03 \x01(\tR\teventName\x12\x12\n\nevent_data\x18\x04 \x01(\x0c\"f\n\x14PurgeWorkflowRequest\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\x12-\n\x12workflow_component\x18\x02 \x01(\tR\x11workflowComponent\"\x11\n\x0fShutdownRequest\"\xe8\x01\n\x03Job\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x1f\n\x08schedule\x18\x02 \x01(\tH\x00R\x08schedule\x88\x01\x01\x12\x1d\n\x07repeats\x18\x03 \x01(\rH\x01R\x07repeats\x88\x01\x01\x12\x1e\n\x08\x64ue_time\x18\x04 \x01(\tH\x02R\x07\x64ueTime\x88\x01\x01\x12\x15\n\x03ttl\x18\x05 \x01(\tH\x03R\x03ttl\x88\x01\x01\x12(\n\x04\x64\x61ta\x18\x06 \x01(\x0b\x32\x14.google.protobuf.AnyR\x04\x64\x61taB\x0b\n\t_scheduleB\n\n\x08_repeatsB\x0b\n\t_due_timeB\x06\n\x04_ttl\"=\n\x12ScheduleJobRequest\x12\'\n\x03job\x18\x01 \x01(\x0b\x32\x1a.dapr.proto.runtime.v1.Job\"\x15\n\x13ScheduleJobResponse\"\x1d\n\rGetJobRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"9\n\x0eGetJobResponse\x12\'\n\x03job\x18\x01 \x01(\x0b\x32\x1a.dapr.proto.runtime.v1.Job\" \n\x10\x44\x65leteJobRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"\x13\n\x11\x44\x65leteJobResponse\"\xe7\x03\n\x13\x43onversationRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x16\n\tcontextID\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x38\n\x06inputs\x18\x03 \x03(\x0b\x32(.dapr.proto.runtime.v1.ConversationInput\x12N\n\nparameters\x18\x04 \x03(\x0b\x32:.dapr.proto.runtime.v1.ConversationRequest.ParametersEntry\x12J\n\x08metadata\x18\x05 \x03(\x0b\x32\x38.dapr.proto.runtime.v1.ConversationRequest.MetadataEntry\x12\x15\n\x08scrubPII\x18\x06 \x01(\x08H\x01\x88\x01\x01\x12\x18\n\x0btemperature\x18\x07 \x01(\x01H\x02\x88\x01\x01\x1aG\n\x0fParametersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12#\n\x05value\x18\x02 \x01(\x0b\x32\x14.google.protobuf.Any:\x02\x38\x01\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x0c\n\n_contextIDB\x0b\n\t_scrubPIIB\x0e\n\x0c_temperature\"d\n\x11\x43onversationInput\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\x11\n\x04role\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x15\n\x08scrubPII\x18\x03 \x01(\x08H\x01\x88\x01\x01\x42\x07\n\x05_roleB\x0b\n\t_scrubPII\"\xbc\x01\n\x12\x43onversationResult\x12\x0e\n\x06result\x18\x01 \x01(\t\x12M\n\nparameters\x18\x02 \x03(\x0b\x32\x39.dapr.proto.runtime.v1.ConversationResult.ParametersEntry\x1aG\n\x0fParametersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12#\n\x05value\x18\x02 \x01(\x0b\x32\x14.google.protobuf.Any:\x02\x38\x01\"x\n\x14\x43onversationResponse\x12\x16\n\tcontextID\x18\x01 \x01(\tH\x00\x88\x01\x01\x12:\n\x07outputs\x18\x02 \x03(\x0b\x32).dapr.proto.runtime.v1.ConversationResultB\x0c\n\n_contextID*W\n\x16PubsubSubscriptionType\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x0f\n\x0b\x44\x45\x43LARATIVE\x10\x01\x12\x10\n\x0cPROGRAMMATIC\x10\x02\x12\r\n\tSTREAMING\x10\x03\x32\xbe\x31\n\x04\x44\x61pr\x12\x64\n\rInvokeService\x12+.dapr.proto.runtime.v1.InvokeServiceRequest\x1a$.dapr.proto.common.v1.InvokeResponse\"\x00\x12]\n\x08GetState\x12&.dapr.proto.runtime.v1.GetStateRequest\x1a\'.dapr.proto.runtime.v1.GetStateResponse\"\x00\x12i\n\x0cGetBulkState\x12*.dapr.proto.runtime.v1.GetBulkStateRequest\x1a+.dapr.proto.runtime.v1.GetBulkStateResponse\"\x00\x12N\n\tSaveState\x12\'.dapr.proto.runtime.v1.SaveStateRequest\x1a\x16.google.protobuf.Empty\"\x00\x12i\n\x10QueryStateAlpha1\x12(.dapr.proto.runtime.v1.QueryStateRequest\x1a).dapr.proto.runtime.v1.QueryStateResponse\"\x00\x12R\n\x0b\x44\x65leteState\x12).dapr.proto.runtime.v1.DeleteStateRequest\x1a\x16.google.protobuf.Empty\"\x00\x12Z\n\x0f\x44\x65leteBulkState\x12-.dapr.proto.runtime.v1.DeleteBulkStateRequest\x1a\x16.google.protobuf.Empty\"\x00\x12j\n\x17\x45xecuteStateTransaction\x12\x35.dapr.proto.runtime.v1.ExecuteStateTransactionRequest\x1a\x16.google.protobuf.Empty\"\x00\x12T\n\x0cPublishEvent\x12*.dapr.proto.runtime.v1.PublishEventRequest\x1a\x16.google.protobuf.Empty\"\x00\x12q\n\x16\x42ulkPublishEventAlpha1\x12).dapr.proto.runtime.v1.BulkPublishRequest\x1a*.dapr.proto.runtime.v1.BulkPublishResponse\"\x00\x12\x97\x01\n\x1aSubscribeTopicEventsAlpha1\x12\x38.dapr.proto.runtime.v1.SubscribeTopicEventsRequestAlpha1\x1a\x39.dapr.proto.runtime.v1.SubscribeTopicEventsResponseAlpha1\"\x00(\x01\x30\x01\x12l\n\rInvokeBinding\x12+.dapr.proto.runtime.v1.InvokeBindingRequest\x1a,.dapr.proto.runtime.v1.InvokeBindingResponse\"\x00\x12`\n\tGetSecret\x12\'.dapr.proto.runtime.v1.GetSecretRequest\x1a(.dapr.proto.runtime.v1.GetSecretResponse\"\x00\x12l\n\rGetBulkSecret\x12+.dapr.proto.runtime.v1.GetBulkSecretRequest\x1a,.dapr.proto.runtime.v1.GetBulkSecretResponse\"\x00\x12`\n\x12RegisterActorTimer\x12\x30.dapr.proto.runtime.v1.RegisterActorTimerRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x64\n\x14UnregisterActorTimer\x12\x32.dapr.proto.runtime.v1.UnregisterActorTimerRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x66\n\x15RegisterActorReminder\x12\x33.dapr.proto.runtime.v1.RegisterActorReminderRequest\x1a\x16.google.protobuf.Empty\"\x00\x12j\n\x17UnregisterActorReminder\x12\x35.dapr.proto.runtime.v1.UnregisterActorReminderRequest\x1a\x16.google.protobuf.Empty\"\x00\x12l\n\rGetActorState\x12+.dapr.proto.runtime.v1.GetActorStateRequest\x1a,.dapr.proto.runtime.v1.GetActorStateResponse\"\x00\x12t\n\x1c\x45xecuteActorStateTransaction\x12:.dapr.proto.runtime.v1.ExecuteActorStateTransactionRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x66\n\x0bInvokeActor\x12).dapr.proto.runtime.v1.InvokeActorRequest\x1a*.dapr.proto.runtime.v1.InvokeActorResponse\"\x00\x12{\n\x16GetConfigurationAlpha1\x12..dapr.proto.runtime.v1.GetConfigurationRequest\x1a/.dapr.proto.runtime.v1.GetConfigurationResponse\"\x00\x12u\n\x10GetConfiguration\x12..dapr.proto.runtime.v1.GetConfigurationRequest\x1a/.dapr.proto.runtime.v1.GetConfigurationResponse\"\x00\x12\x8f\x01\n\x1cSubscribeConfigurationAlpha1\x12\x34.dapr.proto.runtime.v1.SubscribeConfigurationRequest\x1a\x35.dapr.proto.runtime.v1.SubscribeConfigurationResponse\"\x00\x30\x01\x12\x89\x01\n\x16SubscribeConfiguration\x12\x34.dapr.proto.runtime.v1.SubscribeConfigurationRequest\x1a\x35.dapr.proto.runtime.v1.SubscribeConfigurationResponse\"\x00\x30\x01\x12\x93\x01\n\x1eUnsubscribeConfigurationAlpha1\x12\x36.dapr.proto.runtime.v1.UnsubscribeConfigurationRequest\x1a\x37.dapr.proto.runtime.v1.UnsubscribeConfigurationResponse\"\x00\x12\x8d\x01\n\x18UnsubscribeConfiguration\x12\x36.dapr.proto.runtime.v1.UnsubscribeConfigurationRequest\x1a\x37.dapr.proto.runtime.v1.UnsubscribeConfigurationResponse\"\x00\x12`\n\rTryLockAlpha1\x12%.dapr.proto.runtime.v1.TryLockRequest\x1a&.dapr.proto.runtime.v1.TryLockResponse\"\x00\x12]\n\x0cUnlockAlpha1\x12$.dapr.proto.runtime.v1.UnlockRequest\x1a%.dapr.proto.runtime.v1.UnlockResponse\"\x00\x12\x62\n\rEncryptAlpha1\x12%.dapr.proto.runtime.v1.EncryptRequest\x1a&.dapr.proto.runtime.v1.EncryptResponse(\x01\x30\x01\x12\x62\n\rDecryptAlpha1\x12%.dapr.proto.runtime.v1.DecryptRequest\x1a&.dapr.proto.runtime.v1.DecryptResponse(\x01\x30\x01\x12\x66\n\x0bGetMetadata\x12).dapr.proto.runtime.v1.GetMetadataRequest\x1a*.dapr.proto.runtime.v1.GetMetadataResponse\"\x00\x12R\n\x0bSetMetadata\x12).dapr.proto.runtime.v1.SetMetadataRequest\x1a\x16.google.protobuf.Empty\"\x00\x12m\n\x12SubtleGetKeyAlpha1\x12*.dapr.proto.runtime.v1.SubtleGetKeyRequest\x1a+.dapr.proto.runtime.v1.SubtleGetKeyResponse\x12p\n\x13SubtleEncryptAlpha1\x12+.dapr.proto.runtime.v1.SubtleEncryptRequest\x1a,.dapr.proto.runtime.v1.SubtleEncryptResponse\x12p\n\x13SubtleDecryptAlpha1\x12+.dapr.proto.runtime.v1.SubtleDecryptRequest\x1a,.dapr.proto.runtime.v1.SubtleDecryptResponse\x12p\n\x13SubtleWrapKeyAlpha1\x12+.dapr.proto.runtime.v1.SubtleWrapKeyRequest\x1a,.dapr.proto.runtime.v1.SubtleWrapKeyResponse\x12v\n\x15SubtleUnwrapKeyAlpha1\x12-.dapr.proto.runtime.v1.SubtleUnwrapKeyRequest\x1a..dapr.proto.runtime.v1.SubtleUnwrapKeyResponse\x12g\n\x10SubtleSignAlpha1\x12(.dapr.proto.runtime.v1.SubtleSignRequest\x1a).dapr.proto.runtime.v1.SubtleSignResponse\x12m\n\x12SubtleVerifyAlpha1\x12*.dapr.proto.runtime.v1.SubtleVerifyRequest\x1a+.dapr.proto.runtime.v1.SubtleVerifyResponse\x12u\n\x13StartWorkflowAlpha1\x12+.dapr.proto.runtime.v1.StartWorkflowRequest\x1a,.dapr.proto.runtime.v1.StartWorkflowResponse\"\x03\x88\x02\x01\x12o\n\x11GetWorkflowAlpha1\x12).dapr.proto.runtime.v1.GetWorkflowRequest\x1a*.dapr.proto.runtime.v1.GetWorkflowResponse\"\x03\x88\x02\x01\x12_\n\x13PurgeWorkflowAlpha1\x12+.dapr.proto.runtime.v1.PurgeWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x03\x88\x02\x01\x12g\n\x17TerminateWorkflowAlpha1\x12/.dapr.proto.runtime.v1.TerminateWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x03\x88\x02\x01\x12_\n\x13PauseWorkflowAlpha1\x12+.dapr.proto.runtime.v1.PauseWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x03\x88\x02\x01\x12\x61\n\x14ResumeWorkflowAlpha1\x12,.dapr.proto.runtime.v1.ResumeWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x03\x88\x02\x01\x12i\n\x18RaiseEventWorkflowAlpha1\x12\x30.dapr.proto.runtime.v1.RaiseEventWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x03\x88\x02\x01\x12q\n\x12StartWorkflowBeta1\x12+.dapr.proto.runtime.v1.StartWorkflowRequest\x1a,.dapr.proto.runtime.v1.StartWorkflowResponse\"\x00\x12k\n\x10GetWorkflowBeta1\x12).dapr.proto.runtime.v1.GetWorkflowRequest\x1a*.dapr.proto.runtime.v1.GetWorkflowResponse\"\x00\x12[\n\x12PurgeWorkflowBeta1\x12+.dapr.proto.runtime.v1.PurgeWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x63\n\x16TerminateWorkflowBeta1\x12/.dapr.proto.runtime.v1.TerminateWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x00\x12[\n\x12PauseWorkflowBeta1\x12+.dapr.proto.runtime.v1.PauseWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x00\x12]\n\x13ResumeWorkflowBeta1\x12,.dapr.proto.runtime.v1.ResumeWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x65\n\x17RaiseEventWorkflowBeta1\x12\x30.dapr.proto.runtime.v1.RaiseEventWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x00\x12L\n\x08Shutdown\x12&.dapr.proto.runtime.v1.ShutdownRequest\x1a\x16.google.protobuf.Empty\"\x00\x12l\n\x11ScheduleJobAlpha1\x12).dapr.proto.runtime.v1.ScheduleJobRequest\x1a*.dapr.proto.runtime.v1.ScheduleJobResponse\"\x00\x12]\n\x0cGetJobAlpha1\x12$.dapr.proto.runtime.v1.GetJobRequest\x1a%.dapr.proto.runtime.v1.GetJobResponse\"\x00\x12\x66\n\x0f\x44\x65leteJobAlpha1\x12\'.dapr.proto.runtime.v1.DeleteJobRequest\x1a(.dapr.proto.runtime.v1.DeleteJobResponse\"\x00\x12k\n\x0e\x43onverseAlpha1\x12*.dapr.proto.runtime.v1.ConversationRequest\x1a+.dapr.proto.runtime.v1.ConversationResponse\"\x00\x42i\n\nio.dapr.v1B\nDaprProtosZ1github.com/dapr/dapr/pkg/proto/runtime/v1;runtime\xaa\x02\x1b\x44\x61pr.Client.Autogen.Grpc.v1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'dapr.proto.runtime.v1.dapr_pb2', _globals) if _descriptor._USE_C_DESCRIPTORS == False: - - DESCRIPTOR._options = None - DESCRIPTOR._serialized_options = b'\n\nio.dapr.v1B\nDaprProtosZ1github.com/dapr/dapr/pkg/proto/runtime/v1;runtime\252\002\033Dapr.Client.Autogen.Grpc.v1' - _GETSTATEREQUEST_METADATAENTRY._options = None - _GETSTATEREQUEST_METADATAENTRY._serialized_options = b'8\001' - _GETBULKSTATEREQUEST_METADATAENTRY._options = None - _GETBULKSTATEREQUEST_METADATAENTRY._serialized_options = b'8\001' - _BULKSTATEITEM_METADATAENTRY._options = None - _BULKSTATEITEM_METADATAENTRY._serialized_options = b'8\001' - _GETSTATERESPONSE_METADATAENTRY._options = None - _GETSTATERESPONSE_METADATAENTRY._serialized_options = b'8\001' - _DELETESTATEREQUEST_METADATAENTRY._options = None - _DELETESTATEREQUEST_METADATAENTRY._serialized_options = b'8\001' - _QUERYSTATEREQUEST_METADATAENTRY._options = None - _QUERYSTATEREQUEST_METADATAENTRY._serialized_options = b'8\001' - _QUERYSTATERESPONSE_METADATAENTRY._options = None - _QUERYSTATERESPONSE_METADATAENTRY._serialized_options = b'8\001' - _PUBLISHEVENTREQUEST_METADATAENTRY._options = None - _PUBLISHEVENTREQUEST_METADATAENTRY._serialized_options = b'8\001' - _BULKPUBLISHREQUEST_METADATAENTRY._options = None - _BULKPUBLISHREQUEST_METADATAENTRY._serialized_options = b'8\001' - _BULKPUBLISHREQUESTENTRY_METADATAENTRY._options = None - _BULKPUBLISHREQUESTENTRY_METADATAENTRY._serialized_options = b'8\001' - _SUBSCRIBETOPICEVENTSREQUESTINITIALALPHA1_METADATAENTRY._options = None - _SUBSCRIBETOPICEVENTSREQUESTINITIALALPHA1_METADATAENTRY._serialized_options = b'8\001' - _INVOKEBINDINGREQUEST_METADATAENTRY._options = None - _INVOKEBINDINGREQUEST_METADATAENTRY._serialized_options = b'8\001' - _INVOKEBINDINGRESPONSE_METADATAENTRY._options = None - _INVOKEBINDINGRESPONSE_METADATAENTRY._serialized_options = b'8\001' - _GETSECRETREQUEST_METADATAENTRY._options = None - _GETSECRETREQUEST_METADATAENTRY._serialized_options = b'8\001' - _GETSECRETRESPONSE_DATAENTRY._options = None - _GETSECRETRESPONSE_DATAENTRY._serialized_options = b'8\001' - _GETBULKSECRETREQUEST_METADATAENTRY._options = None - _GETBULKSECRETREQUEST_METADATAENTRY._serialized_options = b'8\001' - _SECRETRESPONSE_SECRETSENTRY._options = None - _SECRETRESPONSE_SECRETSENTRY._serialized_options = b'8\001' - _GETBULKSECRETRESPONSE_DATAENTRY._options = None - _GETBULKSECRETRESPONSE_DATAENTRY._serialized_options = b'8\001' - _EXECUTESTATETRANSACTIONREQUEST_METADATAENTRY._options = None - _EXECUTESTATETRANSACTIONREQUEST_METADATAENTRY._serialized_options = b'8\001' - _GETACTORSTATERESPONSE_METADATAENTRY._options = None - _GETACTORSTATERESPONSE_METADATAENTRY._serialized_options = b'8\001' - _TRANSACTIONALACTORSTATEOPERATION_METADATAENTRY._options = None - _TRANSACTIONALACTORSTATEOPERATION_METADATAENTRY._serialized_options = b'8\001' - _INVOKEACTORREQUEST_METADATAENTRY._options = None - _INVOKEACTORREQUEST_METADATAENTRY._serialized_options = b'8\001' - _GETMETADATARESPONSE_EXTENDEDMETADATAENTRY._options = None - _GETMETADATARESPONSE_EXTENDEDMETADATAENTRY._serialized_options = b'8\001' - _GETMETADATARESPONSE.fields_by_name['active_actors_count']._options = None - _GETMETADATARESPONSE.fields_by_name['active_actors_count']._serialized_options = b'\030\001' - _PUBSUBSUBSCRIPTION_METADATAENTRY._options = None - _PUBSUBSUBSCRIPTION_METADATAENTRY._serialized_options = b'8\001' - _GETCONFIGURATIONREQUEST_METADATAENTRY._options = None - _GETCONFIGURATIONREQUEST_METADATAENTRY._serialized_options = b'8\001' - _GETCONFIGURATIONRESPONSE_ITEMSENTRY._options = None - _GETCONFIGURATIONRESPONSE_ITEMSENTRY._serialized_options = b'8\001' - _SUBSCRIBECONFIGURATIONREQUEST_METADATAENTRY._options = None - _SUBSCRIBECONFIGURATIONREQUEST_METADATAENTRY._serialized_options = b'8\001' - _SUBSCRIBECONFIGURATIONRESPONSE_ITEMSENTRY._options = None - _SUBSCRIBECONFIGURATIONRESPONSE_ITEMSENTRY._serialized_options = b'8\001' - _GETWORKFLOWRESPONSE_PROPERTIESENTRY._options = None - _GETWORKFLOWRESPONSE_PROPERTIESENTRY._serialized_options = b'8\001' - _STARTWORKFLOWREQUEST_OPTIONSENTRY._options = None - _STARTWORKFLOWREQUEST_OPTIONSENTRY._serialized_options = b'8\001' - _CONVERSATIONALPHA1REQUEST_PARAMETERSENTRY._options = None - _CONVERSATIONALPHA1REQUEST_PARAMETERSENTRY._serialized_options = b'8\001' - _CONVERSATIONALPHA1REQUEST_METADATAENTRY._options = None - _CONVERSATIONALPHA1REQUEST_METADATAENTRY._serialized_options = b'8\001' - _CONVERSATIONALPHA1RESULT_PARAMETERSENTRY._options = None - _CONVERSATIONALPHA1RESULT_PARAMETERSENTRY._serialized_options = b'8\001' - _globals['_PUBSUBSUBSCRIPTIONTYPE']._serialized_start=16034 - _globals['_PUBSUBSUBSCRIPTIONTYPE']._serialized_end=16121 + _globals['DESCRIPTOR']._options = None + _globals['DESCRIPTOR']._serialized_options = b'\n\nio.dapr.v1B\nDaprProtosZ1github.com/dapr/dapr/pkg/proto/runtime/v1;runtime\252\002\033Dapr.Client.Autogen.Grpc.v1' + _globals['_GETSTATEREQUEST_METADATAENTRY']._options = None + _globals['_GETSTATEREQUEST_METADATAENTRY']._serialized_options = b'8\001' + _globals['_GETBULKSTATEREQUEST_METADATAENTRY']._options = None + _globals['_GETBULKSTATEREQUEST_METADATAENTRY']._serialized_options = b'8\001' + _globals['_BULKSTATEITEM_METADATAENTRY']._options = None + _globals['_BULKSTATEITEM_METADATAENTRY']._serialized_options = b'8\001' + _globals['_GETSTATERESPONSE_METADATAENTRY']._options = None + _globals['_GETSTATERESPONSE_METADATAENTRY']._serialized_options = b'8\001' + _globals['_DELETESTATEREQUEST_METADATAENTRY']._options = None + _globals['_DELETESTATEREQUEST_METADATAENTRY']._serialized_options = b'8\001' + _globals['_QUERYSTATEREQUEST_METADATAENTRY']._options = None + _globals['_QUERYSTATEREQUEST_METADATAENTRY']._serialized_options = b'8\001' + _globals['_QUERYSTATERESPONSE_METADATAENTRY']._options = None + _globals['_QUERYSTATERESPONSE_METADATAENTRY']._serialized_options = b'8\001' + _globals['_PUBLISHEVENTREQUEST_METADATAENTRY']._options = None + _globals['_PUBLISHEVENTREQUEST_METADATAENTRY']._serialized_options = b'8\001' + _globals['_BULKPUBLISHREQUEST_METADATAENTRY']._options = None + _globals['_BULKPUBLISHREQUEST_METADATAENTRY']._serialized_options = b'8\001' + _globals['_BULKPUBLISHREQUESTENTRY_METADATAENTRY']._options = None + _globals['_BULKPUBLISHREQUESTENTRY_METADATAENTRY']._serialized_options = b'8\001' + _globals['_SUBSCRIBETOPICEVENTSREQUESTINITIALALPHA1_METADATAENTRY']._options = None + _globals['_SUBSCRIBETOPICEVENTSREQUESTINITIALALPHA1_METADATAENTRY']._serialized_options = b'8\001' + _globals['_INVOKEBINDINGREQUEST_METADATAENTRY']._options = None + _globals['_INVOKEBINDINGREQUEST_METADATAENTRY']._serialized_options = b'8\001' + _globals['_INVOKEBINDINGRESPONSE_METADATAENTRY']._options = None + _globals['_INVOKEBINDINGRESPONSE_METADATAENTRY']._serialized_options = b'8\001' + _globals['_GETSECRETREQUEST_METADATAENTRY']._options = None + _globals['_GETSECRETREQUEST_METADATAENTRY']._serialized_options = b'8\001' + _globals['_GETSECRETRESPONSE_DATAENTRY']._options = None + _globals['_GETSECRETRESPONSE_DATAENTRY']._serialized_options = b'8\001' + _globals['_GETBULKSECRETREQUEST_METADATAENTRY']._options = None + _globals['_GETBULKSECRETREQUEST_METADATAENTRY']._serialized_options = b'8\001' + _globals['_SECRETRESPONSE_SECRETSENTRY']._options = None + _globals['_SECRETRESPONSE_SECRETSENTRY']._serialized_options = b'8\001' + _globals['_GETBULKSECRETRESPONSE_DATAENTRY']._options = None + _globals['_GETBULKSECRETRESPONSE_DATAENTRY']._serialized_options = b'8\001' + _globals['_EXECUTESTATETRANSACTIONREQUEST_METADATAENTRY']._options = None + _globals['_EXECUTESTATETRANSACTIONREQUEST_METADATAENTRY']._serialized_options = b'8\001' + _globals['_GETACTORSTATERESPONSE_METADATAENTRY']._options = None + _globals['_GETACTORSTATERESPONSE_METADATAENTRY']._serialized_options = b'8\001' + _globals['_TRANSACTIONALACTORSTATEOPERATION_METADATAENTRY']._options = None + _globals['_TRANSACTIONALACTORSTATEOPERATION_METADATAENTRY']._serialized_options = b'8\001' + _globals['_INVOKEACTORREQUEST_METADATAENTRY']._options = None + _globals['_INVOKEACTORREQUEST_METADATAENTRY']._serialized_options = b'8\001' + _globals['_GETMETADATARESPONSE_EXTENDEDMETADATAENTRY']._options = None + _globals['_GETMETADATARESPONSE_EXTENDEDMETADATAENTRY']._serialized_options = b'8\001' + _globals['_GETMETADATARESPONSE'].fields_by_name['active_actors_count']._options = None + _globals['_GETMETADATARESPONSE'].fields_by_name['active_actors_count']._serialized_options = b'\030\001' + _globals['_PUBSUBSUBSCRIPTION_METADATAENTRY']._options = None + _globals['_PUBSUBSUBSCRIPTION_METADATAENTRY']._serialized_options = b'8\001' + _globals['_GETCONFIGURATIONREQUEST_METADATAENTRY']._options = None + _globals['_GETCONFIGURATIONREQUEST_METADATAENTRY']._serialized_options = b'8\001' + _globals['_GETCONFIGURATIONRESPONSE_ITEMSENTRY']._options = None + _globals['_GETCONFIGURATIONRESPONSE_ITEMSENTRY']._serialized_options = b'8\001' + _globals['_SUBSCRIBECONFIGURATIONREQUEST_METADATAENTRY']._options = None + _globals['_SUBSCRIBECONFIGURATIONREQUEST_METADATAENTRY']._serialized_options = b'8\001' + _globals['_SUBSCRIBECONFIGURATIONRESPONSE_ITEMSENTRY']._options = None + _globals['_SUBSCRIBECONFIGURATIONRESPONSE_ITEMSENTRY']._serialized_options = b'8\001' + _globals['_GETWORKFLOWRESPONSE_PROPERTIESENTRY']._options = None + _globals['_GETWORKFLOWRESPONSE_PROPERTIESENTRY']._serialized_options = b'8\001' + _globals['_STARTWORKFLOWREQUEST_OPTIONSENTRY']._options = None + _globals['_STARTWORKFLOWREQUEST_OPTIONSENTRY']._serialized_options = b'8\001' + _globals['_CONVERSATIONREQUEST_PARAMETERSENTRY']._options = None + _globals['_CONVERSATIONREQUEST_PARAMETERSENTRY']._serialized_options = b'8\001' + _globals['_CONVERSATIONREQUEST_METADATAENTRY']._options = None + _globals['_CONVERSATIONREQUEST_METADATAENTRY']._serialized_options = b'8\001' + _globals['_CONVERSATIONRESULT_PARAMETERSENTRY']._options = None + _globals['_CONVERSATIONRESULT_PARAMETERSENTRY']._serialized_options = b'8\001' + _globals['_DAPR'].methods_by_name['StartWorkflowAlpha1']._options = None + _globals['_DAPR'].methods_by_name['StartWorkflowAlpha1']._serialized_options = b'\210\002\001' + _globals['_DAPR'].methods_by_name['GetWorkflowAlpha1']._options = None + _globals['_DAPR'].methods_by_name['GetWorkflowAlpha1']._serialized_options = b'\210\002\001' + _globals['_DAPR'].methods_by_name['PurgeWorkflowAlpha1']._options = None + _globals['_DAPR'].methods_by_name['PurgeWorkflowAlpha1']._serialized_options = b'\210\002\001' + _globals['_DAPR'].methods_by_name['TerminateWorkflowAlpha1']._options = None + _globals['_DAPR'].methods_by_name['TerminateWorkflowAlpha1']._serialized_options = b'\210\002\001' + _globals['_DAPR'].methods_by_name['PauseWorkflowAlpha1']._options = None + _globals['_DAPR'].methods_by_name['PauseWorkflowAlpha1']._serialized_options = b'\210\002\001' + _globals['_DAPR'].methods_by_name['ResumeWorkflowAlpha1']._options = None + _globals['_DAPR'].methods_by_name['ResumeWorkflowAlpha1']._serialized_options = b'\210\002\001' + _globals['_DAPR'].methods_by_name['RaiseEventWorkflowAlpha1']._options = None + _globals['_DAPR'].methods_by_name['RaiseEventWorkflowAlpha1']._serialized_options = b'\210\002\001' + _globals['_PUBSUBSUBSCRIPTIONTYPE']._serialized_start=15991 + _globals['_PUBSUBSUBSCRIPTIONTYPE']._serialized_end=16078 _globals['_INVOKESERVICEREQUEST']._serialized_start=224 _globals['_INVOKESERVICEREQUEST']._serialized_end=312 _globals['_GETSTATEREQUEST']._serialized_start=315 @@ -363,20 +377,20 @@ _globals['_DELETEJOBREQUEST']._serialized_end=15063 _globals['_DELETEJOBRESPONSE']._serialized_start=15065 _globals['_DELETEJOBRESPONSE']._serialized_end=15084 - _globals['_CONVERSATIONALPHA1REQUEST']._serialized_start=15087 - _globals['_CONVERSATIONALPHA1REQUEST']._serialized_end=15592 - _globals['_CONVERSATIONALPHA1REQUEST_PARAMETERSENTRY']._serialized_start=15429 - _globals['_CONVERSATIONALPHA1REQUEST_PARAMETERSENTRY']._serialized_end=15500 - _globals['_CONVERSATIONALPHA1REQUEST_METADATAENTRY']._serialized_start=513 - _globals['_CONVERSATIONALPHA1REQUEST_METADATAENTRY']._serialized_end=560 - _globals['_CONVERSATIONINPUT']._serialized_start=15594 - _globals['_CONVERSATIONINPUT']._serialized_end=15694 - _globals['_CONVERSATIONALPHA1RESULT']._serialized_start=15697 - _globals['_CONVERSATIONALPHA1RESULT']._serialized_end=15897 - _globals['_CONVERSATIONALPHA1RESULT_PARAMETERSENTRY']._serialized_start=15429 - _globals['_CONVERSATIONALPHA1RESULT_PARAMETERSENTRY']._serialized_end=15500 - _globals['_CONVERSATIONALPHA1RESPONSE']._serialized_start=15900 - _globals['_CONVERSATIONALPHA1RESPONSE']._serialized_end=16032 - _globals['_DAPR']._serialized_start=16124 - _globals['_DAPR']._serialized_end=22449 + _globals['_CONVERSATIONREQUEST']._serialized_start=15087 + _globals['_CONVERSATIONREQUEST']._serialized_end=15574 + _globals['_CONVERSATIONREQUEST_PARAMETERSENTRY']._serialized_start=15411 + _globals['_CONVERSATIONREQUEST_PARAMETERSENTRY']._serialized_end=15482 + _globals['_CONVERSATIONREQUEST_METADATAENTRY']._serialized_start=513 + _globals['_CONVERSATIONREQUEST_METADATAENTRY']._serialized_end=560 + _globals['_CONVERSATIONINPUT']._serialized_start=15576 + _globals['_CONVERSATIONINPUT']._serialized_end=15676 + _globals['_CONVERSATIONRESULT']._serialized_start=15679 + _globals['_CONVERSATIONRESULT']._serialized_end=15867 + _globals['_CONVERSATIONRESULT_PARAMETERSENTRY']._serialized_start=15411 + _globals['_CONVERSATIONRESULT_PARAMETERSENTRY']._serialized_end=15482 + _globals['_CONVERSATIONRESPONSE']._serialized_start=15869 + _globals['_CONVERSATIONRESPONSE']._serialized_end=15989 + _globals['_DAPR']._serialized_start=16081 + _globals['_DAPR']._serialized_end=22415 # @@protoc_insertion_point(module_scope) diff --git a/dapr/proto/runtime/v1/dapr_pb2.pyi b/dapr/proto/runtime/v1/dapr_pb2.pyi index 11f695a5..aee50395 100644 --- a/dapr/proto/runtime/v1/dapr_pb2.pyi +++ b/dapr/proto/runtime/v1/dapr_pb2.pyi @@ -3261,8 +3261,8 @@ class DeleteJobResponse(google.protobuf.message.Message): global___DeleteJobResponse = DeleteJobResponse @typing_extensions.final -class ConversationAlpha1Request(google.protobuf.message.Message): - """ConversationAlpha1Request is the request object for Conversation.""" +class ConversationRequest(google.protobuf.message.Message): + """ConversationRequest is the request object for Conversation.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -3308,7 +3308,7 @@ class ConversationAlpha1Request(google.protobuf.message.Message): SCRUBPII_FIELD_NUMBER: builtins.int TEMPERATURE_FIELD_NUMBER: builtins.int name: builtins.str - """The name of Coverstaion component""" + """The name of Conversation component""" contextID: builtins.str """The ID of an existing chat (like in ChatGPT)""" @property @@ -3344,7 +3344,7 @@ class ConversationAlpha1Request(google.protobuf.message.Message): @typing.overload def WhichOneof(self, oneof_group: typing_extensions.Literal["_temperature", b"_temperature"]) -> typing_extensions.Literal["temperature"] | None: ... -global___ConversationAlpha1Request = ConversationAlpha1Request +global___ConversationRequest = ConversationRequest @typing_extensions.final class ConversationInput(google.protobuf.message.Message): @@ -3376,8 +3376,8 @@ class ConversationInput(google.protobuf.message.Message): global___ConversationInput = ConversationInput @typing_extensions.final -class ConversationAlpha1Result(google.protobuf.message.Message): - """ConversationAlpha1Result is the result for one input.""" +class ConversationResult(google.protobuf.message.Message): + """ConversationResult is the result for one input.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -3414,11 +3414,11 @@ class ConversationAlpha1Result(google.protobuf.message.Message): ) -> None: ... def ClearField(self, field_name: typing_extensions.Literal["parameters", b"parameters", "result", b"result"]) -> None: ... -global___ConversationAlpha1Result = ConversationAlpha1Result +global___ConversationResult = ConversationResult @typing_extensions.final -class ConversationAlpha1Response(google.protobuf.message.Message): - """ConversationAlpha1Response is the response for Conversation.""" +class ConversationResponse(google.protobuf.message.Message): + """ConversationResponse is the response for Conversation.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -3427,16 +3427,16 @@ class ConversationAlpha1Response(google.protobuf.message.Message): contextID: builtins.str """The ID of an existing chat (like in ChatGPT)""" @property - def outputs(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___ConversationAlpha1Result]: + def outputs(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___ConversationResult]: """An array of results.""" def __init__( self, *, contextID: builtins.str | None = ..., - outputs: collections.abc.Iterable[global___ConversationAlpha1Result] | None = ..., + outputs: collections.abc.Iterable[global___ConversationResult] | None = ..., ) -> None: ... def HasField(self, field_name: typing_extensions.Literal["_contextID", b"_contextID", "contextID", b"contextID"]) -> builtins.bool: ... def ClearField(self, field_name: typing_extensions.Literal["_contextID", b"_contextID", "contextID", b"contextID", "outputs", b"outputs"]) -> None: ... def WhichOneof(self, oneof_group: typing_extensions.Literal["_contextID", b"_contextID"]) -> typing_extensions.Literal["contextID"] | None: ... -global___ConversationAlpha1Response = ConversationAlpha1Response +global___ConversationResponse = ConversationResponse diff --git a/dapr/proto/runtime/v1/dapr_pb2_grpc.py b/dapr/proto/runtime/v1/dapr_pb2_grpc.py index 60b4c241..d371896b 100644 --- a/dapr/proto/runtime/v1/dapr_pb2_grpc.py +++ b/dapr/proto/runtime/v1/dapr_pb2_grpc.py @@ -309,8 +309,8 @@ def __init__(self, channel): ) self.ConverseAlpha1 = channel.unary_unary( '/dapr.proto.runtime.v1.Dapr/ConverseAlpha1', - request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.ConversationAlpha1Request.SerializeToString, - response_deserializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.ConversationAlpha1Response.FromString, + request_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.ConversationRequest.SerializeToString, + response_deserializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.ConversationResponse.FromString, ) @@ -1028,8 +1028,8 @@ def add_DaprServicer_to_server(servicer, server): ), 'ConverseAlpha1': grpc.unary_unary_rpc_method_handler( servicer.ConverseAlpha1, - request_deserializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.ConversationAlpha1Request.FromString, - response_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.ConversationAlpha1Response.SerializeToString, + request_deserializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.ConversationRequest.FromString, + response_serializer=dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.ConversationResponse.SerializeToString, ), } generic_handler = grpc.method_handlers_generic_handler( @@ -2040,7 +2040,7 @@ def ConverseAlpha1(request, timeout=None, metadata=None): return grpc.experimental.unary_unary(request, target, '/dapr.proto.runtime.v1.Dapr/ConverseAlpha1', - dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.ConversationAlpha1Request.SerializeToString, - dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.ConversationAlpha1Response.FromString, + dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.ConversationRequest.SerializeToString, + dapr_dot_proto_dot_runtime_dot_v1_dot_dapr__pb2.ConversationResponse.FromString, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/tools/requirements.txt b/tools/requirements.txt index d3d503c9..627d683a 100644 --- a/tools/requirements.txt +++ b/tools/requirements.txt @@ -1 +1 @@ -grpcio-tools>=1.57.0 +grpcio-tools==1.62.3 From 5d01ddc34c5dae84ae6fbdddb9050209a5d6100b Mon Sep 17 00:00:00 2001 From: Billy Brown Date: Thu, 9 Jan 2025 17:14:57 +0000 Subject: [PATCH 16/38] Add DaprInternalError.as_json_safe_dict for actors (#765) The FastAPI and Flask extensions for actors serialise the value of any raised DaprInternalError to JSON, which fails if the error contains bytes in its `_raw_response_bytes` field. This change adds a new `as_json_safe_dict` method and uses it in place of the `as_dict` method in the FastAPI and Flask extensions. Two unit tests for the `as_json_safe_dict` method are included. Signed-off-by: Billy Brown Co-authored-by: Elena Kolevska Signed-off-by: Elena Kolevska --- dapr/clients/exceptions.py | 12 +++++++ .../dapr/ext/fastapi/actor.py | 15 +++++---- ext/flask_dapr/flask_dapr/actor.py | 10 +++--- tests/clients/test_exceptions.py | 31 ++++++++++++++++++- 4 files changed, 54 insertions(+), 14 deletions(-) diff --git a/dapr/clients/exceptions.py b/dapr/clients/exceptions.py index 91bc04a8..e6afeaa0 100644 --- a/dapr/clients/exceptions.py +++ b/dapr/clients/exceptions.py @@ -12,6 +12,7 @@ See the License for the specific language governing permissions and limitations under the License. """ +import base64 import json from typing import Optional @@ -44,6 +45,17 @@ def as_dict(self): 'raw_response_bytes': self._raw_response_bytes, } + def as_json_safe_dict(self): + error_dict = self.as_dict() + + if self._raw_response_bytes is not None: + # Encode bytes to base64 for JSON compatibility + error_dict['raw_response_bytes'] = base64.b64encode(self._raw_response_bytes).decode( + 'utf-8' + ) + + return error_dict + class StatusDetails: def __init__(self): diff --git a/ext/dapr-ext-fastapi/dapr/ext/fastapi/actor.py b/ext/dapr-ext-fastapi/dapr/ext/fastapi/actor.py index 793704f7..93b7860e 100644 --- a/ext/dapr-ext-fastapi/dapr/ext/fastapi/actor.py +++ b/ext/dapr-ext-fastapi/dapr/ext/fastapi/actor.py @@ -15,14 +15,13 @@ from typing import Any, Optional, Type, List +from dapr.actor import Actor, ActorRuntime +from dapr.clients.exceptions import ERROR_CODE_UNKNOWN, DaprInternalError +from dapr.serializers import DefaultJSONSerializer from fastapi import FastAPI, APIRouter, Request, Response, status # type: ignore from fastapi.logger import logger from fastapi.responses import JSONResponse -from dapr.actor import Actor, ActorRuntime -from dapr.clients.exceptions import DaprInternalError, ERROR_CODE_UNKNOWN -from dapr.serializers import DefaultJSONSerializer - DEFAULT_CONTENT_TYPE = 'application/json; utf-8' DAPR_REENTRANCY_ID_HEADER = 'Dapr-Reentrancy-Id' @@ -72,7 +71,7 @@ async def actor_deactivation(actor_type_name: str, actor_id: str): try: await ActorRuntime.deactivate(actor_type_name, actor_id) except DaprInternalError as ex: - return _wrap_response(status.HTTP_500_INTERNAL_SERVER_ERROR, ex.as_dict()) + return _wrap_response(status.HTTP_500_INTERNAL_SERVER_ERROR, ex.as_json_safe_dict()) except Exception as ex: return _wrap_response( status.HTTP_500_INTERNAL_SERVER_ERROR, repr(ex), ERROR_CODE_UNKNOWN @@ -96,7 +95,7 @@ async def actor_method( actor_type_name, actor_id, method_name, req_body, reentrancy_id ) except DaprInternalError as ex: - return _wrap_response(status.HTTP_500_INTERNAL_SERVER_ERROR, ex.as_dict()) + return _wrap_response(status.HTTP_500_INTERNAL_SERVER_ERROR, ex.as_json_safe_dict()) except Exception as ex: return _wrap_response( status.HTTP_500_INTERNAL_SERVER_ERROR, repr(ex), ERROR_CODE_UNKNOWN @@ -117,7 +116,7 @@ async def actor_timer( req_body = await request.body() await ActorRuntime.fire_timer(actor_type_name, actor_id, timer_name, req_body) except DaprInternalError as ex: - return _wrap_response(status.HTTP_500_INTERNAL_SERVER_ERROR, ex.as_dict()) + return _wrap_response(status.HTTP_500_INTERNAL_SERVER_ERROR, ex.as_json_safe_dict()) except Exception as ex: return _wrap_response( status.HTTP_500_INTERNAL_SERVER_ERROR, repr(ex), ERROR_CODE_UNKNOWN @@ -139,7 +138,7 @@ async def actor_reminder( req_body = await request.body() await ActorRuntime.fire_reminder(actor_type_name, actor_id, reminder_name, req_body) except DaprInternalError as ex: - return _wrap_response(status.HTTP_500_INTERNAL_SERVER_ERROR, ex.as_dict()) + return _wrap_response(status.HTTP_500_INTERNAL_SERVER_ERROR, ex.as_json_safe_dict()) except Exception as ex: return _wrap_response( status.HTTP_500_INTERNAL_SERVER_ERROR, repr(ex), ERROR_CODE_UNKNOWN diff --git a/ext/flask_dapr/flask_dapr/actor.py b/ext/flask_dapr/flask_dapr/actor.py index b717de15..c8bdf1a5 100644 --- a/ext/flask_dapr/flask_dapr/actor.py +++ b/ext/flask_dapr/flask_dapr/actor.py @@ -19,7 +19,7 @@ from flask import jsonify, make_response, request from dapr.actor import Actor, ActorRuntime -from dapr.clients.exceptions import DaprInternalError, ERROR_CODE_UNKNOWN +from dapr.clients.exceptions import ERROR_CODE_UNKNOWN, DaprInternalError from dapr.serializers import DefaultJSONSerializer DEFAULT_CONTENT_TYPE = 'application/json; utf-8' @@ -80,7 +80,7 @@ def _deactivation_handler(self, actor_type_name, actor_id): try: asyncio.run(ActorRuntime.deactivate(actor_type_name, actor_id)) except DaprInternalError as ex: - return wrap_response(500, ex.as_dict()) + return wrap_response(500, ex.as_json_safe_dict()) except Exception as ex: return wrap_response(500, repr(ex), ERROR_CODE_UNKNOWN) @@ -99,7 +99,7 @@ def _method_handler(self, actor_type_name, actor_id, method_name): ) ) except DaprInternalError as ex: - return wrap_response(500, ex.as_dict()) + return wrap_response(500, ex.as_json_safe_dict()) except Exception as ex: return wrap_response(500, repr(ex), ERROR_CODE_UNKNOWN) @@ -113,7 +113,7 @@ def _timer_handler(self, actor_type_name, actor_id, timer_name): req_body = request.stream.read() asyncio.run(ActorRuntime.fire_timer(actor_type_name, actor_id, timer_name, req_body)) except DaprInternalError as ex: - return wrap_response(500, ex.as_dict()) + return wrap_response(500, ex.as_json_safe_dict()) except Exception as ex: return wrap_response(500, repr(ex), ERROR_CODE_UNKNOWN) @@ -129,7 +129,7 @@ def _reminder_handler(self, actor_type_name, actor_id, reminder_name): ActorRuntime.fire_reminder(actor_type_name, actor_id, reminder_name, req_body) ) except DaprInternalError as ex: - return wrap_response(500, ex.as_dict()) + return wrap_response(500, ex.as_json_safe_dict()) except Exception as ex: return wrap_response(500, repr(ex), ERROR_CODE_UNKNOWN) diff --git a/tests/clients/test_exceptions.py b/tests/clients/test_exceptions.py index fb349b09..08eea4d5 100644 --- a/tests/clients/test_exceptions.py +++ b/tests/clients/test_exceptions.py @@ -1,3 +1,5 @@ +import base64 +import json import unittest import grpc @@ -6,7 +8,7 @@ from google.protobuf.duration_pb2 import Duration from dapr.clients import DaprGrpcClient -from dapr.clients.exceptions import DaprGrpcError +from dapr.clients.exceptions import DaprGrpcError, DaprInternalError from dapr.conf import settings from .fake_dapr_server import FakeDaprSidecar @@ -216,3 +218,30 @@ def test_error_code(self): dapr_error = context.exception self.assertEqual(dapr_error.error_code(), 'UNKNOWN') + + def test_dapr_internal_error_as_json_safe_dict_no_bytes(self): + message = 'Test DaprInternalError.as_json_safe_dict with no raw bytes' + dapr_error = DaprInternalError(message=message) + + safe_dict = dapr_error.as_json_safe_dict() + self.assertEqual(safe_dict['message'], message) + self.assertEqual(safe_dict['errorCode'], 'UNKNOWN') + self.assertIsNone(safe_dict['raw_response_bytes']) + + # Also check that the safe dict can be serialised to JSON + _ = json.dumps(safe_dict) + + def test_dapr_internal_error_as_json_safe_dict_bytes_are_encoded(self): + message = 'Test DaprInternalError.as_json_safe_dict with encoded raw bytes' + raw_bytes = message.encode('utf-8') + dapr_error = DaprInternalError(message=message, raw_response_bytes=raw_bytes) + + safe_dict = dapr_error.as_json_safe_dict() + self.assertEqual(safe_dict['message'], message) + self.assertEqual(safe_dict['errorCode'], 'UNKNOWN') + + decoded_bytes = base64.b64decode(safe_dict['raw_response_bytes']) + self.assertEqual(decoded_bytes, raw_bytes) + + # Also check that the safe dict can be serialised to JSON + _ = json.dumps(safe_dict) From 5ca0c877f8f2f41090dc11bb869c5919d61d775b Mon Sep 17 00:00:00 2001 From: Fabian Martinez <46371672+famarting@users.noreply.github.com> Date: Tue, 14 Jan 2025 15:16:34 +0100 Subject: [PATCH 17/38] workflows: update durabletask dependency (#757) * Bump codecov/codecov-action from 4 to 5 (#753) Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 4 to 5. - [Release notes](https://github.com/codecov/codecov-action/releases) - [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/codecov/codecov-action/compare/v4...v5) --- updated-dependencies: - dependency-name: codecov/codecov-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Signed-off-by: Elena Kolevska * update durabletask to use fork Signed-off-by: Fabian Martinez <46371672+famarting@users.noreply.github.com> Signed-off-by: Elena Kolevska * add purge workflow function Signed-off-by: Fabian Martinez <46371672+famarting@users.noreply.github.com> Signed-off-by: Elena Kolevska * support reuse id policy Signed-off-by: Fabian Martinez <46371672+famarting@users.noreply.github.com> Signed-off-by: Elena Kolevska * support set custom status Signed-off-by: Fabian Martinez <46371672+famarting@users.noreply.github.com> Signed-off-by: Elena Kolevska * Update ext/dapr-ext-workflow/dapr/ext/workflow/dapr_workflow_client.py Co-authored-by: Elena Kolevska Signed-off-by: Fabian Martinez <46371672+famarting@users.noreply.github.com> Signed-off-by: Elena Kolevska * Update ext/dapr-ext-workflow/dapr/ext/workflow/dapr_workflow_client.py Co-authored-by: Elena Kolevska Signed-off-by: Fabian Martinez <46371672+famarting@users.noreply.github.com> Signed-off-by: Elena Kolevska * Update ext/dapr-ext-workflow/tests/test_workflow_client.py Co-authored-by: Elena Kolevska Signed-off-by: Fabian Martinez <46371672+famarting@users.noreply.github.com> Signed-off-by: Elena Kolevska * Update ext/dapr-ext-workflow/dapr/ext/workflow/dapr_workflow_client.py Co-authored-by: Elena Kolevska Signed-off-by: Fabian Martinez <46371672+famarting@users.noreply.github.com> Signed-off-by: Elena Kolevska * update test, grpc version and lint Signed-off-by: Fabian Martinez <46371672+famarting@users.noreply.github.com> Signed-off-by: Elena Kolevska * Adds missing arguments in FakeTaskHubGrpcClient Signed-off-by: Elena Kolevska * linter Signed-off-by: Elena Kolevska * remove alpha for workflow stable release (#760) Signed-off-by: Hannah Hunter Signed-off-by: Elena Kolevska * Replace deprecated tox.ini option (#762) This option was replaced in 2020, deprecated, and eventually removed in tox 4. The correct option already appears elseware in this tox.ini file. This fix is necessary to run `tox -e doc` per the README.md instructions on tox 4. Signed-off-by: Eric Searcy Co-authored-by: Elena Kolevska Signed-off-by: Elena Kolevska * Add Actor Mocks (#750) * Moved files to new branch to avoid weird git bug Signed-off-by: Lorenzo Curcio * requested documentation changes Signed-off-by: Lorenzo Curcio * forgot to move file back to starting point Signed-off-by: Lorenzo Curcio * result of ruff format Signed-off-by: Lorenzo Curcio * fixed minor formatting issues, fixed type issues Signed-off-by: Lorenzo Curcio * minor test fix Signed-off-by: Lorenzo Curcio * fixes try_add_state Signed-off-by: Elena Kolevska Signed-off-by: Lorenzo Curcio * Revert "fixes try_add_state" This reverts commit 254ad17bfb184310b2ceae37c1eb82c947466ce6. Signed-off-by: Lorenzo Curcio * Update dapr/actor/runtime/mock_state_manager.py Fixing bug in try_add_state as mentioned in PR #756 Co-authored-by: Elena Kolevska Signed-off-by: Lorenzo Curcio Signed-off-by: Lorenzo Curcio * Update dapr/actor/runtime/mock_actor.py Whoops missed this Co-authored-by: Elena Kolevska Signed-off-by: Lorenzo Curcio * Update daprdocs/content/en/python-sdk-docs/python-actor.md Co-authored-by: Elena Kolevska Signed-off-by: Lorenzo Curcio * Update daprdocs/content/en/python-sdk-docs/python-actor.md Co-authored-by: Elena Kolevska Signed-off-by: Lorenzo Curcio * Update daprdocs/content/en/python-sdk-docs/python-actor.md Co-authored-by: Elena Kolevska Signed-off-by: Lorenzo Curcio * Update daprdocs/content/en/python-sdk-docs/python-actor.md Co-authored-by: Elena Kolevska Signed-off-by: Lorenzo Curcio * Update daprdocs/content/en/python-sdk-docs/python-actor.md Co-authored-by: Elena Kolevska Signed-off-by: Lorenzo Curcio * Update daprdocs/content/en/python-sdk-docs/python-actor.md Co-authored-by: Elena Kolevska Signed-off-by: Lorenzo Curcio * Update daprdocs/content/en/python-sdk-docs/python-actor.md Co-authored-by: Elena Kolevska Signed-off-by: Lorenzo Curcio * minor error in docs Signed-off-by: Lorenzo Curcio * fixed and added more unit tests. Added example Signed-off-by: Lorenzo Curcio * unittest fix Signed-off-by: Lorenzo Curcio * Update examples/demo_actor/README.md Co-authored-by: Elena Kolevska Signed-off-by: Lorenzo Curcio * concentrated some tests Signed-off-by: Lorenzo Curcio * removed unnecessary type hint Signed-off-by: Lorenzo Curcio * Update daprdocs/content/en/python-sdk-docs/python-actor.md didnt see this earlier whoops Co-authored-by: Elena Kolevska Signed-off-by: Lorenzo Curcio * Update examples/demo_actor/README.md Co-authored-by: Elena Kolevska Signed-off-by: Lorenzo Curcio * documentation changes Signed-off-by: Lorenzo Curcio * now requires #type: ignore Signed-off-by: Lorenzo Curcio * small docs change Signed-off-by: Elena Kolevska * examples test fix Signed-off-by: Elena Kolevska --------- Signed-off-by: Lorenzo Curcio Signed-off-by: Lorenzo Curcio Signed-off-by: Elena Kolevska Co-authored-by: Elena Kolevska Co-authored-by: Lorenzo Curcio Co-authored-by: Elena Kolevska Signed-off-by: Elena Kolevska * Fixes try_add_state in actor state manger (#756) Signed-off-by: Elena Kolevska * Integration test for http invocation (#758) Signed-off-by: Elena Kolevska * fixes missing state store in test (#759) Signed-off-by: Elena Kolevska * Mark workflows API functions as deprecated (#749) * workflows, remove deprecated functions Signed-off-by: Fabian Martinez <46371672+famarting@users.noreply.github.com> * revert changes to example Signed-off-by: Fabian Martinez <46371672+famarting@users.noreply.github.com> * update warning messages Signed-off-by: Fabian Martinez <46371672+famarting@users.noreply.github.com> * Typos Signed-off-by: Elena Kolevska * fixes linter Signed-off-by: Elena Kolevska * Apply suggestions from code review Signed-off-by: Elena Kolevska * Apply suggestions from code review Signed-off-by: Elena Kolevska --------- Signed-off-by: Fabian Martinez <46371672+famarting@users.noreply.github.com> Signed-off-by: Elena Kolevska Signed-off-by: Elena Kolevska Co-authored-by: Elena Kolevska Co-authored-by: Elena Kolevska Signed-off-by: Elena Kolevska * Removes support for 3.8 and adds 3.13 to test version matrix (#763) Signed-off-by: Elena Kolevska * Updates dapr email to dapr.io (#764) Signed-off-by: Elena Kolevska * Reverts grpc bump Signed-off-by: Elena Kolevska * Updates protos and fixes grpc-tools for protos generation (#766) * Updates protos and fixes grpc-tools for protos generation Signed-off-by: Elena Kolevska * bumps grpcio tools version Signed-off-by: Elena Kolevska --------- Signed-off-by: Elena Kolevska * Bump dapr/durabletask version Signed-off-by: Elena Kolevska --------- Signed-off-by: Elena Kolevska Signed-off-by: Fabian Martinez <46371672+famarting@users.noreply.github.com> Signed-off-by: Hannah Hunter Signed-off-by: Eric Searcy Signed-off-by: Lorenzo Curcio Signed-off-by: Lorenzo Curcio Signed-off-by: Elena Kolevska Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Elena Kolevska Co-authored-by: Elena Kolevska Co-authored-by: Hannah Hunter <94493363+hhunter-ms@users.noreply.github.com> Co-authored-by: Eric Searcy Co-authored-by: Lorenzo Curcio Co-authored-by: Lorenzo Curcio Signed-off-by: Elena Kolevska --- dev-requirements.txt | 2 +- examples/workflow/monitor.py | 1 + examples/workflow/task_chaining.py | 1 + .../dapr/ext/workflow/dapr_workflow_client.py | 28 ++++++++++-- .../ext/workflow/dapr_workflow_context.py | 4 ++ .../dapr/ext/workflow/workflow_context.py | 5 +++ ext/dapr-ext-workflow/setup.cfg | 2 +- .../tests/test_dapr_workflow_context.py | 8 ++++ .../tests/test_workflow_client.py | 43 +++++++++++++------ setup.cfg | 2 +- 10 files changed, 77 insertions(+), 19 deletions(-) diff --git a/dev-requirements.txt b/dev-requirements.txt index 15866725..769b1e1e 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -15,4 +15,4 @@ Flask>=1.1 # needed for auto fix ruff===0.2.2 # needed for dapr-ext-workflow -durabletask>=0.1.1a1 +durabletask-dapr >= 0.2.0a4 diff --git a/examples/workflow/monitor.py b/examples/workflow/monitor.py index a6da1c7d..6bdb6cc3 100644 --- a/examples/workflow/monitor.py +++ b/examples/workflow/monitor.py @@ -69,6 +69,7 @@ def send_alert(ctx, message: str): except Exception: pass if not status or status.runtime_status.name != 'RUNNING': + # TODO update to use reuse_id_policy instance_id = wf_client.schedule_new_workflow( workflow=status_monitor_workflow, input=JobStatus(job_id=job_id, is_healthy=True), diff --git a/examples/workflow/task_chaining.py b/examples/workflow/task_chaining.py index c24e340c..c67308d5 100644 --- a/examples/workflow/task_chaining.py +++ b/examples/workflow/task_chaining.py @@ -27,6 +27,7 @@ def task_chain_workflow(ctx: wf.DaprWorkflowContext, wf_input: int): except Exception as e: yield ctx.call_activity(error_handler, input=str(e)) raise + # TODO update to set custom status return [result1, result2, result3] diff --git a/ext/dapr-ext-workflow/dapr/ext/workflow/dapr_workflow_client.py b/ext/dapr-ext-workflow/dapr/ext/workflow/dapr_workflow_client.py index 19f49981..b9865344 100644 --- a/ext/dapr-ext-workflow/dapr/ext/workflow/dapr_workflow_client.py +++ b/ext/dapr-ext-workflow/dapr/ext/workflow/dapr_workflow_client.py @@ -17,7 +17,9 @@ from datetime import datetime from typing import Any, Optional, TypeVar + from durabletask import client +import durabletask.internal.orchestrator_service_pb2 as pb from dapr.ext.workflow.workflow_state import WorkflowState from dapr.ext.workflow.workflow_context import Workflow @@ -78,6 +80,7 @@ def schedule_new_workflow( input: Optional[TInput] = None, instance_id: Optional[str] = None, start_at: Optional[datetime] = None, + reuse_id_policy: Optional[pb.OrchestrationIdReusePolicy] = None, ) -> str: """Schedules a new workflow instance for execution. @@ -90,6 +93,8 @@ def schedule_new_workflow( start_at: The time when the workflow instance should start executing. If not specified or if a date-time in the past is specified, the workflow instance will be scheduled immediately. + reuse_id_policy: Optional policy to reuse the workflow id when there is a conflict with + an existing workflow instance. Returns: The ID of the scheduled workflow instance. @@ -100,9 +105,14 @@ def schedule_new_workflow( input=input, instance_id=instance_id, start_at=start_at, + reuse_id_policy=reuse_id_policy, ) return self.__obj.schedule_new_orchestration( - workflow.__name__, input=input, instance_id=instance_id, start_at=start_at + workflow.__name__, + input=input, + instance_id=instance_id, + start_at=start_at, + reuse_id_policy=reuse_id_policy, ) def get_workflow_state( @@ -208,7 +218,9 @@ def raise_workflow_event( """ return self.__obj.raise_orchestration_event(instance_id, event_name, data=data) - def terminate_workflow(self, instance_id: str, *, output: Optional[Any] = None): + def terminate_workflow( + self, instance_id: str, *, output: Optional[Any] = None, recursive: bool = True + ): """Terminates a running workflow instance and updates its runtime status to WorkflowRuntimeStatus.Terminated This method internally enqueues a "terminate" message in the task hub. When the task hub worker processes this message, it will update the runtime @@ -226,9 +238,10 @@ def terminate_workflow(self, instance_id: str, *, output: Optional[Any] = None): Args: instance_id: The ID of the workflow instance to terminate. output: The optional output to set for the terminated workflow instance. + recursive: The optional flag to terminate all child workflows. """ - return self.__obj.terminate_orchestration(instance_id, output=output) + return self.__obj.terminate_orchestration(instance_id, output=output, recursive=recursive) def pause_workflow(self, instance_id: str): """Suspends a workflow instance, halting processing of it until resume_workflow is used to @@ -246,3 +259,12 @@ def resume_workflow(self, instance_id: str): instance_id: The instance ID of the workflow to resume. """ return self.__obj.resume_orchestration(instance_id) + + def purge_workflow(self, instance_id: str, recursive: bool = True): + """Purge data from a workflow instance. + + Args: + instance_id: The instance ID of the workflow to purge. + recursive: The optional flag to also purge data from all child workflows. + """ + return self.__obj.purge_orchestration(instance_id, recursive) diff --git a/ext/dapr-ext-workflow/dapr/ext/workflow/dapr_workflow_context.py b/ext/dapr-ext-workflow/dapr/ext/workflow/dapr_workflow_context.py index dbcccd64..2dee46fe 100644 --- a/ext/dapr-ext-workflow/dapr/ext/workflow/dapr_workflow_context.py +++ b/ext/dapr-ext-workflow/dapr/ext/workflow/dapr_workflow_context.py @@ -53,6 +53,10 @@ def current_utc_datetime(self) -> datetime: def is_replaying(self) -> bool: return self.__obj.is_replaying + def set_custom_status(self, custom_status: str) -> None: + self._logger.debug(f'{self.instance_id}: Setting custom status to {custom_status}') + self.__obj.set_custom_status(custom_status) + def create_timer(self, fire_at: Union[datetime, timedelta]) -> task.Task: self._logger.debug(f'{self.instance_id}: Creating timer to fire at {fire_at} time') return self.__obj.create_timer(fire_at) diff --git a/ext/dapr-ext-workflow/dapr/ext/workflow/workflow_context.py b/ext/dapr-ext-workflow/dapr/ext/workflow/workflow_context.py index e0e3c736..b4c85f6a 100644 --- a/ext/dapr-ext-workflow/dapr/ext/workflow/workflow_context.py +++ b/ext/dapr-ext-workflow/dapr/ext/workflow/workflow_context.py @@ -84,6 +84,11 @@ def is_replaying(self) -> bool: """ pass + @abstractmethod + def set_custom_status(self, custom_status: str) -> None: + """Set the custom status.""" + pass + @abstractmethod def create_timer(self, fire_at: Union[datetime, timedelta]) -> task.Task: """Create a Timer Task to fire after at the specified deadline. diff --git a/ext/dapr-ext-workflow/setup.cfg b/ext/dapr-ext-workflow/setup.cfg index 0cd3949a..e61b94ec 100644 --- a/ext/dapr-ext-workflow/setup.cfg +++ b/ext/dapr-ext-workflow/setup.cfg @@ -25,7 +25,7 @@ packages = find_namespace: include_package_data = True install_requires = dapr-dev >= 1.13.0rc1.dev - durabletask >= 0.1.1a1 + durabletask-dapr >= 0.2.0a4 [options.packages.find] include = diff --git a/ext/dapr-ext-workflow/tests/test_dapr_workflow_context.py b/ext/dapr-ext-workflow/tests/test_dapr_workflow_context.py index 6b3c9ad3..9fdfe044 100644 --- a/ext/dapr-ext-workflow/tests/test_dapr_workflow_context.py +++ b/ext/dapr-ext-workflow/tests/test_dapr_workflow_context.py @@ -25,11 +25,13 @@ mock_create_timer = 'create_timer' mock_call_activity = 'call_activity' mock_call_sub_orchestrator = 'call_sub_orchestrator' +mock_custom_status = 'custom_status' class FakeOrchestrationContext: def __init__(self): self.instance_id = mock_instance_id + self.custom_status = None def create_timer(self, fire_at): return mock_create_timer @@ -40,6 +42,9 @@ def call_activity(self, activity, input): def call_sub_orchestrator(self, orchestrator, input, instance_id): return mock_call_sub_orchestrator + def set_custom_status(self, custom_status): + self.custom_status = custom_status + class DaprWorkflowContextTest(unittest.TestCase): def mock_client_activity(ctx: WorkflowActivityContext, input): @@ -65,3 +70,6 @@ def test_workflow_context_functions(self): create_timer_result = dapr_wf_ctx.create_timer(mock_date_time) assert create_timer_result == mock_create_timer + + dapr_wf_ctx.set_custom_status(mock_custom_status) + assert fakeContext.custom_status == mock_custom_status diff --git a/ext/dapr-ext-workflow/tests/test_workflow_client.py b/ext/dapr-ext-workflow/tests/test_workflow_client.py index 4a7f93b9..e1c9b772 100644 --- a/ext/dapr-ext-workflow/tests/test_workflow_client.py +++ b/ext/dapr-ext-workflow/tests/test_workflow_client.py @@ -20,17 +20,26 @@ from unittest import mock from dapr.ext.workflow.dapr_workflow_client import DaprWorkflowClient from durabletask import client +import durabletask.internal.orchestrator_service_pb2 as pb mock_schedule_result = 'workflow001' mock_raise_event_result = 'event001' mock_terminate_result = 'terminate001' mock_suspend_result = 'suspend001' mock_resume_result = 'resume001' -mockInstanceId = 'instance001' +mock_purge_result = 'purge001' +mock_instance_id = 'instance001' class FakeTaskHubGrpcClient: - def schedule_new_orchestration(self, workflow, input, instance_id, start_at): + def schedule_new_orchestration( + self, + workflow, + input, + instance_id, + start_at, + reuse_id_policy: Union[pb.OrchestrationIdReusePolicy, None] = None, + ): return mock_schedule_result def get_orchestration_state(self, instance_id, fetch_payloads): @@ -49,7 +58,9 @@ def raise_orchestration_event( ): return mock_raise_event_result - def terminate_orchestration(self, instance_id: str, *, output: Union[Any, None] = None): + def terminate_orchestration( + self, instance_id: str, *, output: Union[Any, None] = None, recursive: bool = True + ): return mock_terminate_result def suspend_orchestration(self, instance_id: str): @@ -58,6 +69,9 @@ def suspend_orchestration(self, instance_id: str): def resume_orchestration(self, instance_id: str): return mock_resume_result + def purge_orchestration(self, instance_id: str, recursive: bool = True): + return mock_purge_result + def _inner_get_orchestration_state(self, instance_id, state: client.OrchestrationStatus): return client.OrchestrationState( instance_id=instance_id, @@ -87,35 +101,38 @@ def test_client_functions(self): assert actual_schedule_result == mock_schedule_result actual_get_result = wfClient.get_workflow_state( - instance_id=mockInstanceId, fetch_payloads=True + instance_id=mock_instance_id, fetch_payloads=True ) assert actual_get_result.runtime_status.name == 'PENDING' - assert actual_get_result.instance_id == mockInstanceId + assert actual_get_result.instance_id == mock_instance_id actual_wait_start_result = wfClient.wait_for_workflow_start( - instance_id=mockInstanceId, timeout_in_seconds=30 + instance_id=mock_instance_id, timeout_in_seconds=30 ) assert actual_wait_start_result.runtime_status.name == 'RUNNING' - assert actual_wait_start_result.instance_id == mockInstanceId + assert actual_wait_start_result.instance_id == mock_instance_id actual_wait_completion_result = wfClient.wait_for_workflow_completion( - instance_id=mockInstanceId, timeout_in_seconds=30 + instance_id=mock_instance_id, timeout_in_seconds=30 ) assert actual_wait_completion_result.runtime_status.name == 'COMPLETED' - assert actual_wait_completion_result.instance_id == mockInstanceId + assert actual_wait_completion_result.instance_id == mock_instance_id actual_raise_event_result = wfClient.raise_workflow_event( - instance_id=mockInstanceId, event_name='test_event', data='test_data' + instance_id=mock_instance_id, event_name='test_event', data='test_data' ) assert actual_raise_event_result == mock_raise_event_result actual_terminate_result = wfClient.terminate_workflow( - instance_id=mockInstanceId, output='test_output' + instance_id=mock_instance_id, output='test_output' ) assert actual_terminate_result == mock_terminate_result - actual_suspend_result = wfClient.pause_workflow(instance_id=mockInstanceId) + actual_suspend_result = wfClient.pause_workflow(instance_id=mock_instance_id) assert actual_suspend_result == mock_suspend_result - actual_resume_result = wfClient.resume_workflow(instance_id=mockInstanceId) + actual_resume_result = wfClient.resume_workflow(instance_id=mock_instance_id) assert actual_resume_result == mock_resume_result + + actual_purge_result = wfClient.purge_workflow(instance_id=mock_instance_id) + assert actual_purge_result == mock_purge_result diff --git a/setup.cfg b/setup.cfg index dcb6ba8d..de5d53f4 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,7 +1,7 @@ [metadata] url = https://dapr.io/ author = Dapr Authors -author_email = daprweb@microsoft.com +author_email = dapr@dapr.io license = Apache license_file = LICENSE classifiers = From c91bc48e4430e366352eddf80a93bf864e3e2283 Mon Sep 17 00:00:00 2001 From: Elena Kolevska Date: Tue, 21 Jan 2025 12:58:34 +0000 Subject: [PATCH 18/38] Temporarily enable the release workflow to be triggered manually Signed-off-by: Elena Kolevska --- .github/workflows/build-tag.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build-tag.yaml b/.github/workflows/build-tag.yaml index 2d0969b5..4b7d1dca 100644 --- a/.github/workflows/build-tag.yaml +++ b/.github/workflows/build-tag.yaml @@ -8,6 +8,7 @@ on: - grpc-v* - flask-v* - fastapi-v* + workflow_dispatch: # Add manual trigger jobs: lint: From 54f87b26a1276820c87520f600062e2b720509db Mon Sep 17 00:00:00 2001 From: Elena Kolevska Date: Tue, 21 Jan 2025 14:55:00 +0000 Subject: [PATCH 19/38] Reverts temporary option Signed-off-by: Elena Kolevska --- .github/workflows/build-tag.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/build-tag.yaml b/.github/workflows/build-tag.yaml index 4b7d1dca..2d0969b5 100644 --- a/.github/workflows/build-tag.yaml +++ b/.github/workflows/build-tag.yaml @@ -8,7 +8,6 @@ on: - grpc-v* - flask-v* - fastapi-v* - workflow_dispatch: # Add manual trigger jobs: lint: From 11f11848cd8ecbf7e03035559336a6030a29904d Mon Sep 17 00:00:00 2001 From: Elena Kolevska Date: Tue, 25 Feb 2025 00:39:18 +0000 Subject: [PATCH 20/38] Temporarily enable the release workflow to be triggered manually Signed-off-by: Elena Kolevska --- .github/workflows/build-tag.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build-tag.yaml b/.github/workflows/build-tag.yaml index 2d0969b5..5c414ee7 100644 --- a/.github/workflows/build-tag.yaml +++ b/.github/workflows/build-tag.yaml @@ -8,6 +8,7 @@ on: - grpc-v* - flask-v* - fastapi-v* + workflow_dispatch: jobs: lint: From 7b96e6e0c48d36b2441787f537b14d128d42b476 Mon Sep 17 00:00:00 2001 From: Elena Kolevska Date: Tue, 21 Jan 2025 11:31:57 +0000 Subject: [PATCH 21/38] Updates versions for 1.15.0rc1 (#768) * removes -dev Signed-off-by: Elena Kolevska * Updates version to 1.15.0rc1 Signed-off-by: Elena Kolevska * more version updates Signed-off-by: Elena Kolevska * Updates ext workflows version Signed-off-by: Elena Kolevska * missed dependency Signed-off-by: Elena Kolevska * Update README.md Signed-off-by: Elena Kolevska --------- Signed-off-by: Elena Kolevska Signed-off-by: Elena Kolevska Signed-off-by: Elena Kolevska --- dapr/version/version.py | 2 +- examples/demo_actor/demo_actor/requirements.txt | 2 +- examples/demo_workflow/demo_workflow/requirements.txt | 2 +- examples/invoke-simple/requirements.txt | 4 ++-- examples/w3c-tracing/requirements.txt | 4 ++-- examples/workflow/requirements.txt | 4 ++-- ext/dapr-ext-fastapi/dapr/ext/fastapi/version.py | 2 +- ext/dapr-ext-fastapi/setup.cfg | 2 +- ext/dapr-ext-grpc/dapr/ext/grpc/version.py | 2 +- ext/dapr-ext-grpc/setup.cfg | 2 +- ext/dapr-ext-workflow/dapr/ext/workflow/version.py | 2 +- ext/dapr-ext-workflow/setup.cfg | 2 +- ext/flask_dapr/flask_dapr/version.py | 2 +- ext/flask_dapr/setup.cfg | 2 +- 14 files changed, 17 insertions(+), 17 deletions(-) diff --git a/dapr/version/version.py b/dapr/version/version.py index 287c4a57..18046a14 100644 --- a/dapr/version/version.py +++ b/dapr/version/version.py @@ -13,4 +13,4 @@ limitations under the License. """ -__version__ = '1.14.0rc1.dev' +__version__ = '1.15.0rc1' diff --git a/examples/demo_actor/demo_actor/requirements.txt b/examples/demo_actor/demo_actor/requirements.txt index 7c849353..312c00a0 100644 --- a/examples/demo_actor/demo_actor/requirements.txt +++ b/examples/demo_actor/demo_actor/requirements.txt @@ -1 +1 @@ -dapr-ext-fastapi-dev>=1.13.0rc1.dev +dapr-ext-fastapi>=1.15.0rc1 diff --git a/examples/demo_workflow/demo_workflow/requirements.txt b/examples/demo_workflow/demo_workflow/requirements.txt index c19dc97f..5e56aaee 100644 --- a/examples/demo_workflow/demo_workflow/requirements.txt +++ b/examples/demo_workflow/demo_workflow/requirements.txt @@ -1 +1 @@ -dapr-ext-workflow-dev>=0.0.1rc1.dev \ No newline at end of file +dapr-ext-workflow>=0.6.0rc1 \ No newline at end of file diff --git a/examples/invoke-simple/requirements.txt b/examples/invoke-simple/requirements.txt index 0ba2b12d..62d4bba5 100644 --- a/examples/invoke-simple/requirements.txt +++ b/examples/invoke-simple/requirements.txt @@ -1,2 +1,2 @@ -dapr-ext-grpc-dev >= 1.13.0rc1.dev -dapr-dev >= 1.13.0rc1.dev +dapr-ext-grpc >= 1.15.0rc1 +dapr >= 1.15.0rc1 diff --git a/examples/w3c-tracing/requirements.txt b/examples/w3c-tracing/requirements.txt index 68e1bff3..99ff8bfc 100644 --- a/examples/w3c-tracing/requirements.txt +++ b/examples/w3c-tracing/requirements.txt @@ -1,5 +1,5 @@ -dapr-ext-grpc-dev >= 1.13.0rc1.dev -dapr-dev >= 1.13.0rc1.dev +dapr-ext-grpc >= 1.15.0rc1 +dapr >= 1.15.0rc1 opentelemetry-sdk opentelemetry-instrumentation-grpc opentelemetry-exporter-zipkin diff --git a/examples/workflow/requirements.txt b/examples/workflow/requirements.txt index 6a748d0e..a1c7e496 100644 --- a/examples/workflow/requirements.txt +++ b/examples/workflow/requirements.txt @@ -1,2 +1,2 @@ -dapr-ext-workflow-dev>=0.4.1rc1.dev -dapr-dev>=1.13.0rc1.dev +dapr-ext-workflow>=0.6.0rc1 +dapr>=1.15.0rc1 diff --git a/ext/dapr-ext-fastapi/dapr/ext/fastapi/version.py b/ext/dapr-ext-fastapi/dapr/ext/fastapi/version.py index 287c4a57..18046a14 100644 --- a/ext/dapr-ext-fastapi/dapr/ext/fastapi/version.py +++ b/ext/dapr-ext-fastapi/dapr/ext/fastapi/version.py @@ -13,4 +13,4 @@ limitations under the License. """ -__version__ = '1.14.0rc1.dev' +__version__ = '1.15.0rc1' diff --git a/ext/dapr-ext-fastapi/setup.cfg b/ext/dapr-ext-fastapi/setup.cfg index ed5a6810..4fdaf5ba 100644 --- a/ext/dapr-ext-fastapi/setup.cfg +++ b/ext/dapr-ext-fastapi/setup.cfg @@ -24,7 +24,7 @@ python_requires = >=3.9 packages = find_namespace: include_package_data = True install_requires = - dapr-dev >= 1.13.0rc1.dev + dapr >= 1.15.0rc1 uvicorn >= 0.11.6 fastapi >= 0.60.1 diff --git a/ext/dapr-ext-grpc/dapr/ext/grpc/version.py b/ext/dapr-ext-grpc/dapr/ext/grpc/version.py index 287c4a57..18046a14 100644 --- a/ext/dapr-ext-grpc/dapr/ext/grpc/version.py +++ b/ext/dapr-ext-grpc/dapr/ext/grpc/version.py @@ -13,4 +13,4 @@ limitations under the License. """ -__version__ = '1.14.0rc1.dev' +__version__ = '1.15.0rc1' diff --git a/ext/dapr-ext-grpc/setup.cfg b/ext/dapr-ext-grpc/setup.cfg index 1a87234c..09b0e8a5 100644 --- a/ext/dapr-ext-grpc/setup.cfg +++ b/ext/dapr-ext-grpc/setup.cfg @@ -24,7 +24,7 @@ python_requires = >=3.9 packages = find_namespace: include_package_data = True install_requires = - dapr-dev >= 1.13.0rc1.dev + dapr >= 1.15.0rc1 cloudevents >= 1.0.0 [options.packages.find] diff --git a/ext/dapr-ext-workflow/dapr/ext/workflow/version.py b/ext/dapr-ext-workflow/dapr/ext/workflow/version.py index 494a5694..03298b19 100644 --- a/ext/dapr-ext-workflow/dapr/ext/workflow/version.py +++ b/ext/dapr-ext-workflow/dapr/ext/workflow/version.py @@ -13,4 +13,4 @@ limitations under the License. """ -__version__ = '0.5.0rc1.dev' +__version__ = '0.6.0rc1' diff --git a/ext/dapr-ext-workflow/setup.cfg b/ext/dapr-ext-workflow/setup.cfg index e61b94ec..eaa24a4e 100644 --- a/ext/dapr-ext-workflow/setup.cfg +++ b/ext/dapr-ext-workflow/setup.cfg @@ -24,7 +24,7 @@ python_requires = >=3.9 packages = find_namespace: include_package_data = True install_requires = - dapr-dev >= 1.13.0rc1.dev + dapr >= 1.15.0rc1 durabletask-dapr >= 0.2.0a4 [options.packages.find] diff --git a/ext/flask_dapr/flask_dapr/version.py b/ext/flask_dapr/flask_dapr/version.py index 287c4a57..18046a14 100644 --- a/ext/flask_dapr/flask_dapr/version.py +++ b/ext/flask_dapr/flask_dapr/version.py @@ -13,4 +13,4 @@ limitations under the License. """ -__version__ = '1.14.0rc1.dev' +__version__ = '1.15.0rc1' diff --git a/ext/flask_dapr/setup.cfg b/ext/flask_dapr/setup.cfg index ed98c443..5dfe11ba 100644 --- a/ext/flask_dapr/setup.cfg +++ b/ext/flask_dapr/setup.cfg @@ -26,4 +26,4 @@ include_package_data = true zip_safe = false install_requires = Flask >= 1.1 - dapr-dev >= 1.13.0rc1.dev + dapr >= 1.15.0rc1 From 467c7efb3ec858506d7886005d14c57c91f351fd Mon Sep 17 00:00:00 2001 From: Elena Kolevska Date: Tue, 21 Jan 2025 12:09:36 +0000 Subject: [PATCH 22/38] Adds tags for 1.15.0 RC1 Signed-off-by: Elena Kolevska --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b6f7d0a7..f9ae5e7d 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ This includes the following packages: ### Prerequisites -* [Install Dapr standalone mode](https://github.com/dapr/cli#install-dapr-on-your-local-machine-self-hosted) +* [Install Dapr in standalone mode](https://github.com/dapr/cli#install-dapr-on-your-local-machine-self-hosted) * [Install Python 3.9+](https://www.python.org/downloads/) ### Install Dapr python sdk From 4dab6338c4e35a539400d0f2957016c3b8f52087 Mon Sep 17 00:00:00 2001 From: Elena Kolevska Date: Tue, 21 Jan 2025 12:28:34 +0000 Subject: [PATCH 23/38] Release 1.15.0 RC1 Signed-off-by: Elena Kolevska --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f9ae5e7d..b6f7d0a7 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ This includes the following packages: ### Prerequisites -* [Install Dapr in standalone mode](https://github.com/dapr/cli#install-dapr-on-your-local-machine-self-hosted) +* [Install Dapr standalone mode](https://github.com/dapr/cli#install-dapr-on-your-local-machine-self-hosted) * [Install Python 3.9+](https://www.python.org/downloads/) ### Install Dapr python sdk From 6c0b25be06ca0179a9e21be6936e7152648495f8 Mon Sep 17 00:00:00 2001 From: Elena Kolevska Date: Tue, 21 Jan 2025 12:54:04 +0000 Subject: [PATCH 24/38] Temporarily enable the workflow to be dispatched manually MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Github doesn’t seem to trigger workflows when tags are pushed separately from a commit, so need to trigger the release manually. Signed-off-by: Elena Kolevska From 21412613689fce172f87d668c98e2f9cdc2cf312 Mon Sep 17 00:00:00 2001 From: Elena Kolevska Date: Tue, 21 Jan 2025 13:03:42 +0000 Subject: [PATCH 25/38] Release 1.15.0 RC2 Signed-off-by: Elena Kolevska --- dapr/version/version.py | 2 +- examples/demo_actor/demo_actor/requirements.txt | 2 +- examples/demo_workflow/demo_workflow/requirements.txt | 2 +- examples/invoke-simple/requirements.txt | 4 ++-- examples/w3c-tracing/requirements.txt | 4 ++-- examples/workflow/requirements.txt | 4 ++-- ext/dapr-ext-fastapi/dapr/ext/fastapi/version.py | 2 +- ext/dapr-ext-fastapi/setup.cfg | 2 +- ext/dapr-ext-grpc/dapr/ext/grpc/version.py | 2 +- ext/dapr-ext-grpc/setup.cfg | 2 +- ext/dapr-ext-workflow/dapr/ext/workflow/version.py | 2 +- ext/dapr-ext-workflow/setup.cfg | 2 +- ext/flask_dapr/flask_dapr/version.py | 2 +- ext/flask_dapr/setup.cfg | 2 +- 14 files changed, 17 insertions(+), 17 deletions(-) diff --git a/dapr/version/version.py b/dapr/version/version.py index 18046a14..88f46727 100644 --- a/dapr/version/version.py +++ b/dapr/version/version.py @@ -13,4 +13,4 @@ limitations under the License. """ -__version__ = '1.15.0rc1' +__version__ = '1.15.0rc2' diff --git a/examples/demo_actor/demo_actor/requirements.txt b/examples/demo_actor/demo_actor/requirements.txt index 312c00a0..838fc7a5 100644 --- a/examples/demo_actor/demo_actor/requirements.txt +++ b/examples/demo_actor/demo_actor/requirements.txt @@ -1 +1 @@ -dapr-ext-fastapi>=1.15.0rc1 +dapr-ext-fastapi>=1.15.0rc2 diff --git a/examples/demo_workflow/demo_workflow/requirements.txt b/examples/demo_workflow/demo_workflow/requirements.txt index 5e56aaee..b33a9290 100644 --- a/examples/demo_workflow/demo_workflow/requirements.txt +++ b/examples/demo_workflow/demo_workflow/requirements.txt @@ -1 +1 @@ -dapr-ext-workflow>=0.6.0rc1 \ No newline at end of file +dapr-ext-workflow>=0.6.0rc2 \ No newline at end of file diff --git a/examples/invoke-simple/requirements.txt b/examples/invoke-simple/requirements.txt index 62d4bba5..add9031d 100644 --- a/examples/invoke-simple/requirements.txt +++ b/examples/invoke-simple/requirements.txt @@ -1,2 +1,2 @@ -dapr-ext-grpc >= 1.15.0rc1 -dapr >= 1.15.0rc1 +dapr-ext-grpc >= 1.15.0rc2 +dapr >= 1.15.0rc2 diff --git a/examples/w3c-tracing/requirements.txt b/examples/w3c-tracing/requirements.txt index 99ff8bfc..35327a77 100644 --- a/examples/w3c-tracing/requirements.txt +++ b/examples/w3c-tracing/requirements.txt @@ -1,5 +1,5 @@ -dapr-ext-grpc >= 1.15.0rc1 -dapr >= 1.15.0rc1 +dapr-ext-grpc >= 1.15.0rc2 +dapr >= 1.15.0rc2 opentelemetry-sdk opentelemetry-instrumentation-grpc opentelemetry-exporter-zipkin diff --git a/examples/workflow/requirements.txt b/examples/workflow/requirements.txt index a1c7e496..f8a8475f 100644 --- a/examples/workflow/requirements.txt +++ b/examples/workflow/requirements.txt @@ -1,2 +1,2 @@ -dapr-ext-workflow>=0.6.0rc1 -dapr>=1.15.0rc1 +dapr-ext-workflow>=0.6.0rc2 +dapr>=1.15.0rc2 diff --git a/ext/dapr-ext-fastapi/dapr/ext/fastapi/version.py b/ext/dapr-ext-fastapi/dapr/ext/fastapi/version.py index 18046a14..88f46727 100644 --- a/ext/dapr-ext-fastapi/dapr/ext/fastapi/version.py +++ b/ext/dapr-ext-fastapi/dapr/ext/fastapi/version.py @@ -13,4 +13,4 @@ limitations under the License. """ -__version__ = '1.15.0rc1' +__version__ = '1.15.0rc2' diff --git a/ext/dapr-ext-fastapi/setup.cfg b/ext/dapr-ext-fastapi/setup.cfg index 4fdaf5ba..6704370f 100644 --- a/ext/dapr-ext-fastapi/setup.cfg +++ b/ext/dapr-ext-fastapi/setup.cfg @@ -24,7 +24,7 @@ python_requires = >=3.9 packages = find_namespace: include_package_data = True install_requires = - dapr >= 1.15.0rc1 + dapr >= 1.15.0rc2 uvicorn >= 0.11.6 fastapi >= 0.60.1 diff --git a/ext/dapr-ext-grpc/dapr/ext/grpc/version.py b/ext/dapr-ext-grpc/dapr/ext/grpc/version.py index 18046a14..88f46727 100644 --- a/ext/dapr-ext-grpc/dapr/ext/grpc/version.py +++ b/ext/dapr-ext-grpc/dapr/ext/grpc/version.py @@ -13,4 +13,4 @@ limitations under the License. """ -__version__ = '1.15.0rc1' +__version__ = '1.15.0rc2' diff --git a/ext/dapr-ext-grpc/setup.cfg b/ext/dapr-ext-grpc/setup.cfg index 09b0e8a5..8a934348 100644 --- a/ext/dapr-ext-grpc/setup.cfg +++ b/ext/dapr-ext-grpc/setup.cfg @@ -24,7 +24,7 @@ python_requires = >=3.9 packages = find_namespace: include_package_data = True install_requires = - dapr >= 1.15.0rc1 + dapr >= 1.15.0rc2 cloudevents >= 1.0.0 [options.packages.find] diff --git a/ext/dapr-ext-workflow/dapr/ext/workflow/version.py b/ext/dapr-ext-workflow/dapr/ext/workflow/version.py index 03298b19..dd424d18 100644 --- a/ext/dapr-ext-workflow/dapr/ext/workflow/version.py +++ b/ext/dapr-ext-workflow/dapr/ext/workflow/version.py @@ -13,4 +13,4 @@ limitations under the License. """ -__version__ = '0.6.0rc1' +__version__ = '0.6.0rc2' diff --git a/ext/dapr-ext-workflow/setup.cfg b/ext/dapr-ext-workflow/setup.cfg index eaa24a4e..a7325511 100644 --- a/ext/dapr-ext-workflow/setup.cfg +++ b/ext/dapr-ext-workflow/setup.cfg @@ -24,7 +24,7 @@ python_requires = >=3.9 packages = find_namespace: include_package_data = True install_requires = - dapr >= 1.15.0rc1 + dapr >= 1.15.0rc2 durabletask-dapr >= 0.2.0a4 [options.packages.find] diff --git a/ext/flask_dapr/flask_dapr/version.py b/ext/flask_dapr/flask_dapr/version.py index 18046a14..88f46727 100644 --- a/ext/flask_dapr/flask_dapr/version.py +++ b/ext/flask_dapr/flask_dapr/version.py @@ -13,4 +13,4 @@ limitations under the License. """ -__version__ = '1.15.0rc1' +__version__ = '1.15.0rc2' diff --git a/ext/flask_dapr/setup.cfg b/ext/flask_dapr/setup.cfg index 5dfe11ba..c45b59f2 100644 --- a/ext/flask_dapr/setup.cfg +++ b/ext/flask_dapr/setup.cfg @@ -26,4 +26,4 @@ include_package_data = true zip_safe = false install_requires = Flask >= 1.1 - dapr >= 1.15.0rc1 + dapr >= 1.15.0rc2 From 5f26e6f3ce460c1a3b8ac731047fddaf56c3664e Mon Sep 17 00:00:00 2001 From: Elena Kolevska Date: Tue, 28 Jan 2025 22:24:20 +0000 Subject: [PATCH 26/38] Catch error in sdk when workflow instance not found (#771) * Catch error in sdk when workflow instance not found Signed-off-by: Elena Kolevska * fixes demo workflow example test Signed-off-by: Elena Kolevska * Only return None for the correct error Signed-off-by: Elena Kolevska * Adds test Signed-off-by: Elena Kolevska * Linter Signed-off-by: Elena Kolevska * Extends test Signed-off-by: Elena Kolevska --------- Signed-off-by: Elena Kolevska --- examples/demo_workflow/app.py | 4 ++ examples/workflow/monitor.py | 1 + .../dapr/ext/workflow/dapr_workflow_client.py | 14 ++++++- .../tests/test_workflow_client.py | 38 ++++++++++++++++++- 4 files changed, 54 insertions(+), 3 deletions(-) diff --git a/examples/demo_workflow/app.py b/examples/demo_workflow/app.py index 8f67fdbd..cc82a81e 100644 --- a/examples/demo_workflow/app.py +++ b/examples/demo_workflow/app.py @@ -139,6 +139,8 @@ def main(): # Pause Test d.pause_workflow(instance_id=instance_id, workflow_component=workflow_component) + sleep(3) + get_response = d.get_workflow( instance_id=instance_id, workflow_component=workflow_component ) @@ -146,6 +148,8 @@ def main(): # Resume Test d.resume_workflow(instance_id=instance_id, workflow_component=workflow_component) + sleep(3) + get_response = d.get_workflow( instance_id=instance_id, workflow_component=workflow_component ) diff --git a/examples/workflow/monitor.py b/examples/workflow/monitor.py index 6bdb6cc3..6cf575cf 100644 --- a/examples/workflow/monitor.py +++ b/examples/workflow/monitor.py @@ -68,6 +68,7 @@ def send_alert(ctx, message: str): status = wf_client.get_workflow_state(job_id) except Exception: pass + if not status or status.runtime_status.name != 'RUNNING': # TODO update to use reuse_id_policy instance_id = wf_client.schedule_new_workflow( diff --git a/ext/dapr-ext-workflow/dapr/ext/workflow/dapr_workflow_client.py b/ext/dapr-ext-workflow/dapr/ext/workflow/dapr_workflow_client.py index b9865344..6a24d343 100644 --- a/ext/dapr-ext-workflow/dapr/ext/workflow/dapr_workflow_client.py +++ b/ext/dapr-ext-workflow/dapr/ext/workflow/dapr_workflow_client.py @@ -24,6 +24,7 @@ from dapr.ext.workflow.workflow_state import WorkflowState from dapr.ext.workflow.workflow_context import Workflow from dapr.ext.workflow.util import getAddress +from grpc import RpcError from dapr.clients import DaprInternalError from dapr.clients.http.client import DAPR_API_TOKEN_HEADER @@ -130,8 +131,17 @@ def get_workflow_state( exist. """ - state = self.__obj.get_orchestration_state(instance_id, fetch_payloads=fetch_payloads) - return WorkflowState(state) if state else None + try: + state = self.__obj.get_orchestration_state(instance_id, fetch_payloads=fetch_payloads) + return WorkflowState(state) if state else None + except RpcError as error: + if 'no such instance exists' in error.details(): + self._logger.warning(f'Workflow instance not found: {instance_id}') + return None + self._logger.error( + f'Unhandled RPC error while fetching workflow state: {error.code()} - {error.details()}' + ) + raise def wait_for_workflow_start( self, instance_id: str, *, fetch_payloads: bool = False, timeout_in_seconds: int = 60 diff --git a/ext/dapr-ext-workflow/tests/test_workflow_client.py b/ext/dapr-ext-workflow/tests/test_workflow_client.py index e1c9b772..984c97cd 100644 --- a/ext/dapr-ext-workflow/tests/test_workflow_client.py +++ b/ext/dapr-ext-workflow/tests/test_workflow_client.py @@ -21,6 +21,7 @@ from dapr.ext.workflow.dapr_workflow_client import DaprWorkflowClient from durabletask import client import durabletask.internal.orchestrator_service_pb2 as pb +from grpc import RpcError mock_schedule_result = 'workflow001' mock_raise_event_result = 'event001' @@ -29,6 +30,19 @@ mock_resume_result = 'resume001' mock_purge_result = 'purge001' mock_instance_id = 'instance001' +wf_status = 'not-found' + + +class SimulatedRpcError(RpcError): + def __init__(self, code, details): + self._code = code + self._details = details + + def code(self): + return self._code + + def details(self): + return self._details class FakeTaskHubGrpcClient: @@ -43,7 +57,15 @@ def schedule_new_orchestration( return mock_schedule_result def get_orchestration_state(self, instance_id, fetch_payloads): - return self._inner_get_orchestration_state(instance_id, client.OrchestrationStatus.PENDING) + global wf_status + if wf_status == 'not-found': + raise SimulatedRpcError(code='UNKNOWN', details='no such instance exists') + elif wf_status == 'found': + return self._inner_get_orchestration_state( + instance_id, client.OrchestrationStatus.PENDING + ) + else: + raise SimulatedRpcError(code='UNKNOWN', details='unknown error') def wait_for_orchestration_start(self, instance_id, fetch_payloads, timeout): return self._inner_get_orchestration_state(instance_id, client.OrchestrationStatus.RUNNING) @@ -100,6 +122,20 @@ def test_client_functions(self): ) assert actual_schedule_result == mock_schedule_result + global wf_status + wf_status = 'not-found' + actual_get_result = wfClient.get_workflow_state( + instance_id=mock_instance_id, fetch_payloads=True + ) + assert actual_get_result is None + + wf_status = 'error' + with self.assertRaises(RpcError): + wfClient.get_workflow_state(instance_id=mock_instance_id, fetch_payloads=True) + + assert actual_get_result is None + + wf_status = 'found' actual_get_result = wfClient.get_workflow_state( instance_id=mock_instance_id, fetch_payloads=True ) From d9e3cb7881aaf72fb77cbaff780bbe50f98d7f93 Mon Sep 17 00:00:00 2001 From: Adam Stewart Date: Tue, 28 Jan 2025 22:39:44 +0000 Subject: [PATCH 27/38] Fix get_worfklow_state docstring to match fetch_payloads default (#772) Signed-off-by: Adam Stewart Co-authored-by: Elena Kolevska Signed-off-by: Elena Kolevska --- ext/dapr-ext-workflow/dapr/ext/workflow/dapr_workflow_client.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/dapr-ext-workflow/dapr/ext/workflow/dapr_workflow_client.py b/ext/dapr-ext-workflow/dapr/ext/workflow/dapr_workflow_client.py index 6a24d343..6bb801dc 100644 --- a/ext/dapr-ext-workflow/dapr/ext/workflow/dapr_workflow_client.py +++ b/ext/dapr-ext-workflow/dapr/ext/workflow/dapr_workflow_client.py @@ -124,7 +124,7 @@ def get_workflow_state( Args: instanceId: The unique ID of the workflow instance to fetch. fetch_payloads: If true, fetches the input, output payloads and custom status - for the workflow instance. Defaults to false. + for the workflow instance. Defaults to true. Returns: The current state of the workflow instance, or None if the workflow instance does not From 54146795750a26ce9399dae7e0cb7d4afc2525f2 Mon Sep 17 00:00:00 2001 From: Elena Kolevska Date: Wed, 12 Feb 2025 17:01:15 +0000 Subject: [PATCH 28/38] Remove test sleep (#778) Signed-off-by: Elena Kolevska --- examples/demo_workflow/app.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/examples/demo_workflow/app.py b/examples/demo_workflow/app.py index cc82a81e..8f67fdbd 100644 --- a/examples/demo_workflow/app.py +++ b/examples/demo_workflow/app.py @@ -139,8 +139,6 @@ def main(): # Pause Test d.pause_workflow(instance_id=instance_id, workflow_component=workflow_component) - sleep(3) - get_response = d.get_workflow( instance_id=instance_id, workflow_component=workflow_component ) @@ -148,8 +146,6 @@ def main(): # Resume Test d.resume_workflow(instance_id=instance_id, workflow_component=workflow_component) - sleep(3) - get_response = d.get_workflow( instance_id=instance_id, workflow_component=workflow_component ) From b9827af297a223e72b9cfe3c79cc7ca0bbf8d8e6 Mon Sep 17 00:00:00 2001 From: Elena Kolevska Date: Fri, 14 Feb 2025 14:08:03 +0000 Subject: [PATCH 29/38] Restores sleeps in test, as it was decided not to invest making synchronous the APIs that are getting deleted next version (#781) Signed-off-by: Elena Kolevska --- examples/demo_workflow/app.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/examples/demo_workflow/app.py b/examples/demo_workflow/app.py index 8f67fdbd..b0d078c7 100644 --- a/examples/demo_workflow/app.py +++ b/examples/demo_workflow/app.py @@ -139,6 +139,7 @@ def main(): # Pause Test d.pause_workflow(instance_id=instance_id, workflow_component=workflow_component) + sleep(5) get_response = d.get_workflow( instance_id=instance_id, workflow_component=workflow_component ) @@ -146,6 +147,7 @@ def main(): # Resume Test d.resume_workflow(instance_id=instance_id, workflow_component=workflow_component) + sleep(5) get_response = d.get_workflow( instance_id=instance_id, workflow_component=workflow_component ) From ad1d1de925f7e5d5b166caca1bc7e01758323f6c Mon Sep 17 00:00:00 2001 From: Elena Kolevska Date: Thu, 20 Feb 2025 09:51:45 +0000 Subject: [PATCH 30/38] Updates workflows docs to use the new workflows client (#780) * Updates docs Signed-off-by: Elena Kolevska * More workflows docs Signed-off-by: Elena Kolevska * Move workflows examples, based on review Signed-off-by: Elena Kolevska * Small fixes Signed-off-by: Elena Kolevska --------- Signed-off-by: Elena Kolevska --- .../en/python-sdk-docs/python-client.md | 84 ------- .../python-workflow-ext/_index.md | 75 +++++- .../python-workflow-ext/python-workflow.md | 236 ++++++++---------- 3 files changed, 179 insertions(+), 216 deletions(-) diff --git a/daprdocs/content/en/python-sdk-docs/python-client.md b/daprdocs/content/en/python-sdk-docs/python-client.md index fc6ef496..46358437 100644 --- a/daprdocs/content/en/python-sdk-docs/python-client.md +++ b/daprdocs/content/en/python-sdk-docs/python-client.md @@ -515,89 +515,5 @@ def main(): - For a full list of state operations visit [How-To: Use the cryptography APIs]({{< ref howto-cryptography.md >}}). - Visit [Python SDK examples](https://github.com/dapr/python-sdk/tree/master/examples/crypto) for code samples and instructions to try out cryptography -### Workflow - -```python -from dapr.ext.workflow import WorkflowRuntime, DaprWorkflowContext, WorkflowActivityContext -from dapr.clients import DaprClient - -instanceId = "exampleInstanceID" -workflowComponent = "dapr" -workflowName = "hello_world_wf" -eventName = "event1" -eventData = "eventData" - -def main(): - with DaprClient() as d: - host = settings.DAPR_RUNTIME_HOST - port = settings.DAPR_GRPC_PORT - workflowRuntime = WorkflowRuntime(host, port) - workflowRuntime = WorkflowRuntime() - workflowRuntime.register_workflow(hello_world_wf) - workflowRuntime.register_activity(hello_act) - workflowRuntime.start() - - # Start the workflow - start_resp = d.start_workflow(instance_id=instanceId, workflow_component=workflowComponent, - workflow_name=workflowName, input=inputData, workflow_options=workflowOptions) - print(f"start_resp {start_resp.instance_id}") - - # ... - - # Pause Test - d.pause_workflow(instance_id=instanceId, workflow_component=workflowComponent) - getResponse = d.get_workflow(instance_id=instanceId, workflow_component=workflowComponent) - print(f"Get response from {workflowName} after pause call: {getResponse.runtime_status}") - - # Resume Test - d.resume_workflow(instance_id=instanceId, workflow_component=workflowComponent) - getResponse = d.get_workflow(instance_id=instanceId, workflow_component=workflowComponent) - print(f"Get response from {workflowName} after resume call: {getResponse.runtime_status}") - - sleep(1) - # Raise event - d.raise_workflow_event(instance_id=instanceId, workflow_component=workflowComponent, - event_name=eventName, event_data=eventData) - - sleep(5) - # Purge Test - d.purge_workflow(instance_id=instanceId, workflow_component=workflowComponent) - try: - getResponse = d.get_workflow(instance_id=instanceId, workflow_component=workflowComponent) - except DaprInternalError as err: - if nonExistentIDError in err._message: - print("Instance Successfully Purged") - - - # Kick off another workflow for termination purposes - # This will also test using the same instance ID on a new workflow after - # the old instance was purged - start_resp = d.start_workflow(instance_id=instanceId, workflow_component=workflowComponent, - workflow_name=workflowName, input=inputData, workflow_options=workflowOptions) - print(f"start_resp {start_resp.instance_id}") - - # Terminate Test - d.terminate_workflow(instance_id=instanceId, workflow_component=workflowComponent) - sleep(1) - getResponse = d.get_workflow(instance_id=instanceId, workflow_component=workflowComponent) - print(f"Get response from {workflowName} after terminate call: {getResponse.runtime_status}") - - # Purge Test - d.purge_workflow(instance_id=instanceId, workflow_component=workflowComponent) - try: - getResponse = d.get_workflow(instance_id=instanceId, workflow_component=workflowComponent) - except DaprInternalError as err: - if nonExistentIDError in err._message: - print("Instance Successfully Purged") - - workflowRuntime.shutdown() -``` - -- Learn more about authoring and managing workflows: - - [How-To: Author a workflow]({{< ref howto-author-workflow.md >}}). - - [How-To: Manage a workflow]({{< ref howto-manage-workflow.md >}}). -- Visit [Python SDK examples](https://github.com/dapr/python-sdk/blob/master/examples/demo_workflow/app.py) for code samples and instructions to try out Dapr Workflow. - - ## Related links [Python SDK examples](https://github.com/dapr/python-sdk/tree/master/examples) diff --git a/daprdocs/content/en/python-sdk-docs/python-sdk-extensions/python-workflow-ext/_index.md b/daprdocs/content/en/python-sdk-docs/python-sdk-extensions/python-workflow-ext/_index.md index e5fe5ce8..ed75a1ee 100644 --- a/daprdocs/content/en/python-sdk-docs/python-sdk-extensions/python-workflow-ext/_index.md +++ b/daprdocs/content/en/python-sdk-docs/python-sdk-extensions/python-workflow-ext/_index.md @@ -7,11 +7,7 @@ description: How to get up and running with the Dapr Workflow extension no_list: true --- -{{% alert title="Note" color="primary" %}} -Dapr Workflow is currently in alpha. -{{% /alert %}} - -The Dapr Python SDK provides a built in Dapr Workflow extension, `dapr.ext.workflow`, for creating Dapr services. +The Dapr Python SDK provides a built-in Dapr Workflow extension, `dapr.ext.workflow`, for creating Dapr services. ## Installation @@ -31,12 +27,79 @@ The development package will contain features and behavior that will be compatib {{% /alert %}} ```bash -pip3 install dapr-ext-workflow-dev +pip install dapr-ext-workflow-dev ``` {{% /codetab %}} {{< /tabs >}} +## Example + +```python +from time import sleep + +import dapr.ext.workflow as wf + + +wfr = wf.WorkflowRuntime() + + +@wfr.workflow(name='random_workflow') +def task_chain_workflow(ctx: wf.DaprWorkflowContext, wf_input: int): + try: + result1 = yield ctx.call_activity(step1, input=wf_input) + result2 = yield ctx.call_activity(step2, input=result1) + except Exception as e: + yield ctx.call_activity(error_handler, input=str(e)) + raise + return [result1, result2] + + +@wfr.activity(name='step1') +def step1(ctx, activity_input): + print(f'Step 1: Received input: {activity_input}.') + # Do some work + return activity_input + 1 + + +@wfr.activity +def step2(ctx, activity_input): + print(f'Step 2: Received input: {activity_input}.') + # Do some work + return activity_input * 2 + +@wfr.activity +def error_handler(ctx, error): + print(f'Executing error handler: {error}.') + # Do some compensating work + + +if __name__ == '__main__': + wfr.start() + sleep(10) # wait for workflow runtime to start + + wf_client = wf.DaprWorkflowClient() + instance_id = wf_client.schedule_new_workflow(workflow=task_chain_workflow, input=42) + print(f'Workflow started. Instance ID: {instance_id}') + state = wf_client.wait_for_workflow_completion(instance_id) + print(f'Workflow completed! Status: {state.runtime_status}') + + wfr.shutdown() +``` + +- Learn more about authoring and managing workflows: + - [How-To: Author a workflow]({{< ref howto-author-workflow.md >}}). + - [How-To: Manage a workflow]({{< ref howto-manage-workflow.md >}}). + - +- Visit [Python SDK examples](https://github.com/dapr/python-sdk/tree/main/examples/workflow) for code samples and instructions to try out Dapr Workflow: + - [Simple workflow example]({{< ref python-workflow.md >}}) + - [Task chaining example](https://github.com/dapr/python-sdk/blob/main/examples/workflow/task_chaining.py) + - [Fan-out/Fan-in example](https://github.com/dapr/python-sdk/blob/main/examples/workflow/fan_out_fan_in.py) + - [Child workflow example](https://github.com/dapr/python-sdk/blob/main/examples/workflow/child_workflow.py) + - [Human approval example](https://github.com/dapr/python-sdk/blob/main/examples/workflow/human_approval.py) + - [Monitor example](https://github.com/dapr/python-sdk/blob/main/examples/workflow/monitor.py) + + ## Next steps {{< button text="Getting started with the Dapr Workflow Python SDK" page="python-workflow.md" >}} diff --git a/daprdocs/content/en/python-sdk-docs/python-sdk-extensions/python-workflow-ext/python-workflow.md b/daprdocs/content/en/python-sdk-docs/python-sdk-extensions/python-workflow-ext/python-workflow.md index b241c9c1..6e8011f3 100644 --- a/daprdocs/content/en/python-sdk-docs/python-sdk-extensions/python-workflow-ext/python-workflow.md +++ b/daprdocs/content/en/python-sdk-docs/python-sdk-extensions/python-workflow-ext/python-workflow.md @@ -6,14 +6,15 @@ weight: 30000 description: How to get up and running with workflows using the Dapr Python SDK --- -Let’s create a Dapr workflow and invoke it using the console. With the [provided hello world workflow example](https://github.com/dapr/python-sdk/tree/master/examples/demo_workflow), you will: +Let’s create a Dapr workflow and invoke it using the console. With the [provided workflow example](https://github.com/dapr/python-sdk/tree/main/examples/workflow/simple.py), you will: -- Run a [Python console application using `DaprClient`](https://github.com/dapr/python-sdk/blob/master/examples/demo_workflow/app.py) -- Utilize the Python workflow SDK and API calls to start, pause, resume, terminate, and purge workflow instances +- Run a [Python console application](https://github.com/dapr/python-sdk/blob/main/examples/workflow/simple.py) that demonstrates workflow orchestration with activities, child workflows, and external events +- Learn how to handle retries, timeouts, and workflow state management +- Use the Python workflow SDK to start, pause, resume, and purge workflow instances This example uses the default configuration from `dapr init` in [self-hosted mode](https://github.com/dapr/cli#install-dapr-on-your-local-machine-self-hosted). -In the Python example project, the `app.py` file contains the setup of the app, including: +In the Python example project, the `simple.py` file contains the setup of the app, including: - The workflow definition - The workflow activity definitions - The registration of the workflow and workflow activities @@ -27,22 +28,22 @@ In the Python example project, the `app.py` file contains the setup of the app, ## Set up the environment -Run the following command to install the requirements for running this workflow sample with the Dapr Python SDK. +Start by cloning the [Python SDK repo]. ```bash -pip3 install -r demo_workflow/requirements.txt +git clone https://github.com/dapr/python-sdk.git ``` -Clone the [Python SDK repo]. +From the Python SDK root directory, navigate to the Dapr Workflow example. ```bash -git clone https://github.com/dapr/python-sdk.git +cd examples/workflow ``` -From the Python SDK root directory, navigate to the Dapr Workflow example. +Run the following command to install the requirements for running this workflow sample with the Dapr Python SDK. ```bash -cd examples/demo_workflow +pip3 install -r workflow/requirements.txt ``` ## Run the application locally @@ -50,133 +51,116 @@ cd examples/demo_workflow To run the Dapr application, you need to start the Python program and a Dapr sidecar. In the terminal, run: ```bash -dapr run --app-id orderapp --app-protocol grpc --dapr-grpc-port 50001 --resources-path components --placement-host-address localhost:50005 -- python3 app.py +dapr run --app-id wf-simple-example --dapr-grpc-port 50001 --resources-path components -- python3 simple.py ``` -> **Note:** Since Python3.exe is not defined in Windows, you may need to use `python app.py` instead of `python3 app.py`. +> **Note:** Since Python3.exe is not defined in Windows, you may need to use `python simple.py` instead of `python3 simple.py`. **Expected output** ``` -== APP == ==========Start Counter Increase as per Input:========== - -== APP == start_resp exampleInstanceID - -== APP == Hi Counter! -== APP == New counter value is: 1! - -== APP == Hi Counter! -== APP == New counter value is: 11! - -== APP == Hi Counter! -== APP == Hi Counter! -== APP == Get response from hello_world_wf after pause call: Suspended - -== APP == Hi Counter! -== APP == Get response from hello_world_wf after resume call: Running - -== APP == Hi Counter! -== APP == New counter value is: 111! - -== APP == Hi Counter! -== APP == Instance Successfully Purged - -== APP == start_resp exampleInstanceID - -== APP == Hi Counter! -== APP == New counter value is: 1112! - -== APP == Hi Counter! -== APP == New counter value is: 1122! - -== APP == Get response from hello_world_wf after terminate call: Terminated -== APP == Get response from child_wf after terminate call: Terminated -== APP == Instance Successfully Purged +- "== APP == Hi Counter!" +- "== APP == New counter value is: 1!" +- "== APP == New counter value is: 11!" +- "== APP == Retry count value is: 0!" +- "== APP == Retry count value is: 1! This print statement verifies retry" +- "== APP == Appending 1 to child_orchestrator_string!" +- "== APP == Appending a to child_orchestrator_string!" +- "== APP == Appending a to child_orchestrator_string!" +- "== APP == Appending 2 to child_orchestrator_string!" +- "== APP == Appending b to child_orchestrator_string!" +- "== APP == Appending b to child_orchestrator_string!" +- "== APP == Appending 3 to child_orchestrator_string!" +- "== APP == Appending c to child_orchestrator_string!" +- "== APP == Appending c to child_orchestrator_string!" +- "== APP == Get response from hello_world_wf after pause call: Suspended" +- "== APP == Get response from hello_world_wf after resume call: Running" +- "== APP == New counter value is: 111!" +- "== APP == New counter value is: 1111!" +- "== APP == Workflow completed! Result: "Completed" ``` ## What happened? -When you ran `dapr run`, the Dapr client: -1. Registered the workflow (`hello_world_wf`) and its actvity (`hello_act`) -1. Started the workflow engine - -```python -def main(): - with DaprClient() as d: - host = settings.DAPR_RUNTIME_HOST - port = settings.DAPR_GRPC_PORT - workflowRuntime = WorkflowRuntime(host, port) - workflowRuntime = WorkflowRuntime() - workflowRuntime.register_workflow(hello_world_wf) - workflowRuntime.register_activity(hello_act) - workflowRuntime.start() - - print("==========Start Counter Increase as per Input:==========") - start_resp = d.start_workflow(instance_id=instanceId, workflow_component=workflowComponent, - workflow_name=workflowName, input=inputData, workflow_options=workflowOptions) - print(f"start_resp {start_resp.instance_id}") -``` - -Dapr then paused and resumed the workflow: - -```python - # Pause - d.pause_workflow(instance_id=instanceId, workflow_component=workflowComponent) - getResponse = d.get_workflow(instance_id=instanceId, workflow_component=workflowComponent) - print(f"Get response from {workflowName} after pause call: {getResponse.runtime_status}") - - # Resume - d.resume_workflow(instance_id=instanceId, workflow_component=workflowComponent) - getResponse = d.get_workflow(instance_id=instanceId, workflow_component=workflowComponent) - print(f"Get response from {workflowName} after resume call: {getResponse.runtime_status}") -``` - -Once the workflow resumed, Dapr raised a workflow event and printed the new counter value: - -```python - # Raise event - d.raise_workflow_event(instance_id=instanceId, workflow_component=workflowComponent, - event_name=eventName, event_data=eventData) -``` - -To clear out the workflow state from your state store, Dapr purged the workflow: - -```python - # Purge - d.purge_workflow(instance_id=instanceId, workflow_component=workflowComponent) - try: - getResponse = d.get_workflow(instance_id=instanceId, workflow_component=workflowComponent) - except DaprInternalError as err: - if nonExistentIDError in err._message: - print("Instance Successfully Purged") -``` - -The sample then demonstrated terminating a workflow by: -- Starting a new workflow using the same `instanceId` as the purged workflow. -- Terminating the workflow and purging before shutting down the workflow. - -```python - # Kick off another workflow - start_resp = d.start_workflow(instance_id=instanceId, workflow_component=workflowComponent, - workflow_name=workflowName, input=inputData, workflow_options=workflowOptions) - print(f"start_resp {start_resp.instance_id}") - - # Terminate - d.terminate_workflow(instance_id=instanceId, workflow_component=workflowComponent) - sleep(1) - getResponse = d.get_workflow(instance_id=instanceId, workflow_component=workflowComponent) - print(f"Get response from {workflowName} after terminate call: {getResponse.runtime_status}") - - # Purge - d.purge_workflow(instance_id=instanceId, workflow_component=workflowComponent) - try: - getResponse = d.get_workflow(instance_id=instanceId, workflow_component=workflowComponent) - except DaprInternalError as err: - if nonExistentIDError in err._message: - print("Instance Successfully Purged") -``` - +When you run the application, several key workflow features are shown: + +1. **Workflow and Activity Registration**: The application uses Python decorators to automatically register workflows and activities with the runtime. This decorator-based approach provides a clean, declarative way to define your workflow components: + ```python + @wfr.workflow(name='hello_world_wf') + def hello_world_wf(ctx: DaprWorkflowContext, wf_input): + # Workflow definition... + + @wfr.activity(name='hello_act') + def hello_act(ctx: WorkflowActivityContext, wf_input): + # Activity definition... + ``` + +2. **Runtime Setup**: The application initializes the workflow runtime and client: + ```python + wfr = WorkflowRuntime() + wfr.start() + wf_client = DaprWorkflowClient() + ``` + +2. **Activity Execution**: The workflow executes a series of activities that increment a counter: + ```python + @wfr.workflow(name='hello_world_wf') + def hello_world_wf(ctx: DaprWorkflowContext, wf_input): + yield ctx.call_activity(hello_act, input=1) + yield ctx.call_activity(hello_act, input=10) + ``` + +3. **Retry Logic**: The workflow demonstrates error handling with a retry policy: + ```python + retry_policy = RetryPolicy( + first_retry_interval=timedelta(seconds=1), + max_number_of_attempts=3, + backoff_coefficient=2, + max_retry_interval=timedelta(seconds=10), + retry_timeout=timedelta(seconds=100), + ) + yield ctx.call_activity(hello_retryable_act, retry_policy=retry_policy) + ``` + +4. **Child Workflow**: A child workflow is executed with its own retry policy: + ```python + yield ctx.call_child_workflow(child_retryable_wf, retry_policy=retry_policy) + ``` + +5. **External Event Handling**: The workflow waits for an external event with a timeout: + ```python + event = ctx.wait_for_external_event(event_name) + timeout = ctx.create_timer(timedelta(seconds=30)) + winner = yield when_any([event, timeout]) + ``` + +6. **Workflow Lifecycle Management**: The example demonstrates how to pause and resume the workflow: + ```python + wf_client.pause_workflow(instance_id=instance_id) + metadata = wf_client.get_workflow_state(instance_id=instance_id) + # ... check status ... + wf_client.resume_workflow(instance_id=instance_id) + ``` + +7. **Event Raising**: After resuming, the workflow raises an event: + ```python + wf_client.raise_workflow_event( + instance_id=instance_id, + event_name=event_name, + data=event_data + ) + ``` + +8. **Completion and Cleanup**: Finally, the workflow waits for completion and cleans up: + ```python + state = wf_client.wait_for_workflow_completion( + instance_id, + timeout_in_seconds=30 + ) + wf_client.purge_workflow(instance_id=instance_id) + ``` ## Next steps - [Learn more about Dapr workflow]({{< ref workflow-overview.md >}}) - [Workflow API reference]({{< ref workflow_api.md >}}) +- [Try implementing more complex workflow patterns](https://github.com/dapr/python-sdk/tree/main/examples/workflow) From 80b82e9ba0c69b2bb833133af2342d8ff8700df0 Mon Sep 17 00:00:00 2001 From: Elena Kolevska Date: Thu, 20 Feb 2025 13:26:51 +0000 Subject: [PATCH 31/38] Workflow fixes and improvements (#784) * Converts demo_workflow example to DaprWorkflowClient and removes default timeout of 60seconds on `wait_for_workflow_start` and `wait_for_workflow_completion` Signed-off-by: Elena Kolevska * Bumps durable task library. Signed-off-by: Elena Kolevska --------- Signed-off-by: Elena Kolevska --- dev-requirements.txt | 2 +- examples/workflow/README.md | 66 +++++++ examples/workflow/simple.py | 170 ++++++++++++++++++ .../dapr/ext/workflow/dapr_workflow_client.py | 14 +- ext/dapr-ext-workflow/setup.cfg | 2 +- 5 files changed, 245 insertions(+), 9 deletions(-) create mode 100644 examples/workflow/simple.py diff --git a/dev-requirements.txt b/dev-requirements.txt index 769b1e1e..cec56fb2 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -15,4 +15,4 @@ Flask>=1.1 # needed for auto fix ruff===0.2.2 # needed for dapr-ext-workflow -durabletask-dapr >= 0.2.0a4 +durabletask-dapr >= 0.2.0a7 diff --git a/examples/workflow/README.md b/examples/workflow/README.md index 6b936b31..f5b901d1 100644 --- a/examples/workflow/README.md +++ b/examples/workflow/README.md @@ -19,6 +19,72 @@ pip3 install -r requirements.txt Each of the examples in this directory can be run directly from the command line. +### Simple Workflow +This example represents a workflow that manages counters through a series of activities and child workflows. +It shows several Dapr Workflow features including: +- Basic activity execution with counter increments +- Retryable activities with configurable retry policies +- Child workflow orchestration with retry logic +- External event handling with timeouts +- Workflow state management (pause/resume) +- Activity error handling and retry backoff +- Global state tracking across workflow components +- Workflow lifecycle management (start, pause, resume, purge) + + + +```sh +dapr run --app-id wf-simple-example --dapr-grpc-port 50001 -- python3 simple.py +``` + + +The output of this example should look like this: + +``` + - "== APP == Hi Counter!" + - "== APP == New counter value is: 1!" + - "== APP == New counter value is: 11!" + - "== APP == Retry count value is: 0!" + - "== APP == Retry count value is: 1! This print statement verifies retry" + - "== APP == Appending 1 to child_orchestrator_string!" + - "== APP == Appending a to child_orchestrator_string!" + - "== APP == Appending a to child_orchestrator_string!" + - "== APP == Appending 2 to child_orchestrator_string!" + - "== APP == Appending b to child_orchestrator_string!" + - "== APP == Appending b to child_orchestrator_string!" + - "== APP == Appending 3 to child_orchestrator_string!" + - "== APP == Appending c to child_orchestrator_string!" + - "== APP == Appending c to child_orchestrator_string!" + - "== APP == Get response from hello_world_wf after pause call: SUSPENDED" + - "== APP == Get response from hello_world_wf after resume call: RUNNING" + - "== APP == New counter value is: 111!" + - "== APP == New counter value is: 1111!" + - "== APP == Workflow completed! Result: Completed" +``` + ### Task Chaining This example demonstrates how to chain "activity" tasks together in a workflow. You can run this sample using the following command: diff --git a/examples/workflow/simple.py b/examples/workflow/simple.py new file mode 100644 index 00000000..76f21eba --- /dev/null +++ b/examples/workflow/simple.py @@ -0,0 +1,170 @@ +# -*- coding: utf-8 -*- +# Copyright 2025 The Dapr Authors +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +from datetime import timedelta +from time import sleep +from dapr.ext.workflow import ( + WorkflowRuntime, + DaprWorkflowContext, + WorkflowActivityContext, + RetryPolicy, + DaprWorkflowClient, + when_any, +) +from dapr.conf import Settings +from dapr.clients.exceptions import DaprInternalError + +settings = Settings() + +counter = 0 +retry_count = 0 +child_orchestrator_count = 0 +child_orchestrator_string = '' +child_act_retry_count = 0 +instance_id = 'exampleInstanceID' +child_instance_id = 'childInstanceID' +workflow_name = 'hello_world_wf' +child_workflow_name = 'child_wf' +input_data = 'Hi Counter!' +event_name = 'event1' +event_data = 'eventData' +non_existent_id_error = 'no such instance exists' + +retry_policy = RetryPolicy( + first_retry_interval=timedelta(seconds=1), + max_number_of_attempts=3, + backoff_coefficient=2, + max_retry_interval=timedelta(seconds=10), + retry_timeout=timedelta(seconds=100), +) + +wfr = WorkflowRuntime() + + +@wfr.workflow(name='hello_world_wf') +def hello_world_wf(ctx: DaprWorkflowContext, wf_input): + print(f'{wf_input}') + yield ctx.call_activity(hello_act, input=1) + yield ctx.call_activity(hello_act, input=10) + yield ctx.call_activity(hello_retryable_act, retry_policy=retry_policy) + yield ctx.call_child_workflow(child_retryable_wf, retry_policy=retry_policy) + + # Change in event handling: Use when_any to handle both event and timeout + event = ctx.wait_for_external_event(event_name) + timeout = ctx.create_timer(timedelta(seconds=30)) + winner = yield when_any([event, timeout]) + + if winner == timeout: + print('Workflow timed out waiting for event') + return 'Timeout' + + yield ctx.call_activity(hello_act, input=100) + yield ctx.call_activity(hello_act, input=1000) + return 'Completed' + + +@wfr.activity(name='hello_act') +def hello_act(ctx: WorkflowActivityContext, wf_input): + global counter + counter += wf_input + print(f'New counter value is: {counter}!', flush=True) + + +@wfr.activity(name='hello_retryable_act') +def hello_retryable_act(ctx: WorkflowActivityContext): + global retry_count + if (retry_count % 2) == 0: + print(f'Retry count value is: {retry_count}!', flush=True) + retry_count += 1 + raise ValueError('Retryable Error') + print(f'Retry count value is: {retry_count}! This print statement verifies retry', flush=True) + retry_count += 1 + + +@wfr.workflow(name='child_retryable_wf') +def child_retryable_wf(ctx: DaprWorkflowContext): + global child_orchestrator_string, child_orchestrator_count + if not ctx.is_replaying: + child_orchestrator_count += 1 + print(f'Appending {child_orchestrator_count} to child_orchestrator_string!', flush=True) + child_orchestrator_string += str(child_orchestrator_count) + yield ctx.call_activity( + act_for_child_wf, input=child_orchestrator_count, retry_policy=retry_policy + ) + if child_orchestrator_count < 3: + raise ValueError('Retryable Error') + + +@wfr.activity(name='act_for_child_wf') +def act_for_child_wf(ctx: WorkflowActivityContext, inp): + global child_orchestrator_string, child_act_retry_count + inp_char = chr(96 + inp) + print(f'Appending {inp_char} to child_orchestrator_string!', flush=True) + child_orchestrator_string += inp_char + if child_act_retry_count % 2 == 0: + child_act_retry_count += 1 + raise ValueError('Retryable Error') + child_act_retry_count += 1 + + +def main(): + wfr.start() + wf_client = DaprWorkflowClient() + + print('==========Start Counter Increase as per Input:==========') + wf_client.schedule_new_workflow( + workflow=hello_world_wf, input=input_data, instance_id=instance_id + ) + + wf_client.wait_for_workflow_start(instance_id) + + # Sleep to let the workflow run initial activities + sleep(12) + + assert counter == 11 + assert retry_count == 2 + assert child_orchestrator_string == '1aa2bb3cc' + + # Pause Test + wf_client.pause_workflow(instance_id=instance_id) + metadata = wf_client.get_workflow_state(instance_id=instance_id) + print(f'Get response from {workflow_name} after pause call: {metadata.runtime_status.name}') + + # Resume Test + wf_client.resume_workflow(instance_id=instance_id) + metadata = wf_client.get_workflow_state(instance_id=instance_id) + print(f'Get response from {workflow_name} after resume call: {metadata.runtime_status.name}') + + sleep(2) # Give the workflow time to reach the event wait state + wf_client.raise_workflow_event(instance_id=instance_id, event_name=event_name, data=event_data) + + print('========= Waiting for Workflow completion', flush=True) + try: + state = wf_client.wait_for_workflow_completion(instance_id, timeout_in_seconds=30) + if state.runtime_status.name == 'COMPLETED': + print('Workflow completed! Result: {}'.format(state.serialized_output.strip('"'))) + else: + print(f'Workflow failed! Status: {state.runtime_status.name}') + except TimeoutError: + print('*** Workflow timed out!') + + wf_client.purge_workflow(instance_id=instance_id) + try: + wf_client.get_workflow_state(instance_id=instance_id) + except DaprInternalError as err: + if non_existent_id_error in err._message: + print('Instance Successfully Purged') + + wfr.shutdown() + + +if __name__ == '__main__': + main() diff --git a/ext/dapr-ext-workflow/dapr/ext/workflow/dapr_workflow_client.py b/ext/dapr-ext-workflow/dapr/ext/workflow/dapr_workflow_client.py index 6bb801dc..cc384503 100644 --- a/ext/dapr-ext-workflow/dapr/ext/workflow/dapr_workflow_client.py +++ b/ext/dapr-ext-workflow/dapr/ext/workflow/dapr_workflow_client.py @@ -122,7 +122,7 @@ def get_workflow_state( """Fetches runtime state for the specified workflow instance. Args: - instanceId: The unique ID of the workflow instance to fetch. + instance_id: The unique ID of the workflow instance to fetch. fetch_payloads: If true, fetches the input, output payloads and custom status for the workflow instance. Defaults to true. @@ -144,7 +144,7 @@ def get_workflow_state( raise def wait_for_workflow_start( - self, instance_id: str, *, fetch_payloads: bool = False, timeout_in_seconds: int = 60 + self, instance_id: str, *, fetch_payloads: bool = False, timeout_in_seconds: int = 0 ) -> Optional[WorkflowState]: """Waits for a workflow to start running and returns a WorkflowState object that contains metadata about the started workflow. @@ -158,7 +158,7 @@ def wait_for_workflow_start( fetch_payloads: If true, fetches the input, output payloads and custom status for the workflow instance. Defaults to false. timeout_in_seconds: The maximum time to wait for the workflow instance to start running. - Defaults to 60 seconds. + Defaults to meaning no timeout. Returns: WorkflowState record that describes the workflow instance and its execution status. @@ -170,7 +170,7 @@ def wait_for_workflow_start( return WorkflowState(state) if state else None def wait_for_workflow_completion( - self, instance_id: str, *, fetch_payloads: bool = True, timeout_in_seconds: int = 60 + self, instance_id: str, *, fetch_payloads: bool = True, timeout_in_seconds: int = 0 ) -> Optional[WorkflowState]: """Waits for a workflow to complete and returns a WorkflowState object that contains metadata about the started instance. @@ -192,7 +192,7 @@ def wait_for_workflow_completion( fetch_payloads: If true, fetches the input, output payloads and custom status for the workflow instance. Defaults to true. timeout_in_seconds: The maximum time in seconds to wait for the workflow instance to - complete. Defaults to 60 seconds. + complete. Defaults to 0 seconds, meaning no timeout. Returns: WorkflowState record that describes the workflow instance and its execution status. @@ -222,8 +222,8 @@ def raise_workflow_event( discarded. Args: - instanceId: The ID of the workflow instance that will handle the event. - eventName: The name of the event. Event names are case-insensitive. + instance_id: The ID of the workflow instance that will handle the event. + event_name: The name of the event. Event names are case-insensitive. data: The serializable data payload to include with the event. """ return self.__obj.raise_orchestration_event(instance_id, event_name, data=data) diff --git a/ext/dapr-ext-workflow/setup.cfg b/ext/dapr-ext-workflow/setup.cfg index a7325511..b6bbc1a7 100644 --- a/ext/dapr-ext-workflow/setup.cfg +++ b/ext/dapr-ext-workflow/setup.cfg @@ -25,7 +25,7 @@ packages = find_namespace: include_package_data = True install_requires = dapr >= 1.15.0rc2 - durabletask-dapr >= 0.2.0a4 + durabletask-dapr >= 0.2.0a7 [options.packages.find] include = From b6979b339d4dfd03981756e52ca32b04603e62e9 Mon Sep 17 00:00:00 2001 From: Elena Kolevska Date: Thu, 20 Feb 2025 13:30:26 +0000 Subject: [PATCH 32/38] Retry streaming subscription on status UNKNOWN as well (#783) Signed-off-by: Elena Kolevska --- dapr/clients/grpc/subscription.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dapr/clients/grpc/subscription.py b/dapr/clients/grpc/subscription.py index 6022d618..111946b1 100644 --- a/dapr/clients/grpc/subscription.py +++ b/dapr/clients/grpc/subscription.py @@ -84,7 +84,7 @@ def next_message(self): return SubscriptionMessage(message.event_message) except RpcError as e: # If Dapr can't be reached, wait until it's ready and reconnect the stream - if e.code() == StatusCode.UNAVAILABLE: + if e.code() == StatusCode.UNAVAILABLE or e.code() == StatusCode.UNKNOWN: print( f'gRPC error while reading from stream: {e.details()}, Status Code: {e.code()}' ) From a29309d3e22590630dded7d8fa2d67aeba254aa3 Mon Sep 17 00:00:00 2001 From: Elena Kolevska Date: Fri, 21 Feb 2025 15:43:55 +0000 Subject: [PATCH 33/38] Adds examples and docs for cloud events messages (#785) Signed-off-by: Elena Kolevska --- .../en/python-sdk-docs/python-client.md | 50 +++++++++++++++++++ examples/pubsub-simple/README.md | 11 +++- examples/pubsub-simple/publisher.py | 48 ++++++++++++++++++ examples/pubsub-simple/subscriber.py | 36 +++++++++++++ 4 files changed, 144 insertions(+), 1 deletion(-) diff --git a/daprdocs/content/en/python-sdk-docs/python-client.md b/daprdocs/content/en/python-sdk-docs/python-client.md index 46358437..43afdd0b 100644 --- a/daprdocs/content/en/python-sdk-docs/python-client.md +++ b/daprdocs/content/en/python-sdk-docs/python-client.md @@ -227,6 +227,56 @@ with DaprClient() as d: resp = d.publish_event(pubsub_name='pubsub', topic_name='TOPIC_A', data='{"message":"Hello World"}') ``` + +Send [CloudEvents](https://cloudevents.io/) messages with a json payload: +```python +from dapr.clients import DaprClient +import json + +with DaprClient() as d: + cloud_event = { + 'specversion': '1.0', + 'type': 'com.example.event', + 'source': 'my-service', + 'id': 'myid', + 'data': {'id': 1, 'message': 'hello world'}, + 'datacontenttype': 'application/json', + } + + # Set the data content type to 'application/cloudevents+json' + resp = d.publish_event( + pubsub_name='pubsub', + topic_name='TOPIC_CE', + data=json.dumps(cloud_event), + data_content_type='application/cloudevents+json', + ) +``` + +Publish [CloudEvents](https://cloudevents.io/) messages with plain text payload: +```python +from dapr.clients import DaprClient +import json + +with DaprClient() as d: + cloud_event = { + 'specversion': '1.0', + 'type': 'com.example.event', + 'source': 'my-service', + 'id': "myid", + 'data': 'hello world', + 'datacontenttype': 'text/plain', + } + + # Set the data content type to 'application/cloudevents+json' + resp = d.publish_event( + pubsub_name='pubsub', + topic_name='TOPIC_CE', + data=json.dumps(cloud_event), + data_content_type='application/cloudevents+json', + ) +``` + + #### Subscribe to messages ```python diff --git a/examples/pubsub-simple/README.md b/examples/pubsub-simple/README.md index f4730a42..8abfad96 100644 --- a/examples/pubsub-simple/README.md +++ b/examples/pubsub-simple/README.md @@ -37,6 +37,11 @@ expected_stdout_lines: - '== APP == Dead-Letter Subscriber received: id=7, message="hello world", content_type="application/json"' - '== APP == Dead-Letter Subscriber. Received via deadletter topic: TOPIC_D_DEAD' - '== APP == Dead-Letter Subscriber. Originally intended topic: TOPIC_D' + - '== APP == Subscriber received: TOPIC_CE' + - '== APP == Subscriber received a json cloud event: id=8, message="hello world", content_type="application/json"' + - '== APP == Subscriber received: TOPIC_CE' + - '== APP == Subscriber received plain text cloud event: hello world, content_type="text/plain"' + output_match_mode: substring background: true match_order: none @@ -45,7 +50,7 @@ sleep: 3 ```bash # 1. Start Subscriber (expose gRPC server receiver on port 50051) -dapr run --app-id python-subscriber --app-protocol grpc --app-port 50051 python3 subscriber.py +dapr run --app-id python-subscriber --app-protocol grpc --app-port 50051 -- python3 subscriber.py ``` @@ -60,6 +65,10 @@ expected_stdout_lines: - "== APP == {'id': 3, 'message': 'hello world'}" - "== APP == {'id': 4, 'message': 'hello world'}" - "== APP == {'id': 5, 'message': 'hello world'}" + - "== APP == {'id': 6, 'message': 'hello world'}" + - "== APP == {'id': 7, 'message': 'hello world'}" + - "== APP == {'specversion': '1.0', 'type': 'com.example.event', 'source': 'my-service', 'id': 'abc-8', 'data': {'id': 8, 'message': 'hello world'}, 'datacontenttype': 'application/json'}" + - "== APP == {'specversion': '1.0', 'type': 'com.example.event', 'source': 'my-service', 'id': 'abc-10', 'data': 'hello world', 'datacontenttype': 'text/plain'}" background: true sleep: 15 --> diff --git a/examples/pubsub-simple/publisher.py b/examples/pubsub-simple/publisher.py index f6681f9e..e5954c65 100644 --- a/examples/pubsub-simple/publisher.py +++ b/examples/pubsub-simple/publisher.py @@ -66,3 +66,51 @@ # Print the request print(req_data, flush=True) + + ## Send a cloud event with json data + id = 8 + cloud_event = { + 'specversion': '1.0', + 'type': 'com.example.event', + 'source': 'my-service', + 'id': f'abc-{id}', + 'data': {'id': id, 'message': 'hello world'}, + 'datacontenttype': 'application/json', + } + + # Set the data content type to 'application/cloudevents+json' + resp = d.publish_event( + pubsub_name='pubsub', + topic_name='TOPIC_CE', + data=json.dumps(cloud_event), + data_content_type='application/cloudevents+json', + ) + + # Print the request + print(cloud_event, flush=True) + + time.sleep(0.5) + + # Send a cloud event with plain text data + id = 10 + cloud_event = { + 'specversion': '1.0', + 'type': 'com.example.event', + 'source': 'my-service', + 'id': f'abc-{id}', + 'data': 'hello world', + 'datacontenttype': 'text/plain', + } + + # Set the data content type to 'application/cloudevents+json' + resp = d.publish_event( + pubsub_name='pubsub', + topic_name='TOPIC_CE', + data=json.dumps(cloud_event), + data_content_type='application/cloudevents+json', + ) + + # Print the request + print(cloud_event, flush=True) + + time.sleep(0.5) diff --git a/examples/pubsub-simple/subscriber.py b/examples/pubsub-simple/subscriber.py index b905aaa6..daa11bc8 100644 --- a/examples/pubsub-simple/subscriber.py +++ b/examples/pubsub-simple/subscriber.py @@ -40,6 +40,42 @@ def mytopic(event: v1.Event) -> TopicEventResponse: return TopicEventResponse('success') +@app.subscribe(pubsub_name='pubsub', topic='TOPIC_CE') +def receive_cloud_events(event: v1.Event) -> TopicEventResponse: + print('Subscriber received: ' + event.Subject(), flush=True) + + content_type = event.content_type + data = event.Data() + + try: + if content_type == 'application/json': + # Handle JSON data + json_data = json.loads(data) + print( + f'Subscriber received a json cloud event: id={json_data["id"]}, message="{json_data["message"]}", ' + f'content_type="{event.content_type}"', + flush=True, + ) + elif content_type == 'text/plain': + # Handle plain text data + if isinstance(data, bytes): + data = data.decode('utf-8') + print( + f'Subscriber received plain text cloud event: {data}, ' + f'content_type="{content_type}"', + flush=True, + ) + else: + print(f'Received unknown content type: {content_type}', flush=True) + return TopicEventResponse('fail') + + except Exception as e: + print('Failed to process event data:', e, flush=True) + return TopicEventResponse('fail') + + return TopicEventResponse('success') + + @app.subscribe(pubsub_name='pubsub', topic='TOPIC_D', dead_letter_topic='TOPIC_D_DEAD') def fail_and_send_to_dead_topic(event: v1.Event) -> TopicEventResponse: return TopicEventResponse('retry') From df196a5b26f5996169b29f4d1c7abf942ef3f3cd Mon Sep 17 00:00:00 2001 From: Elena Kolevska Date: Mon, 24 Feb 2025 23:11:57 +0000 Subject: [PATCH 34/38] Conversation API support (#787) * Conversation API support (sync) Signed-off-by: Elena Kolevska * async conversation api support Signed-off-by: Elena Kolevska * Adds docs Signed-off-by: Elena Kolevska * Ignore validation of x.com link that needs authentication Signed-off-by: Elena Kolevska * Registers e2e test. Clean up. Signed-off-by: Elena Kolevska * Apply suggestions from code review Co-authored-by: Marc Duiker Signed-off-by: Elena Kolevska * Linter Signed-off-by: Elena Kolevska * Updates protos and renames parameter Signed-off-by: Elena Kolevska * Improves error handling Signed-off-by: Elena Kolevska --------- Signed-off-by: Elena Kolevska Signed-off-by: Elena Kolevska Co-authored-by: Marc Duiker Signed-off-by: Elena Kolevska --- README.md | 2 + dapr/aio/clients/grpc/client.py | 60 ++ dapr/clients/grpc/_request.py | 10 + dapr/clients/grpc/_response.py | 17 + dapr/clients/grpc/client.py | 60 ++ dapr/proto/common/v1/common_pb2.pyi | 68 +- dapr/proto/runtime/v1/appcallback_pb2.pyi | 156 ++-- dapr/proto/runtime/v1/dapr_pb2.py | 2 +- dapr/proto/runtime/v1/dapr_pb2.pyi | 734 ++++++++++-------- .../en/python-sdk-docs/python-client.md | 32 + examples/conversation/README.md | 34 + .../config/conversation-echo.yaml | 7 + examples/conversation/conversation.py | 33 + tests/clients/fake_dapr_server.py | 12 + tests/clients/test_dapr_grpc_client.py | 54 +- tests/clients/test_dapr_grpc_client_async.py | 53 +- tox.ini | 1 + 17 files changed, 896 insertions(+), 439 deletions(-) create mode 100644 examples/conversation/README.md create mode 100644 examples/conversation/config/conversation-echo.yaml create mode 100644 examples/conversation/conversation.py diff --git a/README.md b/README.md index b6f7d0a7..3491d39a 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,9 @@ [![GitHub issue custom search in repo](https://img.shields.io/github/issues-search/dapr/python-sdk?query=type%3Aissue%20is%3Aopen%20label%3A%22good%20first%20issue%22&label=Good%20first%20issues&style=flat&logo=github)](https://github.com/dapr/python-sdk/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) [![Discord](https://img.shields.io/discord/778680217417809931?label=Discord&style=flat&logo=discord)](http://bit.ly/dapr-discord) [![YouTube Channel Views](https://img.shields.io/youtube/channel/views/UCtpSQ9BLB_3EXdWAUQYwnRA?style=flat&label=YouTube%20views&logo=youtube)](https://youtube.com/@daprdev) + [![X (formerly Twitter) Follow](https://img.shields.io/twitter/follow/daprdev?logo=x&style=flat)](https://twitter.com/daprdev) + [Dapr](https://docs.dapr.io/concepts/overview/) is a portable, event-driven, serverless runtime for building distributed applications across cloud and edge. diff --git a/dapr/aio/clients/grpc/client.py b/dapr/aio/clients/grpc/client.py index 7bcf4a13..315c219c 100644 --- a/dapr/aio/clients/grpc/client.py +++ b/dapr/aio/clients/grpc/client.py @@ -29,6 +29,7 @@ from google.protobuf.message import Message as GrpcMessage from google.protobuf.empty_pb2 import Empty as GrpcEmpty +from google.protobuf.any_pb2 import Any as GrpcAny import grpc.aio # type: ignore from grpc.aio import ( # type: ignore @@ -75,9 +76,12 @@ InvokeMethodRequest, BindingRequest, TransactionalStateOperation, + ConversationInput, ) from dapr.clients.grpc._response import ( BindingResponse, + ConversationResponse, + ConversationResult, DaprResponse, GetSecretResponse, GetBulkSecretResponse, @@ -1711,6 +1715,62 @@ async def purge_workflow(self, instance_id: str, workflow_component: str) -> Dap except grpc.aio.AioRpcError as err: raise DaprInternalError(err.details()) + async def converse_alpha1( + self, + name: str, + inputs: List[ConversationInput], + *, + context_id: Optional[str] = None, + parameters: Optional[Dict[str, GrpcAny]] = None, + metadata: Optional[Dict[str, str]] = None, + scrub_pii: Optional[bool] = None, + temperature: Optional[float] = None, + ) -> ConversationResponse: + """Invoke an LLM using the conversation API (Alpha). + + Args: + name: Name of the LLM component to invoke + inputs: List of conversation inputs + context_id: Optional ID for continuing an existing chat + parameters: Optional custom parameters for the request + metadata: Optional metadata for the component + scrub_pii: Optional flag to scrub PII from inputs and outputs + temperature: Optional temperature setting for the LLM to optimize for creativity or predictability + + Returns: + ConversationResponse containing the conversation results + + Raises: + DaprGrpcError: If the Dapr runtime returns an error + """ + inputs_pb = [ + api_v1.ConversationInput(content=inp.content, role=inp.role, scrubPII=inp.scrub_pii) + for inp in inputs + ] + + request = api_v1.ConversationRequest( + name=name, + inputs=inputs_pb, + contextID=context_id, + parameters=parameters or {}, + metadata=metadata or {}, + scrubPII=scrub_pii, + temperature=temperature, + ) + + try: + response = await self._stub.ConverseAlpha1(request) + + outputs = [ + ConversationResult(result=output.result, parameters=output.parameters) + for output in response.outputs + ] + + return ConversationResponse(context_id=response.contextID, outputs=outputs) + + except grpc.aio.AioRpcError as err: + raise DaprGrpcError(err) from err + async def wait(self, timeout_s: float): """Waits for sidecar to be available within the timeout. diff --git a/dapr/clients/grpc/_request.py b/dapr/clients/grpc/_request.py index 9ad291cf..57038121 100644 --- a/dapr/clients/grpc/_request.py +++ b/dapr/clients/grpc/_request.py @@ -15,6 +15,7 @@ import io from enum import Enum +from dataclasses import dataclass from typing import Dict, Optional, Union from google.protobuf.any_pb2 import Any as GrpcAny @@ -418,3 +419,12 @@ def __next__(self): self.seq += 1 return request_proto + + +@dataclass +class ConversationInput: + """A single input message for the conversation.""" + + content: str + role: Optional[str] = None + scrub_pii: Optional[bool] = None diff --git a/dapr/clients/grpc/_response.py b/dapr/clients/grpc/_response.py index 2beb1a2f..6d6ee92a 100644 --- a/dapr/clients/grpc/_response.py +++ b/dapr/clients/grpc/_response.py @@ -18,6 +18,7 @@ import contextlib import json import threading +from dataclasses import dataclass, field from datetime import datetime from enum import Enum from typing import ( @@ -1070,3 +1071,19 @@ class EncryptResponse(CryptoResponse[TCryptoResponse]): class DecryptResponse(CryptoResponse[TCryptoResponse]): ... + + +@dataclass +class ConversationResult: + """Result from a single conversation input.""" + + result: str + parameters: Dict[str, GrpcAny] = field(default_factory=dict) + + +@dataclass +class ConversationResponse: + """Response from the conversation API.""" + + context_id: Optional[str] + outputs: List[ConversationResult] diff --git a/dapr/clients/grpc/client.py b/dapr/clients/grpc/client.py index f7c7b850..5a18ad05 100644 --- a/dapr/clients/grpc/client.py +++ b/dapr/clients/grpc/client.py @@ -27,6 +27,7 @@ from datetime import datetime from google.protobuf.message import Message as GrpcMessage from google.protobuf.empty_pb2 import Empty as GrpcEmpty +from google.protobuf.any_pb2 import Any as GrpcAny import grpc # type: ignore from grpc import ( # type: ignore @@ -64,6 +65,7 @@ TransactionalStateOperation, EncryptRequestIterator, DecryptRequestIterator, + ConversationInput, ) from dapr.clients.grpc._response import ( BindingResponse, @@ -88,6 +90,8 @@ EncryptResponse, DecryptResponse, TopicEventResponse, + ConversationResponse, + ConversationResult, ) @@ -1713,6 +1717,62 @@ def purge_workflow(self, instance_id: str, workflow_component: str) -> DaprRespo except RpcError as err: raise DaprInternalError(err.details()) + def converse_alpha1( + self, + name: str, + inputs: List[ConversationInput], + *, + context_id: Optional[str] = None, + parameters: Optional[Dict[str, GrpcAny]] = None, + metadata: Optional[Dict[str, str]] = None, + scrub_pii: Optional[bool] = None, + temperature: Optional[float] = None, + ) -> ConversationResponse: + """Invoke an LLM using the conversation API (Alpha). + + Args: + name: Name of the LLM component to invoke + inputs: List of conversation inputs + context_id: Optional ID for continuing an existing chat + parameters: Optional custom parameters for the request + metadata: Optional metadata for the component + scrub_pii: Optional flag to scrub PII from inputs and outputs + temperature: Optional temperature setting for the LLM to optimize for creativity or predictability + + Returns: + ConversationResponse containing the conversation results + + Raises: + DaprGrpcError: If the Dapr runtime returns an error + """ + + inputs_pb = [ + api_v1.ConversationInput(content=inp.content, role=inp.role, scrubPII=inp.scrub_pii) + for inp in inputs + ] + + request = api_v1.ConversationRequest( + name=name, + inputs=inputs_pb, + contextID=context_id, + parameters=parameters or {}, + metadata=metadata or {}, + scrubPII=scrub_pii, + temperature=temperature, + ) + + try: + response, call = self.retry_policy.run_rpc(self._stub.ConverseAlpha1.with_call, request) + + outputs = [ + ConversationResult(result=output.result, parameters=output.parameters) + for output in response.outputs + ] + + return ConversationResponse(context_id=response.contextID, outputs=outputs) + except RpcError as err: + raise DaprGrpcError(err) from err + def wait(self, timeout_s: float): """Waits for sidecar to be available within the timeout. diff --git a/dapr/proto/common/v1/common_pb2.pyi b/dapr/proto/common/v1/common_pb2.pyi index 0b23ce54..b018cd8b 100644 --- a/dapr/proto/common/v1/common_pb2.pyi +++ b/dapr/proto/common/v1/common_pb2.pyi @@ -13,6 +13,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. """ + import builtins import collections.abc import google.protobuf.any_pb2 @@ -30,7 +31,7 @@ else: DESCRIPTOR: google.protobuf.descriptor.FileDescriptor -@typing_extensions.final +@typing.final class HTTPExtension(google.protobuf.message.Message): """HTTPExtension includes HTTP verb and querystring when Dapr runtime delivers HTTP content. @@ -89,11 +90,11 @@ class HTTPExtension(google.protobuf.message.Message): verb: global___HTTPExtension.Verb.ValueType = ..., querystring: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["querystring", b"querystring", "verb", b"verb"]) -> None: ... + def ClearField(self, field_name: typing.Literal["querystring", b"querystring", "verb", b"verb"]) -> None: ... global___HTTPExtension = HTTPExtension -@typing_extensions.final +@typing.final class InvokeRequest(google.protobuf.message.Message): """InvokeRequest is the message to invoke a method with the data. This message is used in InvokeService of Dapr gRPC Service and OnInvoke @@ -108,17 +109,18 @@ class InvokeRequest(google.protobuf.message.Message): HTTP_EXTENSION_FIELD_NUMBER: builtins.int method: builtins.str """Required. method is a method name which will be invoked by caller.""" - @property - def data(self) -> google.protobuf.any_pb2.Any: - """Required in unary RPCs. Bytes value or Protobuf message which caller sent. - Dapr treats Any.value as bytes type if Any.type_url is unset. - """ content_type: builtins.str """The type of data content. This field is required if data delivers http request body Otherwise, this is optional. """ + @property + def data(self) -> google.protobuf.any_pb2.Any: + """Required in unary RPCs. Bytes value or Protobuf message which caller sent. + Dapr treats Any.value as bytes type if Any.type_url is unset. + """ + @property def http_extension(self) -> global___HTTPExtension: """HTTP specific fields if request conveys http-compatible request. @@ -126,6 +128,7 @@ class InvokeRequest(google.protobuf.message.Message): This field is required for http-compatible request. Otherwise, this field is optional. """ + def __init__( self, *, @@ -134,12 +137,12 @@ class InvokeRequest(google.protobuf.message.Message): content_type: builtins.str = ..., http_extension: global___HTTPExtension | None = ..., ) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["data", b"data", "http_extension", b"http_extension"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["content_type", b"content_type", "data", b"data", "http_extension", b"http_extension", "method", b"method"]) -> None: ... + def HasField(self, field_name: typing.Literal["data", b"data", "http_extension", b"http_extension"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["content_type", b"content_type", "data", b"data", "http_extension", b"http_extension", "method", b"method"]) -> None: ... global___InvokeRequest = InvokeRequest -@typing_extensions.final +@typing.final class InvokeResponse(google.protobuf.message.Message): """InvokeResponse is the response message including data and its content type from app callback. @@ -151,23 +154,24 @@ class InvokeResponse(google.protobuf.message.Message): DATA_FIELD_NUMBER: builtins.int CONTENT_TYPE_FIELD_NUMBER: builtins.int + content_type: builtins.str + """Required. The type of data content.""" @property def data(self) -> google.protobuf.any_pb2.Any: """Required in unary RPCs. The content body of InvokeService response.""" - content_type: builtins.str - """Required. The type of data content.""" + def __init__( self, *, data: google.protobuf.any_pb2.Any | None = ..., content_type: builtins.str = ..., ) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["data", b"data"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["content_type", b"content_type", "data", b"data"]) -> None: ... + def HasField(self, field_name: typing.Literal["data", b"data"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["content_type", b"content_type", "data", b"data"]) -> None: ... global___InvokeResponse = InvokeResponse -@typing_extensions.final +@typing.final class StreamPayload(google.protobuf.message.Message): """Chunk of data sent in a streaming request or response. This is used in requests including InternalInvokeRequestStream. @@ -191,17 +195,17 @@ class StreamPayload(google.protobuf.message.Message): data: builtins.bytes = ..., seq: builtins.int = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["data", b"data", "seq", b"seq"]) -> None: ... + def ClearField(self, field_name: typing.Literal["data", b"data", "seq", b"seq"]) -> None: ... global___StreamPayload = StreamPayload -@typing_extensions.final +@typing.final class StateItem(google.protobuf.message.Message): """StateItem represents state key, value, and additional options to save state.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing_extensions.final + @typing.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -215,7 +219,7 @@ class StateItem(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... KEY_FIELD_NUMBER: builtins.int VALUE_FIELD_NUMBER: builtins.int @@ -231,12 +235,15 @@ class StateItem(google.protobuf.message.Message): """The entity tag which represents the specific version of data. The exact ETag format is defined by the corresponding data store. """ + @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """The metadata which will be passed to state store component.""" + @property def options(self) -> global___StateOptions: """Options for concurrency and consistency to save the state.""" + def __init__( self, *, @@ -246,12 +253,12 @@ class StateItem(google.protobuf.message.Message): metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., options: global___StateOptions | None = ..., ) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["etag", b"etag", "options", b"options"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["etag", b"etag", "key", b"key", "metadata", b"metadata", "options", b"options", "value", b"value"]) -> None: ... + def HasField(self, field_name: typing.Literal["etag", b"etag", "options", b"options"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["etag", b"etag", "key", b"key", "metadata", b"metadata", "options", b"options", "value", b"value"]) -> None: ... global___StateItem = StateItem -@typing_extensions.final +@typing.final class Etag(google.protobuf.message.Message): """Etag represents a state item version""" @@ -265,11 +272,11 @@ class Etag(google.protobuf.message.Message): *, value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["value", b"value"]) -> None: ... + def ClearField(self, field_name: typing.Literal["value", b"value"]) -> None: ... global___Etag = Etag -@typing_extensions.final +@typing.final class StateOptions(google.protobuf.message.Message): """StateOptions configures concurrency and consistency for state operations""" @@ -319,17 +326,17 @@ class StateOptions(google.protobuf.message.Message): concurrency: global___StateOptions.StateConcurrency.ValueType = ..., consistency: global___StateOptions.StateConsistency.ValueType = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["concurrency", b"concurrency", "consistency", b"consistency"]) -> None: ... + def ClearField(self, field_name: typing.Literal["concurrency", b"concurrency", "consistency", b"consistency"]) -> None: ... global___StateOptions = StateOptions -@typing_extensions.final +@typing.final class ConfigurationItem(google.protobuf.message.Message): """ConfigurationItem represents all the configuration with its name(key).""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing_extensions.final + @typing.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -343,7 +350,7 @@ class ConfigurationItem(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... VALUE_FIELD_NUMBER: builtins.int VERSION_FIELD_NUMBER: builtins.int @@ -355,6 +362,7 @@ class ConfigurationItem(google.protobuf.message.Message): @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """the metadata which will be passed to/from configuration store component.""" + def __init__( self, *, @@ -362,6 +370,6 @@ class ConfigurationItem(google.protobuf.message.Message): version: builtins.str = ..., metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["metadata", b"metadata", "value", b"value", "version", b"version"]) -> None: ... + def ClearField(self, field_name: typing.Literal["metadata", b"metadata", "value", b"value", "version", b"version"]) -> None: ... global___ConfigurationItem = ConfigurationItem diff --git a/dapr/proto/runtime/v1/appcallback_pb2.pyi b/dapr/proto/runtime/v1/appcallback_pb2.pyi index b302559f..6c12dc57 100644 --- a/dapr/proto/runtime/v1/appcallback_pb2.pyi +++ b/dapr/proto/runtime/v1/appcallback_pb2.pyi @@ -13,6 +13,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. """ + import builtins import collections.abc import dapr.proto.common.v1.common_pb2 @@ -32,7 +33,7 @@ else: DESCRIPTOR: google.protobuf.descriptor.FileDescriptor -@typing_extensions.final +@typing.final class JobEventRequest(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -43,9 +44,6 @@ class JobEventRequest(google.protobuf.message.Message): HTTP_EXTENSION_FIELD_NUMBER: builtins.int name: builtins.str """Job name.""" - @property - def data(self) -> google.protobuf.any_pb2.Any: - """Job data to be sent back to app.""" method: builtins.str """Required. method is a method name which will be invoked by caller.""" content_type: builtins.str @@ -54,6 +52,10 @@ class JobEventRequest(google.protobuf.message.Message): This field is required if data delivers http request body Otherwise, this is optional. """ + @property + def data(self) -> google.protobuf.any_pb2.Any: + """Job data to be sent back to app.""" + @property def http_extension(self) -> dapr.proto.common.v1.common_pb2.HTTPExtension: """HTTP specific fields if request conveys http-compatible request. @@ -61,6 +63,7 @@ class JobEventRequest(google.protobuf.message.Message): This field is required for http-compatible request. Otherwise, this field is optional. """ + def __init__( self, *, @@ -70,12 +73,12 @@ class JobEventRequest(google.protobuf.message.Message): content_type: builtins.str = ..., http_extension: dapr.proto.common.v1.common_pb2.HTTPExtension | None = ..., ) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["data", b"data", "http_extension", b"http_extension"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["content_type", b"content_type", "data", b"data", "http_extension", b"http_extension", "method", b"method", "name", b"name"]) -> None: ... + def HasField(self, field_name: typing.Literal["data", b"data", "http_extension", b"http_extension"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["content_type", b"content_type", "data", b"data", "http_extension", b"http_extension", "method", b"method", "name", b"name"]) -> None: ... global___JobEventRequest = JobEventRequest -@typing_extensions.final +@typing.final class JobEventResponse(google.protobuf.message.Message): """JobEventResponse is the response from the app when a job is triggered.""" @@ -87,7 +90,7 @@ class JobEventResponse(google.protobuf.message.Message): global___JobEventResponse = JobEventResponse -@typing_extensions.final +@typing.final class TopicEventRequest(google.protobuf.message.Message): """TopicEventRequest message is compatible with CloudEvent spec v1.0 https://github.com/cloudevents/spec/blob/v1.0/spec.md @@ -136,6 +139,7 @@ class TopicEventRequest(google.protobuf.message.Message): @property def extensions(self) -> google.protobuf.struct_pb2.Struct: """The map of additional custom properties to be sent to the app. These are considered to be cloud event extensions.""" + def __init__( self, *, @@ -150,12 +154,12 @@ class TopicEventRequest(google.protobuf.message.Message): path: builtins.str = ..., extensions: google.protobuf.struct_pb2.Struct | None = ..., ) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["extensions", b"extensions"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["data", b"data", "data_content_type", b"data_content_type", "extensions", b"extensions", "id", b"id", "path", b"path", "pubsub_name", b"pubsub_name", "source", b"source", "spec_version", b"spec_version", "topic", b"topic", "type", b"type"]) -> None: ... + def HasField(self, field_name: typing.Literal["extensions", b"extensions"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["data", b"data", "data_content_type", b"data_content_type", "extensions", b"extensions", "id", b"id", "path", b"path", "pubsub_name", b"pubsub_name", "source", b"source", "spec_version", b"spec_version", "topic", b"topic", "type", b"type"]) -> None: ... global___TopicEventRequest = TopicEventRequest -@typing_extensions.final +@typing.final class TopicEventResponse(google.protobuf.message.Message): """TopicEventResponse is response from app on published message""" @@ -192,11 +196,11 @@ class TopicEventResponse(google.protobuf.message.Message): *, status: global___TopicEventResponse.TopicEventResponseStatus.ValueType = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["status", b"status"]) -> None: ... + def ClearField(self, field_name: typing.Literal["status", b"status"]) -> None: ... global___TopicEventResponse = TopicEventResponse -@typing_extensions.final +@typing.final class TopicEventCERequest(google.protobuf.message.Message): """TopicEventCERequest message is compatible with CloudEvent spec v1.0""" @@ -224,6 +228,7 @@ class TopicEventCERequest(google.protobuf.message.Message): @property def extensions(self) -> google.protobuf.struct_pb2.Struct: """Custom attributes which includes cloud event extensions.""" + def __init__( self, *, @@ -235,18 +240,18 @@ class TopicEventCERequest(google.protobuf.message.Message): data: builtins.bytes = ..., extensions: google.protobuf.struct_pb2.Struct | None = ..., ) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["extensions", b"extensions"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["data", b"data", "data_content_type", b"data_content_type", "extensions", b"extensions", "id", b"id", "source", b"source", "spec_version", b"spec_version", "type", b"type"]) -> None: ... + def HasField(self, field_name: typing.Literal["extensions", b"extensions"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["data", b"data", "data_content_type", b"data_content_type", "extensions", b"extensions", "id", b"id", "source", b"source", "spec_version", b"spec_version", "type", b"type"]) -> None: ... global___TopicEventCERequest = TopicEventCERequest -@typing_extensions.final +@typing.final class TopicEventBulkRequestEntry(google.protobuf.message.Message): """TopicEventBulkRequestEntry represents a single message inside a bulk request""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing_extensions.final + @typing.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -260,7 +265,7 @@ class TopicEventBulkRequestEntry(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... ENTRY_ID_FIELD_NUMBER: builtins.int BYTES_FIELD_NUMBER: builtins.int @@ -270,13 +275,14 @@ class TopicEventBulkRequestEntry(google.protobuf.message.Message): entry_id: builtins.str """Unique identifier for the message.""" bytes: builtins.bytes - @property - def cloud_event(self) -> global___TopicEventCERequest: ... content_type: builtins.str """content type of the event contained.""" @property + def cloud_event(self) -> global___TopicEventCERequest: ... + @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """The metadata associated with the event.""" + def __init__( self, *, @@ -286,19 +292,19 @@ class TopicEventBulkRequestEntry(google.protobuf.message.Message): content_type: builtins.str = ..., metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["bytes", b"bytes", "cloud_event", b"cloud_event", "event", b"event"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["bytes", b"bytes", "cloud_event", b"cloud_event", "content_type", b"content_type", "entry_id", b"entry_id", "event", b"event", "metadata", b"metadata"]) -> None: ... - def WhichOneof(self, oneof_group: typing_extensions.Literal["event", b"event"]) -> typing_extensions.Literal["bytes", "cloud_event"] | None: ... + def HasField(self, field_name: typing.Literal["bytes", b"bytes", "cloud_event", b"cloud_event", "event", b"event"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["bytes", b"bytes", "cloud_event", b"cloud_event", "content_type", b"content_type", "entry_id", b"entry_id", "event", b"event", "metadata", b"metadata"]) -> None: ... + def WhichOneof(self, oneof_group: typing.Literal["event", b"event"]) -> typing.Literal["bytes", "cloud_event"] | None: ... global___TopicEventBulkRequestEntry = TopicEventBulkRequestEntry -@typing_extensions.final +@typing.final class TopicEventBulkRequest(google.protobuf.message.Message): """TopicEventBulkRequest represents request for bulk message""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing_extensions.final + @typing.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -312,7 +318,7 @@ class TopicEventBulkRequest(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... ID_FIELD_NUMBER: builtins.int ENTRIES_FIELD_NUMBER: builtins.int @@ -323,12 +329,6 @@ class TopicEventBulkRequest(google.protobuf.message.Message): PATH_FIELD_NUMBER: builtins.int id: builtins.str """Unique identifier for the bulk request.""" - @property - def entries(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___TopicEventBulkRequestEntry]: - """The list of items inside this bulk request.""" - @property - def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: - """The metadata associated with the this bulk request.""" topic: builtins.str """The pubsub topic which publisher sent to.""" pubsub_name: builtins.str @@ -339,6 +339,14 @@ class TopicEventBulkRequest(google.protobuf.message.Message): """The matching path from TopicSubscription/routes (if specified) for this event. This value is used by OnTopicEvent to "switch" inside the handler. """ + @property + def entries(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___TopicEventBulkRequestEntry]: + """The list of items inside this bulk request.""" + + @property + def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: + """The metadata associated with the this bulk request.""" + def __init__( self, *, @@ -350,11 +358,11 @@ class TopicEventBulkRequest(google.protobuf.message.Message): type: builtins.str = ..., path: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["entries", b"entries", "id", b"id", "metadata", b"metadata", "path", b"path", "pubsub_name", b"pubsub_name", "topic", b"topic", "type", b"type"]) -> None: ... + def ClearField(self, field_name: typing.Literal["entries", b"entries", "id", b"id", "metadata", b"metadata", "path", b"path", "pubsub_name", b"pubsub_name", "topic", b"topic", "type", b"type"]) -> None: ... global___TopicEventBulkRequest = TopicEventBulkRequest -@typing_extensions.final +@typing.final class TopicEventBulkResponseEntry(google.protobuf.message.Message): """TopicEventBulkResponseEntry Represents single response, as part of TopicEventBulkResponse, to be sent by subscibed App for the corresponding single message during bulk subscribe @@ -374,11 +382,11 @@ class TopicEventBulkResponseEntry(google.protobuf.message.Message): entry_id: builtins.str = ..., status: global___TopicEventResponse.TopicEventResponseStatus.ValueType = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["entry_id", b"entry_id", "status", b"status"]) -> None: ... + def ClearField(self, field_name: typing.Literal["entry_id", b"entry_id", "status", b"status"]) -> None: ... global___TopicEventBulkResponseEntry = TopicEventBulkResponseEntry -@typing_extensions.final +@typing.final class TopicEventBulkResponse(google.protobuf.message.Message): """AppBulkResponse is response from app on published message""" @@ -388,22 +396,23 @@ class TopicEventBulkResponse(google.protobuf.message.Message): @property def statuses(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___TopicEventBulkResponseEntry]: """The list of all responses for the bulk request.""" + def __init__( self, *, statuses: collections.abc.Iterable[global___TopicEventBulkResponseEntry] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["statuses", b"statuses"]) -> None: ... + def ClearField(self, field_name: typing.Literal["statuses", b"statuses"]) -> None: ... global___TopicEventBulkResponse = TopicEventBulkResponse -@typing_extensions.final +@typing.final class BindingEventRequest(google.protobuf.message.Message): """BindingEventRequest represents input bindings event.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing_extensions.final + @typing.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -417,7 +426,7 @@ class BindingEventRequest(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... NAME_FIELD_NUMBER: builtins.int DATA_FIELD_NUMBER: builtins.int @@ -429,6 +438,7 @@ class BindingEventRequest(google.protobuf.message.Message): @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """The metadata set by the input binging components.""" + def __init__( self, *, @@ -436,11 +446,11 @@ class BindingEventRequest(google.protobuf.message.Message): data: builtins.bytes = ..., metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["data", b"data", "metadata", b"metadata", "name", b"name"]) -> None: ... + def ClearField(self, field_name: typing.Literal["data", b"data", "metadata", b"metadata", "name", b"name"]) -> None: ... global___BindingEventRequest = BindingEventRequest -@typing_extensions.final +@typing.final class BindingEventResponse(google.protobuf.message.Message): """BindingEventResponse includes operations to save state or send data to output bindings optionally. @@ -474,18 +484,20 @@ class BindingEventResponse(google.protobuf.message.Message): CONCURRENCY_FIELD_NUMBER: builtins.int store_name: builtins.str """The name of state store where states are saved.""" - @property - def states(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[dapr.proto.common.v1.common_pb2.StateItem]: - """The state key values which will be stored in store_name.""" - @property - def to(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]: - """The list of output bindings.""" data: builtins.bytes """The content which will be sent to "to" output bindings.""" concurrency: global___BindingEventResponse.BindingEventConcurrency.ValueType """The concurrency of output bindings to send data to "to" output bindings list. The default is SEQUENTIAL. """ + @property + def states(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[dapr.proto.common.v1.common_pb2.StateItem]: + """The state key values which will be stored in store_name.""" + + @property + def to(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]: + """The list of output bindings.""" + def __init__( self, *, @@ -495,11 +507,11 @@ class BindingEventResponse(google.protobuf.message.Message): data: builtins.bytes = ..., concurrency: global___BindingEventResponse.BindingEventConcurrency.ValueType = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["concurrency", b"concurrency", "data", b"data", "states", b"states", "store_name", b"store_name", "to", b"to"]) -> None: ... + def ClearField(self, field_name: typing.Literal["concurrency", b"concurrency", "data", b"data", "states", b"states", "store_name", b"store_name", "to", b"to"]) -> None: ... global___BindingEventResponse = BindingEventResponse -@typing_extensions.final +@typing.final class ListTopicSubscriptionsResponse(google.protobuf.message.Message): """ListTopicSubscriptionsResponse is the message including the list of the subscribing topics.""" @@ -509,22 +521,23 @@ class ListTopicSubscriptionsResponse(google.protobuf.message.Message): @property def subscriptions(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___TopicSubscription]: """The list of topics.""" + def __init__( self, *, subscriptions: collections.abc.Iterable[global___TopicSubscription] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["subscriptions", b"subscriptions"]) -> None: ... + def ClearField(self, field_name: typing.Literal["subscriptions", b"subscriptions"]) -> None: ... global___ListTopicSubscriptionsResponse = ListTopicSubscriptionsResponse -@typing_extensions.final +@typing.final class TopicSubscription(google.protobuf.message.Message): """TopicSubscription represents topic and metadata.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing_extensions.final + @typing.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -538,7 +551,7 @@ class TopicSubscription(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... PUBSUB_NAME_FIELD_NUMBER: builtins.int TOPIC_FIELD_NUMBER: builtins.int @@ -550,19 +563,22 @@ class TopicSubscription(google.protobuf.message.Message): """Required. The name of the pubsub containing the topic below to subscribe to.""" topic: builtins.str """Required. The name of topic which will be subscribed""" + dead_letter_topic: builtins.str + """The optional dead letter queue for this topic to send events to.""" @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """The optional properties used for this topic's subscription e.g. session id""" + @property def routes(self) -> global___TopicRoutes: """The optional routing rules to match against. In the gRPC interface, OnTopicEvent is still invoked but the matching path is sent in the TopicEventRequest. """ - dead_letter_topic: builtins.str - """The optional dead letter queue for this topic to send events to.""" + @property def bulk_subscribe(self) -> global___BulkSubscribeConfig: """The optional bulk subscribe settings for this topic.""" + def __init__( self, *, @@ -573,33 +589,34 @@ class TopicSubscription(google.protobuf.message.Message): dead_letter_topic: builtins.str = ..., bulk_subscribe: global___BulkSubscribeConfig | None = ..., ) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["bulk_subscribe", b"bulk_subscribe", "routes", b"routes"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["bulk_subscribe", b"bulk_subscribe", "dead_letter_topic", b"dead_letter_topic", "metadata", b"metadata", "pubsub_name", b"pubsub_name", "routes", b"routes", "topic", b"topic"]) -> None: ... + def HasField(self, field_name: typing.Literal["bulk_subscribe", b"bulk_subscribe", "routes", b"routes"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["bulk_subscribe", b"bulk_subscribe", "dead_letter_topic", b"dead_letter_topic", "metadata", b"metadata", "pubsub_name", b"pubsub_name", "routes", b"routes", "topic", b"topic"]) -> None: ... global___TopicSubscription = TopicSubscription -@typing_extensions.final +@typing.final class TopicRoutes(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor RULES_FIELD_NUMBER: builtins.int DEFAULT_FIELD_NUMBER: builtins.int + default: builtins.str + """The default path for this topic.""" @property def rules(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___TopicRule]: """The list of rules for this topic.""" - default: builtins.str - """The default path for this topic.""" + def __init__( self, *, rules: collections.abc.Iterable[global___TopicRule] | None = ..., default: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["default", b"default", "rules", b"rules"]) -> None: ... + def ClearField(self, field_name: typing.Literal["default", b"default", "rules", b"rules"]) -> None: ... global___TopicRoutes = TopicRoutes -@typing_extensions.final +@typing.final class TopicRule(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -621,11 +638,11 @@ class TopicRule(google.protobuf.message.Message): match: builtins.str = ..., path: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["match", b"match", "path", b"path"]) -> None: ... + def ClearField(self, field_name: typing.Literal["match", b"match", "path", b"path"]) -> None: ... global___TopicRule = TopicRule -@typing_extensions.final +@typing.final class BulkSubscribeConfig(google.protobuf.message.Message): """BulkSubscribeConfig is the message to pass settings for bulk subscribe""" @@ -647,11 +664,11 @@ class BulkSubscribeConfig(google.protobuf.message.Message): max_messages_count: builtins.int = ..., max_await_duration_ms: builtins.int = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["enabled", b"enabled", "max_await_duration_ms", b"max_await_duration_ms", "max_messages_count", b"max_messages_count"]) -> None: ... + def ClearField(self, field_name: typing.Literal["enabled", b"enabled", "max_await_duration_ms", b"max_await_duration_ms", "max_messages_count", b"max_messages_count"]) -> None: ... global___BulkSubscribeConfig = BulkSubscribeConfig -@typing_extensions.final +@typing.final class ListInputBindingsResponse(google.protobuf.message.Message): """ListInputBindingsResponse is the message including the list of input bindings.""" @@ -661,16 +678,17 @@ class ListInputBindingsResponse(google.protobuf.message.Message): @property def bindings(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]: """The list of input bindings.""" + def __init__( self, *, bindings: collections.abc.Iterable[builtins.str] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["bindings", b"bindings"]) -> None: ... + def ClearField(self, field_name: typing.Literal["bindings", b"bindings"]) -> None: ... global___ListInputBindingsResponse = ListInputBindingsResponse -@typing_extensions.final +@typing.final class HealthCheckResponse(google.protobuf.message.Message): """HealthCheckResponse is the message with the response to the health check. This message is currently empty as used as placeholder. diff --git a/dapr/proto/runtime/v1/dapr_pb2.py b/dapr/proto/runtime/v1/dapr_pb2.py index 7c1520de..53b664fd 100644 --- a/dapr/proto/runtime/v1/dapr_pb2.py +++ b/dapr/proto/runtime/v1/dapr_pb2.py @@ -19,7 +19,7 @@ from dapr.proto.runtime.v1 import appcallback_pb2 as dapr_dot_proto_dot_runtime_dot_v1_dot_appcallback__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n dapr/proto/runtime/v1/dapr.proto\x12\x15\x64\x61pr.proto.runtime.v1\x1a\x19google/protobuf/any.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a!dapr/proto/common/v1/common.proto\x1a\'dapr/proto/runtime/v1/appcallback.proto\"X\n\x14InvokeServiceRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x34\n\x07message\x18\x03 \x01(\x0b\x32#.dapr.proto.common.v1.InvokeRequest\"\xf5\x01\n\x0fGetStateRequest\x12\x12\n\nstore_name\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\t\x12H\n\x0b\x63onsistency\x18\x03 \x01(\x0e\x32\x33.dapr.proto.common.v1.StateOptions.StateConsistency\x12\x46\n\x08metadata\x18\x04 \x03(\x0b\x32\x34.dapr.proto.runtime.v1.GetStateRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xc9\x01\n\x13GetBulkStateRequest\x12\x12\n\nstore_name\x18\x01 \x01(\t\x12\x0c\n\x04keys\x18\x02 \x03(\t\x12\x13\n\x0bparallelism\x18\x03 \x01(\x05\x12J\n\x08metadata\x18\x04 \x03(\x0b\x32\x38.dapr.proto.runtime.v1.GetBulkStateRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"K\n\x14GetBulkStateResponse\x12\x33\n\x05items\x18\x01 \x03(\x0b\x32$.dapr.proto.runtime.v1.BulkStateItem\"\xbe\x01\n\rBulkStateItem\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\x12\x0c\n\x04\x65tag\x18\x03 \x01(\t\x12\r\n\x05\x65rror\x18\x04 \x01(\t\x12\x44\n\x08metadata\x18\x05 \x03(\x0b\x32\x32.dapr.proto.runtime.v1.BulkStateItem.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xa8\x01\n\x10GetStateResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\x12\x0c\n\x04\x65tag\x18\x02 \x01(\t\x12G\n\x08metadata\x18\x03 \x03(\x0b\x32\x35.dapr.proto.runtime.v1.GetStateResponse.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x90\x02\n\x12\x44\x65leteStateRequest\x12\x12\n\nstore_name\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\t\x12(\n\x04\x65tag\x18\x03 \x01(\x0b\x32\x1a.dapr.proto.common.v1.Etag\x12\x33\n\x07options\x18\x04 \x01(\x0b\x32\".dapr.proto.common.v1.StateOptions\x12I\n\x08metadata\x18\x05 \x03(\x0b\x32\x37.dapr.proto.runtime.v1.DeleteStateRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"]\n\x16\x44\x65leteBulkStateRequest\x12\x12\n\nstore_name\x18\x01 \x01(\t\x12/\n\x06states\x18\x02 \x03(\x0b\x32\x1f.dapr.proto.common.v1.StateItem\"W\n\x10SaveStateRequest\x12\x12\n\nstore_name\x18\x01 \x01(\t\x12/\n\x06states\x18\x02 \x03(\x0b\x32\x1f.dapr.proto.common.v1.StateItem\"\xbc\x01\n\x11QueryStateRequest\x12\x1d\n\nstore_name\x18\x01 \x01(\tR\tstoreName\x12\r\n\x05query\x18\x02 \x01(\t\x12H\n\x08metadata\x18\x03 \x03(\x0b\x32\x36.dapr.proto.runtime.v1.QueryStateRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"H\n\x0eQueryStateItem\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\x12\x0c\n\x04\x65tag\x18\x03 \x01(\t\x12\r\n\x05\x65rror\x18\x04 \x01(\t\"\xd7\x01\n\x12QueryStateResponse\x12\x36\n\x07results\x18\x01 \x03(\x0b\x32%.dapr.proto.runtime.v1.QueryStateItem\x12\r\n\x05token\x18\x02 \x01(\t\x12I\n\x08metadata\x18\x03 \x03(\x0b\x32\x37.dapr.proto.runtime.v1.QueryStateResponse.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xdf\x01\n\x13PublishEventRequest\x12\x13\n\x0bpubsub_name\x18\x01 \x01(\t\x12\r\n\x05topic\x18\x02 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\x0c\x12\x19\n\x11\x64\x61ta_content_type\x18\x04 \x01(\t\x12J\n\x08metadata\x18\x05 \x03(\x0b\x32\x38.dapr.proto.runtime.v1.PublishEventRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xf5\x01\n\x12\x42ulkPublishRequest\x12\x13\n\x0bpubsub_name\x18\x01 \x01(\t\x12\r\n\x05topic\x18\x02 \x01(\t\x12?\n\x07\x65ntries\x18\x03 \x03(\x0b\x32..dapr.proto.runtime.v1.BulkPublishRequestEntry\x12I\n\x08metadata\x18\x04 \x03(\x0b\x32\x37.dapr.proto.runtime.v1.BulkPublishRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xd1\x01\n\x17\x42ulkPublishRequestEntry\x12\x10\n\x08\x65ntry_id\x18\x01 \x01(\t\x12\r\n\x05\x65vent\x18\x02 \x01(\x0c\x12\x14\n\x0c\x63ontent_type\x18\x03 \x01(\t\x12N\n\x08metadata\x18\x04 \x03(\x0b\x32<.dapr.proto.runtime.v1.BulkPublishRequestEntry.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"c\n\x13\x42ulkPublishResponse\x12L\n\rfailedEntries\x18\x01 \x03(\x0b\x32\x35.dapr.proto.runtime.v1.BulkPublishResponseFailedEntry\"A\n\x1e\x42ulkPublishResponseFailedEntry\x12\x10\n\x08\x65ntry_id\x18\x01 \x01(\t\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"\x84\x02\n!SubscribeTopicEventsRequestAlpha1\x12Z\n\x0finitial_request\x18\x01 \x01(\x0b\x32?.dapr.proto.runtime.v1.SubscribeTopicEventsRequestInitialAlpha1H\x00\x12\\\n\x0f\x65vent_processed\x18\x02 \x01(\x0b\x32\x41.dapr.proto.runtime.v1.SubscribeTopicEventsRequestProcessedAlpha1H\x00\x42%\n#subscribe_topic_events_request_type\"\x96\x02\n(SubscribeTopicEventsRequestInitialAlpha1\x12\x13\n\x0bpubsub_name\x18\x01 \x01(\t\x12\r\n\x05topic\x18\x02 \x01(\t\x12_\n\x08metadata\x18\x03 \x03(\x0b\x32M.dapr.proto.runtime.v1.SubscribeTopicEventsRequestInitialAlpha1.MetadataEntry\x12\x1e\n\x11\x64\x65\x61\x64_letter_topic\x18\x04 \x01(\tH\x00\x88\x01\x01\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x14\n\x12_dead_letter_topic\"s\n*SubscribeTopicEventsRequestProcessedAlpha1\x12\n\n\x02id\x18\x01 \x01(\t\x12\x39\n\x06status\x18\x02 \x01(\x0b\x32).dapr.proto.runtime.v1.TopicEventResponse\"\xed\x01\n\"SubscribeTopicEventsResponseAlpha1\x12\\\n\x10initial_response\x18\x01 \x01(\x0b\x32@.dapr.proto.runtime.v1.SubscribeTopicEventsResponseInitialAlpha1H\x00\x12\x41\n\revent_message\x18\x02 \x01(\x0b\x32(.dapr.proto.runtime.v1.TopicEventRequestH\x00\x42&\n$subscribe_topic_events_response_type\"+\n)SubscribeTopicEventsResponseInitialAlpha1\"\xc3\x01\n\x14InvokeBindingRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\x12K\n\x08metadata\x18\x03 \x03(\x0b\x32\x39.dapr.proto.runtime.v1.InvokeBindingRequest.MetadataEntry\x12\x11\n\toperation\x18\x04 \x01(\t\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xa4\x01\n\x15InvokeBindingResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\x12L\n\x08metadata\x18\x02 \x03(\x0b\x32:.dapr.proto.runtime.v1.InvokeBindingResponse.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xb8\x01\n\x10GetSecretRequest\x12\x1d\n\nstore_name\x18\x01 \x01(\tR\tstoreName\x12\x0b\n\x03key\x18\x02 \x01(\t\x12G\n\x08metadata\x18\x03 \x03(\x0b\x32\x35.dapr.proto.runtime.v1.GetSecretRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x82\x01\n\x11GetSecretResponse\x12@\n\x04\x64\x61ta\x18\x01 \x03(\x0b\x32\x32.dapr.proto.runtime.v1.GetSecretResponse.DataEntry\x1a+\n\tDataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xb3\x01\n\x14GetBulkSecretRequest\x12\x1d\n\nstore_name\x18\x01 \x01(\tR\tstoreName\x12K\n\x08metadata\x18\x02 \x03(\x0b\x32\x39.dapr.proto.runtime.v1.GetBulkSecretRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x85\x01\n\x0eSecretResponse\x12\x43\n\x07secrets\x18\x01 \x03(\x0b\x32\x32.dapr.proto.runtime.v1.SecretResponse.SecretsEntry\x1a.\n\x0cSecretsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xb1\x01\n\x15GetBulkSecretResponse\x12\x44\n\x04\x64\x61ta\x18\x01 \x03(\x0b\x32\x36.dapr.proto.runtime.v1.GetBulkSecretResponse.DataEntry\x1aR\n\tDataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x34\n\x05value\x18\x02 \x01(\x0b\x32%.dapr.proto.runtime.v1.SecretResponse:\x02\x38\x01\"f\n\x1bTransactionalStateOperation\x12\x15\n\roperationType\x18\x01 \x01(\t\x12\x30\n\x07request\x18\x02 \x01(\x0b\x32\x1f.dapr.proto.common.v1.StateItem\"\x83\x02\n\x1e\x45xecuteStateTransactionRequest\x12\x11\n\tstoreName\x18\x01 \x01(\t\x12\x46\n\noperations\x18\x02 \x03(\x0b\x32\x32.dapr.proto.runtime.v1.TransactionalStateOperation\x12U\n\x08metadata\x18\x03 \x03(\x0b\x32\x43.dapr.proto.runtime.v1.ExecuteStateTransactionRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xbb\x01\n\x19RegisterActorTimerRequest\x12\x1d\n\nactor_type\x18\x01 \x01(\tR\tactorType\x12\x19\n\x08\x61\x63tor_id\x18\x02 \x01(\tR\x07\x61\x63torId\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x19\n\x08\x64ue_time\x18\x04 \x01(\tR\x07\x64ueTime\x12\x0e\n\x06period\x18\x05 \x01(\t\x12\x10\n\x08\x63\x61llback\x18\x06 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x07 \x01(\x0c\x12\x0b\n\x03ttl\x18\x08 \x01(\t\"e\n\x1bUnregisterActorTimerRequest\x12\x1d\n\nactor_type\x18\x01 \x01(\tR\tactorType\x12\x19\n\x08\x61\x63tor_id\x18\x02 \x01(\tR\x07\x61\x63torId\x12\x0c\n\x04name\x18\x03 \x01(\t\"\xac\x01\n\x1cRegisterActorReminderRequest\x12\x1d\n\nactor_type\x18\x01 \x01(\tR\tactorType\x12\x19\n\x08\x61\x63tor_id\x18\x02 \x01(\tR\x07\x61\x63torId\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x19\n\x08\x64ue_time\x18\x04 \x01(\tR\x07\x64ueTime\x12\x0e\n\x06period\x18\x05 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x06 \x01(\x0c\x12\x0b\n\x03ttl\x18\x07 \x01(\t\"h\n\x1eUnregisterActorReminderRequest\x12\x1d\n\nactor_type\x18\x01 \x01(\tR\tactorType\x12\x19\n\x08\x61\x63tor_id\x18\x02 \x01(\tR\x07\x61\x63torId\x12\x0c\n\x04name\x18\x03 \x01(\t\"]\n\x14GetActorStateRequest\x12\x1d\n\nactor_type\x18\x01 \x01(\tR\tactorType\x12\x19\n\x08\x61\x63tor_id\x18\x02 \x01(\tR\x07\x61\x63torId\x12\x0b\n\x03key\x18\x03 \x01(\t\"\xa4\x01\n\x15GetActorStateResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\x12L\n\x08metadata\x18\x02 \x03(\x0b\x32:.dapr.proto.runtime.v1.GetActorStateResponse.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xac\x01\n#ExecuteActorStateTransactionRequest\x12\x1d\n\nactor_type\x18\x01 \x01(\tR\tactorType\x12\x19\n\x08\x61\x63tor_id\x18\x02 \x01(\tR\x07\x61\x63torId\x12K\n\noperations\x18\x03 \x03(\x0b\x32\x37.dapr.proto.runtime.v1.TransactionalActorStateOperation\"\xf5\x01\n TransactionalActorStateOperation\x12\x15\n\roperationType\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\t\x12#\n\x05value\x18\x03 \x01(\x0b\x32\x14.google.protobuf.Any\x12W\n\x08metadata\x18\x04 \x03(\x0b\x32\x45.dapr.proto.runtime.v1.TransactionalActorStateOperation.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xe8\x01\n\x12InvokeActorRequest\x12\x1d\n\nactor_type\x18\x01 \x01(\tR\tactorType\x12\x19\n\x08\x61\x63tor_id\x18\x02 \x01(\tR\x07\x61\x63torId\x12\x0e\n\x06method\x18\x03 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\x0c\x12I\n\x08metadata\x18\x05 \x03(\x0b\x32\x37.dapr.proto.runtime.v1.InvokeActorRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"#\n\x13InvokeActorResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\"\x14\n\x12GetMetadataRequest\"\x9b\x06\n\x13GetMetadataResponse\x12\n\n\x02id\x18\x01 \x01(\t\x12Q\n\x13\x61\x63tive_actors_count\x18\x02 \x03(\x0b\x32(.dapr.proto.runtime.v1.ActiveActorsCountB\x02\x18\x01R\x06\x61\x63tors\x12V\n\x15registered_components\x18\x03 \x03(\x0b\x32+.dapr.proto.runtime.v1.RegisteredComponentsR\ncomponents\x12\x65\n\x11\x65xtended_metadata\x18\x04 \x03(\x0b\x32@.dapr.proto.runtime.v1.GetMetadataResponse.ExtendedMetadataEntryR\x08\x65xtended\x12O\n\rsubscriptions\x18\x05 \x03(\x0b\x32).dapr.proto.runtime.v1.PubsubSubscriptionR\rsubscriptions\x12R\n\x0ehttp_endpoints\x18\x06 \x03(\x0b\x32+.dapr.proto.runtime.v1.MetadataHTTPEndpointR\rhttpEndpoints\x12j\n\x19\x61pp_connection_properties\x18\x07 \x01(\x0b\x32..dapr.proto.runtime.v1.AppConnectionPropertiesR\x17\x61ppConnectionProperties\x12\'\n\x0fruntime_version\x18\x08 \x01(\tR\x0eruntimeVersion\x12)\n\x10\x65nabled_features\x18\t \x03(\tR\x0f\x65nabledFeatures\x12H\n\ractor_runtime\x18\n \x01(\x0b\x32#.dapr.proto.runtime.v1.ActorRuntimeR\x0c\x61\x63torRuntime\x1a\x37\n\x15\x45xtendedMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xbc\x02\n\x0c\x41\x63torRuntime\x12]\n\x0eruntime_status\x18\x01 \x01(\x0e\x32\x36.dapr.proto.runtime.v1.ActorRuntime.ActorRuntimeStatusR\rruntimeStatus\x12M\n\ractive_actors\x18\x02 \x03(\x0b\x32(.dapr.proto.runtime.v1.ActiveActorsCountR\x0c\x61\x63tiveActors\x12\x1d\n\nhost_ready\x18\x03 \x01(\x08R\thostReady\x12\x1c\n\tplacement\x18\x04 \x01(\tR\tplacement\"A\n\x12\x41\x63torRuntimeStatus\x12\x10\n\x0cINITIALIZING\x10\x00\x12\x0c\n\x08\x44ISABLED\x10\x01\x12\x0b\n\x07RUNNING\x10\x02\"0\n\x11\x41\x63tiveActorsCount\x12\x0c\n\x04type\x18\x01 \x01(\t\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"Y\n\x14RegisteredComponents\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04type\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\t\x12\x14\n\x0c\x63\x61pabilities\x18\x04 \x03(\t\"*\n\x14MetadataHTTPEndpoint\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\"\xd1\x01\n\x17\x41ppConnectionProperties\x12\x0c\n\x04port\x18\x01 \x01(\x05\x12\x10\n\x08protocol\x18\x02 \x01(\t\x12\'\n\x0f\x63hannel_address\x18\x03 \x01(\tR\x0e\x63hannelAddress\x12\'\n\x0fmax_concurrency\x18\x04 \x01(\x05R\x0emaxConcurrency\x12\x44\n\x06health\x18\x05 \x01(\x0b\x32\x34.dapr.proto.runtime.v1.AppConnectionHealthProperties\"\xdc\x01\n\x1d\x41ppConnectionHealthProperties\x12*\n\x11health_check_path\x18\x01 \x01(\tR\x0fhealthCheckPath\x12\x32\n\x15health_probe_interval\x18\x02 \x01(\tR\x13healthProbeInterval\x12\x30\n\x14health_probe_timeout\x18\x03 \x01(\tR\x12healthProbeTimeout\x12)\n\x10health_threshold\x18\x04 \x01(\x05R\x0fhealthThreshold\"\x86\x03\n\x12PubsubSubscription\x12\x1f\n\x0bpubsub_name\x18\x01 \x01(\tR\npubsubname\x12\x14\n\x05topic\x18\x02 \x01(\tR\x05topic\x12S\n\x08metadata\x18\x03 \x03(\x0b\x32\x37.dapr.proto.runtime.v1.PubsubSubscription.MetadataEntryR\x08metadata\x12\x44\n\x05rules\x18\x04 \x01(\x0b\x32..dapr.proto.runtime.v1.PubsubSubscriptionRulesR\x05rules\x12*\n\x11\x64\x65\x61\x64_letter_topic\x18\x05 \x01(\tR\x0f\x64\x65\x61\x64LetterTopic\x12\x41\n\x04type\x18\x06 \x01(\x0e\x32-.dapr.proto.runtime.v1.PubsubSubscriptionTypeR\x04type\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"W\n\x17PubsubSubscriptionRules\x12<\n\x05rules\x18\x01 \x03(\x0b\x32-.dapr.proto.runtime.v1.PubsubSubscriptionRule\"5\n\x16PubsubSubscriptionRule\x12\r\n\x05match\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\t\"0\n\x12SetMetadataRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"\xbc\x01\n\x17GetConfigurationRequest\x12\x12\n\nstore_name\x18\x01 \x01(\t\x12\x0c\n\x04keys\x18\x02 \x03(\t\x12N\n\x08metadata\x18\x03 \x03(\x0b\x32<.dapr.proto.runtime.v1.GetConfigurationRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xbc\x01\n\x18GetConfigurationResponse\x12I\n\x05items\x18\x01 \x03(\x0b\x32:.dapr.proto.runtime.v1.GetConfigurationResponse.ItemsEntry\x1aU\n\nItemsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x36\n\x05value\x18\x02 \x01(\x0b\x32\'.dapr.proto.common.v1.ConfigurationItem:\x02\x38\x01\"\xc8\x01\n\x1dSubscribeConfigurationRequest\x12\x12\n\nstore_name\x18\x01 \x01(\t\x12\x0c\n\x04keys\x18\x02 \x03(\t\x12T\n\x08metadata\x18\x03 \x03(\x0b\x32\x42.dapr.proto.runtime.v1.SubscribeConfigurationRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"A\n\x1fUnsubscribeConfigurationRequest\x12\x12\n\nstore_name\x18\x01 \x01(\t\x12\n\n\x02id\x18\x02 \x01(\t\"\xd4\x01\n\x1eSubscribeConfigurationResponse\x12\n\n\x02id\x18\x01 \x01(\t\x12O\n\x05items\x18\x02 \x03(\x0b\x32@.dapr.proto.runtime.v1.SubscribeConfigurationResponse.ItemsEntry\x1aU\n\nItemsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x36\n\x05value\x18\x02 \x01(\x0b\x32\'.dapr.proto.common.v1.ConfigurationItem:\x02\x38\x01\"?\n UnsubscribeConfigurationResponse\x12\n\n\x02ok\x18\x01 \x01(\x08\x12\x0f\n\x07message\x18\x02 \x01(\t\"\x9b\x01\n\x0eTryLockRequest\x12\x1d\n\nstore_name\x18\x01 \x01(\tR\tstoreName\x12\x1f\n\x0bresource_id\x18\x02 \x01(\tR\nresourceId\x12\x1d\n\nlock_owner\x18\x03 \x01(\tR\tlockOwner\x12*\n\x11\x65xpiry_in_seconds\x18\x04 \x01(\x05R\x0f\x65xpiryInSeconds\"\"\n\x0fTryLockResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\"n\n\rUnlockRequest\x12\x1d\n\nstore_name\x18\x01 \x01(\tR\tstoreName\x12\x1f\n\x0bresource_id\x18\x02 \x01(\tR\nresourceId\x12\x1d\n\nlock_owner\x18\x03 \x01(\tR\tlockOwner\"\xae\x01\n\x0eUnlockResponse\x12<\n\x06status\x18\x01 \x01(\x0e\x32,.dapr.proto.runtime.v1.UnlockResponse.Status\"^\n\x06Status\x12\x0b\n\x07SUCCESS\x10\x00\x12\x17\n\x13LOCK_DOES_NOT_EXIST\x10\x01\x12\x1a\n\x16LOCK_BELONGS_TO_OTHERS\x10\x02\x12\x12\n\x0eINTERNAL_ERROR\x10\x03\"\xb0\x01\n\x13SubtleGetKeyRequest\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x44\n\x06\x66ormat\x18\x03 \x01(\x0e\x32\x34.dapr.proto.runtime.v1.SubtleGetKeyRequest.KeyFormat\"\x1e\n\tKeyFormat\x12\x07\n\x03PEM\x10\x00\x12\x08\n\x04JSON\x10\x01\"C\n\x14SubtleGetKeyResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x1d\n\npublic_key\x18\x02 \x01(\tR\tpublicKey\"\xb6\x01\n\x14SubtleEncryptRequest\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12\x11\n\tplaintext\x18\x02 \x01(\x0c\x12\x11\n\talgorithm\x18\x03 \x01(\t\x12\x19\n\x08key_name\x18\x04 \x01(\tR\x07keyName\x12\r\n\x05nonce\x18\x05 \x01(\x0c\x12\'\n\x0f\x61ssociated_data\x18\x06 \x01(\x0cR\x0e\x61ssociatedData\"8\n\x15SubtleEncryptResponse\x12\x12\n\nciphertext\x18\x01 \x01(\x0c\x12\x0b\n\x03tag\x18\x02 \x01(\x0c\"\xc4\x01\n\x14SubtleDecryptRequest\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12\x12\n\nciphertext\x18\x02 \x01(\x0c\x12\x11\n\talgorithm\x18\x03 \x01(\t\x12\x19\n\x08key_name\x18\x04 \x01(\tR\x07keyName\x12\r\n\x05nonce\x18\x05 \x01(\x0c\x12\x0b\n\x03tag\x18\x06 \x01(\x0c\x12\'\n\x0f\x61ssociated_data\x18\x07 \x01(\x0cR\x0e\x61ssociatedData\"*\n\x15SubtleDecryptResponse\x12\x11\n\tplaintext\x18\x01 \x01(\x0c\"\xc8\x01\n\x14SubtleWrapKeyRequest\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12#\n\rplaintext_key\x18\x02 \x01(\x0cR\x0cplaintextKey\x12\x11\n\talgorithm\x18\x03 \x01(\t\x12\x19\n\x08key_name\x18\x04 \x01(\tR\x07keyName\x12\r\n\x05nonce\x18\x05 \x01(\x0c\x12\'\n\x0f\x61ssociated_data\x18\x06 \x01(\x0cR\x0e\x61ssociatedData\"E\n\x15SubtleWrapKeyResponse\x12\x1f\n\x0bwrapped_key\x18\x01 \x01(\x0cR\nwrappedKey\x12\x0b\n\x03tag\x18\x02 \x01(\x0c\"\xd3\x01\n\x16SubtleUnwrapKeyRequest\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12\x1f\n\x0bwrapped_key\x18\x02 \x01(\x0cR\nwrappedKey\x12\x11\n\talgorithm\x18\x03 \x01(\t\x12\x19\n\x08key_name\x18\x04 \x01(\tR\x07keyName\x12\r\n\x05nonce\x18\x05 \x01(\x0c\x12\x0b\n\x03tag\x18\x06 \x01(\x0c\x12\'\n\x0f\x61ssociated_data\x18\x07 \x01(\x0cR\x0e\x61ssociatedData\">\n\x17SubtleUnwrapKeyResponse\x12#\n\rplaintext_key\x18\x01 \x01(\x0cR\x0cplaintextKey\"x\n\x11SubtleSignRequest\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12\x0e\n\x06\x64igest\x18\x02 \x01(\x0c\x12\x11\n\talgorithm\x18\x03 \x01(\t\x12\x19\n\x08key_name\x18\x04 \x01(\tR\x07keyName\"\'\n\x12SubtleSignResponse\x12\x11\n\tsignature\x18\x01 \x01(\x0c\"\x8d\x01\n\x13SubtleVerifyRequest\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12\x0e\n\x06\x64igest\x18\x02 \x01(\x0c\x12\x11\n\talgorithm\x18\x03 \x01(\t\x12\x19\n\x08key_name\x18\x04 \x01(\tR\x07keyName\x12\x11\n\tsignature\x18\x05 \x01(\x0c\"%\n\x14SubtleVerifyResponse\x12\r\n\x05valid\x18\x01 \x01(\x08\"\x85\x01\n\x0e\x45ncryptRequest\x12=\n\x07options\x18\x01 \x01(\x0b\x32,.dapr.proto.runtime.v1.EncryptRequestOptions\x12\x34\n\x07payload\x18\x02 \x01(\x0b\x32#.dapr.proto.common.v1.StreamPayload\"\xfe\x01\n\x15\x45ncryptRequestOptions\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12\x19\n\x08key_name\x18\x02 \x01(\tR\x07keyName\x12\x1a\n\x12key_wrap_algorithm\x18\x03 \x01(\t\x12\x1e\n\x16\x64\x61ta_encryption_cipher\x18\n \x01(\t\x12\x37\n\x18omit_decryption_key_name\x18\x0b \x01(\x08R\x15omitDecryptionKeyName\x12.\n\x13\x64\x65\x63ryption_key_name\x18\x0c \x01(\tR\x11\x64\x65\x63ryptionKeyName\"G\n\x0f\x45ncryptResponse\x12\x34\n\x07payload\x18\x01 \x01(\x0b\x32#.dapr.proto.common.v1.StreamPayload\"\x85\x01\n\x0e\x44\x65\x63ryptRequest\x12=\n\x07options\x18\x01 \x01(\x0b\x32,.dapr.proto.runtime.v1.DecryptRequestOptions\x12\x34\n\x07payload\x18\x02 \x01(\x0b\x32#.dapr.proto.common.v1.StreamPayload\"Y\n\x15\x44\x65\x63ryptRequestOptions\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12\x19\n\x08key_name\x18\x0c \x01(\tR\x07keyName\"G\n\x0f\x44\x65\x63ryptResponse\x12\x34\n\x07payload\x18\x01 \x01(\x0b\x32#.dapr.proto.common.v1.StreamPayload\"d\n\x12GetWorkflowRequest\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\x12-\n\x12workflow_component\x18\x02 \x01(\tR\x11workflowComponent\"\x84\x03\n\x13GetWorkflowResponse\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\x12#\n\rworkflow_name\x18\x02 \x01(\tR\x0cworkflowName\x12\x39\n\ncreated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\x12\x42\n\x0flast_updated_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\rlastUpdatedAt\x12%\n\x0eruntime_status\x18\x05 \x01(\tR\rruntimeStatus\x12N\n\nproperties\x18\x06 \x03(\x0b\x32:.dapr.proto.runtime.v1.GetWorkflowResponse.PropertiesEntry\x1a\x31\n\x0fPropertiesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x95\x02\n\x14StartWorkflowRequest\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\x12-\n\x12workflow_component\x18\x02 \x01(\tR\x11workflowComponent\x12#\n\rworkflow_name\x18\x03 \x01(\tR\x0cworkflowName\x12I\n\x07options\x18\x04 \x03(\x0b\x32\x38.dapr.proto.runtime.v1.StartWorkflowRequest.OptionsEntry\x12\r\n\x05input\x18\x05 \x01(\x0c\x1a.\n\x0cOptionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"8\n\x15StartWorkflowResponse\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\"j\n\x18TerminateWorkflowRequest\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\x12-\n\x12workflow_component\x18\x02 \x01(\tR\x11workflowComponent\"f\n\x14PauseWorkflowRequest\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\x12-\n\x12workflow_component\x18\x02 \x01(\tR\x11workflowComponent\"g\n\x15ResumeWorkflowRequest\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\x12-\n\x12workflow_component\x18\x02 \x01(\tR\x11workflowComponent\"\x9e\x01\n\x19RaiseEventWorkflowRequest\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\x12-\n\x12workflow_component\x18\x02 \x01(\tR\x11workflowComponent\x12\x1d\n\nevent_name\x18\x03 \x01(\tR\teventName\x12\x12\n\nevent_data\x18\x04 \x01(\x0c\"f\n\x14PurgeWorkflowRequest\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\x12-\n\x12workflow_component\x18\x02 \x01(\tR\x11workflowComponent\"\x11\n\x0fShutdownRequest\"\xe8\x01\n\x03Job\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x1f\n\x08schedule\x18\x02 \x01(\tH\x00R\x08schedule\x88\x01\x01\x12\x1d\n\x07repeats\x18\x03 \x01(\rH\x01R\x07repeats\x88\x01\x01\x12\x1e\n\x08\x64ue_time\x18\x04 \x01(\tH\x02R\x07\x64ueTime\x88\x01\x01\x12\x15\n\x03ttl\x18\x05 \x01(\tH\x03R\x03ttl\x88\x01\x01\x12(\n\x04\x64\x61ta\x18\x06 \x01(\x0b\x32\x14.google.protobuf.AnyR\x04\x64\x61taB\x0b\n\t_scheduleB\n\n\x08_repeatsB\x0b\n\t_due_timeB\x06\n\x04_ttl\"=\n\x12ScheduleJobRequest\x12\'\n\x03job\x18\x01 \x01(\x0b\x32\x1a.dapr.proto.runtime.v1.Job\"\x15\n\x13ScheduleJobResponse\"\x1d\n\rGetJobRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"9\n\x0eGetJobResponse\x12\'\n\x03job\x18\x01 \x01(\x0b\x32\x1a.dapr.proto.runtime.v1.Job\" \n\x10\x44\x65leteJobRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"\x13\n\x11\x44\x65leteJobResponse\"\xe7\x03\n\x13\x43onversationRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x16\n\tcontextID\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x38\n\x06inputs\x18\x03 \x03(\x0b\x32(.dapr.proto.runtime.v1.ConversationInput\x12N\n\nparameters\x18\x04 \x03(\x0b\x32:.dapr.proto.runtime.v1.ConversationRequest.ParametersEntry\x12J\n\x08metadata\x18\x05 \x03(\x0b\x32\x38.dapr.proto.runtime.v1.ConversationRequest.MetadataEntry\x12\x15\n\x08scrubPII\x18\x06 \x01(\x08H\x01\x88\x01\x01\x12\x18\n\x0btemperature\x18\x07 \x01(\x01H\x02\x88\x01\x01\x1aG\n\x0fParametersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12#\n\x05value\x18\x02 \x01(\x0b\x32\x14.google.protobuf.Any:\x02\x38\x01\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x0c\n\n_contextIDB\x0b\n\t_scrubPIIB\x0e\n\x0c_temperature\"d\n\x11\x43onversationInput\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\x11\n\x04role\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x15\n\x08scrubPII\x18\x03 \x01(\x08H\x01\x88\x01\x01\x42\x07\n\x05_roleB\x0b\n\t_scrubPII\"\xbc\x01\n\x12\x43onversationResult\x12\x0e\n\x06result\x18\x01 \x01(\t\x12M\n\nparameters\x18\x02 \x03(\x0b\x32\x39.dapr.proto.runtime.v1.ConversationResult.ParametersEntry\x1aG\n\x0fParametersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12#\n\x05value\x18\x02 \x01(\x0b\x32\x14.google.protobuf.Any:\x02\x38\x01\"x\n\x14\x43onversationResponse\x12\x16\n\tcontextID\x18\x01 \x01(\tH\x00\x88\x01\x01\x12:\n\x07outputs\x18\x02 \x03(\x0b\x32).dapr.proto.runtime.v1.ConversationResultB\x0c\n\n_contextID*W\n\x16PubsubSubscriptionType\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x0f\n\x0b\x44\x45\x43LARATIVE\x10\x01\x12\x10\n\x0cPROGRAMMATIC\x10\x02\x12\r\n\tSTREAMING\x10\x03\x32\xbe\x31\n\x04\x44\x61pr\x12\x64\n\rInvokeService\x12+.dapr.proto.runtime.v1.InvokeServiceRequest\x1a$.dapr.proto.common.v1.InvokeResponse\"\x00\x12]\n\x08GetState\x12&.dapr.proto.runtime.v1.GetStateRequest\x1a\'.dapr.proto.runtime.v1.GetStateResponse\"\x00\x12i\n\x0cGetBulkState\x12*.dapr.proto.runtime.v1.GetBulkStateRequest\x1a+.dapr.proto.runtime.v1.GetBulkStateResponse\"\x00\x12N\n\tSaveState\x12\'.dapr.proto.runtime.v1.SaveStateRequest\x1a\x16.google.protobuf.Empty\"\x00\x12i\n\x10QueryStateAlpha1\x12(.dapr.proto.runtime.v1.QueryStateRequest\x1a).dapr.proto.runtime.v1.QueryStateResponse\"\x00\x12R\n\x0b\x44\x65leteState\x12).dapr.proto.runtime.v1.DeleteStateRequest\x1a\x16.google.protobuf.Empty\"\x00\x12Z\n\x0f\x44\x65leteBulkState\x12-.dapr.proto.runtime.v1.DeleteBulkStateRequest\x1a\x16.google.protobuf.Empty\"\x00\x12j\n\x17\x45xecuteStateTransaction\x12\x35.dapr.proto.runtime.v1.ExecuteStateTransactionRequest\x1a\x16.google.protobuf.Empty\"\x00\x12T\n\x0cPublishEvent\x12*.dapr.proto.runtime.v1.PublishEventRequest\x1a\x16.google.protobuf.Empty\"\x00\x12q\n\x16\x42ulkPublishEventAlpha1\x12).dapr.proto.runtime.v1.BulkPublishRequest\x1a*.dapr.proto.runtime.v1.BulkPublishResponse\"\x00\x12\x97\x01\n\x1aSubscribeTopicEventsAlpha1\x12\x38.dapr.proto.runtime.v1.SubscribeTopicEventsRequestAlpha1\x1a\x39.dapr.proto.runtime.v1.SubscribeTopicEventsResponseAlpha1\"\x00(\x01\x30\x01\x12l\n\rInvokeBinding\x12+.dapr.proto.runtime.v1.InvokeBindingRequest\x1a,.dapr.proto.runtime.v1.InvokeBindingResponse\"\x00\x12`\n\tGetSecret\x12\'.dapr.proto.runtime.v1.GetSecretRequest\x1a(.dapr.proto.runtime.v1.GetSecretResponse\"\x00\x12l\n\rGetBulkSecret\x12+.dapr.proto.runtime.v1.GetBulkSecretRequest\x1a,.dapr.proto.runtime.v1.GetBulkSecretResponse\"\x00\x12`\n\x12RegisterActorTimer\x12\x30.dapr.proto.runtime.v1.RegisterActorTimerRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x64\n\x14UnregisterActorTimer\x12\x32.dapr.proto.runtime.v1.UnregisterActorTimerRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x66\n\x15RegisterActorReminder\x12\x33.dapr.proto.runtime.v1.RegisterActorReminderRequest\x1a\x16.google.protobuf.Empty\"\x00\x12j\n\x17UnregisterActorReminder\x12\x35.dapr.proto.runtime.v1.UnregisterActorReminderRequest\x1a\x16.google.protobuf.Empty\"\x00\x12l\n\rGetActorState\x12+.dapr.proto.runtime.v1.GetActorStateRequest\x1a,.dapr.proto.runtime.v1.GetActorStateResponse\"\x00\x12t\n\x1c\x45xecuteActorStateTransaction\x12:.dapr.proto.runtime.v1.ExecuteActorStateTransactionRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x66\n\x0bInvokeActor\x12).dapr.proto.runtime.v1.InvokeActorRequest\x1a*.dapr.proto.runtime.v1.InvokeActorResponse\"\x00\x12{\n\x16GetConfigurationAlpha1\x12..dapr.proto.runtime.v1.GetConfigurationRequest\x1a/.dapr.proto.runtime.v1.GetConfigurationResponse\"\x00\x12u\n\x10GetConfiguration\x12..dapr.proto.runtime.v1.GetConfigurationRequest\x1a/.dapr.proto.runtime.v1.GetConfigurationResponse\"\x00\x12\x8f\x01\n\x1cSubscribeConfigurationAlpha1\x12\x34.dapr.proto.runtime.v1.SubscribeConfigurationRequest\x1a\x35.dapr.proto.runtime.v1.SubscribeConfigurationResponse\"\x00\x30\x01\x12\x89\x01\n\x16SubscribeConfiguration\x12\x34.dapr.proto.runtime.v1.SubscribeConfigurationRequest\x1a\x35.dapr.proto.runtime.v1.SubscribeConfigurationResponse\"\x00\x30\x01\x12\x93\x01\n\x1eUnsubscribeConfigurationAlpha1\x12\x36.dapr.proto.runtime.v1.UnsubscribeConfigurationRequest\x1a\x37.dapr.proto.runtime.v1.UnsubscribeConfigurationResponse\"\x00\x12\x8d\x01\n\x18UnsubscribeConfiguration\x12\x36.dapr.proto.runtime.v1.UnsubscribeConfigurationRequest\x1a\x37.dapr.proto.runtime.v1.UnsubscribeConfigurationResponse\"\x00\x12`\n\rTryLockAlpha1\x12%.dapr.proto.runtime.v1.TryLockRequest\x1a&.dapr.proto.runtime.v1.TryLockResponse\"\x00\x12]\n\x0cUnlockAlpha1\x12$.dapr.proto.runtime.v1.UnlockRequest\x1a%.dapr.proto.runtime.v1.UnlockResponse\"\x00\x12\x62\n\rEncryptAlpha1\x12%.dapr.proto.runtime.v1.EncryptRequest\x1a&.dapr.proto.runtime.v1.EncryptResponse(\x01\x30\x01\x12\x62\n\rDecryptAlpha1\x12%.dapr.proto.runtime.v1.DecryptRequest\x1a&.dapr.proto.runtime.v1.DecryptResponse(\x01\x30\x01\x12\x66\n\x0bGetMetadata\x12).dapr.proto.runtime.v1.GetMetadataRequest\x1a*.dapr.proto.runtime.v1.GetMetadataResponse\"\x00\x12R\n\x0bSetMetadata\x12).dapr.proto.runtime.v1.SetMetadataRequest\x1a\x16.google.protobuf.Empty\"\x00\x12m\n\x12SubtleGetKeyAlpha1\x12*.dapr.proto.runtime.v1.SubtleGetKeyRequest\x1a+.dapr.proto.runtime.v1.SubtleGetKeyResponse\x12p\n\x13SubtleEncryptAlpha1\x12+.dapr.proto.runtime.v1.SubtleEncryptRequest\x1a,.dapr.proto.runtime.v1.SubtleEncryptResponse\x12p\n\x13SubtleDecryptAlpha1\x12+.dapr.proto.runtime.v1.SubtleDecryptRequest\x1a,.dapr.proto.runtime.v1.SubtleDecryptResponse\x12p\n\x13SubtleWrapKeyAlpha1\x12+.dapr.proto.runtime.v1.SubtleWrapKeyRequest\x1a,.dapr.proto.runtime.v1.SubtleWrapKeyResponse\x12v\n\x15SubtleUnwrapKeyAlpha1\x12-.dapr.proto.runtime.v1.SubtleUnwrapKeyRequest\x1a..dapr.proto.runtime.v1.SubtleUnwrapKeyResponse\x12g\n\x10SubtleSignAlpha1\x12(.dapr.proto.runtime.v1.SubtleSignRequest\x1a).dapr.proto.runtime.v1.SubtleSignResponse\x12m\n\x12SubtleVerifyAlpha1\x12*.dapr.proto.runtime.v1.SubtleVerifyRequest\x1a+.dapr.proto.runtime.v1.SubtleVerifyResponse\x12u\n\x13StartWorkflowAlpha1\x12+.dapr.proto.runtime.v1.StartWorkflowRequest\x1a,.dapr.proto.runtime.v1.StartWorkflowResponse\"\x03\x88\x02\x01\x12o\n\x11GetWorkflowAlpha1\x12).dapr.proto.runtime.v1.GetWorkflowRequest\x1a*.dapr.proto.runtime.v1.GetWorkflowResponse\"\x03\x88\x02\x01\x12_\n\x13PurgeWorkflowAlpha1\x12+.dapr.proto.runtime.v1.PurgeWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x03\x88\x02\x01\x12g\n\x17TerminateWorkflowAlpha1\x12/.dapr.proto.runtime.v1.TerminateWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x03\x88\x02\x01\x12_\n\x13PauseWorkflowAlpha1\x12+.dapr.proto.runtime.v1.PauseWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x03\x88\x02\x01\x12\x61\n\x14ResumeWorkflowAlpha1\x12,.dapr.proto.runtime.v1.ResumeWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x03\x88\x02\x01\x12i\n\x18RaiseEventWorkflowAlpha1\x12\x30.dapr.proto.runtime.v1.RaiseEventWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x03\x88\x02\x01\x12q\n\x12StartWorkflowBeta1\x12+.dapr.proto.runtime.v1.StartWorkflowRequest\x1a,.dapr.proto.runtime.v1.StartWorkflowResponse\"\x00\x12k\n\x10GetWorkflowBeta1\x12).dapr.proto.runtime.v1.GetWorkflowRequest\x1a*.dapr.proto.runtime.v1.GetWorkflowResponse\"\x00\x12[\n\x12PurgeWorkflowBeta1\x12+.dapr.proto.runtime.v1.PurgeWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x63\n\x16TerminateWorkflowBeta1\x12/.dapr.proto.runtime.v1.TerminateWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x00\x12[\n\x12PauseWorkflowBeta1\x12+.dapr.proto.runtime.v1.PauseWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x00\x12]\n\x13ResumeWorkflowBeta1\x12,.dapr.proto.runtime.v1.ResumeWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x65\n\x17RaiseEventWorkflowBeta1\x12\x30.dapr.proto.runtime.v1.RaiseEventWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x00\x12L\n\x08Shutdown\x12&.dapr.proto.runtime.v1.ShutdownRequest\x1a\x16.google.protobuf.Empty\"\x00\x12l\n\x11ScheduleJobAlpha1\x12).dapr.proto.runtime.v1.ScheduleJobRequest\x1a*.dapr.proto.runtime.v1.ScheduleJobResponse\"\x00\x12]\n\x0cGetJobAlpha1\x12$.dapr.proto.runtime.v1.GetJobRequest\x1a%.dapr.proto.runtime.v1.GetJobResponse\"\x00\x12\x66\n\x0f\x44\x65leteJobAlpha1\x12\'.dapr.proto.runtime.v1.DeleteJobRequest\x1a(.dapr.proto.runtime.v1.DeleteJobResponse\"\x00\x12k\n\x0e\x43onverseAlpha1\x12*.dapr.proto.runtime.v1.ConversationRequest\x1a+.dapr.proto.runtime.v1.ConversationResponse\"\x00\x42i\n\nio.dapr.v1B\nDaprProtosZ1github.com/dapr/dapr/pkg/proto/runtime/v1;runtime\xaa\x02\x1b\x44\x61pr.Client.Autogen.Grpc.v1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n dapr/proto/runtime/v1/dapr.proto\x12\x15\x64\x61pr.proto.runtime.v1\x1a\x19google/protobuf/any.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a!dapr/proto/common/v1/common.proto\x1a\'dapr/proto/runtime/v1/appcallback.proto\"X\n\x14InvokeServiceRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x34\n\x07message\x18\x03 \x01(\x0b\x32#.dapr.proto.common.v1.InvokeRequest\"\xf5\x01\n\x0fGetStateRequest\x12\x12\n\nstore_name\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\t\x12H\n\x0b\x63onsistency\x18\x03 \x01(\x0e\x32\x33.dapr.proto.common.v1.StateOptions.StateConsistency\x12\x46\n\x08metadata\x18\x04 \x03(\x0b\x32\x34.dapr.proto.runtime.v1.GetStateRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xc9\x01\n\x13GetBulkStateRequest\x12\x12\n\nstore_name\x18\x01 \x01(\t\x12\x0c\n\x04keys\x18\x02 \x03(\t\x12\x13\n\x0bparallelism\x18\x03 \x01(\x05\x12J\n\x08metadata\x18\x04 \x03(\x0b\x32\x38.dapr.proto.runtime.v1.GetBulkStateRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"K\n\x14GetBulkStateResponse\x12\x33\n\x05items\x18\x01 \x03(\x0b\x32$.dapr.proto.runtime.v1.BulkStateItem\"\xbe\x01\n\rBulkStateItem\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\x12\x0c\n\x04\x65tag\x18\x03 \x01(\t\x12\r\n\x05\x65rror\x18\x04 \x01(\t\x12\x44\n\x08metadata\x18\x05 \x03(\x0b\x32\x32.dapr.proto.runtime.v1.BulkStateItem.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xa8\x01\n\x10GetStateResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\x12\x0c\n\x04\x65tag\x18\x02 \x01(\t\x12G\n\x08metadata\x18\x03 \x03(\x0b\x32\x35.dapr.proto.runtime.v1.GetStateResponse.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x90\x02\n\x12\x44\x65leteStateRequest\x12\x12\n\nstore_name\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\t\x12(\n\x04\x65tag\x18\x03 \x01(\x0b\x32\x1a.dapr.proto.common.v1.Etag\x12\x33\n\x07options\x18\x04 \x01(\x0b\x32\".dapr.proto.common.v1.StateOptions\x12I\n\x08metadata\x18\x05 \x03(\x0b\x32\x37.dapr.proto.runtime.v1.DeleteStateRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"]\n\x16\x44\x65leteBulkStateRequest\x12\x12\n\nstore_name\x18\x01 \x01(\t\x12/\n\x06states\x18\x02 \x03(\x0b\x32\x1f.dapr.proto.common.v1.StateItem\"W\n\x10SaveStateRequest\x12\x12\n\nstore_name\x18\x01 \x01(\t\x12/\n\x06states\x18\x02 \x03(\x0b\x32\x1f.dapr.proto.common.v1.StateItem\"\xbc\x01\n\x11QueryStateRequest\x12\x1d\n\nstore_name\x18\x01 \x01(\tR\tstoreName\x12\r\n\x05query\x18\x02 \x01(\t\x12H\n\x08metadata\x18\x03 \x03(\x0b\x32\x36.dapr.proto.runtime.v1.QueryStateRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"H\n\x0eQueryStateItem\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\x12\x0c\n\x04\x65tag\x18\x03 \x01(\t\x12\r\n\x05\x65rror\x18\x04 \x01(\t\"\xd7\x01\n\x12QueryStateResponse\x12\x36\n\x07results\x18\x01 \x03(\x0b\x32%.dapr.proto.runtime.v1.QueryStateItem\x12\r\n\x05token\x18\x02 \x01(\t\x12I\n\x08metadata\x18\x03 \x03(\x0b\x32\x37.dapr.proto.runtime.v1.QueryStateResponse.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xdf\x01\n\x13PublishEventRequest\x12\x13\n\x0bpubsub_name\x18\x01 \x01(\t\x12\r\n\x05topic\x18\x02 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\x0c\x12\x19\n\x11\x64\x61ta_content_type\x18\x04 \x01(\t\x12J\n\x08metadata\x18\x05 \x03(\x0b\x32\x38.dapr.proto.runtime.v1.PublishEventRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xf5\x01\n\x12\x42ulkPublishRequest\x12\x13\n\x0bpubsub_name\x18\x01 \x01(\t\x12\r\n\x05topic\x18\x02 \x01(\t\x12?\n\x07\x65ntries\x18\x03 \x03(\x0b\x32..dapr.proto.runtime.v1.BulkPublishRequestEntry\x12I\n\x08metadata\x18\x04 \x03(\x0b\x32\x37.dapr.proto.runtime.v1.BulkPublishRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xd1\x01\n\x17\x42ulkPublishRequestEntry\x12\x10\n\x08\x65ntry_id\x18\x01 \x01(\t\x12\r\n\x05\x65vent\x18\x02 \x01(\x0c\x12\x14\n\x0c\x63ontent_type\x18\x03 \x01(\t\x12N\n\x08metadata\x18\x04 \x03(\x0b\x32<.dapr.proto.runtime.v1.BulkPublishRequestEntry.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"c\n\x13\x42ulkPublishResponse\x12L\n\rfailedEntries\x18\x01 \x03(\x0b\x32\x35.dapr.proto.runtime.v1.BulkPublishResponseFailedEntry\"A\n\x1e\x42ulkPublishResponseFailedEntry\x12\x10\n\x08\x65ntry_id\x18\x01 \x01(\t\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"\x84\x02\n!SubscribeTopicEventsRequestAlpha1\x12Z\n\x0finitial_request\x18\x01 \x01(\x0b\x32?.dapr.proto.runtime.v1.SubscribeTopicEventsRequestInitialAlpha1H\x00\x12\\\n\x0f\x65vent_processed\x18\x02 \x01(\x0b\x32\x41.dapr.proto.runtime.v1.SubscribeTopicEventsRequestProcessedAlpha1H\x00\x42%\n#subscribe_topic_events_request_type\"\x96\x02\n(SubscribeTopicEventsRequestInitialAlpha1\x12\x13\n\x0bpubsub_name\x18\x01 \x01(\t\x12\r\n\x05topic\x18\x02 \x01(\t\x12_\n\x08metadata\x18\x03 \x03(\x0b\x32M.dapr.proto.runtime.v1.SubscribeTopicEventsRequestInitialAlpha1.MetadataEntry\x12\x1e\n\x11\x64\x65\x61\x64_letter_topic\x18\x04 \x01(\tH\x00\x88\x01\x01\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x14\n\x12_dead_letter_topic\"s\n*SubscribeTopicEventsRequestProcessedAlpha1\x12\n\n\x02id\x18\x01 \x01(\t\x12\x39\n\x06status\x18\x02 \x01(\x0b\x32).dapr.proto.runtime.v1.TopicEventResponse\"\xed\x01\n\"SubscribeTopicEventsResponseAlpha1\x12\\\n\x10initial_response\x18\x01 \x01(\x0b\x32@.dapr.proto.runtime.v1.SubscribeTopicEventsResponseInitialAlpha1H\x00\x12\x41\n\revent_message\x18\x02 \x01(\x0b\x32(.dapr.proto.runtime.v1.TopicEventRequestH\x00\x42&\n$subscribe_topic_events_response_type\"+\n)SubscribeTopicEventsResponseInitialAlpha1\"\xc3\x01\n\x14InvokeBindingRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\x12K\n\x08metadata\x18\x03 \x03(\x0b\x32\x39.dapr.proto.runtime.v1.InvokeBindingRequest.MetadataEntry\x12\x11\n\toperation\x18\x04 \x01(\t\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xa4\x01\n\x15InvokeBindingResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\x12L\n\x08metadata\x18\x02 \x03(\x0b\x32:.dapr.proto.runtime.v1.InvokeBindingResponse.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xb8\x01\n\x10GetSecretRequest\x12\x1d\n\nstore_name\x18\x01 \x01(\tR\tstoreName\x12\x0b\n\x03key\x18\x02 \x01(\t\x12G\n\x08metadata\x18\x03 \x03(\x0b\x32\x35.dapr.proto.runtime.v1.GetSecretRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x82\x01\n\x11GetSecretResponse\x12@\n\x04\x64\x61ta\x18\x01 \x03(\x0b\x32\x32.dapr.proto.runtime.v1.GetSecretResponse.DataEntry\x1a+\n\tDataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xb3\x01\n\x14GetBulkSecretRequest\x12\x1d\n\nstore_name\x18\x01 \x01(\tR\tstoreName\x12K\n\x08metadata\x18\x02 \x03(\x0b\x32\x39.dapr.proto.runtime.v1.GetBulkSecretRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x85\x01\n\x0eSecretResponse\x12\x43\n\x07secrets\x18\x01 \x03(\x0b\x32\x32.dapr.proto.runtime.v1.SecretResponse.SecretsEntry\x1a.\n\x0cSecretsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xb1\x01\n\x15GetBulkSecretResponse\x12\x44\n\x04\x64\x61ta\x18\x01 \x03(\x0b\x32\x36.dapr.proto.runtime.v1.GetBulkSecretResponse.DataEntry\x1aR\n\tDataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x34\n\x05value\x18\x02 \x01(\x0b\x32%.dapr.proto.runtime.v1.SecretResponse:\x02\x38\x01\"f\n\x1bTransactionalStateOperation\x12\x15\n\roperationType\x18\x01 \x01(\t\x12\x30\n\x07request\x18\x02 \x01(\x0b\x32\x1f.dapr.proto.common.v1.StateItem\"\x83\x02\n\x1e\x45xecuteStateTransactionRequest\x12\x11\n\tstoreName\x18\x01 \x01(\t\x12\x46\n\noperations\x18\x02 \x03(\x0b\x32\x32.dapr.proto.runtime.v1.TransactionalStateOperation\x12U\n\x08metadata\x18\x03 \x03(\x0b\x32\x43.dapr.proto.runtime.v1.ExecuteStateTransactionRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xbb\x01\n\x19RegisterActorTimerRequest\x12\x1d\n\nactor_type\x18\x01 \x01(\tR\tactorType\x12\x19\n\x08\x61\x63tor_id\x18\x02 \x01(\tR\x07\x61\x63torId\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x19\n\x08\x64ue_time\x18\x04 \x01(\tR\x07\x64ueTime\x12\x0e\n\x06period\x18\x05 \x01(\t\x12\x10\n\x08\x63\x61llback\x18\x06 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x07 \x01(\x0c\x12\x0b\n\x03ttl\x18\x08 \x01(\t\"e\n\x1bUnregisterActorTimerRequest\x12\x1d\n\nactor_type\x18\x01 \x01(\tR\tactorType\x12\x19\n\x08\x61\x63tor_id\x18\x02 \x01(\tR\x07\x61\x63torId\x12\x0c\n\x04name\x18\x03 \x01(\t\"\xac\x01\n\x1cRegisterActorReminderRequest\x12\x1d\n\nactor_type\x18\x01 \x01(\tR\tactorType\x12\x19\n\x08\x61\x63tor_id\x18\x02 \x01(\tR\x07\x61\x63torId\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x19\n\x08\x64ue_time\x18\x04 \x01(\tR\x07\x64ueTime\x12\x0e\n\x06period\x18\x05 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x06 \x01(\x0c\x12\x0b\n\x03ttl\x18\x07 \x01(\t\"h\n\x1eUnregisterActorReminderRequest\x12\x1d\n\nactor_type\x18\x01 \x01(\tR\tactorType\x12\x19\n\x08\x61\x63tor_id\x18\x02 \x01(\tR\x07\x61\x63torId\x12\x0c\n\x04name\x18\x03 \x01(\t\"]\n\x14GetActorStateRequest\x12\x1d\n\nactor_type\x18\x01 \x01(\tR\tactorType\x12\x19\n\x08\x61\x63tor_id\x18\x02 \x01(\tR\x07\x61\x63torId\x12\x0b\n\x03key\x18\x03 \x01(\t\"\xa4\x01\n\x15GetActorStateResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\x12L\n\x08metadata\x18\x02 \x03(\x0b\x32:.dapr.proto.runtime.v1.GetActorStateResponse.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xac\x01\n#ExecuteActorStateTransactionRequest\x12\x1d\n\nactor_type\x18\x01 \x01(\tR\tactorType\x12\x19\n\x08\x61\x63tor_id\x18\x02 \x01(\tR\x07\x61\x63torId\x12K\n\noperations\x18\x03 \x03(\x0b\x32\x37.dapr.proto.runtime.v1.TransactionalActorStateOperation\"\xf5\x01\n TransactionalActorStateOperation\x12\x15\n\roperationType\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\t\x12#\n\x05value\x18\x03 \x01(\x0b\x32\x14.google.protobuf.Any\x12W\n\x08metadata\x18\x04 \x03(\x0b\x32\x45.dapr.proto.runtime.v1.TransactionalActorStateOperation.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xe8\x01\n\x12InvokeActorRequest\x12\x1d\n\nactor_type\x18\x01 \x01(\tR\tactorType\x12\x19\n\x08\x61\x63tor_id\x18\x02 \x01(\tR\x07\x61\x63torId\x12\x0e\n\x06method\x18\x03 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\x0c\x12I\n\x08metadata\x18\x05 \x03(\x0b\x32\x37.dapr.proto.runtime.v1.InvokeActorRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"#\n\x13InvokeActorResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\"\x14\n\x12GetMetadataRequest\"\x9b\x06\n\x13GetMetadataResponse\x12\n\n\x02id\x18\x01 \x01(\t\x12Q\n\x13\x61\x63tive_actors_count\x18\x02 \x03(\x0b\x32(.dapr.proto.runtime.v1.ActiveActorsCountB\x02\x18\x01R\x06\x61\x63tors\x12V\n\x15registered_components\x18\x03 \x03(\x0b\x32+.dapr.proto.runtime.v1.RegisteredComponentsR\ncomponents\x12\x65\n\x11\x65xtended_metadata\x18\x04 \x03(\x0b\x32@.dapr.proto.runtime.v1.GetMetadataResponse.ExtendedMetadataEntryR\x08\x65xtended\x12O\n\rsubscriptions\x18\x05 \x03(\x0b\x32).dapr.proto.runtime.v1.PubsubSubscriptionR\rsubscriptions\x12R\n\x0ehttp_endpoints\x18\x06 \x03(\x0b\x32+.dapr.proto.runtime.v1.MetadataHTTPEndpointR\rhttpEndpoints\x12j\n\x19\x61pp_connection_properties\x18\x07 \x01(\x0b\x32..dapr.proto.runtime.v1.AppConnectionPropertiesR\x17\x61ppConnectionProperties\x12\'\n\x0fruntime_version\x18\x08 \x01(\tR\x0eruntimeVersion\x12)\n\x10\x65nabled_features\x18\t \x03(\tR\x0f\x65nabledFeatures\x12H\n\ractor_runtime\x18\n \x01(\x0b\x32#.dapr.proto.runtime.v1.ActorRuntimeR\x0c\x61\x63torRuntime\x1a\x37\n\x15\x45xtendedMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xbc\x02\n\x0c\x41\x63torRuntime\x12]\n\x0eruntime_status\x18\x01 \x01(\x0e\x32\x36.dapr.proto.runtime.v1.ActorRuntime.ActorRuntimeStatusR\rruntimeStatus\x12M\n\ractive_actors\x18\x02 \x03(\x0b\x32(.dapr.proto.runtime.v1.ActiveActorsCountR\x0c\x61\x63tiveActors\x12\x1d\n\nhost_ready\x18\x03 \x01(\x08R\thostReady\x12\x1c\n\tplacement\x18\x04 \x01(\tR\tplacement\"A\n\x12\x41\x63torRuntimeStatus\x12\x10\n\x0cINITIALIZING\x10\x00\x12\x0c\n\x08\x44ISABLED\x10\x01\x12\x0b\n\x07RUNNING\x10\x02\"0\n\x11\x41\x63tiveActorsCount\x12\x0c\n\x04type\x18\x01 \x01(\t\x12\r\n\x05\x63ount\x18\x02 \x01(\x05\"Y\n\x14RegisteredComponents\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04type\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\t\x12\x14\n\x0c\x63\x61pabilities\x18\x04 \x03(\t\"*\n\x14MetadataHTTPEndpoint\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\"\xd1\x01\n\x17\x41ppConnectionProperties\x12\x0c\n\x04port\x18\x01 \x01(\x05\x12\x10\n\x08protocol\x18\x02 \x01(\t\x12\'\n\x0f\x63hannel_address\x18\x03 \x01(\tR\x0e\x63hannelAddress\x12\'\n\x0fmax_concurrency\x18\x04 \x01(\x05R\x0emaxConcurrency\x12\x44\n\x06health\x18\x05 \x01(\x0b\x32\x34.dapr.proto.runtime.v1.AppConnectionHealthProperties\"\xdc\x01\n\x1d\x41ppConnectionHealthProperties\x12*\n\x11health_check_path\x18\x01 \x01(\tR\x0fhealthCheckPath\x12\x32\n\x15health_probe_interval\x18\x02 \x01(\tR\x13healthProbeInterval\x12\x30\n\x14health_probe_timeout\x18\x03 \x01(\tR\x12healthProbeTimeout\x12)\n\x10health_threshold\x18\x04 \x01(\x05R\x0fhealthThreshold\"\x86\x03\n\x12PubsubSubscription\x12\x1f\n\x0bpubsub_name\x18\x01 \x01(\tR\npubsubname\x12\x14\n\x05topic\x18\x02 \x01(\tR\x05topic\x12S\n\x08metadata\x18\x03 \x03(\x0b\x32\x37.dapr.proto.runtime.v1.PubsubSubscription.MetadataEntryR\x08metadata\x12\x44\n\x05rules\x18\x04 \x01(\x0b\x32..dapr.proto.runtime.v1.PubsubSubscriptionRulesR\x05rules\x12*\n\x11\x64\x65\x61\x64_letter_topic\x18\x05 \x01(\tR\x0f\x64\x65\x61\x64LetterTopic\x12\x41\n\x04type\x18\x06 \x01(\x0e\x32-.dapr.proto.runtime.v1.PubsubSubscriptionTypeR\x04type\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"W\n\x17PubsubSubscriptionRules\x12<\n\x05rules\x18\x01 \x03(\x0b\x32-.dapr.proto.runtime.v1.PubsubSubscriptionRule\"5\n\x16PubsubSubscriptionRule\x12\r\n\x05match\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\t\"0\n\x12SetMetadataRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"\xbc\x01\n\x17GetConfigurationRequest\x12\x12\n\nstore_name\x18\x01 \x01(\t\x12\x0c\n\x04keys\x18\x02 \x03(\t\x12N\n\x08metadata\x18\x03 \x03(\x0b\x32<.dapr.proto.runtime.v1.GetConfigurationRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xbc\x01\n\x18GetConfigurationResponse\x12I\n\x05items\x18\x01 \x03(\x0b\x32:.dapr.proto.runtime.v1.GetConfigurationResponse.ItemsEntry\x1aU\n\nItemsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x36\n\x05value\x18\x02 \x01(\x0b\x32\'.dapr.proto.common.v1.ConfigurationItem:\x02\x38\x01\"\xc8\x01\n\x1dSubscribeConfigurationRequest\x12\x12\n\nstore_name\x18\x01 \x01(\t\x12\x0c\n\x04keys\x18\x02 \x03(\t\x12T\n\x08metadata\x18\x03 \x03(\x0b\x32\x42.dapr.proto.runtime.v1.SubscribeConfigurationRequest.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"A\n\x1fUnsubscribeConfigurationRequest\x12\x12\n\nstore_name\x18\x01 \x01(\t\x12\n\n\x02id\x18\x02 \x01(\t\"\xd4\x01\n\x1eSubscribeConfigurationResponse\x12\n\n\x02id\x18\x01 \x01(\t\x12O\n\x05items\x18\x02 \x03(\x0b\x32@.dapr.proto.runtime.v1.SubscribeConfigurationResponse.ItemsEntry\x1aU\n\nItemsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x36\n\x05value\x18\x02 \x01(\x0b\x32\'.dapr.proto.common.v1.ConfigurationItem:\x02\x38\x01\"?\n UnsubscribeConfigurationResponse\x12\n\n\x02ok\x18\x01 \x01(\x08\x12\x0f\n\x07message\x18\x02 \x01(\t\"\x9b\x01\n\x0eTryLockRequest\x12\x1d\n\nstore_name\x18\x01 \x01(\tR\tstoreName\x12\x1f\n\x0bresource_id\x18\x02 \x01(\tR\nresourceId\x12\x1d\n\nlock_owner\x18\x03 \x01(\tR\tlockOwner\x12*\n\x11\x65xpiry_in_seconds\x18\x04 \x01(\x05R\x0f\x65xpiryInSeconds\"\"\n\x0fTryLockResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\"n\n\rUnlockRequest\x12\x1d\n\nstore_name\x18\x01 \x01(\tR\tstoreName\x12\x1f\n\x0bresource_id\x18\x02 \x01(\tR\nresourceId\x12\x1d\n\nlock_owner\x18\x03 \x01(\tR\tlockOwner\"\xae\x01\n\x0eUnlockResponse\x12<\n\x06status\x18\x01 \x01(\x0e\x32,.dapr.proto.runtime.v1.UnlockResponse.Status\"^\n\x06Status\x12\x0b\n\x07SUCCESS\x10\x00\x12\x17\n\x13LOCK_DOES_NOT_EXIST\x10\x01\x12\x1a\n\x16LOCK_BELONGS_TO_OTHERS\x10\x02\x12\x12\n\x0eINTERNAL_ERROR\x10\x03\"\xb0\x01\n\x13SubtleGetKeyRequest\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x44\n\x06\x66ormat\x18\x03 \x01(\x0e\x32\x34.dapr.proto.runtime.v1.SubtleGetKeyRequest.KeyFormat\"\x1e\n\tKeyFormat\x12\x07\n\x03PEM\x10\x00\x12\x08\n\x04JSON\x10\x01\"C\n\x14SubtleGetKeyResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x1d\n\npublic_key\x18\x02 \x01(\tR\tpublicKey\"\xb6\x01\n\x14SubtleEncryptRequest\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12\x11\n\tplaintext\x18\x02 \x01(\x0c\x12\x11\n\talgorithm\x18\x03 \x01(\t\x12\x19\n\x08key_name\x18\x04 \x01(\tR\x07keyName\x12\r\n\x05nonce\x18\x05 \x01(\x0c\x12\'\n\x0f\x61ssociated_data\x18\x06 \x01(\x0cR\x0e\x61ssociatedData\"8\n\x15SubtleEncryptResponse\x12\x12\n\nciphertext\x18\x01 \x01(\x0c\x12\x0b\n\x03tag\x18\x02 \x01(\x0c\"\xc4\x01\n\x14SubtleDecryptRequest\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12\x12\n\nciphertext\x18\x02 \x01(\x0c\x12\x11\n\talgorithm\x18\x03 \x01(\t\x12\x19\n\x08key_name\x18\x04 \x01(\tR\x07keyName\x12\r\n\x05nonce\x18\x05 \x01(\x0c\x12\x0b\n\x03tag\x18\x06 \x01(\x0c\x12\'\n\x0f\x61ssociated_data\x18\x07 \x01(\x0cR\x0e\x61ssociatedData\"*\n\x15SubtleDecryptResponse\x12\x11\n\tplaintext\x18\x01 \x01(\x0c\"\xc8\x01\n\x14SubtleWrapKeyRequest\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12#\n\rplaintext_key\x18\x02 \x01(\x0cR\x0cplaintextKey\x12\x11\n\talgorithm\x18\x03 \x01(\t\x12\x19\n\x08key_name\x18\x04 \x01(\tR\x07keyName\x12\r\n\x05nonce\x18\x05 \x01(\x0c\x12\'\n\x0f\x61ssociated_data\x18\x06 \x01(\x0cR\x0e\x61ssociatedData\"E\n\x15SubtleWrapKeyResponse\x12\x1f\n\x0bwrapped_key\x18\x01 \x01(\x0cR\nwrappedKey\x12\x0b\n\x03tag\x18\x02 \x01(\x0c\"\xd3\x01\n\x16SubtleUnwrapKeyRequest\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12\x1f\n\x0bwrapped_key\x18\x02 \x01(\x0cR\nwrappedKey\x12\x11\n\talgorithm\x18\x03 \x01(\t\x12\x19\n\x08key_name\x18\x04 \x01(\tR\x07keyName\x12\r\n\x05nonce\x18\x05 \x01(\x0c\x12\x0b\n\x03tag\x18\x06 \x01(\x0c\x12\'\n\x0f\x61ssociated_data\x18\x07 \x01(\x0cR\x0e\x61ssociatedData\">\n\x17SubtleUnwrapKeyResponse\x12#\n\rplaintext_key\x18\x01 \x01(\x0cR\x0cplaintextKey\"x\n\x11SubtleSignRequest\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12\x0e\n\x06\x64igest\x18\x02 \x01(\x0c\x12\x11\n\talgorithm\x18\x03 \x01(\t\x12\x19\n\x08key_name\x18\x04 \x01(\tR\x07keyName\"\'\n\x12SubtleSignResponse\x12\x11\n\tsignature\x18\x01 \x01(\x0c\"\x8d\x01\n\x13SubtleVerifyRequest\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12\x0e\n\x06\x64igest\x18\x02 \x01(\x0c\x12\x11\n\talgorithm\x18\x03 \x01(\t\x12\x19\n\x08key_name\x18\x04 \x01(\tR\x07keyName\x12\x11\n\tsignature\x18\x05 \x01(\x0c\"%\n\x14SubtleVerifyResponse\x12\r\n\x05valid\x18\x01 \x01(\x08\"\x85\x01\n\x0e\x45ncryptRequest\x12=\n\x07options\x18\x01 \x01(\x0b\x32,.dapr.proto.runtime.v1.EncryptRequestOptions\x12\x34\n\x07payload\x18\x02 \x01(\x0b\x32#.dapr.proto.common.v1.StreamPayload\"\xfe\x01\n\x15\x45ncryptRequestOptions\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12\x19\n\x08key_name\x18\x02 \x01(\tR\x07keyName\x12\x1a\n\x12key_wrap_algorithm\x18\x03 \x01(\t\x12\x1e\n\x16\x64\x61ta_encryption_cipher\x18\n \x01(\t\x12\x37\n\x18omit_decryption_key_name\x18\x0b \x01(\x08R\x15omitDecryptionKeyName\x12.\n\x13\x64\x65\x63ryption_key_name\x18\x0c \x01(\tR\x11\x64\x65\x63ryptionKeyName\"G\n\x0f\x45ncryptResponse\x12\x34\n\x07payload\x18\x01 \x01(\x0b\x32#.dapr.proto.common.v1.StreamPayload\"\x85\x01\n\x0e\x44\x65\x63ryptRequest\x12=\n\x07options\x18\x01 \x01(\x0b\x32,.dapr.proto.runtime.v1.DecryptRequestOptions\x12\x34\n\x07payload\x18\x02 \x01(\x0b\x32#.dapr.proto.common.v1.StreamPayload\"Y\n\x15\x44\x65\x63ryptRequestOptions\x12%\n\x0e\x63omponent_name\x18\x01 \x01(\tR\rcomponentName\x12\x19\n\x08key_name\x18\x0c \x01(\tR\x07keyName\"G\n\x0f\x44\x65\x63ryptResponse\x12\x34\n\x07payload\x18\x01 \x01(\x0b\x32#.dapr.proto.common.v1.StreamPayload\"d\n\x12GetWorkflowRequest\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\x12-\n\x12workflow_component\x18\x02 \x01(\tR\x11workflowComponent\"\x84\x03\n\x13GetWorkflowResponse\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\x12#\n\rworkflow_name\x18\x02 \x01(\tR\x0cworkflowName\x12\x39\n\ncreated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\x12\x42\n\x0flast_updated_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\rlastUpdatedAt\x12%\n\x0eruntime_status\x18\x05 \x01(\tR\rruntimeStatus\x12N\n\nproperties\x18\x06 \x03(\x0b\x32:.dapr.proto.runtime.v1.GetWorkflowResponse.PropertiesEntry\x1a\x31\n\x0fPropertiesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x95\x02\n\x14StartWorkflowRequest\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\x12-\n\x12workflow_component\x18\x02 \x01(\tR\x11workflowComponent\x12#\n\rworkflow_name\x18\x03 \x01(\tR\x0cworkflowName\x12I\n\x07options\x18\x04 \x03(\x0b\x32\x38.dapr.proto.runtime.v1.StartWorkflowRequest.OptionsEntry\x12\r\n\x05input\x18\x05 \x01(\x0c\x1a.\n\x0cOptionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"8\n\x15StartWorkflowResponse\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\"j\n\x18TerminateWorkflowRequest\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\x12-\n\x12workflow_component\x18\x02 \x01(\tR\x11workflowComponent\"f\n\x14PauseWorkflowRequest\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\x12-\n\x12workflow_component\x18\x02 \x01(\tR\x11workflowComponent\"g\n\x15ResumeWorkflowRequest\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\x12-\n\x12workflow_component\x18\x02 \x01(\tR\x11workflowComponent\"\x9e\x01\n\x19RaiseEventWorkflowRequest\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\x12-\n\x12workflow_component\x18\x02 \x01(\tR\x11workflowComponent\x12\x1d\n\nevent_name\x18\x03 \x01(\tR\teventName\x12\x12\n\nevent_data\x18\x04 \x01(\x0c\"f\n\x14PurgeWorkflowRequest\x12\x1f\n\x0binstance_id\x18\x01 \x01(\tR\ninstanceID\x12-\n\x12workflow_component\x18\x02 \x01(\tR\x11workflowComponent\"\x11\n\x0fShutdownRequest\"\xe8\x01\n\x03Job\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x1f\n\x08schedule\x18\x02 \x01(\tH\x00R\x08schedule\x88\x01\x01\x12\x1d\n\x07repeats\x18\x03 \x01(\rH\x01R\x07repeats\x88\x01\x01\x12\x1e\n\x08\x64ue_time\x18\x04 \x01(\tH\x02R\x07\x64ueTime\x88\x01\x01\x12\x15\n\x03ttl\x18\x05 \x01(\tH\x03R\x03ttl\x88\x01\x01\x12(\n\x04\x64\x61ta\x18\x06 \x01(\x0b\x32\x14.google.protobuf.AnyR\x04\x64\x61taB\x0b\n\t_scheduleB\n\n\x08_repeatsB\x0b\n\t_due_timeB\x06\n\x04_ttl\"=\n\x12ScheduleJobRequest\x12\'\n\x03job\x18\x01 \x01(\x0b\x32\x1a.dapr.proto.runtime.v1.Job\"\x15\n\x13ScheduleJobResponse\"\x1d\n\rGetJobRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"9\n\x0eGetJobResponse\x12\'\n\x03job\x18\x01 \x01(\x0b\x32\x1a.dapr.proto.runtime.v1.Job\" \n\x10\x44\x65leteJobRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"\x13\n\x11\x44\x65leteJobResponse\"\xe7\x03\n\x13\x43onversationRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x16\n\tcontextID\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x38\n\x06inputs\x18\x03 \x03(\x0b\x32(.dapr.proto.runtime.v1.ConversationInput\x12N\n\nparameters\x18\x04 \x03(\x0b\x32:.dapr.proto.runtime.v1.ConversationRequest.ParametersEntry\x12J\n\x08metadata\x18\x05 \x03(\x0b\x32\x38.dapr.proto.runtime.v1.ConversationRequest.MetadataEntry\x12\x15\n\x08scrubPII\x18\x06 \x01(\x08H\x01\x88\x01\x01\x12\x18\n\x0btemperature\x18\x07 \x01(\x01H\x02\x88\x01\x01\x1aG\n\x0fParametersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12#\n\x05value\x18\x02 \x01(\x0b\x32\x14.google.protobuf.Any:\x02\x38\x01\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x0c\n\n_contextIDB\x0b\n\t_scrubPIIB\x0e\n\x0c_temperature\"d\n\x11\x43onversationInput\x12\x0f\n\x07\x63ontent\x18\x01 \x01(\t\x12\x11\n\x04role\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x15\n\x08scrubPII\x18\x03 \x01(\x08H\x01\x88\x01\x01\x42\x07\n\x05_roleB\x0b\n\t_scrubPII\"\xbc\x01\n\x12\x43onversationResult\x12\x0e\n\x06result\x18\x01 \x01(\t\x12M\n\nparameters\x18\x02 \x03(\x0b\x32\x39.dapr.proto.runtime.v1.ConversationResult.ParametersEntry\x1aG\n\x0fParametersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12#\n\x05value\x18\x02 \x01(\x0b\x32\x14.google.protobuf.Any:\x02\x38\x01\"x\n\x14\x43onversationResponse\x12\x16\n\tcontextID\x18\x01 \x01(\tH\x00\x88\x01\x01\x12:\n\x07outputs\x18\x02 \x03(\x0b\x32).dapr.proto.runtime.v1.ConversationResultB\x0c\n\n_contextID*W\n\x16PubsubSubscriptionType\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x0f\n\x0b\x44\x45\x43LARATIVE\x10\x01\x12\x10\n\x0cPROGRAMMATIC\x10\x02\x12\r\n\tSTREAMING\x10\x03\x32\xbe\x31\n\x04\x44\x61pr\x12\x64\n\rInvokeService\x12+.dapr.proto.runtime.v1.InvokeServiceRequest\x1a$.dapr.proto.common.v1.InvokeResponse\"\x00\x12]\n\x08GetState\x12&.dapr.proto.runtime.v1.GetStateRequest\x1a\'.dapr.proto.runtime.v1.GetStateResponse\"\x00\x12i\n\x0cGetBulkState\x12*.dapr.proto.runtime.v1.GetBulkStateRequest\x1a+.dapr.proto.runtime.v1.GetBulkStateResponse\"\x00\x12N\n\tSaveState\x12\'.dapr.proto.runtime.v1.SaveStateRequest\x1a\x16.google.protobuf.Empty\"\x00\x12i\n\x10QueryStateAlpha1\x12(.dapr.proto.runtime.v1.QueryStateRequest\x1a).dapr.proto.runtime.v1.QueryStateResponse\"\x00\x12R\n\x0b\x44\x65leteState\x12).dapr.proto.runtime.v1.DeleteStateRequest\x1a\x16.google.protobuf.Empty\"\x00\x12Z\n\x0f\x44\x65leteBulkState\x12-.dapr.proto.runtime.v1.DeleteBulkStateRequest\x1a\x16.google.protobuf.Empty\"\x00\x12j\n\x17\x45xecuteStateTransaction\x12\x35.dapr.proto.runtime.v1.ExecuteStateTransactionRequest\x1a\x16.google.protobuf.Empty\"\x00\x12T\n\x0cPublishEvent\x12*.dapr.proto.runtime.v1.PublishEventRequest\x1a\x16.google.protobuf.Empty\"\x00\x12q\n\x16\x42ulkPublishEventAlpha1\x12).dapr.proto.runtime.v1.BulkPublishRequest\x1a*.dapr.proto.runtime.v1.BulkPublishResponse\"\x00\x12\x97\x01\n\x1aSubscribeTopicEventsAlpha1\x12\x38.dapr.proto.runtime.v1.SubscribeTopicEventsRequestAlpha1\x1a\x39.dapr.proto.runtime.v1.SubscribeTopicEventsResponseAlpha1\"\x00(\x01\x30\x01\x12l\n\rInvokeBinding\x12+.dapr.proto.runtime.v1.InvokeBindingRequest\x1a,.dapr.proto.runtime.v1.InvokeBindingResponse\"\x00\x12`\n\tGetSecret\x12\'.dapr.proto.runtime.v1.GetSecretRequest\x1a(.dapr.proto.runtime.v1.GetSecretResponse\"\x00\x12l\n\rGetBulkSecret\x12+.dapr.proto.runtime.v1.GetBulkSecretRequest\x1a,.dapr.proto.runtime.v1.GetBulkSecretResponse\"\x00\x12`\n\x12RegisterActorTimer\x12\x30.dapr.proto.runtime.v1.RegisterActorTimerRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x64\n\x14UnregisterActorTimer\x12\x32.dapr.proto.runtime.v1.UnregisterActorTimerRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x66\n\x15RegisterActorReminder\x12\x33.dapr.proto.runtime.v1.RegisterActorReminderRequest\x1a\x16.google.protobuf.Empty\"\x00\x12j\n\x17UnregisterActorReminder\x12\x35.dapr.proto.runtime.v1.UnregisterActorReminderRequest\x1a\x16.google.protobuf.Empty\"\x00\x12l\n\rGetActorState\x12+.dapr.proto.runtime.v1.GetActorStateRequest\x1a,.dapr.proto.runtime.v1.GetActorStateResponse\"\x00\x12t\n\x1c\x45xecuteActorStateTransaction\x12:.dapr.proto.runtime.v1.ExecuteActorStateTransactionRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x66\n\x0bInvokeActor\x12).dapr.proto.runtime.v1.InvokeActorRequest\x1a*.dapr.proto.runtime.v1.InvokeActorResponse\"\x00\x12{\n\x16GetConfigurationAlpha1\x12..dapr.proto.runtime.v1.GetConfigurationRequest\x1a/.dapr.proto.runtime.v1.GetConfigurationResponse\"\x00\x12u\n\x10GetConfiguration\x12..dapr.proto.runtime.v1.GetConfigurationRequest\x1a/.dapr.proto.runtime.v1.GetConfigurationResponse\"\x00\x12\x8f\x01\n\x1cSubscribeConfigurationAlpha1\x12\x34.dapr.proto.runtime.v1.SubscribeConfigurationRequest\x1a\x35.dapr.proto.runtime.v1.SubscribeConfigurationResponse\"\x00\x30\x01\x12\x89\x01\n\x16SubscribeConfiguration\x12\x34.dapr.proto.runtime.v1.SubscribeConfigurationRequest\x1a\x35.dapr.proto.runtime.v1.SubscribeConfigurationResponse\"\x00\x30\x01\x12\x93\x01\n\x1eUnsubscribeConfigurationAlpha1\x12\x36.dapr.proto.runtime.v1.UnsubscribeConfigurationRequest\x1a\x37.dapr.proto.runtime.v1.UnsubscribeConfigurationResponse\"\x00\x12\x8d\x01\n\x18UnsubscribeConfiguration\x12\x36.dapr.proto.runtime.v1.UnsubscribeConfigurationRequest\x1a\x37.dapr.proto.runtime.v1.UnsubscribeConfigurationResponse\"\x00\x12`\n\rTryLockAlpha1\x12%.dapr.proto.runtime.v1.TryLockRequest\x1a&.dapr.proto.runtime.v1.TryLockResponse\"\x00\x12]\n\x0cUnlockAlpha1\x12$.dapr.proto.runtime.v1.UnlockRequest\x1a%.dapr.proto.runtime.v1.UnlockResponse\"\x00\x12\x62\n\rEncryptAlpha1\x12%.dapr.proto.runtime.v1.EncryptRequest\x1a&.dapr.proto.runtime.v1.EncryptResponse(\x01\x30\x01\x12\x62\n\rDecryptAlpha1\x12%.dapr.proto.runtime.v1.DecryptRequest\x1a&.dapr.proto.runtime.v1.DecryptResponse(\x01\x30\x01\x12\x66\n\x0bGetMetadata\x12).dapr.proto.runtime.v1.GetMetadataRequest\x1a*.dapr.proto.runtime.v1.GetMetadataResponse\"\x00\x12R\n\x0bSetMetadata\x12).dapr.proto.runtime.v1.SetMetadataRequest\x1a\x16.google.protobuf.Empty\"\x00\x12m\n\x12SubtleGetKeyAlpha1\x12*.dapr.proto.runtime.v1.SubtleGetKeyRequest\x1a+.dapr.proto.runtime.v1.SubtleGetKeyResponse\x12p\n\x13SubtleEncryptAlpha1\x12+.dapr.proto.runtime.v1.SubtleEncryptRequest\x1a,.dapr.proto.runtime.v1.SubtleEncryptResponse\x12p\n\x13SubtleDecryptAlpha1\x12+.dapr.proto.runtime.v1.SubtleDecryptRequest\x1a,.dapr.proto.runtime.v1.SubtleDecryptResponse\x12p\n\x13SubtleWrapKeyAlpha1\x12+.dapr.proto.runtime.v1.SubtleWrapKeyRequest\x1a,.dapr.proto.runtime.v1.SubtleWrapKeyResponse\x12v\n\x15SubtleUnwrapKeyAlpha1\x12-.dapr.proto.runtime.v1.SubtleUnwrapKeyRequest\x1a..dapr.proto.runtime.v1.SubtleUnwrapKeyResponse\x12g\n\x10SubtleSignAlpha1\x12(.dapr.proto.runtime.v1.SubtleSignRequest\x1a).dapr.proto.runtime.v1.SubtleSignResponse\x12m\n\x12SubtleVerifyAlpha1\x12*.dapr.proto.runtime.v1.SubtleVerifyRequest\x1a+.dapr.proto.runtime.v1.SubtleVerifyResponse\x12u\n\x13StartWorkflowAlpha1\x12+.dapr.proto.runtime.v1.StartWorkflowRequest\x1a,.dapr.proto.runtime.v1.StartWorkflowResponse\"\x03\x88\x02\x01\x12o\n\x11GetWorkflowAlpha1\x12).dapr.proto.runtime.v1.GetWorkflowRequest\x1a*.dapr.proto.runtime.v1.GetWorkflowResponse\"\x03\x88\x02\x01\x12_\n\x13PurgeWorkflowAlpha1\x12+.dapr.proto.runtime.v1.PurgeWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x03\x88\x02\x01\x12g\n\x17TerminateWorkflowAlpha1\x12/.dapr.proto.runtime.v1.TerminateWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x03\x88\x02\x01\x12_\n\x13PauseWorkflowAlpha1\x12+.dapr.proto.runtime.v1.PauseWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x03\x88\x02\x01\x12\x61\n\x14ResumeWorkflowAlpha1\x12,.dapr.proto.runtime.v1.ResumeWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x03\x88\x02\x01\x12i\n\x18RaiseEventWorkflowAlpha1\x12\x30.dapr.proto.runtime.v1.RaiseEventWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x03\x88\x02\x01\x12q\n\x12StartWorkflowBeta1\x12+.dapr.proto.runtime.v1.StartWorkflowRequest\x1a,.dapr.proto.runtime.v1.StartWorkflowResponse\"\x00\x12k\n\x10GetWorkflowBeta1\x12).dapr.proto.runtime.v1.GetWorkflowRequest\x1a*.dapr.proto.runtime.v1.GetWorkflowResponse\"\x00\x12[\n\x12PurgeWorkflowBeta1\x12+.dapr.proto.runtime.v1.PurgeWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x63\n\x16TerminateWorkflowBeta1\x12/.dapr.proto.runtime.v1.TerminateWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x00\x12[\n\x12PauseWorkflowBeta1\x12+.dapr.proto.runtime.v1.PauseWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x00\x12]\n\x13ResumeWorkflowBeta1\x12,.dapr.proto.runtime.v1.ResumeWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x65\n\x17RaiseEventWorkflowBeta1\x12\x30.dapr.proto.runtime.v1.RaiseEventWorkflowRequest\x1a\x16.google.protobuf.Empty\"\x00\x12L\n\x08Shutdown\x12&.dapr.proto.runtime.v1.ShutdownRequest\x1a\x16.google.protobuf.Empty\"\x00\x12l\n\x11ScheduleJobAlpha1\x12).dapr.proto.runtime.v1.ScheduleJobRequest\x1a*.dapr.proto.runtime.v1.ScheduleJobResponse\"\x00\x12]\n\x0cGetJobAlpha1\x12$.dapr.proto.runtime.v1.GetJobRequest\x1a%.dapr.proto.runtime.v1.GetJobResponse\"\x00\x12\x66\n\x0f\x44\x65leteJobAlpha1\x12\'.dapr.proto.runtime.v1.DeleteJobRequest\x1a(.dapr.proto.runtime.v1.DeleteJobResponse\"\x00\x12k\n\x0e\x43onverseAlpha1\x12*.dapr.proto.runtime.v1.ConversationRequest\x1a+.dapr.proto.runtime.v1.ConversationResponse\"\x00\x42i\n\nio.dapr.v1B\nDaprProtosZ1github.com/dapr/dapr/pkg/proto/runtime/v1;runtime\xaa\x02\x1b\x44\x61pr.Client.Autogen.Grpc.v1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) diff --git a/dapr/proto/runtime/v1/dapr_pb2.pyi b/dapr/proto/runtime/v1/dapr_pb2.pyi index aee50395..7b6ce8a7 100644 --- a/dapr/proto/runtime/v1/dapr_pb2.pyi +++ b/dapr/proto/runtime/v1/dapr_pb2.pyi @@ -13,6 +13,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. """ + import builtins import collections.abc import dapr.proto.common.v1.common_pb2 @@ -61,7 +62,7 @@ STREAMING: PubsubSubscriptionType.ValueType # 3 """Bidirectional Streaming subscription""" global___PubsubSubscriptionType = PubsubSubscriptionType -@typing_extensions.final +@typing.final class InvokeServiceRequest(google.protobuf.message.Message): """InvokeServiceRequest represents the request message for Service invocation.""" @@ -74,24 +75,25 @@ class InvokeServiceRequest(google.protobuf.message.Message): @property def message(self) -> dapr.proto.common.v1.common_pb2.InvokeRequest: """Required. message which will be delivered to callee.""" + def __init__( self, *, id: builtins.str = ..., message: dapr.proto.common.v1.common_pb2.InvokeRequest | None = ..., ) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["message", b"message"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["id", b"id", "message", b"message"]) -> None: ... + def HasField(self, field_name: typing.Literal["message", b"message"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["id", b"id", "message", b"message"]) -> None: ... global___InvokeServiceRequest = InvokeServiceRequest -@typing_extensions.final +@typing.final class GetStateRequest(google.protobuf.message.Message): """GetStateRequest is the message to get key-value states from specific state store.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing_extensions.final + @typing.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -105,7 +107,7 @@ class GetStateRequest(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... STORE_NAME_FIELD_NUMBER: builtins.int KEY_FIELD_NUMBER: builtins.int @@ -120,6 +122,7 @@ class GetStateRequest(google.protobuf.message.Message): @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """The metadata which will be sent to state store components.""" + def __init__( self, *, @@ -128,17 +131,17 @@ class GetStateRequest(google.protobuf.message.Message): consistency: dapr.proto.common.v1.common_pb2.StateOptions.StateConsistency.ValueType = ..., metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["consistency", b"consistency", "key", b"key", "metadata", b"metadata", "store_name", b"store_name"]) -> None: ... + def ClearField(self, field_name: typing.Literal["consistency", b"consistency", "key", b"key", "metadata", b"metadata", "store_name", b"store_name"]) -> None: ... global___GetStateRequest = GetStateRequest -@typing_extensions.final +@typing.final class GetBulkStateRequest(google.protobuf.message.Message): """GetBulkStateRequest is the message to get a list of key-value states from specific state store.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing_extensions.final + @typing.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -152,7 +155,7 @@ class GetBulkStateRequest(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... STORE_NAME_FIELD_NUMBER: builtins.int KEYS_FIELD_NUMBER: builtins.int @@ -160,14 +163,16 @@ class GetBulkStateRequest(google.protobuf.message.Message): METADATA_FIELD_NUMBER: builtins.int store_name: builtins.str """The name of state store.""" + parallelism: builtins.int + """The number of parallel operations executed on the state store for a get operation.""" @property def keys(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]: """The keys to get.""" - parallelism: builtins.int - """The number of parallel operations executed on the state store for a get operation.""" + @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """The metadata which will be sent to state store components.""" + def __init__( self, *, @@ -176,11 +181,11 @@ class GetBulkStateRequest(google.protobuf.message.Message): parallelism: builtins.int = ..., metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["keys", b"keys", "metadata", b"metadata", "parallelism", b"parallelism", "store_name", b"store_name"]) -> None: ... + def ClearField(self, field_name: typing.Literal["keys", b"keys", "metadata", b"metadata", "parallelism", b"parallelism", "store_name", b"store_name"]) -> None: ... global___GetBulkStateRequest = GetBulkStateRequest -@typing_extensions.final +@typing.final class GetBulkStateResponse(google.protobuf.message.Message): """GetBulkStateResponse is the response conveying the list of state values.""" @@ -190,16 +195,17 @@ class GetBulkStateResponse(google.protobuf.message.Message): @property def items(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___BulkStateItem]: """The list of items containing the keys to get values for.""" + def __init__( self, *, items: collections.abc.Iterable[global___BulkStateItem] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["items", b"items"]) -> None: ... + def ClearField(self, field_name: typing.Literal["items", b"items"]) -> None: ... global___GetBulkStateResponse = GetBulkStateResponse -@typing_extensions.final +@typing.final class BulkStateItem(google.protobuf.message.Message): """BulkStateItem is the response item for a bulk get operation. Return values include the item key, data and etag. @@ -207,7 +213,7 @@ class BulkStateItem(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing_extensions.final + @typing.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -221,7 +227,7 @@ class BulkStateItem(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... KEY_FIELD_NUMBER: builtins.int DATA_FIELD_NUMBER: builtins.int @@ -241,6 +247,7 @@ class BulkStateItem(google.protobuf.message.Message): @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """The metadata which will be sent to app.""" + def __init__( self, *, @@ -250,17 +257,17 @@ class BulkStateItem(google.protobuf.message.Message): error: builtins.str = ..., metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["data", b"data", "error", b"error", "etag", b"etag", "key", b"key", "metadata", b"metadata"]) -> None: ... + def ClearField(self, field_name: typing.Literal["data", b"data", "error", b"error", "etag", b"etag", "key", b"key", "metadata", b"metadata"]) -> None: ... global___BulkStateItem = BulkStateItem -@typing_extensions.final +@typing.final class GetStateResponse(google.protobuf.message.Message): """GetStateResponse is the response conveying the state value and etag.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing_extensions.final + @typing.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -274,7 +281,7 @@ class GetStateResponse(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... DATA_FIELD_NUMBER: builtins.int ETAG_FIELD_NUMBER: builtins.int @@ -288,6 +295,7 @@ class GetStateResponse(google.protobuf.message.Message): @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """The metadata which will be sent to app.""" + def __init__( self, *, @@ -295,17 +303,17 @@ class GetStateResponse(google.protobuf.message.Message): etag: builtins.str = ..., metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["data", b"data", "etag", b"etag", "metadata", b"metadata"]) -> None: ... + def ClearField(self, field_name: typing.Literal["data", b"data", "etag", b"etag", "metadata", b"metadata"]) -> None: ... global___GetStateResponse = GetStateResponse -@typing_extensions.final +@typing.final class DeleteStateRequest(google.protobuf.message.Message): """DeleteStateRequest is the message to delete key-value states in the specific state store.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing_extensions.final + @typing.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -319,7 +327,7 @@ class DeleteStateRequest(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... STORE_NAME_FIELD_NUMBER: builtins.int KEY_FIELD_NUMBER: builtins.int @@ -335,14 +343,17 @@ class DeleteStateRequest(google.protobuf.message.Message): """The entity tag which represents the specific version of data. The exact ETag format is defined by the corresponding data store. """ + @property def options(self) -> dapr.proto.common.v1.common_pb2.StateOptions: """State operation options which includes concurrency/ consistency/retry_policy. """ + @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """The metadata which will be sent to state store components.""" + def __init__( self, *, @@ -352,12 +363,12 @@ class DeleteStateRequest(google.protobuf.message.Message): options: dapr.proto.common.v1.common_pb2.StateOptions | None = ..., metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["etag", b"etag", "options", b"options"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["etag", b"etag", "key", b"key", "metadata", b"metadata", "options", b"options", "store_name", b"store_name"]) -> None: ... + def HasField(self, field_name: typing.Literal["etag", b"etag", "options", b"options"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["etag", b"etag", "key", b"key", "metadata", b"metadata", "options", b"options", "store_name", b"store_name"]) -> None: ... global___DeleteStateRequest = DeleteStateRequest -@typing_extensions.final +@typing.final class DeleteBulkStateRequest(google.protobuf.message.Message): """DeleteBulkStateRequest is the message to delete a list of key-value states from specific state store.""" @@ -370,17 +381,18 @@ class DeleteBulkStateRequest(google.protobuf.message.Message): @property def states(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[dapr.proto.common.v1.common_pb2.StateItem]: """The array of the state key values.""" + def __init__( self, *, store_name: builtins.str = ..., states: collections.abc.Iterable[dapr.proto.common.v1.common_pb2.StateItem] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["states", b"states", "store_name", b"store_name"]) -> None: ... + def ClearField(self, field_name: typing.Literal["states", b"states", "store_name", b"store_name"]) -> None: ... global___DeleteBulkStateRequest = DeleteBulkStateRequest -@typing_extensions.final +@typing.final class SaveStateRequest(google.protobuf.message.Message): """SaveStateRequest is the message to save multiple states into state store.""" @@ -393,23 +405,24 @@ class SaveStateRequest(google.protobuf.message.Message): @property def states(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[dapr.proto.common.v1.common_pb2.StateItem]: """The array of the state key values.""" + def __init__( self, *, store_name: builtins.str = ..., states: collections.abc.Iterable[dapr.proto.common.v1.common_pb2.StateItem] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["states", b"states", "store_name", b"store_name"]) -> None: ... + def ClearField(self, field_name: typing.Literal["states", b"states", "store_name", b"store_name"]) -> None: ... global___SaveStateRequest = SaveStateRequest -@typing_extensions.final +@typing.final class QueryStateRequest(google.protobuf.message.Message): """QueryStateRequest is the message to query state store.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing_extensions.final + @typing.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -423,7 +436,7 @@ class QueryStateRequest(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... STORE_NAME_FIELD_NUMBER: builtins.int QUERY_FIELD_NUMBER: builtins.int @@ -435,6 +448,7 @@ class QueryStateRequest(google.protobuf.message.Message): @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """The metadata which will be sent to state store components.""" + def __init__( self, *, @@ -442,11 +456,11 @@ class QueryStateRequest(google.protobuf.message.Message): query: builtins.str = ..., metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["metadata", b"metadata", "query", b"query", "store_name", b"store_name"]) -> None: ... + def ClearField(self, field_name: typing.Literal["metadata", b"metadata", "query", b"query", "store_name", b"store_name"]) -> None: ... global___QueryStateRequest = QueryStateRequest -@typing_extensions.final +@typing.final class QueryStateItem(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -472,17 +486,17 @@ class QueryStateItem(google.protobuf.message.Message): etag: builtins.str = ..., error: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["data", b"data", "error", b"error", "etag", b"etag", "key", b"key"]) -> None: ... + def ClearField(self, field_name: typing.Literal["data", b"data", "error", b"error", "etag", b"etag", "key", b"key"]) -> None: ... global___QueryStateItem = QueryStateItem -@typing_extensions.final +@typing.final class QueryStateResponse(google.protobuf.message.Message): """QueryStateResponse is the response conveying the query results.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing_extensions.final + @typing.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -496,19 +510,21 @@ class QueryStateResponse(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... RESULTS_FIELD_NUMBER: builtins.int TOKEN_FIELD_NUMBER: builtins.int METADATA_FIELD_NUMBER: builtins.int + token: builtins.str + """Pagination token.""" @property def results(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___QueryStateItem]: """An array of query results.""" - token: builtins.str - """Pagination token.""" + @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """The metadata which will be sent to app.""" + def __init__( self, *, @@ -516,17 +532,17 @@ class QueryStateResponse(google.protobuf.message.Message): token: builtins.str = ..., metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["metadata", b"metadata", "results", b"results", "token", b"token"]) -> None: ... + def ClearField(self, field_name: typing.Literal["metadata", b"metadata", "results", b"results", "token", b"token"]) -> None: ... global___QueryStateResponse = QueryStateResponse -@typing_extensions.final +@typing.final class PublishEventRequest(google.protobuf.message.Message): """PublishEventRequest is the message to publish event data to pubsub topic""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing_extensions.final + @typing.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -540,7 +556,7 @@ class PublishEventRequest(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... PUBSUB_NAME_FIELD_NUMBER: builtins.int TOPIC_FIELD_NUMBER: builtins.int @@ -562,6 +578,7 @@ class PublishEventRequest(google.protobuf.message.Message): metadata property: - key : the key of the message. """ + def __init__( self, *, @@ -571,17 +588,17 @@ class PublishEventRequest(google.protobuf.message.Message): data_content_type: builtins.str = ..., metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["data", b"data", "data_content_type", b"data_content_type", "metadata", b"metadata", "pubsub_name", b"pubsub_name", "topic", b"topic"]) -> None: ... + def ClearField(self, field_name: typing.Literal["data", b"data", "data_content_type", b"data_content_type", "metadata", b"metadata", "pubsub_name", b"pubsub_name", "topic", b"topic"]) -> None: ... global___PublishEventRequest = PublishEventRequest -@typing_extensions.final +@typing.final class BulkPublishRequest(google.protobuf.message.Message): """BulkPublishRequest is the message to bulk publish events to pubsub topic""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing_extensions.final + @typing.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -595,7 +612,7 @@ class BulkPublishRequest(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... PUBSUB_NAME_FIELD_NUMBER: builtins.int TOPIC_FIELD_NUMBER: builtins.int @@ -608,9 +625,11 @@ class BulkPublishRequest(google.protobuf.message.Message): @property def entries(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___BulkPublishRequestEntry]: """The entries which contain the individual events and associated details to be published""" + @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """The request level metadata passing to to the pubsub components""" + def __init__( self, *, @@ -619,17 +638,17 @@ class BulkPublishRequest(google.protobuf.message.Message): entries: collections.abc.Iterable[global___BulkPublishRequestEntry] | None = ..., metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["entries", b"entries", "metadata", b"metadata", "pubsub_name", b"pubsub_name", "topic", b"topic"]) -> None: ... + def ClearField(self, field_name: typing.Literal["entries", b"entries", "metadata", b"metadata", "pubsub_name", b"pubsub_name", "topic", b"topic"]) -> None: ... global___BulkPublishRequest = BulkPublishRequest -@typing_extensions.final +@typing.final class BulkPublishRequestEntry(google.protobuf.message.Message): """BulkPublishRequestEntry is the message containing the event to be bulk published""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing_extensions.final + @typing.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -643,7 +662,7 @@ class BulkPublishRequestEntry(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... ENTRY_ID_FIELD_NUMBER: builtins.int EVENT_FIELD_NUMBER: builtins.int @@ -658,6 +677,7 @@ class BulkPublishRequestEntry(google.protobuf.message.Message): @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """The event level metadata passing to the pubsub component""" + def __init__( self, *, @@ -666,11 +686,11 @@ class BulkPublishRequestEntry(google.protobuf.message.Message): content_type: builtins.str = ..., metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["content_type", b"content_type", "entry_id", b"entry_id", "event", b"event", "metadata", b"metadata"]) -> None: ... + def ClearField(self, field_name: typing.Literal["content_type", b"content_type", "entry_id", b"entry_id", "event", b"event", "metadata", b"metadata"]) -> None: ... global___BulkPublishRequestEntry = BulkPublishRequestEntry -@typing_extensions.final +@typing.final class BulkPublishResponse(google.protobuf.message.Message): """BulkPublishResponse is the message returned from a BulkPublishEvent call""" @@ -680,16 +700,17 @@ class BulkPublishResponse(google.protobuf.message.Message): @property def failedEntries(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___BulkPublishResponseFailedEntry]: """The entries for different events that failed publish in the BulkPublishEvent call""" + def __init__( self, *, failedEntries: collections.abc.Iterable[global___BulkPublishResponseFailedEntry] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["failedEntries", b"failedEntries"]) -> None: ... + def ClearField(self, field_name: typing.Literal["failedEntries", b"failedEntries"]) -> None: ... global___BulkPublishResponse = BulkPublishResponse -@typing_extensions.final +@typing.final class BulkPublishResponseFailedEntry(google.protobuf.message.Message): """BulkPublishResponseFailedEntry is the message containing the entryID and error of a failed event in BulkPublishEvent call""" @@ -707,11 +728,11 @@ class BulkPublishResponseFailedEntry(google.protobuf.message.Message): entry_id: builtins.str = ..., error: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["entry_id", b"entry_id", "error", b"error"]) -> None: ... + def ClearField(self, field_name: typing.Literal["entry_id", b"entry_id", "error", b"error"]) -> None: ... global___BulkPublishResponseFailedEntry = BulkPublishResponseFailedEntry -@typing_extensions.final +@typing.final class SubscribeTopicEventsRequestAlpha1(google.protobuf.message.Message): """SubscribeTopicEventsRequestAlpha1 is a message containing the details for subscribing to a topic via streaming. @@ -733,13 +754,13 @@ class SubscribeTopicEventsRequestAlpha1(google.protobuf.message.Message): initial_request: global___SubscribeTopicEventsRequestInitialAlpha1 | None = ..., event_processed: global___SubscribeTopicEventsRequestProcessedAlpha1 | None = ..., ) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["event_processed", b"event_processed", "initial_request", b"initial_request", "subscribe_topic_events_request_type", b"subscribe_topic_events_request_type"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["event_processed", b"event_processed", "initial_request", b"initial_request", "subscribe_topic_events_request_type", b"subscribe_topic_events_request_type"]) -> None: ... - def WhichOneof(self, oneof_group: typing_extensions.Literal["subscribe_topic_events_request_type", b"subscribe_topic_events_request_type"]) -> typing_extensions.Literal["initial_request", "event_processed"] | None: ... + def HasField(self, field_name: typing.Literal["event_processed", b"event_processed", "initial_request", b"initial_request", "subscribe_topic_events_request_type", b"subscribe_topic_events_request_type"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["event_processed", b"event_processed", "initial_request", b"initial_request", "subscribe_topic_events_request_type", b"subscribe_topic_events_request_type"]) -> None: ... + def WhichOneof(self, oneof_group: typing.Literal["subscribe_topic_events_request_type", b"subscribe_topic_events_request_type"]) -> typing.Literal["initial_request", "event_processed"] | None: ... global___SubscribeTopicEventsRequestAlpha1 = SubscribeTopicEventsRequestAlpha1 -@typing_extensions.final +@typing.final class SubscribeTopicEventsRequestInitialAlpha1(google.protobuf.message.Message): """SubscribeTopicEventsRequestInitialAlpha1 is the initial message containing the details for subscribing to a topic via streaming. @@ -747,7 +768,7 @@ class SubscribeTopicEventsRequestInitialAlpha1(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing_extensions.final + @typing.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -761,7 +782,7 @@ class SubscribeTopicEventsRequestInitialAlpha1(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... PUBSUB_NAME_FIELD_NUMBER: builtins.int TOPIC_FIELD_NUMBER: builtins.int @@ -771,6 +792,10 @@ class SubscribeTopicEventsRequestInitialAlpha1(google.protobuf.message.Message): """The name of the pubsub component""" topic: builtins.str """The pubsub topic""" + dead_letter_topic: builtins.str + """dead_letter_topic is the topic to which messages that fail to be processed + are sent. + """ @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """The metadata passing to pub components @@ -778,10 +803,7 @@ class SubscribeTopicEventsRequestInitialAlpha1(google.protobuf.message.Message): metadata property: - key : the key of the message. """ - dead_letter_topic: builtins.str - """dead_letter_topic is the topic to which messages that fail to be processed - are sent. - """ + def __init__( self, *, @@ -790,13 +812,13 @@ class SubscribeTopicEventsRequestInitialAlpha1(google.protobuf.message.Message): metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., dead_letter_topic: builtins.str | None = ..., ) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["_dead_letter_topic", b"_dead_letter_topic", "dead_letter_topic", b"dead_letter_topic"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["_dead_letter_topic", b"_dead_letter_topic", "dead_letter_topic", b"dead_letter_topic", "metadata", b"metadata", "pubsub_name", b"pubsub_name", "topic", b"topic"]) -> None: ... - def WhichOneof(self, oneof_group: typing_extensions.Literal["_dead_letter_topic", b"_dead_letter_topic"]) -> typing_extensions.Literal["dead_letter_topic"] | None: ... + def HasField(self, field_name: typing.Literal["_dead_letter_topic", b"_dead_letter_topic", "dead_letter_topic", b"dead_letter_topic"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["_dead_letter_topic", b"_dead_letter_topic", "dead_letter_topic", b"dead_letter_topic", "metadata", b"metadata", "pubsub_name", b"pubsub_name", "topic", b"topic"]) -> None: ... + def WhichOneof(self, oneof_group: typing.Literal["_dead_letter_topic", b"_dead_letter_topic"]) -> typing.Literal["dead_letter_topic"] | None: ... global___SubscribeTopicEventsRequestInitialAlpha1 = SubscribeTopicEventsRequestInitialAlpha1 -@typing_extensions.final +@typing.final class SubscribeTopicEventsRequestProcessedAlpha1(google.protobuf.message.Message): """SubscribeTopicEventsRequestProcessedAlpha1 is the message containing the subscription to a topic. @@ -811,18 +833,19 @@ class SubscribeTopicEventsRequestProcessedAlpha1(google.protobuf.message.Message @property def status(self) -> dapr.proto.runtime.v1.appcallback_pb2.TopicEventResponse: """status is the result of the subscription request.""" + def __init__( self, *, id: builtins.str = ..., status: dapr.proto.runtime.v1.appcallback_pb2.TopicEventResponse | None = ..., ) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["status", b"status"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["id", b"id", "status", b"status"]) -> None: ... + def HasField(self, field_name: typing.Literal["status", b"status"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["id", b"id", "status", b"status"]) -> None: ... global___SubscribeTopicEventsRequestProcessedAlpha1 = SubscribeTopicEventsRequestProcessedAlpha1 -@typing_extensions.final +@typing.final class SubscribeTopicEventsResponseAlpha1(google.protobuf.message.Message): """SubscribeTopicEventsResponseAlpha1 is a message returned from daprd when subscribing to a topic via streaming. @@ -842,13 +865,13 @@ class SubscribeTopicEventsResponseAlpha1(google.protobuf.message.Message): initial_response: global___SubscribeTopicEventsResponseInitialAlpha1 | None = ..., event_message: dapr.proto.runtime.v1.appcallback_pb2.TopicEventRequest | None = ..., ) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["event_message", b"event_message", "initial_response", b"initial_response", "subscribe_topic_events_response_type", b"subscribe_topic_events_response_type"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["event_message", b"event_message", "initial_response", b"initial_response", "subscribe_topic_events_response_type", b"subscribe_topic_events_response_type"]) -> None: ... - def WhichOneof(self, oneof_group: typing_extensions.Literal["subscribe_topic_events_response_type", b"subscribe_topic_events_response_type"]) -> typing_extensions.Literal["initial_response", "event_message"] | None: ... + def HasField(self, field_name: typing.Literal["event_message", b"event_message", "initial_response", b"initial_response", "subscribe_topic_events_response_type", b"subscribe_topic_events_response_type"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["event_message", b"event_message", "initial_response", b"initial_response", "subscribe_topic_events_response_type", b"subscribe_topic_events_response_type"]) -> None: ... + def WhichOneof(self, oneof_group: typing.Literal["subscribe_topic_events_response_type", b"subscribe_topic_events_response_type"]) -> typing.Literal["initial_response", "event_message"] | None: ... global___SubscribeTopicEventsResponseAlpha1 = SubscribeTopicEventsResponseAlpha1 -@typing_extensions.final +@typing.final class SubscribeTopicEventsResponseInitialAlpha1(google.protobuf.message.Message): """SubscribeTopicEventsResponseInitialAlpha1 is the initial response from daprd when subscribing to a topic. @@ -862,13 +885,13 @@ class SubscribeTopicEventsResponseInitialAlpha1(google.protobuf.message.Message) global___SubscribeTopicEventsResponseInitialAlpha1 = SubscribeTopicEventsResponseInitialAlpha1 -@typing_extensions.final +@typing.final class InvokeBindingRequest(google.protobuf.message.Message): """InvokeBindingRequest is the message to send data to output bindings""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing_extensions.final + @typing.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -882,7 +905,7 @@ class InvokeBindingRequest(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... NAME_FIELD_NUMBER: builtins.int DATA_FIELD_NUMBER: builtins.int @@ -892,6 +915,8 @@ class InvokeBindingRequest(google.protobuf.message.Message): """The name of the output binding to invoke.""" data: builtins.bytes """The data which will be sent to output binding.""" + operation: builtins.str + """The name of the operation type for the binding to invoke""" @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """The metadata passing to output binding components @@ -903,8 +928,7 @@ class InvokeBindingRequest(google.protobuf.message.Message): have a default time to live. The message ttl overrides any value in the binding definition. """ - operation: builtins.str - """The name of the operation type for the binding to invoke""" + def __init__( self, *, @@ -913,17 +937,17 @@ class InvokeBindingRequest(google.protobuf.message.Message): metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., operation: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["data", b"data", "metadata", b"metadata", "name", b"name", "operation", b"operation"]) -> None: ... + def ClearField(self, field_name: typing.Literal["data", b"data", "metadata", b"metadata", "name", b"name", "operation", b"operation"]) -> None: ... global___InvokeBindingRequest = InvokeBindingRequest -@typing_extensions.final +@typing.final class InvokeBindingResponse(google.protobuf.message.Message): """InvokeBindingResponse is the message returned from an output binding invocation""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing_extensions.final + @typing.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -937,7 +961,7 @@ class InvokeBindingResponse(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... DATA_FIELD_NUMBER: builtins.int METADATA_FIELD_NUMBER: builtins.int @@ -946,23 +970,24 @@ class InvokeBindingResponse(google.protobuf.message.Message): @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """The metadata returned from an external system""" + def __init__( self, *, data: builtins.bytes = ..., metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["data", b"data", "metadata", b"metadata"]) -> None: ... + def ClearField(self, field_name: typing.Literal["data", b"data", "metadata", b"metadata"]) -> None: ... global___InvokeBindingResponse = InvokeBindingResponse -@typing_extensions.final +@typing.final class GetSecretRequest(google.protobuf.message.Message): """GetSecretRequest is the message to get secret from secret store.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing_extensions.final + @typing.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -976,7 +1001,7 @@ class GetSecretRequest(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... STORE_NAME_FIELD_NUMBER: builtins.int KEY_FIELD_NUMBER: builtins.int @@ -988,6 +1013,7 @@ class GetSecretRequest(google.protobuf.message.Message): @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """The metadata which will be sent to secret store components.""" + def __init__( self, *, @@ -995,17 +1021,17 @@ class GetSecretRequest(google.protobuf.message.Message): key: builtins.str = ..., metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "metadata", b"metadata", "store_name", b"store_name"]) -> None: ... + def ClearField(self, field_name: typing.Literal["key", b"key", "metadata", b"metadata", "store_name", b"store_name"]) -> None: ... global___GetSecretRequest = GetSecretRequest -@typing_extensions.final +@typing.final class GetSecretResponse(google.protobuf.message.Message): """GetSecretResponse is the response message to convey the requested secret.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing_extensions.final + @typing.final class DataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -1019,7 +1045,7 @@ class GetSecretResponse(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... DATA_FIELD_NUMBER: builtins.int @property @@ -1027,22 +1053,23 @@ class GetSecretResponse(google.protobuf.message.Message): """data is the secret value. Some secret store, such as kubernetes secret store, can save multiple secrets for single secret key. """ + def __init__( self, *, data: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["data", b"data"]) -> None: ... + def ClearField(self, field_name: typing.Literal["data", b"data"]) -> None: ... global___GetSecretResponse = GetSecretResponse -@typing_extensions.final +@typing.final class GetBulkSecretRequest(google.protobuf.message.Message): """GetBulkSecretRequest is the message to get the secrets from secret store.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing_extensions.final + @typing.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -1056,7 +1083,7 @@ class GetBulkSecretRequest(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... STORE_NAME_FIELD_NUMBER: builtins.int METADATA_FIELD_NUMBER: builtins.int @@ -1065,23 +1092,24 @@ class GetBulkSecretRequest(google.protobuf.message.Message): @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """The metadata which will be sent to secret store components.""" + def __init__( self, *, store_name: builtins.str = ..., metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["metadata", b"metadata", "store_name", b"store_name"]) -> None: ... + def ClearField(self, field_name: typing.Literal["metadata", b"metadata", "store_name", b"store_name"]) -> None: ... global___GetBulkSecretRequest = GetBulkSecretRequest -@typing_extensions.final +@typing.final class SecretResponse(google.protobuf.message.Message): """SecretResponse is a map of decrypted string/string values""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing_extensions.final + @typing.final class SecretsEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -1095,7 +1123,7 @@ class SecretResponse(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... SECRETS_FIELD_NUMBER: builtins.int @property @@ -1105,17 +1133,17 @@ class SecretResponse(google.protobuf.message.Message): *, secrets: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["secrets", b"secrets"]) -> None: ... + def ClearField(self, field_name: typing.Literal["secrets", b"secrets"]) -> None: ... global___SecretResponse = SecretResponse -@typing_extensions.final +@typing.final class GetBulkSecretResponse(google.protobuf.message.Message): """GetBulkSecretResponse is the response message to convey the requested secrets.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing_extensions.final + @typing.final class DataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -1130,8 +1158,8 @@ class GetBulkSecretResponse(google.protobuf.message.Message): key: builtins.str = ..., value: global___SecretResponse | None = ..., ) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["value", b"value"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... + def HasField(self, field_name: typing.Literal["value", b"value"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... DATA_FIELD_NUMBER: builtins.int @property @@ -1139,16 +1167,17 @@ class GetBulkSecretResponse(google.protobuf.message.Message): """data hold the secret values. Some secret store, such as kubernetes secret store, can save multiple secrets for single secret key. """ + def __init__( self, *, data: collections.abc.Mapping[builtins.str, global___SecretResponse] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["data", b"data"]) -> None: ... + def ClearField(self, field_name: typing.Literal["data", b"data"]) -> None: ... global___GetBulkSecretResponse = GetBulkSecretResponse -@typing_extensions.final +@typing.final class TransactionalStateOperation(google.protobuf.message.Message): """TransactionalStateOperation is the message to execute a specified operation with a key-value pair.""" @@ -1161,24 +1190,25 @@ class TransactionalStateOperation(google.protobuf.message.Message): @property def request(self) -> dapr.proto.common.v1.common_pb2.StateItem: """State values to be operated on""" + def __init__( self, *, operationType: builtins.str = ..., request: dapr.proto.common.v1.common_pb2.StateItem | None = ..., ) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["request", b"request"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["operationType", b"operationType", "request", b"request"]) -> None: ... + def HasField(self, field_name: typing.Literal["request", b"request"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["operationType", b"operationType", "request", b"request"]) -> None: ... global___TransactionalStateOperation = TransactionalStateOperation -@typing_extensions.final +@typing.final class ExecuteStateTransactionRequest(google.protobuf.message.Message): """ExecuteStateTransactionRequest is the message to execute multiple operations on a specified store.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing_extensions.final + @typing.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -1192,7 +1222,7 @@ class ExecuteStateTransactionRequest(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... STORENAME_FIELD_NUMBER: builtins.int OPERATIONS_FIELD_NUMBER: builtins.int @@ -1202,9 +1232,11 @@ class ExecuteStateTransactionRequest(google.protobuf.message.Message): @property def operations(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___TransactionalStateOperation]: """Required. transactional operation list.""" + @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """The metadata used for transactional operations.""" + def __init__( self, *, @@ -1212,11 +1244,11 @@ class ExecuteStateTransactionRequest(google.protobuf.message.Message): operations: collections.abc.Iterable[global___TransactionalStateOperation] | None = ..., metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["metadata", b"metadata", "operations", b"operations", "storeName", b"storeName"]) -> None: ... + def ClearField(self, field_name: typing.Literal["metadata", b"metadata", "operations", b"operations", "storeName", b"storeName"]) -> None: ... global___ExecuteStateTransactionRequest = ExecuteStateTransactionRequest -@typing_extensions.final +@typing.final class RegisterActorTimerRequest(google.protobuf.message.Message): """RegisterActorTimerRequest is the message to register a timer for an actor of a given type and id.""" @@ -1250,11 +1282,11 @@ class RegisterActorTimerRequest(google.protobuf.message.Message): data: builtins.bytes = ..., ttl: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["actor_id", b"actor_id", "actor_type", b"actor_type", "callback", b"callback", "data", b"data", "due_time", b"due_time", "name", b"name", "period", b"period", "ttl", b"ttl"]) -> None: ... + def ClearField(self, field_name: typing.Literal["actor_id", b"actor_id", "actor_type", b"actor_type", "callback", b"callback", "data", b"data", "due_time", b"due_time", "name", b"name", "period", b"period", "ttl", b"ttl"]) -> None: ... global___RegisterActorTimerRequest = RegisterActorTimerRequest -@typing_extensions.final +@typing.final class UnregisterActorTimerRequest(google.protobuf.message.Message): """UnregisterActorTimerRequest is the message to unregister an actor timer""" @@ -1273,11 +1305,11 @@ class UnregisterActorTimerRequest(google.protobuf.message.Message): actor_id: builtins.str = ..., name: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["actor_id", b"actor_id", "actor_type", b"actor_type", "name", b"name"]) -> None: ... + def ClearField(self, field_name: typing.Literal["actor_id", b"actor_id", "actor_type", b"actor_type", "name", b"name"]) -> None: ... global___UnregisterActorTimerRequest = UnregisterActorTimerRequest -@typing_extensions.final +@typing.final class RegisterActorReminderRequest(google.protobuf.message.Message): """RegisterActorReminderRequest is the message to register a reminder for an actor of a given type and id.""" @@ -1308,11 +1340,11 @@ class RegisterActorReminderRequest(google.protobuf.message.Message): data: builtins.bytes = ..., ttl: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["actor_id", b"actor_id", "actor_type", b"actor_type", "data", b"data", "due_time", b"due_time", "name", b"name", "period", b"period", "ttl", b"ttl"]) -> None: ... + def ClearField(self, field_name: typing.Literal["actor_id", b"actor_id", "actor_type", b"actor_type", "data", b"data", "due_time", b"due_time", "name", b"name", "period", b"period", "ttl", b"ttl"]) -> None: ... global___RegisterActorReminderRequest = RegisterActorReminderRequest -@typing_extensions.final +@typing.final class UnregisterActorReminderRequest(google.protobuf.message.Message): """UnregisterActorReminderRequest is the message to unregister an actor reminder.""" @@ -1331,11 +1363,11 @@ class UnregisterActorReminderRequest(google.protobuf.message.Message): actor_id: builtins.str = ..., name: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["actor_id", b"actor_id", "actor_type", b"actor_type", "name", b"name"]) -> None: ... + def ClearField(self, field_name: typing.Literal["actor_id", b"actor_id", "actor_type", b"actor_type", "name", b"name"]) -> None: ... global___UnregisterActorReminderRequest = UnregisterActorReminderRequest -@typing_extensions.final +@typing.final class GetActorStateRequest(google.protobuf.message.Message): """GetActorStateRequest is the message to get key-value states from specific actor.""" @@ -1354,17 +1386,17 @@ class GetActorStateRequest(google.protobuf.message.Message): actor_id: builtins.str = ..., key: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["actor_id", b"actor_id", "actor_type", b"actor_type", "key", b"key"]) -> None: ... + def ClearField(self, field_name: typing.Literal["actor_id", b"actor_id", "actor_type", b"actor_type", "key", b"key"]) -> None: ... global___GetActorStateRequest = GetActorStateRequest -@typing_extensions.final +@typing.final class GetActorStateResponse(google.protobuf.message.Message): """GetActorStateResponse is the response conveying the actor's state value.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing_extensions.final + @typing.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -1378,7 +1410,7 @@ class GetActorStateResponse(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... DATA_FIELD_NUMBER: builtins.int METADATA_FIELD_NUMBER: builtins.int @@ -1386,17 +1418,18 @@ class GetActorStateResponse(google.protobuf.message.Message): @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """The metadata which will be sent to app.""" + def __init__( self, *, data: builtins.bytes = ..., metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["data", b"data", "metadata", b"metadata"]) -> None: ... + def ClearField(self, field_name: typing.Literal["data", b"data", "metadata", b"metadata"]) -> None: ... global___GetActorStateResponse = GetActorStateResponse -@typing_extensions.final +@typing.final class ExecuteActorStateTransactionRequest(google.protobuf.message.Message): """ExecuteActorStateTransactionRequest is the message to execute multiple operations on a specified actor.""" @@ -1416,17 +1449,17 @@ class ExecuteActorStateTransactionRequest(google.protobuf.message.Message): actor_id: builtins.str = ..., operations: collections.abc.Iterable[global___TransactionalActorStateOperation] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["actor_id", b"actor_id", "actor_type", b"actor_type", "operations", b"operations"]) -> None: ... + def ClearField(self, field_name: typing.Literal["actor_id", b"actor_id", "actor_type", b"actor_type", "operations", b"operations"]) -> None: ... global___ExecuteActorStateTransactionRequest = ExecuteActorStateTransactionRequest -@typing_extensions.final +@typing.final class TransactionalActorStateOperation(google.protobuf.message.Message): """TransactionalActorStateOperation is the message to execute a specified operation with a key-value pair.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing_extensions.final + @typing.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -1440,7 +1473,7 @@ class TransactionalActorStateOperation(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... OPERATIONTYPE_FIELD_NUMBER: builtins.int KEY_FIELD_NUMBER: builtins.int @@ -1457,6 +1490,7 @@ class TransactionalActorStateOperation(google.protobuf.message.Message): Common metadata property: - ttlInSeconds : the time to live in seconds for the stored value. """ + def __init__( self, *, @@ -1465,18 +1499,18 @@ class TransactionalActorStateOperation(google.protobuf.message.Message): value: google.protobuf.any_pb2.Any | None = ..., metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["value", b"value"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "metadata", b"metadata", "operationType", b"operationType", "value", b"value"]) -> None: ... + def HasField(self, field_name: typing.Literal["value", b"value"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["key", b"key", "metadata", b"metadata", "operationType", b"operationType", "value", b"value"]) -> None: ... global___TransactionalActorStateOperation = TransactionalActorStateOperation -@typing_extensions.final +@typing.final class InvokeActorRequest(google.protobuf.message.Message): """InvokeActorRequest is the message to call an actor.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing_extensions.final + @typing.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -1490,7 +1524,7 @@ class InvokeActorRequest(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... ACTOR_TYPE_FIELD_NUMBER: builtins.int ACTOR_ID_FIELD_NUMBER: builtins.int @@ -1512,11 +1546,11 @@ class InvokeActorRequest(google.protobuf.message.Message): data: builtins.bytes = ..., metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["actor_id", b"actor_id", "actor_type", b"actor_type", "data", b"data", "metadata", b"metadata", "method", b"method"]) -> None: ... + def ClearField(self, field_name: typing.Literal["actor_id", b"actor_id", "actor_type", b"actor_type", "data", b"data", "metadata", b"metadata", "method", b"method"]) -> None: ... global___InvokeActorRequest = InvokeActorRequest -@typing_extensions.final +@typing.final class InvokeActorResponse(google.protobuf.message.Message): """InvokeActorResponse is the method that returns an actor invocation response.""" @@ -1529,11 +1563,11 @@ class InvokeActorResponse(google.protobuf.message.Message): *, data: builtins.bytes = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["data", b"data"]) -> None: ... + def ClearField(self, field_name: typing.Literal["data", b"data"]) -> None: ... global___InvokeActorResponse = InvokeActorResponse -@typing_extensions.final +@typing.final class GetMetadataRequest(google.protobuf.message.Message): """GetMetadataRequest is the message for the GetMetadata request. Empty @@ -1547,13 +1581,13 @@ class GetMetadataRequest(google.protobuf.message.Message): global___GetMetadataRequest = GetMetadataRequest -@typing_extensions.final +@typing.final class GetMetadataResponse(google.protobuf.message.Message): """GetMetadataResponse is a message that is returned on GetMetadata rpc call.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing_extensions.final + @typing.final class ExtendedMetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -1567,7 +1601,7 @@ class GetMetadataResponse(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... ID_FIELD_NUMBER: builtins.int ACTIVE_ACTORS_COUNT_FIELD_NUMBER: builtins.int @@ -1580,9 +1614,11 @@ class GetMetadataResponse(google.protobuf.message.Message): ENABLED_FEATURES_FIELD_NUMBER: builtins.int ACTOR_RUNTIME_FIELD_NUMBER: builtins.int id: builtins.str + runtime_version: builtins.str @property def active_actors_count(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___ActiveActorsCount]: """Deprecated alias for actor_runtime.active_actors.""" + @property def registered_components(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___RegisteredComponents]: ... @property @@ -1593,12 +1629,12 @@ class GetMetadataResponse(google.protobuf.message.Message): def http_endpoints(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___MetadataHTTPEndpoint]: ... @property def app_connection_properties(self) -> global___AppConnectionProperties: ... - runtime_version: builtins.str @property def enabled_features(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]: ... @property def actor_runtime(self) -> global___ActorRuntime: """TODO: Cassie: probably add scheduler runtime status""" + def __init__( self, *, @@ -1613,12 +1649,12 @@ class GetMetadataResponse(google.protobuf.message.Message): enabled_features: collections.abc.Iterable[builtins.str] | None = ..., actor_runtime: global___ActorRuntime | None = ..., ) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["actor_runtime", b"actor_runtime", "app_connection_properties", b"app_connection_properties"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["active_actors_count", b"active_actors_count", "actor_runtime", b"actor_runtime", "app_connection_properties", b"app_connection_properties", "enabled_features", b"enabled_features", "extended_metadata", b"extended_metadata", "http_endpoints", b"http_endpoints", "id", b"id", "registered_components", b"registered_components", "runtime_version", b"runtime_version", "subscriptions", b"subscriptions"]) -> None: ... + def HasField(self, field_name: typing.Literal["actor_runtime", b"actor_runtime", "app_connection_properties", b"app_connection_properties"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["active_actors_count", b"active_actors_count", "actor_runtime", b"actor_runtime", "app_connection_properties", b"app_connection_properties", "enabled_features", b"enabled_features", "extended_metadata", b"extended_metadata", "http_endpoints", b"http_endpoints", "id", b"id", "registered_components", b"registered_components", "runtime_version", b"runtime_version", "subscriptions", b"subscriptions"]) -> None: ... global___GetMetadataResponse = GetMetadataResponse -@typing_extensions.final +@typing.final class ActorRuntime(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -1653,13 +1689,14 @@ class ActorRuntime(google.protobuf.message.Message): PLACEMENT_FIELD_NUMBER: builtins.int runtime_status: global___ActorRuntime.ActorRuntimeStatus.ValueType """Contains an enum indicating whether the actor runtime has been initialized.""" - @property - def active_actors(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___ActiveActorsCount]: - """Count of active actors per type.""" host_ready: builtins.bool """Indicates whether the actor runtime is ready to host actors.""" placement: builtins.str """Custom message from the placement provider.""" + @property + def active_actors(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___ActiveActorsCount]: + """Count of active actors per type.""" + def __init__( self, *, @@ -1668,11 +1705,11 @@ class ActorRuntime(google.protobuf.message.Message): host_ready: builtins.bool = ..., placement: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["active_actors", b"active_actors", "host_ready", b"host_ready", "placement", b"placement", "runtime_status", b"runtime_status"]) -> None: ... + def ClearField(self, field_name: typing.Literal["active_actors", b"active_actors", "host_ready", b"host_ready", "placement", b"placement", "runtime_status", b"runtime_status"]) -> None: ... global___ActorRuntime = ActorRuntime -@typing_extensions.final +@typing.final class ActiveActorsCount(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -1686,11 +1723,11 @@ class ActiveActorsCount(google.protobuf.message.Message): type: builtins.str = ..., count: builtins.int = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["count", b"count", "type", b"type"]) -> None: ... + def ClearField(self, field_name: typing.Literal["count", b"count", "type", b"type"]) -> None: ... global___ActiveActorsCount = ActiveActorsCount -@typing_extensions.final +@typing.final class RegisteredComponents(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -1711,11 +1748,11 @@ class RegisteredComponents(google.protobuf.message.Message): version: builtins.str = ..., capabilities: collections.abc.Iterable[builtins.str] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["capabilities", b"capabilities", "name", b"name", "type", b"type", "version", b"version"]) -> None: ... + def ClearField(self, field_name: typing.Literal["capabilities", b"capabilities", "name", b"name", "type", b"type", "version", b"version"]) -> None: ... global___RegisteredComponents = RegisteredComponents -@typing_extensions.final +@typing.final class MetadataHTTPEndpoint(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -1726,11 +1763,11 @@ class MetadataHTTPEndpoint(google.protobuf.message.Message): *, name: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["name", b"name"]) -> None: ... + def ClearField(self, field_name: typing.Literal["name", b"name"]) -> None: ... global___MetadataHTTPEndpoint = MetadataHTTPEndpoint -@typing_extensions.final +@typing.final class AppConnectionProperties(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -1754,12 +1791,12 @@ class AppConnectionProperties(google.protobuf.message.Message): max_concurrency: builtins.int = ..., health: global___AppConnectionHealthProperties | None = ..., ) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["health", b"health"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["channel_address", b"channel_address", "health", b"health", "max_concurrency", b"max_concurrency", "port", b"port", "protocol", b"protocol"]) -> None: ... + def HasField(self, field_name: typing.Literal["health", b"health"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["channel_address", b"channel_address", "health", b"health", "max_concurrency", b"max_concurrency", "port", b"port", "protocol", b"protocol"]) -> None: ... global___AppConnectionProperties = AppConnectionProperties -@typing_extensions.final +@typing.final class AppConnectionHealthProperties(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -1779,15 +1816,15 @@ class AppConnectionHealthProperties(google.protobuf.message.Message): health_probe_timeout: builtins.str = ..., health_threshold: builtins.int = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["health_check_path", b"health_check_path", "health_probe_interval", b"health_probe_interval", "health_probe_timeout", b"health_probe_timeout", "health_threshold", b"health_threshold"]) -> None: ... + def ClearField(self, field_name: typing.Literal["health_check_path", b"health_check_path", "health_probe_interval", b"health_probe_interval", "health_probe_timeout", b"health_probe_timeout", "health_threshold", b"health_threshold"]) -> None: ... global___AppConnectionHealthProperties = AppConnectionHealthProperties -@typing_extensions.final +@typing.final class PubsubSubscription(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing_extensions.final + @typing.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -1801,7 +1838,7 @@ class PubsubSubscription(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... PUBSUB_NAME_FIELD_NUMBER: builtins.int TOPIC_FIELD_NUMBER: builtins.int @@ -1811,12 +1848,12 @@ class PubsubSubscription(google.protobuf.message.Message): TYPE_FIELD_NUMBER: builtins.int pubsub_name: builtins.str topic: builtins.str + dead_letter_topic: builtins.str + type: global___PubsubSubscriptionType.ValueType @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: ... @property def rules(self) -> global___PubsubSubscriptionRules: ... - dead_letter_topic: builtins.str - type: global___PubsubSubscriptionType.ValueType def __init__( self, *, @@ -1827,12 +1864,12 @@ class PubsubSubscription(google.protobuf.message.Message): dead_letter_topic: builtins.str = ..., type: global___PubsubSubscriptionType.ValueType = ..., ) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["rules", b"rules"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["dead_letter_topic", b"dead_letter_topic", "metadata", b"metadata", "pubsub_name", b"pubsub_name", "rules", b"rules", "topic", b"topic", "type", b"type"]) -> None: ... + def HasField(self, field_name: typing.Literal["rules", b"rules"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["dead_letter_topic", b"dead_letter_topic", "metadata", b"metadata", "pubsub_name", b"pubsub_name", "rules", b"rules", "topic", b"topic", "type", b"type"]) -> None: ... global___PubsubSubscription = PubsubSubscription -@typing_extensions.final +@typing.final class PubsubSubscriptionRules(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -1844,11 +1881,11 @@ class PubsubSubscriptionRules(google.protobuf.message.Message): *, rules: collections.abc.Iterable[global___PubsubSubscriptionRule] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["rules", b"rules"]) -> None: ... + def ClearField(self, field_name: typing.Literal["rules", b"rules"]) -> None: ... global___PubsubSubscriptionRules = PubsubSubscriptionRules -@typing_extensions.final +@typing.final class PubsubSubscriptionRule(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -1862,11 +1899,11 @@ class PubsubSubscriptionRule(google.protobuf.message.Message): match: builtins.str = ..., path: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["match", b"match", "path", b"path"]) -> None: ... + def ClearField(self, field_name: typing.Literal["match", b"match", "path", b"path"]) -> None: ... global___PubsubSubscriptionRule = PubsubSubscriptionRule -@typing_extensions.final +@typing.final class SetMetadataRequest(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -1880,17 +1917,17 @@ class SetMetadataRequest(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... global___SetMetadataRequest = SetMetadataRequest -@typing_extensions.final +@typing.final class GetConfigurationRequest(google.protobuf.message.Message): """GetConfigurationRequest is the message to get a list of key-value configuration from specified configuration store.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing_extensions.final + @typing.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -1904,7 +1941,7 @@ class GetConfigurationRequest(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... STORE_NAME_FIELD_NUMBER: builtins.int KEYS_FIELD_NUMBER: builtins.int @@ -1917,9 +1954,11 @@ class GetConfigurationRequest(google.protobuf.message.Message): If set, only query for the specified configuration items. Empty list means fetch all. """ + @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """Optional. The metadata which will be sent to configuration store components.""" + def __init__( self, *, @@ -1927,11 +1966,11 @@ class GetConfigurationRequest(google.protobuf.message.Message): keys: collections.abc.Iterable[builtins.str] | None = ..., metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["keys", b"keys", "metadata", b"metadata", "store_name", b"store_name"]) -> None: ... + def ClearField(self, field_name: typing.Literal["keys", b"keys", "metadata", b"metadata", "store_name", b"store_name"]) -> None: ... global___GetConfigurationRequest = GetConfigurationRequest -@typing_extensions.final +@typing.final class GetConfigurationResponse(google.protobuf.message.Message): """GetConfigurationResponse is the response conveying the list of configuration values. It should be the FULL configuration of specified application which contains all of its configuration items. @@ -1939,7 +1978,7 @@ class GetConfigurationResponse(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing_extensions.final + @typing.final class ItemsEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -1954,8 +1993,8 @@ class GetConfigurationResponse(google.protobuf.message.Message): key: builtins.str = ..., value: dapr.proto.common.v1.common_pb2.ConfigurationItem | None = ..., ) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["value", b"value"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... + def HasField(self, field_name: typing.Literal["value", b"value"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... ITEMS_FIELD_NUMBER: builtins.int @property @@ -1965,17 +2004,17 @@ class GetConfigurationResponse(google.protobuf.message.Message): *, items: collections.abc.Mapping[builtins.str, dapr.proto.common.v1.common_pb2.ConfigurationItem] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["items", b"items"]) -> None: ... + def ClearField(self, field_name: typing.Literal["items", b"items"]) -> None: ... global___GetConfigurationResponse = GetConfigurationResponse -@typing_extensions.final +@typing.final class SubscribeConfigurationRequest(google.protobuf.message.Message): """SubscribeConfigurationRequest is the message to get a list of key-value configuration from specified configuration store.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing_extensions.final + @typing.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -1989,7 +2028,7 @@ class SubscribeConfigurationRequest(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... STORE_NAME_FIELD_NUMBER: builtins.int KEYS_FIELD_NUMBER: builtins.int @@ -2002,9 +2041,11 @@ class SubscribeConfigurationRequest(google.protobuf.message.Message): If set, only query for the specified configuration items. Empty list means fetch all. """ + @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """The metadata which will be sent to configuration store components.""" + def __init__( self, *, @@ -2012,11 +2053,11 @@ class SubscribeConfigurationRequest(google.protobuf.message.Message): keys: collections.abc.Iterable[builtins.str] | None = ..., metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["keys", b"keys", "metadata", b"metadata", "store_name", b"store_name"]) -> None: ... + def ClearField(self, field_name: typing.Literal["keys", b"keys", "metadata", b"metadata", "store_name", b"store_name"]) -> None: ... global___SubscribeConfigurationRequest = SubscribeConfigurationRequest -@typing_extensions.final +@typing.final class UnsubscribeConfigurationRequest(google.protobuf.message.Message): """UnSubscribeConfigurationRequest is the message to stop watching the key-value configuration.""" @@ -2034,15 +2075,15 @@ class UnsubscribeConfigurationRequest(google.protobuf.message.Message): store_name: builtins.str = ..., id: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["id", b"id", "store_name", b"store_name"]) -> None: ... + def ClearField(self, field_name: typing.Literal["id", b"id", "store_name", b"store_name"]) -> None: ... global___UnsubscribeConfigurationRequest = UnsubscribeConfigurationRequest -@typing_extensions.final +@typing.final class SubscribeConfigurationResponse(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing_extensions.final + @typing.final class ItemsEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -2057,8 +2098,8 @@ class SubscribeConfigurationResponse(google.protobuf.message.Message): key: builtins.str = ..., value: dapr.proto.common.v1.common_pb2.ConfigurationItem | None = ..., ) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["value", b"value"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... + def HasField(self, field_name: typing.Literal["value", b"value"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... ID_FIELD_NUMBER: builtins.int ITEMS_FIELD_NUMBER: builtins.int @@ -2067,17 +2108,18 @@ class SubscribeConfigurationResponse(google.protobuf.message.Message): @property def items(self) -> google.protobuf.internal.containers.MessageMap[builtins.str, dapr.proto.common.v1.common_pb2.ConfigurationItem]: """The list of items containing configuration values""" + def __init__( self, *, id: builtins.str = ..., items: collections.abc.Mapping[builtins.str, dapr.proto.common.v1.common_pb2.ConfigurationItem] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["id", b"id", "items", b"items"]) -> None: ... + def ClearField(self, field_name: typing.Literal["id", b"id", "items", b"items"]) -> None: ... global___SubscribeConfigurationResponse = SubscribeConfigurationResponse -@typing_extensions.final +@typing.final class UnsubscribeConfigurationResponse(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -2091,11 +2133,11 @@ class UnsubscribeConfigurationResponse(google.protobuf.message.Message): ok: builtins.bool = ..., message: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["message", b"message", "ok", b"ok"]) -> None: ... + def ClearField(self, field_name: typing.Literal["message", b"message", "ok", b"ok"]) -> None: ... global___UnsubscribeConfigurationResponse = UnsubscribeConfigurationResponse -@typing_extensions.final +@typing.final class TryLockRequest(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -2136,11 +2178,11 @@ class TryLockRequest(google.protobuf.message.Message): lock_owner: builtins.str = ..., expiry_in_seconds: builtins.int = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["expiry_in_seconds", b"expiry_in_seconds", "lock_owner", b"lock_owner", "resource_id", b"resource_id", "store_name", b"store_name"]) -> None: ... + def ClearField(self, field_name: typing.Literal["expiry_in_seconds", b"expiry_in_seconds", "lock_owner", b"lock_owner", "resource_id", b"resource_id", "store_name", b"store_name"]) -> None: ... global___TryLockRequest = TryLockRequest -@typing_extensions.final +@typing.final class TryLockResponse(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -2151,11 +2193,11 @@ class TryLockResponse(google.protobuf.message.Message): *, success: builtins.bool = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["success", b"success"]) -> None: ... + def ClearField(self, field_name: typing.Literal["success", b"success"]) -> None: ... global___TryLockResponse = TryLockResponse -@typing_extensions.final +@typing.final class UnlockRequest(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -2173,11 +2215,11 @@ class UnlockRequest(google.protobuf.message.Message): resource_id: builtins.str = ..., lock_owner: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["lock_owner", b"lock_owner", "resource_id", b"resource_id", "store_name", b"store_name"]) -> None: ... + def ClearField(self, field_name: typing.Literal["lock_owner", b"lock_owner", "resource_id", b"resource_id", "store_name", b"store_name"]) -> None: ... global___UnlockRequest = UnlockRequest -@typing_extensions.final +@typing.final class UnlockResponse(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -2205,11 +2247,11 @@ class UnlockResponse(google.protobuf.message.Message): *, status: global___UnlockResponse.Status.ValueType = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["status", b"status"]) -> None: ... + def ClearField(self, field_name: typing.Literal["status", b"status"]) -> None: ... global___UnlockResponse = UnlockResponse -@typing_extensions.final +@typing.final class SubtleGetKeyRequest(google.protobuf.message.Message): """SubtleGetKeyRequest is the request object for SubtleGetKeyAlpha1.""" @@ -2248,11 +2290,11 @@ class SubtleGetKeyRequest(google.protobuf.message.Message): name: builtins.str = ..., format: global___SubtleGetKeyRequest.KeyFormat.ValueType = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["component_name", b"component_name", "format", b"format", "name", b"name"]) -> None: ... + def ClearField(self, field_name: typing.Literal["component_name", b"component_name", "format", b"format", "name", b"name"]) -> None: ... global___SubtleGetKeyRequest = SubtleGetKeyRequest -@typing_extensions.final +@typing.final class SubtleGetKeyResponse(google.protobuf.message.Message): """SubtleGetKeyResponse is the response for SubtleGetKeyAlpha1.""" @@ -2272,11 +2314,11 @@ class SubtleGetKeyResponse(google.protobuf.message.Message): name: builtins.str = ..., public_key: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["name", b"name", "public_key", b"public_key"]) -> None: ... + def ClearField(self, field_name: typing.Literal["name", b"name", "public_key", b"public_key"]) -> None: ... global___SubtleGetKeyResponse = SubtleGetKeyResponse -@typing_extensions.final +@typing.final class SubtleEncryptRequest(google.protobuf.message.Message): """SubtleEncryptRequest is the request for SubtleEncryptAlpha1.""" @@ -2312,11 +2354,11 @@ class SubtleEncryptRequest(google.protobuf.message.Message): nonce: builtins.bytes = ..., associated_data: builtins.bytes = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["algorithm", b"algorithm", "associated_data", b"associated_data", "component_name", b"component_name", "key_name", b"key_name", "nonce", b"nonce", "plaintext", b"plaintext"]) -> None: ... + def ClearField(self, field_name: typing.Literal["algorithm", b"algorithm", "associated_data", b"associated_data", "component_name", b"component_name", "key_name", b"key_name", "nonce", b"nonce", "plaintext", b"plaintext"]) -> None: ... global___SubtleEncryptRequest = SubtleEncryptRequest -@typing_extensions.final +@typing.final class SubtleEncryptResponse(google.protobuf.message.Message): """SubtleEncryptResponse is the response for SubtleEncryptAlpha1.""" @@ -2336,11 +2378,11 @@ class SubtleEncryptResponse(google.protobuf.message.Message): ciphertext: builtins.bytes = ..., tag: builtins.bytes = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["ciphertext", b"ciphertext", "tag", b"tag"]) -> None: ... + def ClearField(self, field_name: typing.Literal["ciphertext", b"ciphertext", "tag", b"tag"]) -> None: ... global___SubtleEncryptResponse = SubtleEncryptResponse -@typing_extensions.final +@typing.final class SubtleDecryptRequest(google.protobuf.message.Message): """SubtleDecryptRequest is the request for SubtleDecryptAlpha1.""" @@ -2382,11 +2424,11 @@ class SubtleDecryptRequest(google.protobuf.message.Message): tag: builtins.bytes = ..., associated_data: builtins.bytes = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["algorithm", b"algorithm", "associated_data", b"associated_data", "ciphertext", b"ciphertext", "component_name", b"component_name", "key_name", b"key_name", "nonce", b"nonce", "tag", b"tag"]) -> None: ... + def ClearField(self, field_name: typing.Literal["algorithm", b"algorithm", "associated_data", b"associated_data", "ciphertext", b"ciphertext", "component_name", b"component_name", "key_name", b"key_name", "nonce", b"nonce", "tag", b"tag"]) -> None: ... global___SubtleDecryptRequest = SubtleDecryptRequest -@typing_extensions.final +@typing.final class SubtleDecryptResponse(google.protobuf.message.Message): """SubtleDecryptResponse is the response for SubtleDecryptAlpha1.""" @@ -2400,11 +2442,11 @@ class SubtleDecryptResponse(google.protobuf.message.Message): *, plaintext: builtins.bytes = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["plaintext", b"plaintext"]) -> None: ... + def ClearField(self, field_name: typing.Literal["plaintext", b"plaintext"]) -> None: ... global___SubtleDecryptResponse = SubtleDecryptResponse -@typing_extensions.final +@typing.final class SubtleWrapKeyRequest(google.protobuf.message.Message): """SubtleWrapKeyRequest is the request for SubtleWrapKeyAlpha1.""" @@ -2440,11 +2482,11 @@ class SubtleWrapKeyRequest(google.protobuf.message.Message): nonce: builtins.bytes = ..., associated_data: builtins.bytes = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["algorithm", b"algorithm", "associated_data", b"associated_data", "component_name", b"component_name", "key_name", b"key_name", "nonce", b"nonce", "plaintext_key", b"plaintext_key"]) -> None: ... + def ClearField(self, field_name: typing.Literal["algorithm", b"algorithm", "associated_data", b"associated_data", "component_name", b"component_name", "key_name", b"key_name", "nonce", b"nonce", "plaintext_key", b"plaintext_key"]) -> None: ... global___SubtleWrapKeyRequest = SubtleWrapKeyRequest -@typing_extensions.final +@typing.final class SubtleWrapKeyResponse(google.protobuf.message.Message): """SubtleWrapKeyResponse is the response for SubtleWrapKeyAlpha1.""" @@ -2464,11 +2506,11 @@ class SubtleWrapKeyResponse(google.protobuf.message.Message): wrapped_key: builtins.bytes = ..., tag: builtins.bytes = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["tag", b"tag", "wrapped_key", b"wrapped_key"]) -> None: ... + def ClearField(self, field_name: typing.Literal["tag", b"tag", "wrapped_key", b"wrapped_key"]) -> None: ... global___SubtleWrapKeyResponse = SubtleWrapKeyResponse -@typing_extensions.final +@typing.final class SubtleUnwrapKeyRequest(google.protobuf.message.Message): """SubtleUnwrapKeyRequest is the request for SubtleUnwrapKeyAlpha1.""" @@ -2510,11 +2552,11 @@ class SubtleUnwrapKeyRequest(google.protobuf.message.Message): tag: builtins.bytes = ..., associated_data: builtins.bytes = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["algorithm", b"algorithm", "associated_data", b"associated_data", "component_name", b"component_name", "key_name", b"key_name", "nonce", b"nonce", "tag", b"tag", "wrapped_key", b"wrapped_key"]) -> None: ... + def ClearField(self, field_name: typing.Literal["algorithm", b"algorithm", "associated_data", b"associated_data", "component_name", b"component_name", "key_name", b"key_name", "nonce", b"nonce", "tag", b"tag", "wrapped_key", b"wrapped_key"]) -> None: ... global___SubtleUnwrapKeyRequest = SubtleUnwrapKeyRequest -@typing_extensions.final +@typing.final class SubtleUnwrapKeyResponse(google.protobuf.message.Message): """SubtleUnwrapKeyResponse is the response for SubtleUnwrapKeyAlpha1.""" @@ -2528,11 +2570,11 @@ class SubtleUnwrapKeyResponse(google.protobuf.message.Message): *, plaintext_key: builtins.bytes = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["plaintext_key", b"plaintext_key"]) -> None: ... + def ClearField(self, field_name: typing.Literal["plaintext_key", b"plaintext_key"]) -> None: ... global___SubtleUnwrapKeyResponse = SubtleUnwrapKeyResponse -@typing_extensions.final +@typing.final class SubtleSignRequest(google.protobuf.message.Message): """SubtleSignRequest is the request for SubtleSignAlpha1.""" @@ -2558,11 +2600,11 @@ class SubtleSignRequest(google.protobuf.message.Message): algorithm: builtins.str = ..., key_name: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["algorithm", b"algorithm", "component_name", b"component_name", "digest", b"digest", "key_name", b"key_name"]) -> None: ... + def ClearField(self, field_name: typing.Literal["algorithm", b"algorithm", "component_name", b"component_name", "digest", b"digest", "key_name", b"key_name"]) -> None: ... global___SubtleSignRequest = SubtleSignRequest -@typing_extensions.final +@typing.final class SubtleSignResponse(google.protobuf.message.Message): """SubtleSignResponse is the response for SubtleSignAlpha1.""" @@ -2576,11 +2618,11 @@ class SubtleSignResponse(google.protobuf.message.Message): *, signature: builtins.bytes = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["signature", b"signature"]) -> None: ... + def ClearField(self, field_name: typing.Literal["signature", b"signature"]) -> None: ... global___SubtleSignResponse = SubtleSignResponse -@typing_extensions.final +@typing.final class SubtleVerifyRequest(google.protobuf.message.Message): """SubtleVerifyRequest is the request for SubtleVerifyAlpha1.""" @@ -2610,11 +2652,11 @@ class SubtleVerifyRequest(google.protobuf.message.Message): key_name: builtins.str = ..., signature: builtins.bytes = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["algorithm", b"algorithm", "component_name", b"component_name", "digest", b"digest", "key_name", b"key_name", "signature", b"signature"]) -> None: ... + def ClearField(self, field_name: typing.Literal["algorithm", b"algorithm", "component_name", b"component_name", "digest", b"digest", "key_name", b"key_name", "signature", b"signature"]) -> None: ... global___SubtleVerifyRequest = SubtleVerifyRequest -@typing_extensions.final +@typing.final class SubtleVerifyResponse(google.protobuf.message.Message): """SubtleVerifyResponse is the response for SubtleVerifyAlpha1.""" @@ -2628,11 +2670,11 @@ class SubtleVerifyResponse(google.protobuf.message.Message): *, valid: builtins.bool = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["valid", b"valid"]) -> None: ... + def ClearField(self, field_name: typing.Literal["valid", b"valid"]) -> None: ... global___SubtleVerifyResponse = SubtleVerifyResponse -@typing_extensions.final +@typing.final class EncryptRequest(google.protobuf.message.Message): """EncryptRequest is the request for EncryptAlpha1.""" @@ -2643,21 +2685,23 @@ class EncryptRequest(google.protobuf.message.Message): @property def options(self) -> global___EncryptRequestOptions: """Request details. Must be present in the first message only.""" + @property def payload(self) -> dapr.proto.common.v1.common_pb2.StreamPayload: """Chunk of data of arbitrary size.""" + def __init__( self, *, options: global___EncryptRequestOptions | None = ..., payload: dapr.proto.common.v1.common_pb2.StreamPayload | None = ..., ) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["options", b"options", "payload", b"payload"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["options", b"options", "payload", b"payload"]) -> None: ... + def HasField(self, field_name: typing.Literal["options", b"options", "payload", b"payload"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["options", b"options", "payload", b"payload"]) -> None: ... global___EncryptRequest = EncryptRequest -@typing_extensions.final +@typing.final class EncryptRequestOptions(google.protobuf.message.Message): """EncryptRequestOptions contains options for the first message in the EncryptAlpha1 request.""" @@ -2700,11 +2744,11 @@ class EncryptRequestOptions(google.protobuf.message.Message): omit_decryption_key_name: builtins.bool = ..., decryption_key_name: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["component_name", b"component_name", "data_encryption_cipher", b"data_encryption_cipher", "decryption_key_name", b"decryption_key_name", "key_name", b"key_name", "key_wrap_algorithm", b"key_wrap_algorithm", "omit_decryption_key_name", b"omit_decryption_key_name"]) -> None: ... + def ClearField(self, field_name: typing.Literal["component_name", b"component_name", "data_encryption_cipher", b"data_encryption_cipher", "decryption_key_name", b"decryption_key_name", "key_name", b"key_name", "key_wrap_algorithm", b"key_wrap_algorithm", "omit_decryption_key_name", b"omit_decryption_key_name"]) -> None: ... global___EncryptRequestOptions = EncryptRequestOptions -@typing_extensions.final +@typing.final class EncryptResponse(google.protobuf.message.Message): """EncryptResponse is the response for EncryptAlpha1.""" @@ -2714,17 +2758,18 @@ class EncryptResponse(google.protobuf.message.Message): @property def payload(self) -> dapr.proto.common.v1.common_pb2.StreamPayload: """Chunk of data.""" + def __init__( self, *, payload: dapr.proto.common.v1.common_pb2.StreamPayload | None = ..., ) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["payload", b"payload"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["payload", b"payload"]) -> None: ... + def HasField(self, field_name: typing.Literal["payload", b"payload"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["payload", b"payload"]) -> None: ... global___EncryptResponse = EncryptResponse -@typing_extensions.final +@typing.final class DecryptRequest(google.protobuf.message.Message): """DecryptRequest is the request for DecryptAlpha1.""" @@ -2735,21 +2780,23 @@ class DecryptRequest(google.protobuf.message.Message): @property def options(self) -> global___DecryptRequestOptions: """Request details. Must be present in the first message only.""" + @property def payload(self) -> dapr.proto.common.v1.common_pb2.StreamPayload: """Chunk of data of arbitrary size.""" + def __init__( self, *, options: global___DecryptRequestOptions | None = ..., payload: dapr.proto.common.v1.common_pb2.StreamPayload | None = ..., ) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["options", b"options", "payload", b"payload"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["options", b"options", "payload", b"payload"]) -> None: ... + def HasField(self, field_name: typing.Literal["options", b"options", "payload", b"payload"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["options", b"options", "payload", b"payload"]) -> None: ... global___DecryptRequest = DecryptRequest -@typing_extensions.final +@typing.final class DecryptRequestOptions(google.protobuf.message.Message): """DecryptRequestOptions contains options for the first message in the DecryptAlpha1 request.""" @@ -2770,11 +2817,11 @@ class DecryptRequestOptions(google.protobuf.message.Message): component_name: builtins.str = ..., key_name: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["component_name", b"component_name", "key_name", b"key_name"]) -> None: ... + def ClearField(self, field_name: typing.Literal["component_name", b"component_name", "key_name", b"key_name"]) -> None: ... global___DecryptRequestOptions = DecryptRequestOptions -@typing_extensions.final +@typing.final class DecryptResponse(google.protobuf.message.Message): """DecryptResponse is the response for DecryptAlpha1.""" @@ -2784,17 +2831,18 @@ class DecryptResponse(google.protobuf.message.Message): @property def payload(self) -> dapr.proto.common.v1.common_pb2.StreamPayload: """Chunk of data.""" + def __init__( self, *, payload: dapr.proto.common.v1.common_pb2.StreamPayload | None = ..., ) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["payload", b"payload"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["payload", b"payload"]) -> None: ... + def HasField(self, field_name: typing.Literal["payload", b"payload"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["payload", b"payload"]) -> None: ... global___DecryptResponse = DecryptResponse -@typing_extensions.final +@typing.final class GetWorkflowRequest(google.protobuf.message.Message): """GetWorkflowRequest is the request for GetWorkflowBeta1.""" @@ -2812,17 +2860,17 @@ class GetWorkflowRequest(google.protobuf.message.Message): instance_id: builtins.str = ..., workflow_component: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["instance_id", b"instance_id", "workflow_component", b"workflow_component"]) -> None: ... + def ClearField(self, field_name: typing.Literal["instance_id", b"instance_id", "workflow_component", b"workflow_component"]) -> None: ... global___GetWorkflowRequest = GetWorkflowRequest -@typing_extensions.final +@typing.final class GetWorkflowResponse(google.protobuf.message.Message): """GetWorkflowResponse is the response for GetWorkflowBeta1.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing_extensions.final + @typing.final class PropertiesEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -2836,7 +2884,7 @@ class GetWorkflowResponse(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... INSTANCE_ID_FIELD_NUMBER: builtins.int WORKFLOW_NAME_FIELD_NUMBER: builtins.int @@ -2848,17 +2896,20 @@ class GetWorkflowResponse(google.protobuf.message.Message): """ID of the workflow instance.""" workflow_name: builtins.str """Name of the workflow.""" + runtime_status: builtins.str + """The current status of the workflow instance, for example, "PENDING", "RUNNING", "SUSPENDED", "COMPLETED", "FAILED", and "TERMINATED".""" @property def created_at(self) -> google.protobuf.timestamp_pb2.Timestamp: """The time at which the workflow instance was created.""" + @property def last_updated_at(self) -> google.protobuf.timestamp_pb2.Timestamp: """The last time at which the workflow instance had its state changed.""" - runtime_status: builtins.str - """The current status of the workflow instance, for example, "PENDING", "RUNNING", "SUSPENDED", "COMPLETED", "FAILED", and "TERMINATED".""" + @property def properties(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """Additional component-specific properties of the workflow instance.""" + def __init__( self, *, @@ -2869,18 +2920,18 @@ class GetWorkflowResponse(google.protobuf.message.Message): runtime_status: builtins.str = ..., properties: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["created_at", b"created_at", "last_updated_at", b"last_updated_at"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["created_at", b"created_at", "instance_id", b"instance_id", "last_updated_at", b"last_updated_at", "properties", b"properties", "runtime_status", b"runtime_status", "workflow_name", b"workflow_name"]) -> None: ... + def HasField(self, field_name: typing.Literal["created_at", b"created_at", "last_updated_at", b"last_updated_at"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["created_at", b"created_at", "instance_id", b"instance_id", "last_updated_at", b"last_updated_at", "properties", b"properties", "runtime_status", b"runtime_status", "workflow_name", b"workflow_name"]) -> None: ... global___GetWorkflowResponse = GetWorkflowResponse -@typing_extensions.final +@typing.final class StartWorkflowRequest(google.protobuf.message.Message): """StartWorkflowRequest is the request for StartWorkflowBeta1.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing_extensions.final + @typing.final class OptionsEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -2894,7 +2945,7 @@ class StartWorkflowRequest(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... INSTANCE_ID_FIELD_NUMBER: builtins.int WORKFLOW_COMPONENT_FIELD_NUMBER: builtins.int @@ -2907,11 +2958,12 @@ class StartWorkflowRequest(google.protobuf.message.Message): """Name of the workflow component.""" workflow_name: builtins.str """Name of the workflow.""" + input: builtins.bytes + """Input data for the workflow instance.""" @property def options(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """Additional component-specific options for starting the workflow instance.""" - input: builtins.bytes - """Input data for the workflow instance.""" + def __init__( self, *, @@ -2921,11 +2973,11 @@ class StartWorkflowRequest(google.protobuf.message.Message): options: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., input: builtins.bytes = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["input", b"input", "instance_id", b"instance_id", "options", b"options", "workflow_component", b"workflow_component", "workflow_name", b"workflow_name"]) -> None: ... + def ClearField(self, field_name: typing.Literal["input", b"input", "instance_id", b"instance_id", "options", b"options", "workflow_component", b"workflow_component", "workflow_name", b"workflow_name"]) -> None: ... global___StartWorkflowRequest = StartWorkflowRequest -@typing_extensions.final +@typing.final class StartWorkflowResponse(google.protobuf.message.Message): """StartWorkflowResponse is the response for StartWorkflowBeta1.""" @@ -2939,11 +2991,11 @@ class StartWorkflowResponse(google.protobuf.message.Message): *, instance_id: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["instance_id", b"instance_id"]) -> None: ... + def ClearField(self, field_name: typing.Literal["instance_id", b"instance_id"]) -> None: ... global___StartWorkflowResponse = StartWorkflowResponse -@typing_extensions.final +@typing.final class TerminateWorkflowRequest(google.protobuf.message.Message): """TerminateWorkflowRequest is the request for TerminateWorkflowBeta1.""" @@ -2961,11 +3013,11 @@ class TerminateWorkflowRequest(google.protobuf.message.Message): instance_id: builtins.str = ..., workflow_component: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["instance_id", b"instance_id", "workflow_component", b"workflow_component"]) -> None: ... + def ClearField(self, field_name: typing.Literal["instance_id", b"instance_id", "workflow_component", b"workflow_component"]) -> None: ... global___TerminateWorkflowRequest = TerminateWorkflowRequest -@typing_extensions.final +@typing.final class PauseWorkflowRequest(google.protobuf.message.Message): """PauseWorkflowRequest is the request for PauseWorkflowBeta1.""" @@ -2983,11 +3035,11 @@ class PauseWorkflowRequest(google.protobuf.message.Message): instance_id: builtins.str = ..., workflow_component: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["instance_id", b"instance_id", "workflow_component", b"workflow_component"]) -> None: ... + def ClearField(self, field_name: typing.Literal["instance_id", b"instance_id", "workflow_component", b"workflow_component"]) -> None: ... global___PauseWorkflowRequest = PauseWorkflowRequest -@typing_extensions.final +@typing.final class ResumeWorkflowRequest(google.protobuf.message.Message): """ResumeWorkflowRequest is the request for ResumeWorkflowBeta1.""" @@ -3005,11 +3057,11 @@ class ResumeWorkflowRequest(google.protobuf.message.Message): instance_id: builtins.str = ..., workflow_component: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["instance_id", b"instance_id", "workflow_component", b"workflow_component"]) -> None: ... + def ClearField(self, field_name: typing.Literal["instance_id", b"instance_id", "workflow_component", b"workflow_component"]) -> None: ... global___ResumeWorkflowRequest = ResumeWorkflowRequest -@typing_extensions.final +@typing.final class RaiseEventWorkflowRequest(google.protobuf.message.Message): """RaiseEventWorkflowRequest is the request for RaiseEventWorkflowBeta1.""" @@ -3035,11 +3087,11 @@ class RaiseEventWorkflowRequest(google.protobuf.message.Message): event_name: builtins.str = ..., event_data: builtins.bytes = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["event_data", b"event_data", "event_name", b"event_name", "instance_id", b"instance_id", "workflow_component", b"workflow_component"]) -> None: ... + def ClearField(self, field_name: typing.Literal["event_data", b"event_data", "event_name", b"event_name", "instance_id", b"instance_id", "workflow_component", b"workflow_component"]) -> None: ... global___RaiseEventWorkflowRequest = RaiseEventWorkflowRequest -@typing_extensions.final +@typing.final class PurgeWorkflowRequest(google.protobuf.message.Message): """PurgeWorkflowRequest is the request for PurgeWorkflowBeta1.""" @@ -3057,11 +3109,11 @@ class PurgeWorkflowRequest(google.protobuf.message.Message): instance_id: builtins.str = ..., workflow_component: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["instance_id", b"instance_id", "workflow_component", b"workflow_component"]) -> None: ... + def ClearField(self, field_name: typing.Literal["instance_id", b"instance_id", "workflow_component", b"workflow_component"]) -> None: ... global___PurgeWorkflowRequest = PurgeWorkflowRequest -@typing_extensions.final +@typing.final class ShutdownRequest(google.protobuf.message.Message): """ShutdownRequest is the request for Shutdown. Empty @@ -3075,7 +3127,7 @@ class ShutdownRequest(google.protobuf.message.Message): global___ShutdownRequest = ShutdownRequest -@typing_extensions.final +@typing.final class Job(google.protobuf.message.Message): """Job is the definition of a job. At least one of schedule or due_time must be provided but can also be provided together. @@ -3133,6 +3185,7 @@ class Job(google.protobuf.message.Message): """payload is the serialized job payload that will be sent to the recipient when the job is triggered. """ + def __init__( self, *, @@ -3143,20 +3196,20 @@ class Job(google.protobuf.message.Message): ttl: builtins.str | None = ..., data: google.protobuf.any_pb2.Any | None = ..., ) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["_due_time", b"_due_time", "_repeats", b"_repeats", "_schedule", b"_schedule", "_ttl", b"_ttl", "data", b"data", "due_time", b"due_time", "repeats", b"repeats", "schedule", b"schedule", "ttl", b"ttl"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["_due_time", b"_due_time", "_repeats", b"_repeats", "_schedule", b"_schedule", "_ttl", b"_ttl", "data", b"data", "due_time", b"due_time", "name", b"name", "repeats", b"repeats", "schedule", b"schedule", "ttl", b"ttl"]) -> None: ... + def HasField(self, field_name: typing.Literal["_due_time", b"_due_time", "_repeats", b"_repeats", "_schedule", b"_schedule", "_ttl", b"_ttl", "data", b"data", "due_time", b"due_time", "repeats", b"repeats", "schedule", b"schedule", "ttl", b"ttl"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["_due_time", b"_due_time", "_repeats", b"_repeats", "_schedule", b"_schedule", "_ttl", b"_ttl", "data", b"data", "due_time", b"due_time", "name", b"name", "repeats", b"repeats", "schedule", b"schedule", "ttl", b"ttl"]) -> None: ... @typing.overload - def WhichOneof(self, oneof_group: typing_extensions.Literal["_due_time", b"_due_time"]) -> typing_extensions.Literal["due_time"] | None: ... + def WhichOneof(self, oneof_group: typing.Literal["_due_time", b"_due_time"]) -> typing.Literal["due_time"] | None: ... @typing.overload - def WhichOneof(self, oneof_group: typing_extensions.Literal["_repeats", b"_repeats"]) -> typing_extensions.Literal["repeats"] | None: ... + def WhichOneof(self, oneof_group: typing.Literal["_repeats", b"_repeats"]) -> typing.Literal["repeats"] | None: ... @typing.overload - def WhichOneof(self, oneof_group: typing_extensions.Literal["_schedule", b"_schedule"]) -> typing_extensions.Literal["schedule"] | None: ... + def WhichOneof(self, oneof_group: typing.Literal["_schedule", b"_schedule"]) -> typing.Literal["schedule"] | None: ... @typing.overload - def WhichOneof(self, oneof_group: typing_extensions.Literal["_ttl", b"_ttl"]) -> typing_extensions.Literal["ttl"] | None: ... + def WhichOneof(self, oneof_group: typing.Literal["_ttl", b"_ttl"]) -> typing.Literal["ttl"] | None: ... global___Job = Job -@typing_extensions.final +@typing.final class ScheduleJobRequest(google.protobuf.message.Message): """ScheduleJobRequest is the message to create/schedule the job.""" @@ -3166,17 +3219,18 @@ class ScheduleJobRequest(google.protobuf.message.Message): @property def job(self) -> global___Job: """The job details.""" + def __init__( self, *, job: global___Job | None = ..., ) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["job", b"job"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["job", b"job"]) -> None: ... + def HasField(self, field_name: typing.Literal["job", b"job"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["job", b"job"]) -> None: ... global___ScheduleJobRequest = ScheduleJobRequest -@typing_extensions.final +@typing.final class ScheduleJobResponse(google.protobuf.message.Message): """ScheduleJobResponse is the message response to create/schedule the job. Empty @@ -3190,7 +3244,7 @@ class ScheduleJobResponse(google.protobuf.message.Message): global___ScheduleJobResponse = ScheduleJobResponse -@typing_extensions.final +@typing.final class GetJobRequest(google.protobuf.message.Message): """GetJobRequest is the message to retrieve a job.""" @@ -3204,11 +3258,11 @@ class GetJobRequest(google.protobuf.message.Message): *, name: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["name", b"name"]) -> None: ... + def ClearField(self, field_name: typing.Literal["name", b"name"]) -> None: ... global___GetJobRequest = GetJobRequest -@typing_extensions.final +@typing.final class GetJobResponse(google.protobuf.message.Message): """GetJobResponse is the message's response for a job retrieved.""" @@ -3218,17 +3272,18 @@ class GetJobResponse(google.protobuf.message.Message): @property def job(self) -> global___Job: """The job details.""" + def __init__( self, *, job: global___Job | None = ..., ) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["job", b"job"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["job", b"job"]) -> None: ... + def HasField(self, field_name: typing.Literal["job", b"job"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["job", b"job"]) -> None: ... global___GetJobResponse = GetJobResponse -@typing_extensions.final +@typing.final class DeleteJobRequest(google.protobuf.message.Message): """DeleteJobRequest is the message to delete the job by name.""" @@ -3242,11 +3297,11 @@ class DeleteJobRequest(google.protobuf.message.Message): *, name: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["name", b"name"]) -> None: ... + def ClearField(self, field_name: typing.Literal["name", b"name"]) -> None: ... global___DeleteJobRequest = DeleteJobRequest -@typing_extensions.final +@typing.final class DeleteJobResponse(google.protobuf.message.Message): """DeleteJobResponse is the message response to delete the job by name. Empty @@ -3260,13 +3315,13 @@ class DeleteJobResponse(google.protobuf.message.Message): global___DeleteJobResponse = DeleteJobResponse -@typing_extensions.final +@typing.final class ConversationRequest(google.protobuf.message.Message): """ConversationRequest is the request object for Conversation.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing_extensions.final + @typing.final class ParametersEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -3281,10 +3336,10 @@ class ConversationRequest(google.protobuf.message.Message): key: builtins.str = ..., value: google.protobuf.any_pb2.Any | None = ..., ) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["value", b"value"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... + def HasField(self, field_name: typing.Literal["value", b"value"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... - @typing_extensions.final + @typing.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -3298,7 +3353,7 @@ class ConversationRequest(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... NAME_FIELD_NUMBER: builtins.int CONTEXTID_FIELD_NUMBER: builtins.int @@ -3311,19 +3366,22 @@ class ConversationRequest(google.protobuf.message.Message): """The name of Conversation component""" contextID: builtins.str """The ID of an existing chat (like in ChatGPT)""" + scrubPII: builtins.bool + """Scrub PII data that comes back from the LLM""" + temperature: builtins.float + """Temperature for the LLM to optimize for creativity or predictability""" @property def inputs(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___ConversationInput]: """Inputs for the conversation, support multiple input in one time.""" + @property def parameters(self) -> google.protobuf.internal.containers.MessageMap[builtins.str, google.protobuf.any_pb2.Any]: """Parameters for all custom fields.""" + @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """The metadata passing to conversation components.""" - scrubPII: builtins.bool - """Scrub PII data that comes back from the LLM""" - temperature: builtins.float - """Temperature for the LLM to optimize for creativity or predictability""" + def __init__( self, *, @@ -3335,26 +3393,26 @@ class ConversationRequest(google.protobuf.message.Message): scrubPII: builtins.bool | None = ..., temperature: builtins.float | None = ..., ) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["_contextID", b"_contextID", "_scrubPII", b"_scrubPII", "_temperature", b"_temperature", "contextID", b"contextID", "scrubPII", b"scrubPII", "temperature", b"temperature"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["_contextID", b"_contextID", "_scrubPII", b"_scrubPII", "_temperature", b"_temperature", "contextID", b"contextID", "inputs", b"inputs", "metadata", b"metadata", "name", b"name", "parameters", b"parameters", "scrubPII", b"scrubPII", "temperature", b"temperature"]) -> None: ... + def HasField(self, field_name: typing.Literal["_contextID", b"_contextID", "_scrubPII", b"_scrubPII", "_temperature", b"_temperature", "contextID", b"contextID", "scrubPII", b"scrubPII", "temperature", b"temperature"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["_contextID", b"_contextID", "_scrubPII", b"_scrubPII", "_temperature", b"_temperature", "contextID", b"contextID", "inputs", b"inputs", "metadata", b"metadata", "name", b"name", "parameters", b"parameters", "scrubPII", b"scrubPII", "temperature", b"temperature"]) -> None: ... @typing.overload - def WhichOneof(self, oneof_group: typing_extensions.Literal["_contextID", b"_contextID"]) -> typing_extensions.Literal["contextID"] | None: ... + def WhichOneof(self, oneof_group: typing.Literal["_contextID", b"_contextID"]) -> typing.Literal["contextID"] | None: ... @typing.overload - def WhichOneof(self, oneof_group: typing_extensions.Literal["_scrubPII", b"_scrubPII"]) -> typing_extensions.Literal["scrubPII"] | None: ... + def WhichOneof(self, oneof_group: typing.Literal["_scrubPII", b"_scrubPII"]) -> typing.Literal["scrubPII"] | None: ... @typing.overload - def WhichOneof(self, oneof_group: typing_extensions.Literal["_temperature", b"_temperature"]) -> typing_extensions.Literal["temperature"] | None: ... + def WhichOneof(self, oneof_group: typing.Literal["_temperature", b"_temperature"]) -> typing.Literal["temperature"] | None: ... global___ConversationRequest = ConversationRequest -@typing_extensions.final +@typing.final class ConversationInput(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor - MESSAGE_FIELD_NUMBER: builtins.int + CONTENT_FIELD_NUMBER: builtins.int ROLE_FIELD_NUMBER: builtins.int SCRUBPII_FIELD_NUMBER: builtins.int - message: builtins.str - """The message to send to the llm""" + content: builtins.str + """The content to send to the llm""" role: builtins.str """The role to set for the message""" scrubPII: builtins.bool @@ -3362,26 +3420,26 @@ class ConversationInput(google.protobuf.message.Message): def __init__( self, *, - message: builtins.str = ..., + content: builtins.str = ..., role: builtins.str | None = ..., scrubPII: builtins.bool | None = ..., ) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["_role", b"_role", "_scrubPII", b"_scrubPII", "role", b"role", "scrubPII", b"scrubPII"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["_role", b"_role", "_scrubPII", b"_scrubPII", "message", b"message", "role", b"role", "scrubPII", b"scrubPII"]) -> None: ... + def HasField(self, field_name: typing.Literal["_role", b"_role", "_scrubPII", b"_scrubPII", "role", b"role", "scrubPII", b"scrubPII"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["_role", b"_role", "_scrubPII", b"_scrubPII", "content", b"content", "role", b"role", "scrubPII", b"scrubPII"]) -> None: ... @typing.overload - def WhichOneof(self, oneof_group: typing_extensions.Literal["_role", b"_role"]) -> typing_extensions.Literal["role"] | None: ... + def WhichOneof(self, oneof_group: typing.Literal["_role", b"_role"]) -> typing.Literal["role"] | None: ... @typing.overload - def WhichOneof(self, oneof_group: typing_extensions.Literal["_scrubPII", b"_scrubPII"]) -> typing_extensions.Literal["scrubPII"] | None: ... + def WhichOneof(self, oneof_group: typing.Literal["_scrubPII", b"_scrubPII"]) -> typing.Literal["scrubPII"] | None: ... global___ConversationInput = ConversationInput -@typing_extensions.final +@typing.final class ConversationResult(google.protobuf.message.Message): """ConversationResult is the result for one input.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing_extensions.final + @typing.final class ParametersEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -3396,8 +3454,8 @@ class ConversationResult(google.protobuf.message.Message): key: builtins.str = ..., value: google.protobuf.any_pb2.Any | None = ..., ) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["value", b"value"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... + def HasField(self, field_name: typing.Literal["value", b"value"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... RESULT_FIELD_NUMBER: builtins.int PARAMETERS_FIELD_NUMBER: builtins.int @@ -3406,17 +3464,18 @@ class ConversationResult(google.protobuf.message.Message): @property def parameters(self) -> google.protobuf.internal.containers.MessageMap[builtins.str, google.protobuf.any_pb2.Any]: """Parameters for all custom fields.""" + def __init__( self, *, result: builtins.str = ..., parameters: collections.abc.Mapping[builtins.str, google.protobuf.any_pb2.Any] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["parameters", b"parameters", "result", b"result"]) -> None: ... + def ClearField(self, field_name: typing.Literal["parameters", b"parameters", "result", b"result"]) -> None: ... global___ConversationResult = ConversationResult -@typing_extensions.final +@typing.final class ConversationResponse(google.protobuf.message.Message): """ConversationResponse is the response for Conversation.""" @@ -3429,14 +3488,15 @@ class ConversationResponse(google.protobuf.message.Message): @property def outputs(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___ConversationResult]: """An array of results.""" + def __init__( self, *, contextID: builtins.str | None = ..., outputs: collections.abc.Iterable[global___ConversationResult] | None = ..., ) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["_contextID", b"_contextID", "contextID", b"contextID"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["_contextID", b"_contextID", "contextID", b"contextID", "outputs", b"outputs"]) -> None: ... - def WhichOneof(self, oneof_group: typing_extensions.Literal["_contextID", b"_contextID"]) -> typing_extensions.Literal["contextID"] | None: ... + def HasField(self, field_name: typing.Literal["_contextID", b"_contextID", "contextID", b"contextID"]) -> builtins.bool: ... + def ClearField(self, field_name: typing.Literal["_contextID", b"_contextID", "contextID", b"contextID", "outputs", b"outputs"]) -> None: ... + def WhichOneof(self, oneof_group: typing.Literal["_contextID", b"_contextID"]) -> typing.Literal["contextID"] | None: ... global___ConversationResponse = ConversationResponse diff --git a/daprdocs/content/en/python-sdk-docs/python-client.md b/daprdocs/content/en/python-sdk-docs/python-client.md index 43afdd0b..7024018a 100644 --- a/daprdocs/content/en/python-sdk-docs/python-client.md +++ b/daprdocs/content/en/python-sdk-docs/python-client.md @@ -431,6 +431,38 @@ if __name__ == '__main__': - For more information about pub/sub, visit [How-To: Publish & subscribe]({{< ref howto-publish-subscribe.md >}}). - Visit [Python SDK examples](https://github.com/dapr/python-sdk/tree/main/examples/pubsub-simple) for code samples and instructions to try out streaming pub/sub. +### Conversation (Alpha) + +{{% alert title="Note" color="primary" %}} +The Dapr Conversation API is currently in alpha. +{{% /alert %}} + +Since version 1.15 Dapr offers developers the capability to securely and reliably interact with Large Language Models (LLM) through the [Conversation API]({{< ref conversation-overview.md >}}). + +```python +from dapr.clients import DaprClient +from dapr.clients.grpc._request import ConversationInput + +with DaprClient() as d: + inputs = [ + ConversationInput(content="What's Dapr?", role='user', scrub_pii=True), + ConversationInput(content='Give a brief overview.', role='user', scrub_pii=True), + ] + + metadata = { + 'model': 'foo', + 'key': 'authKey', + 'cacheTTL': '10m', + } + + response = d.converse_alpha1( + name='echo', inputs=inputs, temperature=0.7, context_id='chat-123', metadata=metadata + ) + + for output in response.outputs: + print(f'Result: {output.result}') +``` + ### Interact with output bindings ```python diff --git a/examples/conversation/README.md b/examples/conversation/README.md new file mode 100644 index 00000000..c793dd4b --- /dev/null +++ b/examples/conversation/README.md @@ -0,0 +1,34 @@ +# Example - Conversation API + +## Step + +### Prepare + +- Dapr installed + +### Run Conversation Example + + + +```bash +dapr run --app-id conversation \ + --log-level debug \ + --resources-path ./config \ + -- python3 conversation.py +``` + + + +## Result + +``` + - '== APP == Result: What's Dapr?' + - '== APP == Result: Give a brief overview.' +``` \ No newline at end of file diff --git a/examples/conversation/config/conversation-echo.yaml b/examples/conversation/config/conversation-echo.yaml new file mode 100644 index 00000000..9a8b3072 --- /dev/null +++ b/examples/conversation/config/conversation-echo.yaml @@ -0,0 +1,7 @@ +apiVersion: dapr.io/v1alpha1 +kind: Component +metadata: + name: echo +spec: + type: conversation.echo + version: v1 \ No newline at end of file diff --git a/examples/conversation/conversation.py b/examples/conversation/conversation.py new file mode 100644 index 00000000..6b39e37c --- /dev/null +++ b/examples/conversation/conversation.py @@ -0,0 +1,33 @@ +# ------------------------------------------------------------ +# Copyright 2025 The Dapr Authors +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ------------------------------------------------------------ +from dapr.clients import DaprClient +from dapr.clients.grpc._request import ConversationInput + +with DaprClient() as d: + inputs = [ + ConversationInput(content="What's Dapr?", role='user', scrub_pii=True), + ConversationInput(content='Give a brief overview.', role='user', scrub_pii=True), + ] + + metadata = { + 'model': 'foo', + 'key': 'authKey', + 'cacheTTL': '10m', + } + + response = d.converse_alpha1( + name='echo', inputs=inputs, temperature=0.7, context_id='chat-123', metadata=metadata + ) + + for output in response.outputs: + print(f'Result: {output.result}') diff --git a/tests/clients/fake_dapr_server.py b/tests/clients/fake_dapr_server.py index 9ae39aa1..ccc5aedf 100644 --- a/tests/clients/fake_dapr_server.py +++ b/tests/clients/fake_dapr_server.py @@ -524,6 +524,18 @@ def GetMetadata(self, request, context): extended_metadata=self.metadata, ) + def ConverseAlpha1(self, request, context): + """Mock implementation of the ConverseAlpha1 endpoint.""" + self.check_for_exception(context) + + # Echo back the input messages as outputs + outputs = [] + for input in request.inputs: + result = f'Response to: {input.content}' + outputs.append(api_v1.ConversationResult(result=result, parameters={})) + + return api_v1.ConversationResponse(contextID=request.contextID, outputs=outputs) + def SetMetadata(self, request: SetMetadataRequest, context): self.metadata[request.key] = request.value return empty_pb2.Empty() diff --git a/tests/clients/test_dapr_grpc_client.py b/tests/clients/test_dapr_grpc_client.py index f0644ec7..f838f5c6 100644 --- a/tests/clients/test_dapr_grpc_client.py +++ b/tests/clients/test_dapr_grpc_client.py @@ -33,7 +33,11 @@ from .fake_dapr_server import FakeDaprSidecar from dapr.conf import settings from dapr.clients.grpc._helpers import to_bytes -from dapr.clients.grpc._request import TransactionalStateOperation, TransactionOperationType +from dapr.clients.grpc._request import ( + TransactionalStateOperation, + TransactionOperationType, + ConversationInput, +) from dapr.clients.grpc._state import StateOptions, Consistency, Concurrency, StateItem from dapr.clients.grpc._crypto import EncryptOptions, DecryptOptions from dapr.clients.grpc._response import ( @@ -1181,6 +1185,54 @@ def test_decrypt_file_data_read_chunks(self): self.assertEqual(resp.read(5), b'hello') self.assertEqual(resp.read(5), b' dapr') + def test_converse_alpha1_basic(self): + dapr = DaprGrpcClient(f'{self.scheme}localhost:{self.grpc_port}') + + inputs = [ + ConversationInput(content='Hello', role='user'), + ConversationInput(content='How are you?', role='user'), + ] + + response = dapr.converse_alpha1(name='test-llm', inputs=inputs) + + # Check response structure + self.assertIsNotNone(response) + self.assertEqual(len(response.outputs), 2) + self.assertEqual(response.outputs[0].result, 'Response to: Hello') + self.assertEqual(response.outputs[1].result, 'Response to: How are you?') + + def test_converse_alpha1_with_options(self): + dapr = DaprGrpcClient(f'{self.scheme}localhost:{self.grpc_port}') + + inputs = [ConversationInput(content='Hello', role='user', scrub_pii=True)] + + response = dapr.converse_alpha1( + name='test-llm', + inputs=inputs, + context_id='chat-123', + temperature=0.7, + scrub_pii=True, + metadata={'key': 'value'}, + ) + + self.assertIsNotNone(response) + self.assertEqual(len(response.outputs), 1) + self.assertEqual(response.outputs[0].result, 'Response to: Hello') + + def test_converse_alpha1_error_handling(self): + dapr = DaprGrpcClient(f'{self.scheme}localhost:{self.grpc_port}') + + # Setup server to raise an exception + self._fake_dapr_server.raise_exception_on_next_call( + status_pb2.Status(code=code_pb2.INVALID_ARGUMENT, message='Invalid argument') + ) + + inputs = [ConversationInput(content='Hello', role='user')] + + with self.assertRaises(DaprGrpcError) as context: + dapr.converse_alpha1(name='test-llm', inputs=inputs) + self.assertTrue('Invalid argument' in str(context.exception)) + if __name__ == '__main__': unittest.main() diff --git a/tests/clients/test_dapr_grpc_client_async.py b/tests/clients/test_dapr_grpc_client_async.py index f15a2d1a..627f56ce 100644 --- a/tests/clients/test_dapr_grpc_client_async.py +++ b/tests/clients/test_dapr_grpc_client_async.py @@ -29,7 +29,7 @@ from .fake_dapr_server import FakeDaprSidecar from dapr.conf import settings from dapr.clients.grpc._helpers import to_bytes -from dapr.clients.grpc._request import TransactionalStateOperation +from dapr.clients.grpc._request import TransactionalStateOperation, ConversationInput from dapr.clients.grpc._state import StateOptions, Consistency, Concurrency, StateItem from dapr.clients.grpc._crypto import EncryptOptions, DecryptOptions from dapr.clients.grpc._response import ( @@ -1113,6 +1113,57 @@ async def test_decrypt_file_data_read_chunks(self): self.assertEqual(await resp.read(5), b'hello') self.assertEqual(await resp.read(5), b' dapr') + async def test_converse_alpha1_basic(self): + dapr = DaprGrpcClientAsync(f'{self.scheme}localhost:{self.grpc_port}') + + inputs = [ + ConversationInput(content='Hello', role='user'), + ConversationInput(content='How are you?', role='user'), + ] + + response = await dapr.converse_alpha1(name='test-llm', inputs=inputs) + + # Check response structure + self.assertIsNotNone(response) + self.assertEqual(len(response.outputs), 2) + self.assertEqual(response.outputs[0].result, 'Response to: Hello') + self.assertEqual(response.outputs[1].result, 'Response to: How are you?') + await dapr.close() + + async def test_converse_alpha1_with_options(self): + dapr = DaprGrpcClientAsync(f'{self.scheme}localhost:{self.grpc_port}') + + inputs = [ConversationInput(content='Hello', role='user', scrub_pii=True)] + + response = await dapr.converse_alpha1( + name='test-llm', + inputs=inputs, + context_id='chat-123', + temperature=0.7, + scrub_pii=True, + metadata={'key': 'value'}, + ) + + self.assertIsNotNone(response) + self.assertEqual(len(response.outputs), 1) + self.assertEqual(response.outputs[0].result, 'Response to: Hello') + await dapr.close() + + async def test_converse_alpha1_error_handling(self): + dapr = DaprGrpcClientAsync(f'{self.scheme}localhost:{self.grpc_port}') + + # Setup server to raise an exception + self._fake_dapr_server.raise_exception_on_next_call( + status_pb2.Status(code=code_pb2.INVALID_ARGUMENT, message='Invalid argument') + ) + + inputs = [ConversationInput(content='Hello', role='user')] + + with self.assertRaises(DaprGrpcError) as context: + await dapr.converse_alpha1(name='test-llm', inputs=inputs) + self.assertTrue('Invalid argument' in str(context.exception)) + await dapr.close() + if __name__ == '__main__': unittest.main() diff --git a/tox.ini b/tox.ini index d81984a3..fc8a5f3a 100644 --- a/tox.ini +++ b/tox.ini @@ -46,6 +46,7 @@ changedir = ./examples/ deps = mechanical-markdown commands = + ./validate.sh conversation ./validate.sh crypto ./validate.sh metadata ./validate.sh error_handling From 7d0c03714146553277dd7e48e5ab8b330bcb7342 Mon Sep 17 00:00:00 2001 From: Elena Kolevska Date: Mon, 24 Feb 2025 23:27:30 +0000 Subject: [PATCH 35/38] Bumps version to RC3 (#779) * Bumps to rc3 Signed-off-by: Elena Kolevska * Dapr workflows extension to stable (1.15.0rc1) Signed-off-by: Elena Kolevska --------- Signed-off-by: Elena Kolevska Signed-off-by: Elena Kolevska Signed-off-by: Elena Kolevska --- dapr/version/version.py | 2 +- dev-requirements.txt | 1 + examples/demo_actor/demo_actor/requirements.txt | 2 +- examples/demo_workflow/demo_workflow/requirements.txt | 2 +- examples/invoke-simple/requirements.txt | 4 ++-- examples/w3c-tracing/requirements.txt | 4 ++-- examples/workflow/requirements.txt | 4 ++-- ext/dapr-ext-fastapi/dapr/ext/fastapi/version.py | 2 +- ext/dapr-ext-fastapi/setup.cfg | 2 +- ext/dapr-ext-grpc/dapr/ext/grpc/version.py | 2 +- ext/dapr-ext-grpc/setup.cfg | 2 +- ext/dapr-ext-workflow/dapr/ext/workflow/version.py | 2 +- ext/dapr-ext-workflow/setup.cfg | 2 +- ext/flask_dapr/flask_dapr/version.py | 2 +- ext/flask_dapr/setup.cfg | 2 +- 15 files changed, 18 insertions(+), 17 deletions(-) diff --git a/dapr/version/version.py b/dapr/version/version.py index 88f46727..ff6aac44 100644 --- a/dapr/version/version.py +++ b/dapr/version/version.py @@ -13,4 +13,4 @@ limitations under the License. """ -__version__ = '1.15.0rc2' +__version__ = '1.15.0rc3' diff --git a/dev-requirements.txt b/dev-requirements.txt index cec56fb2..cd983b26 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -16,3 +16,4 @@ Flask>=1.1 ruff===0.2.2 # needed for dapr-ext-workflow durabletask-dapr >= 0.2.0a7 + diff --git a/examples/demo_actor/demo_actor/requirements.txt b/examples/demo_actor/demo_actor/requirements.txt index 838fc7a5..528feb32 100644 --- a/examples/demo_actor/demo_actor/requirements.txt +++ b/examples/demo_actor/demo_actor/requirements.txt @@ -1 +1 @@ -dapr-ext-fastapi>=1.15.0rc2 +dapr-ext-fastapi>=1.15.0rc3 diff --git a/examples/demo_workflow/demo_workflow/requirements.txt b/examples/demo_workflow/demo_workflow/requirements.txt index b33a9290..daf24842 100644 --- a/examples/demo_workflow/demo_workflow/requirements.txt +++ b/examples/demo_workflow/demo_workflow/requirements.txt @@ -1 +1 @@ -dapr-ext-workflow>=0.6.0rc2 \ No newline at end of file +dapr-ext-workflow>=1.15.0rc1 \ No newline at end of file diff --git a/examples/invoke-simple/requirements.txt b/examples/invoke-simple/requirements.txt index add9031d..b9ff64a1 100644 --- a/examples/invoke-simple/requirements.txt +++ b/examples/invoke-simple/requirements.txt @@ -1,2 +1,2 @@ -dapr-ext-grpc >= 1.15.0rc2 -dapr >= 1.15.0rc2 +dapr-ext-grpc >= 1.15.0rc3 +dapr >= 1.15.0rc3 diff --git a/examples/w3c-tracing/requirements.txt b/examples/w3c-tracing/requirements.txt index 35327a77..3a230274 100644 --- a/examples/w3c-tracing/requirements.txt +++ b/examples/w3c-tracing/requirements.txt @@ -1,5 +1,5 @@ -dapr-ext-grpc >= 1.15.0rc2 -dapr >= 1.15.0rc2 +dapr-ext-grpc >= 1.15.0rc3 +dapr >= 1.15.0rc3 opentelemetry-sdk opentelemetry-instrumentation-grpc opentelemetry-exporter-zipkin diff --git a/examples/workflow/requirements.txt b/examples/workflow/requirements.txt index f8a8475f..483d5875 100644 --- a/examples/workflow/requirements.txt +++ b/examples/workflow/requirements.txt @@ -1,2 +1,2 @@ -dapr-ext-workflow>=0.6.0rc2 -dapr>=1.15.0rc2 +dapr-ext-workflow>=1.15.0rc1 +dapr>=1.15.0rc3 diff --git a/ext/dapr-ext-fastapi/dapr/ext/fastapi/version.py b/ext/dapr-ext-fastapi/dapr/ext/fastapi/version.py index 88f46727..ff6aac44 100644 --- a/ext/dapr-ext-fastapi/dapr/ext/fastapi/version.py +++ b/ext/dapr-ext-fastapi/dapr/ext/fastapi/version.py @@ -13,4 +13,4 @@ limitations under the License. """ -__version__ = '1.15.0rc2' +__version__ = '1.15.0rc3' diff --git a/ext/dapr-ext-fastapi/setup.cfg b/ext/dapr-ext-fastapi/setup.cfg index 6704370f..65242c8f 100644 --- a/ext/dapr-ext-fastapi/setup.cfg +++ b/ext/dapr-ext-fastapi/setup.cfg @@ -24,7 +24,7 @@ python_requires = >=3.9 packages = find_namespace: include_package_data = True install_requires = - dapr >= 1.15.0rc2 + dapr >= 1.15.0rc3 uvicorn >= 0.11.6 fastapi >= 0.60.1 diff --git a/ext/dapr-ext-grpc/dapr/ext/grpc/version.py b/ext/dapr-ext-grpc/dapr/ext/grpc/version.py index 88f46727..ff6aac44 100644 --- a/ext/dapr-ext-grpc/dapr/ext/grpc/version.py +++ b/ext/dapr-ext-grpc/dapr/ext/grpc/version.py @@ -13,4 +13,4 @@ limitations under the License. """ -__version__ = '1.15.0rc2' +__version__ = '1.15.0rc3' diff --git a/ext/dapr-ext-grpc/setup.cfg b/ext/dapr-ext-grpc/setup.cfg index 8a934348..d1cc3134 100644 --- a/ext/dapr-ext-grpc/setup.cfg +++ b/ext/dapr-ext-grpc/setup.cfg @@ -24,7 +24,7 @@ python_requires = >=3.9 packages = find_namespace: include_package_data = True install_requires = - dapr >= 1.15.0rc2 + dapr >= 1.15.0rc3 cloudevents >= 1.0.0 [options.packages.find] diff --git a/ext/dapr-ext-workflow/dapr/ext/workflow/version.py b/ext/dapr-ext-workflow/dapr/ext/workflow/version.py index dd424d18..18046a14 100644 --- a/ext/dapr-ext-workflow/dapr/ext/workflow/version.py +++ b/ext/dapr-ext-workflow/dapr/ext/workflow/version.py @@ -13,4 +13,4 @@ limitations under the License. """ -__version__ = '0.6.0rc2' +__version__ = '1.15.0rc1' diff --git a/ext/dapr-ext-workflow/setup.cfg b/ext/dapr-ext-workflow/setup.cfg index b6bbc1a7..48080430 100644 --- a/ext/dapr-ext-workflow/setup.cfg +++ b/ext/dapr-ext-workflow/setup.cfg @@ -24,7 +24,7 @@ python_requires = >=3.9 packages = find_namespace: include_package_data = True install_requires = - dapr >= 1.15.0rc2 + dapr >= 1.15.0rc3 durabletask-dapr >= 0.2.0a7 [options.packages.find] diff --git a/ext/flask_dapr/flask_dapr/version.py b/ext/flask_dapr/flask_dapr/version.py index 88f46727..ff6aac44 100644 --- a/ext/flask_dapr/flask_dapr/version.py +++ b/ext/flask_dapr/flask_dapr/version.py @@ -13,4 +13,4 @@ limitations under the License. """ -__version__ = '1.15.0rc2' +__version__ = '1.15.0rc3' diff --git a/ext/flask_dapr/setup.cfg b/ext/flask_dapr/setup.cfg index c45b59f2..12b9895a 100644 --- a/ext/flask_dapr/setup.cfg +++ b/ext/flask_dapr/setup.cfg @@ -26,4 +26,4 @@ include_package_data = true zip_safe = false install_requires = Flask >= 1.1 - dapr >= 1.15.0rc2 + dapr >= 1.15.0rc3 From db33a4306cf6e92910ec2d0ff886fcce42706fb1 Mon Sep 17 00:00:00 2001 From: Elena Kolevska Date: Thu, 27 Feb 2025 18:47:26 +0000 Subject: [PATCH 36/38] 1.15.0 Signed-off-by: Elena Kolevska --- dapr/version/version.py | 2 +- examples/demo_actor/demo_actor/requirements.txt | 2 +- examples/demo_workflow/demo_workflow/requirements.txt | 2 +- examples/invoke-simple/requirements.txt | 4 ++-- examples/w3c-tracing/requirements.txt | 4 ++-- examples/workflow/requirements.txt | 4 ++-- ext/dapr-ext-fastapi/dapr/ext/fastapi/version.py | 2 +- ext/dapr-ext-fastapi/setup.cfg | 2 +- ext/dapr-ext-grpc/dapr/ext/grpc/version.py | 2 +- ext/dapr-ext-grpc/setup.cfg | 2 +- ext/dapr-ext-workflow/dapr/ext/workflow/version.py | 2 +- ext/dapr-ext-workflow/setup.cfg | 2 +- ext/flask_dapr/flask_dapr/version.py | 2 +- ext/flask_dapr/setup.cfg | 2 +- 14 files changed, 17 insertions(+), 17 deletions(-) diff --git a/dapr/version/version.py b/dapr/version/version.py index ff6aac44..d40dfd78 100644 --- a/dapr/version/version.py +++ b/dapr/version/version.py @@ -13,4 +13,4 @@ limitations under the License. """ -__version__ = '1.15.0rc3' +__version__ = '1.15.0' diff --git a/examples/demo_actor/demo_actor/requirements.txt b/examples/demo_actor/demo_actor/requirements.txt index 528feb32..abb9aae7 100644 --- a/examples/demo_actor/demo_actor/requirements.txt +++ b/examples/demo_actor/demo_actor/requirements.txt @@ -1 +1 @@ -dapr-ext-fastapi>=1.15.0rc3 +dapr-ext-fastapi>=1.15.0 diff --git a/examples/demo_workflow/demo_workflow/requirements.txt b/examples/demo_workflow/demo_workflow/requirements.txt index daf24842..7e95391f 100644 --- a/examples/demo_workflow/demo_workflow/requirements.txt +++ b/examples/demo_workflow/demo_workflow/requirements.txt @@ -1 +1 @@ -dapr-ext-workflow>=1.15.0rc1 \ No newline at end of file +dapr-ext-workflow>=1.15.0 \ No newline at end of file diff --git a/examples/invoke-simple/requirements.txt b/examples/invoke-simple/requirements.txt index b9ff64a1..7abd0931 100644 --- a/examples/invoke-simple/requirements.txt +++ b/examples/invoke-simple/requirements.txt @@ -1,2 +1,2 @@ -dapr-ext-grpc >= 1.15.0rc3 -dapr >= 1.15.0rc3 +dapr-ext-grpc >= 1.15.0 +dapr >= 1.15.0 diff --git a/examples/w3c-tracing/requirements.txt b/examples/w3c-tracing/requirements.txt index 3a230274..aee0c8e8 100644 --- a/examples/w3c-tracing/requirements.txt +++ b/examples/w3c-tracing/requirements.txt @@ -1,5 +1,5 @@ -dapr-ext-grpc >= 1.15.0rc3 -dapr >= 1.15.0rc3 +dapr-ext-grpc >= 1.15.0 +dapr >= 1.15.0 opentelemetry-sdk opentelemetry-instrumentation-grpc opentelemetry-exporter-zipkin diff --git a/examples/workflow/requirements.txt b/examples/workflow/requirements.txt index 483d5875..348ac2d5 100644 --- a/examples/workflow/requirements.txt +++ b/examples/workflow/requirements.txt @@ -1,2 +1,2 @@ -dapr-ext-workflow>=1.15.0rc1 -dapr>=1.15.0rc3 +dapr-ext-workflow>=1.15.0 +dapr>=1.15.0 diff --git a/ext/dapr-ext-fastapi/dapr/ext/fastapi/version.py b/ext/dapr-ext-fastapi/dapr/ext/fastapi/version.py index ff6aac44..d40dfd78 100644 --- a/ext/dapr-ext-fastapi/dapr/ext/fastapi/version.py +++ b/ext/dapr-ext-fastapi/dapr/ext/fastapi/version.py @@ -13,4 +13,4 @@ limitations under the License. """ -__version__ = '1.15.0rc3' +__version__ = '1.15.0' diff --git a/ext/dapr-ext-fastapi/setup.cfg b/ext/dapr-ext-fastapi/setup.cfg index 65242c8f..a50ac6e0 100644 --- a/ext/dapr-ext-fastapi/setup.cfg +++ b/ext/dapr-ext-fastapi/setup.cfg @@ -24,7 +24,7 @@ python_requires = >=3.9 packages = find_namespace: include_package_data = True install_requires = - dapr >= 1.15.0rc3 + dapr >= 1.15.0 uvicorn >= 0.11.6 fastapi >= 0.60.1 diff --git a/ext/dapr-ext-grpc/dapr/ext/grpc/version.py b/ext/dapr-ext-grpc/dapr/ext/grpc/version.py index ff6aac44..d40dfd78 100644 --- a/ext/dapr-ext-grpc/dapr/ext/grpc/version.py +++ b/ext/dapr-ext-grpc/dapr/ext/grpc/version.py @@ -13,4 +13,4 @@ limitations under the License. """ -__version__ = '1.15.0rc3' +__version__ = '1.15.0' diff --git a/ext/dapr-ext-grpc/setup.cfg b/ext/dapr-ext-grpc/setup.cfg index d1cc3134..4ad7170e 100644 --- a/ext/dapr-ext-grpc/setup.cfg +++ b/ext/dapr-ext-grpc/setup.cfg @@ -24,7 +24,7 @@ python_requires = >=3.9 packages = find_namespace: include_package_data = True install_requires = - dapr >= 1.15.0rc3 + dapr >= 1.15.0 cloudevents >= 1.0.0 [options.packages.find] diff --git a/ext/dapr-ext-workflow/dapr/ext/workflow/version.py b/ext/dapr-ext-workflow/dapr/ext/workflow/version.py index 18046a14..d40dfd78 100644 --- a/ext/dapr-ext-workflow/dapr/ext/workflow/version.py +++ b/ext/dapr-ext-workflow/dapr/ext/workflow/version.py @@ -13,4 +13,4 @@ limitations under the License. """ -__version__ = '1.15.0rc1' +__version__ = '1.15.0' diff --git a/ext/dapr-ext-workflow/setup.cfg b/ext/dapr-ext-workflow/setup.cfg index 48080430..699c6ad0 100644 --- a/ext/dapr-ext-workflow/setup.cfg +++ b/ext/dapr-ext-workflow/setup.cfg @@ -24,7 +24,7 @@ python_requires = >=3.9 packages = find_namespace: include_package_data = True install_requires = - dapr >= 1.15.0rc3 + dapr >= 1.15.0 durabletask-dapr >= 0.2.0a7 [options.packages.find] diff --git a/ext/flask_dapr/flask_dapr/version.py b/ext/flask_dapr/flask_dapr/version.py index ff6aac44..d40dfd78 100644 --- a/ext/flask_dapr/flask_dapr/version.py +++ b/ext/flask_dapr/flask_dapr/version.py @@ -13,4 +13,4 @@ limitations under the License. """ -__version__ = '1.15.0rc3' +__version__ = '1.15.0' diff --git a/ext/flask_dapr/setup.cfg b/ext/flask_dapr/setup.cfg index 12b9895a..7e270fc1 100644 --- a/ext/flask_dapr/setup.cfg +++ b/ext/flask_dapr/setup.cfg @@ -26,4 +26,4 @@ include_package_data = true zip_safe = false install_requires = Flask >= 1.1 - dapr >= 1.15.0rc3 + dapr >= 1.15.0 From 48cd4942a24ca424c1c3927ba86fb1a74ded13ad Mon Sep 17 00:00:00 2001 From: Elena Kolevska Date: Thu, 6 Mar 2025 10:13:37 +0000 Subject: [PATCH 37/38] Dev version Signed-off-by: Elena Kolevska --- dapr/proto/common/v1/common_pb2.py | 14 +- dapr/proto/common/v1/common_pb2.pyi | 68 ++++---- dapr/proto/runtime/v1/appcallback_pb2.py | 22 +-- dapr/proto/runtime/v1/appcallback_pb2.pyi | 156 ++++++++---------- dapr/version/version.py | 2 +- .../demo_actor/demo_actor/requirements.txt | 2 +- .../demo_workflow/requirements.txt | 2 +- examples/invoke-simple/requirements.txt | 4 +- examples/w3c-tracing/requirements.txt | 4 +- examples/workflow/requirements.txt | 4 +- .../dapr/ext/fastapi/version.py | 2 +- ext/dapr-ext-fastapi/setup.cfg | 2 +- ext/dapr-ext-grpc/dapr/ext/grpc/version.py | 2 +- ext/dapr-ext-grpc/setup.cfg | 2 +- .../dapr/ext/workflow/dapr_workflow_client.py | 2 +- .../dapr/ext/workflow/version.py | 2 +- ext/dapr-ext-workflow/setup.cfg | 2 +- ext/flask_dapr/flask_dapr/version.py | 2 +- ext/flask_dapr/setup.cfg | 2 +- 19 files changed, 135 insertions(+), 161 deletions(-) diff --git a/dapr/proto/common/v1/common_pb2.py b/dapr/proto/common/v1/common_pb2.py index 673bac1b..a1bf2566 100644 --- a/dapr/proto/common/v1/common_pb2.py +++ b/dapr/proto/common/v1/common_pb2.py @@ -1,7 +1,6 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: dapr/proto/common/v1/common.proto -# Protobuf Python Version: 4.25.1 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool @@ -21,12 +20,13 @@ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'dapr.proto.common.v1.common_pb2', _globals) if _descriptor._USE_C_DESCRIPTORS == False: - _globals['DESCRIPTOR']._options = None - _globals['DESCRIPTOR']._serialized_options = b'\n\nio.dapr.v1B\014CommonProtosZ/github.com/dapr/dapr/pkg/proto/common/v1;common\252\002\033Dapr.Client.Autogen.Grpc.v1' - _globals['_STATEITEM_METADATAENTRY']._options = None - _globals['_STATEITEM_METADATAENTRY']._serialized_options = b'8\001' - _globals['_CONFIGURATIONITEM_METADATAENTRY']._options = None - _globals['_CONFIGURATIONITEM_METADATAENTRY']._serialized_options = b'8\001' + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\nio.dapr.v1B\014CommonProtosZ/github.com/dapr/dapr/pkg/proto/common/v1;common\252\002\033Dapr.Client.Autogen.Grpc.v1' + _STATEITEM_METADATAENTRY._options = None + _STATEITEM_METADATAENTRY._serialized_options = b'8\001' + _CONFIGURATIONITEM_METADATAENTRY._options = None + _CONFIGURATIONITEM_METADATAENTRY._serialized_options = b'8\001' _globals['_HTTPEXTENSION']._serialized_start=87 _globals['_HTTPEXTENSION']._serialized_end=295 _globals['_HTTPEXTENSION_VERB']._serialized_start=181 diff --git a/dapr/proto/common/v1/common_pb2.pyi b/dapr/proto/common/v1/common_pb2.pyi index b018cd8b..0b23ce54 100644 --- a/dapr/proto/common/v1/common_pb2.pyi +++ b/dapr/proto/common/v1/common_pb2.pyi @@ -13,7 +13,6 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. """ - import builtins import collections.abc import google.protobuf.any_pb2 @@ -31,7 +30,7 @@ else: DESCRIPTOR: google.protobuf.descriptor.FileDescriptor -@typing.final +@typing_extensions.final class HTTPExtension(google.protobuf.message.Message): """HTTPExtension includes HTTP verb and querystring when Dapr runtime delivers HTTP content. @@ -90,11 +89,11 @@ class HTTPExtension(google.protobuf.message.Message): verb: global___HTTPExtension.Verb.ValueType = ..., querystring: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["querystring", b"querystring", "verb", b"verb"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["querystring", b"querystring", "verb", b"verb"]) -> None: ... global___HTTPExtension = HTTPExtension -@typing.final +@typing_extensions.final class InvokeRequest(google.protobuf.message.Message): """InvokeRequest is the message to invoke a method with the data. This message is used in InvokeService of Dapr gRPC Service and OnInvoke @@ -109,18 +108,17 @@ class InvokeRequest(google.protobuf.message.Message): HTTP_EXTENSION_FIELD_NUMBER: builtins.int method: builtins.str """Required. method is a method name which will be invoked by caller.""" - content_type: builtins.str - """The type of data content. - - This field is required if data delivers http request body - Otherwise, this is optional. - """ @property def data(self) -> google.protobuf.any_pb2.Any: """Required in unary RPCs. Bytes value or Protobuf message which caller sent. Dapr treats Any.value as bytes type if Any.type_url is unset. """ + content_type: builtins.str + """The type of data content. + This field is required if data delivers http request body + Otherwise, this is optional. + """ @property def http_extension(self) -> global___HTTPExtension: """HTTP specific fields if request conveys http-compatible request. @@ -128,7 +126,6 @@ class InvokeRequest(google.protobuf.message.Message): This field is required for http-compatible request. Otherwise, this field is optional. """ - def __init__( self, *, @@ -137,12 +134,12 @@ class InvokeRequest(google.protobuf.message.Message): content_type: builtins.str = ..., http_extension: global___HTTPExtension | None = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["data", b"data", "http_extension", b"http_extension"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["content_type", b"content_type", "data", b"data", "http_extension", b"http_extension", "method", b"method"]) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["data", b"data", "http_extension", b"http_extension"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["content_type", b"content_type", "data", b"data", "http_extension", b"http_extension", "method", b"method"]) -> None: ... global___InvokeRequest = InvokeRequest -@typing.final +@typing_extensions.final class InvokeResponse(google.protobuf.message.Message): """InvokeResponse is the response message including data and its content type from app callback. @@ -154,24 +151,23 @@ class InvokeResponse(google.protobuf.message.Message): DATA_FIELD_NUMBER: builtins.int CONTENT_TYPE_FIELD_NUMBER: builtins.int - content_type: builtins.str - """Required. The type of data content.""" @property def data(self) -> google.protobuf.any_pb2.Any: """Required in unary RPCs. The content body of InvokeService response.""" - + content_type: builtins.str + """Required. The type of data content.""" def __init__( self, *, data: google.protobuf.any_pb2.Any | None = ..., content_type: builtins.str = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["data", b"data"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["content_type", b"content_type", "data", b"data"]) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["data", b"data"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["content_type", b"content_type", "data", b"data"]) -> None: ... global___InvokeResponse = InvokeResponse -@typing.final +@typing_extensions.final class StreamPayload(google.protobuf.message.Message): """Chunk of data sent in a streaming request or response. This is used in requests including InternalInvokeRequestStream. @@ -195,17 +191,17 @@ class StreamPayload(google.protobuf.message.Message): data: builtins.bytes = ..., seq: builtins.int = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["data", b"data", "seq", b"seq"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["data", b"data", "seq", b"seq"]) -> None: ... global___StreamPayload = StreamPayload -@typing.final +@typing_extensions.final class StateItem(google.protobuf.message.Message): """StateItem represents state key, value, and additional options to save state.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing.final + @typing_extensions.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -219,7 +215,7 @@ class StateItem(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... KEY_FIELD_NUMBER: builtins.int VALUE_FIELD_NUMBER: builtins.int @@ -235,15 +231,12 @@ class StateItem(google.protobuf.message.Message): """The entity tag which represents the specific version of data. The exact ETag format is defined by the corresponding data store. """ - @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """The metadata which will be passed to state store component.""" - @property def options(self) -> global___StateOptions: """Options for concurrency and consistency to save the state.""" - def __init__( self, *, @@ -253,12 +246,12 @@ class StateItem(google.protobuf.message.Message): metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., options: global___StateOptions | None = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["etag", b"etag", "options", b"options"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["etag", b"etag", "key", b"key", "metadata", b"metadata", "options", b"options", "value", b"value"]) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["etag", b"etag", "options", b"options"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["etag", b"etag", "key", b"key", "metadata", b"metadata", "options", b"options", "value", b"value"]) -> None: ... global___StateItem = StateItem -@typing.final +@typing_extensions.final class Etag(google.protobuf.message.Message): """Etag represents a state item version""" @@ -272,11 +265,11 @@ class Etag(google.protobuf.message.Message): *, value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["value", b"value"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["value", b"value"]) -> None: ... global___Etag = Etag -@typing.final +@typing_extensions.final class StateOptions(google.protobuf.message.Message): """StateOptions configures concurrency and consistency for state operations""" @@ -326,17 +319,17 @@ class StateOptions(google.protobuf.message.Message): concurrency: global___StateOptions.StateConcurrency.ValueType = ..., consistency: global___StateOptions.StateConsistency.ValueType = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["concurrency", b"concurrency", "consistency", b"consistency"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["concurrency", b"concurrency", "consistency", b"consistency"]) -> None: ... global___StateOptions = StateOptions -@typing.final +@typing_extensions.final class ConfigurationItem(google.protobuf.message.Message): """ConfigurationItem represents all the configuration with its name(key).""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing.final + @typing_extensions.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -350,7 +343,7 @@ class ConfigurationItem(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... VALUE_FIELD_NUMBER: builtins.int VERSION_FIELD_NUMBER: builtins.int @@ -362,7 +355,6 @@ class ConfigurationItem(google.protobuf.message.Message): @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """the metadata which will be passed to/from configuration store component.""" - def __init__( self, *, @@ -370,6 +362,6 @@ class ConfigurationItem(google.protobuf.message.Message): version: builtins.str = ..., metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["metadata", b"metadata", "value", b"value", "version", b"version"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["metadata", b"metadata", "value", b"value", "version", b"version"]) -> None: ... global___ConfigurationItem = ConfigurationItem diff --git a/dapr/proto/runtime/v1/appcallback_pb2.py b/dapr/proto/runtime/v1/appcallback_pb2.py index 6773f762..f661ff99 100644 --- a/dapr/proto/runtime/v1/appcallback_pb2.py +++ b/dapr/proto/runtime/v1/appcallback_pb2.py @@ -1,7 +1,6 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: dapr/proto/runtime/v1/appcallback.proto -# Protobuf Python Version: 4.25.1 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool @@ -24,16 +23,17 @@ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'dapr.proto.runtime.v1.appcallback_pb2', _globals) if _descriptor._USE_C_DESCRIPTORS == False: - _globals['DESCRIPTOR']._options = None - _globals['DESCRIPTOR']._serialized_options = b'\n\nio.dapr.v1B\025DaprAppCallbackProtosZ1github.com/dapr/dapr/pkg/proto/runtime/v1;runtime\252\002 Dapr.AppCallback.Autogen.Grpc.v1' - _globals['_TOPICEVENTBULKREQUESTENTRY_METADATAENTRY']._options = None - _globals['_TOPICEVENTBULKREQUESTENTRY_METADATAENTRY']._serialized_options = b'8\001' - _globals['_TOPICEVENTBULKREQUEST_METADATAENTRY']._options = None - _globals['_TOPICEVENTBULKREQUEST_METADATAENTRY']._serialized_options = b'8\001' - _globals['_BINDINGEVENTREQUEST_METADATAENTRY']._options = None - _globals['_BINDINGEVENTREQUEST_METADATAENTRY']._serialized_options = b'8\001' - _globals['_TOPICSUBSCRIPTION_METADATAENTRY']._options = None - _globals['_TOPICSUBSCRIPTION_METADATAENTRY']._serialized_options = b'8\001' + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\nio.dapr.v1B\025DaprAppCallbackProtosZ1github.com/dapr/dapr/pkg/proto/runtime/v1;runtime\252\002 Dapr.AppCallback.Autogen.Grpc.v1' + _TOPICEVENTBULKREQUESTENTRY_METADATAENTRY._options = None + _TOPICEVENTBULKREQUESTENTRY_METADATAENTRY._serialized_options = b'8\001' + _TOPICEVENTBULKREQUEST_METADATAENTRY._options = None + _TOPICEVENTBULKREQUEST_METADATAENTRY._serialized_options = b'8\001' + _BINDINGEVENTREQUEST_METADATAENTRY._options = None + _BINDINGEVENTREQUEST_METADATAENTRY._serialized_options = b'8\001' + _TOPICSUBSCRIPTION_METADATAENTRY._options = None + _TOPICSUBSCRIPTION_METADATAENTRY._serialized_options = b'8\001' _globals['_JOBEVENTREQUEST']._serialized_start=188 _globals['_JOBEVENTREQUEST']._serialized_end=354 _globals['_JOBEVENTRESPONSE']._serialized_start=356 diff --git a/dapr/proto/runtime/v1/appcallback_pb2.pyi b/dapr/proto/runtime/v1/appcallback_pb2.pyi index 6c12dc57..b302559f 100644 --- a/dapr/proto/runtime/v1/appcallback_pb2.pyi +++ b/dapr/proto/runtime/v1/appcallback_pb2.pyi @@ -13,7 +13,6 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. """ - import builtins import collections.abc import dapr.proto.common.v1.common_pb2 @@ -33,7 +32,7 @@ else: DESCRIPTOR: google.protobuf.descriptor.FileDescriptor -@typing.final +@typing_extensions.final class JobEventRequest(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -44,6 +43,9 @@ class JobEventRequest(google.protobuf.message.Message): HTTP_EXTENSION_FIELD_NUMBER: builtins.int name: builtins.str """Job name.""" + @property + def data(self) -> google.protobuf.any_pb2.Any: + """Job data to be sent back to app.""" method: builtins.str """Required. method is a method name which will be invoked by caller.""" content_type: builtins.str @@ -52,10 +54,6 @@ class JobEventRequest(google.protobuf.message.Message): This field is required if data delivers http request body Otherwise, this is optional. """ - @property - def data(self) -> google.protobuf.any_pb2.Any: - """Job data to be sent back to app.""" - @property def http_extension(self) -> dapr.proto.common.v1.common_pb2.HTTPExtension: """HTTP specific fields if request conveys http-compatible request. @@ -63,7 +61,6 @@ class JobEventRequest(google.protobuf.message.Message): This field is required for http-compatible request. Otherwise, this field is optional. """ - def __init__( self, *, @@ -73,12 +70,12 @@ class JobEventRequest(google.protobuf.message.Message): content_type: builtins.str = ..., http_extension: dapr.proto.common.v1.common_pb2.HTTPExtension | None = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["data", b"data", "http_extension", b"http_extension"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["content_type", b"content_type", "data", b"data", "http_extension", b"http_extension", "method", b"method", "name", b"name"]) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["data", b"data", "http_extension", b"http_extension"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["content_type", b"content_type", "data", b"data", "http_extension", b"http_extension", "method", b"method", "name", b"name"]) -> None: ... global___JobEventRequest = JobEventRequest -@typing.final +@typing_extensions.final class JobEventResponse(google.protobuf.message.Message): """JobEventResponse is the response from the app when a job is triggered.""" @@ -90,7 +87,7 @@ class JobEventResponse(google.protobuf.message.Message): global___JobEventResponse = JobEventResponse -@typing.final +@typing_extensions.final class TopicEventRequest(google.protobuf.message.Message): """TopicEventRequest message is compatible with CloudEvent spec v1.0 https://github.com/cloudevents/spec/blob/v1.0/spec.md @@ -139,7 +136,6 @@ class TopicEventRequest(google.protobuf.message.Message): @property def extensions(self) -> google.protobuf.struct_pb2.Struct: """The map of additional custom properties to be sent to the app. These are considered to be cloud event extensions.""" - def __init__( self, *, @@ -154,12 +150,12 @@ class TopicEventRequest(google.protobuf.message.Message): path: builtins.str = ..., extensions: google.protobuf.struct_pb2.Struct | None = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["extensions", b"extensions"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["data", b"data", "data_content_type", b"data_content_type", "extensions", b"extensions", "id", b"id", "path", b"path", "pubsub_name", b"pubsub_name", "source", b"source", "spec_version", b"spec_version", "topic", b"topic", "type", b"type"]) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["extensions", b"extensions"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["data", b"data", "data_content_type", b"data_content_type", "extensions", b"extensions", "id", b"id", "path", b"path", "pubsub_name", b"pubsub_name", "source", b"source", "spec_version", b"spec_version", "topic", b"topic", "type", b"type"]) -> None: ... global___TopicEventRequest = TopicEventRequest -@typing.final +@typing_extensions.final class TopicEventResponse(google.protobuf.message.Message): """TopicEventResponse is response from app on published message""" @@ -196,11 +192,11 @@ class TopicEventResponse(google.protobuf.message.Message): *, status: global___TopicEventResponse.TopicEventResponseStatus.ValueType = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["status", b"status"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["status", b"status"]) -> None: ... global___TopicEventResponse = TopicEventResponse -@typing.final +@typing_extensions.final class TopicEventCERequest(google.protobuf.message.Message): """TopicEventCERequest message is compatible with CloudEvent spec v1.0""" @@ -228,7 +224,6 @@ class TopicEventCERequest(google.protobuf.message.Message): @property def extensions(self) -> google.protobuf.struct_pb2.Struct: """Custom attributes which includes cloud event extensions.""" - def __init__( self, *, @@ -240,18 +235,18 @@ class TopicEventCERequest(google.protobuf.message.Message): data: builtins.bytes = ..., extensions: google.protobuf.struct_pb2.Struct | None = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["extensions", b"extensions"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["data", b"data", "data_content_type", b"data_content_type", "extensions", b"extensions", "id", b"id", "source", b"source", "spec_version", b"spec_version", "type", b"type"]) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["extensions", b"extensions"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["data", b"data", "data_content_type", b"data_content_type", "extensions", b"extensions", "id", b"id", "source", b"source", "spec_version", b"spec_version", "type", b"type"]) -> None: ... global___TopicEventCERequest = TopicEventCERequest -@typing.final +@typing_extensions.final class TopicEventBulkRequestEntry(google.protobuf.message.Message): """TopicEventBulkRequestEntry represents a single message inside a bulk request""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing.final + @typing_extensions.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -265,7 +260,7 @@ class TopicEventBulkRequestEntry(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... ENTRY_ID_FIELD_NUMBER: builtins.int BYTES_FIELD_NUMBER: builtins.int @@ -275,14 +270,13 @@ class TopicEventBulkRequestEntry(google.protobuf.message.Message): entry_id: builtins.str """Unique identifier for the message.""" bytes: builtins.bytes - content_type: builtins.str - """content type of the event contained.""" @property def cloud_event(self) -> global___TopicEventCERequest: ... + content_type: builtins.str + """content type of the event contained.""" @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """The metadata associated with the event.""" - def __init__( self, *, @@ -292,19 +286,19 @@ class TopicEventBulkRequestEntry(google.protobuf.message.Message): content_type: builtins.str = ..., metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["bytes", b"bytes", "cloud_event", b"cloud_event", "event", b"event"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["bytes", b"bytes", "cloud_event", b"cloud_event", "content_type", b"content_type", "entry_id", b"entry_id", "event", b"event", "metadata", b"metadata"]) -> None: ... - def WhichOneof(self, oneof_group: typing.Literal["event", b"event"]) -> typing.Literal["bytes", "cloud_event"] | None: ... + def HasField(self, field_name: typing_extensions.Literal["bytes", b"bytes", "cloud_event", b"cloud_event", "event", b"event"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["bytes", b"bytes", "cloud_event", b"cloud_event", "content_type", b"content_type", "entry_id", b"entry_id", "event", b"event", "metadata", b"metadata"]) -> None: ... + def WhichOneof(self, oneof_group: typing_extensions.Literal["event", b"event"]) -> typing_extensions.Literal["bytes", "cloud_event"] | None: ... global___TopicEventBulkRequestEntry = TopicEventBulkRequestEntry -@typing.final +@typing_extensions.final class TopicEventBulkRequest(google.protobuf.message.Message): """TopicEventBulkRequest represents request for bulk message""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing.final + @typing_extensions.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -318,7 +312,7 @@ class TopicEventBulkRequest(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... ID_FIELD_NUMBER: builtins.int ENTRIES_FIELD_NUMBER: builtins.int @@ -329,6 +323,12 @@ class TopicEventBulkRequest(google.protobuf.message.Message): PATH_FIELD_NUMBER: builtins.int id: builtins.str """Unique identifier for the bulk request.""" + @property + def entries(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___TopicEventBulkRequestEntry]: + """The list of items inside this bulk request.""" + @property + def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: + """The metadata associated with the this bulk request.""" topic: builtins.str """The pubsub topic which publisher sent to.""" pubsub_name: builtins.str @@ -339,14 +339,6 @@ class TopicEventBulkRequest(google.protobuf.message.Message): """The matching path from TopicSubscription/routes (if specified) for this event. This value is used by OnTopicEvent to "switch" inside the handler. """ - @property - def entries(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___TopicEventBulkRequestEntry]: - """The list of items inside this bulk request.""" - - @property - def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: - """The metadata associated with the this bulk request.""" - def __init__( self, *, @@ -358,11 +350,11 @@ class TopicEventBulkRequest(google.protobuf.message.Message): type: builtins.str = ..., path: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["entries", b"entries", "id", b"id", "metadata", b"metadata", "path", b"path", "pubsub_name", b"pubsub_name", "topic", b"topic", "type", b"type"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["entries", b"entries", "id", b"id", "metadata", b"metadata", "path", b"path", "pubsub_name", b"pubsub_name", "topic", b"topic", "type", b"type"]) -> None: ... global___TopicEventBulkRequest = TopicEventBulkRequest -@typing.final +@typing_extensions.final class TopicEventBulkResponseEntry(google.protobuf.message.Message): """TopicEventBulkResponseEntry Represents single response, as part of TopicEventBulkResponse, to be sent by subscibed App for the corresponding single message during bulk subscribe @@ -382,11 +374,11 @@ class TopicEventBulkResponseEntry(google.protobuf.message.Message): entry_id: builtins.str = ..., status: global___TopicEventResponse.TopicEventResponseStatus.ValueType = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["entry_id", b"entry_id", "status", b"status"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["entry_id", b"entry_id", "status", b"status"]) -> None: ... global___TopicEventBulkResponseEntry = TopicEventBulkResponseEntry -@typing.final +@typing_extensions.final class TopicEventBulkResponse(google.protobuf.message.Message): """AppBulkResponse is response from app on published message""" @@ -396,23 +388,22 @@ class TopicEventBulkResponse(google.protobuf.message.Message): @property def statuses(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___TopicEventBulkResponseEntry]: """The list of all responses for the bulk request.""" - def __init__( self, *, statuses: collections.abc.Iterable[global___TopicEventBulkResponseEntry] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["statuses", b"statuses"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["statuses", b"statuses"]) -> None: ... global___TopicEventBulkResponse = TopicEventBulkResponse -@typing.final +@typing_extensions.final class BindingEventRequest(google.protobuf.message.Message): """BindingEventRequest represents input bindings event.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing.final + @typing_extensions.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -426,7 +417,7 @@ class BindingEventRequest(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... NAME_FIELD_NUMBER: builtins.int DATA_FIELD_NUMBER: builtins.int @@ -438,7 +429,6 @@ class BindingEventRequest(google.protobuf.message.Message): @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """The metadata set by the input binging components.""" - def __init__( self, *, @@ -446,11 +436,11 @@ class BindingEventRequest(google.protobuf.message.Message): data: builtins.bytes = ..., metadata: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["data", b"data", "metadata", b"metadata", "name", b"name"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["data", b"data", "metadata", b"metadata", "name", b"name"]) -> None: ... global___BindingEventRequest = BindingEventRequest -@typing.final +@typing_extensions.final class BindingEventResponse(google.protobuf.message.Message): """BindingEventResponse includes operations to save state or send data to output bindings optionally. @@ -484,20 +474,18 @@ class BindingEventResponse(google.protobuf.message.Message): CONCURRENCY_FIELD_NUMBER: builtins.int store_name: builtins.str """The name of state store where states are saved.""" - data: builtins.bytes - """The content which will be sent to "to" output bindings.""" - concurrency: global___BindingEventResponse.BindingEventConcurrency.ValueType - """The concurrency of output bindings to send data to - "to" output bindings list. The default is SEQUENTIAL. - """ @property def states(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[dapr.proto.common.v1.common_pb2.StateItem]: """The state key values which will be stored in store_name.""" - @property def to(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]: """The list of output bindings.""" - + data: builtins.bytes + """The content which will be sent to "to" output bindings.""" + concurrency: global___BindingEventResponse.BindingEventConcurrency.ValueType + """The concurrency of output bindings to send data to + "to" output bindings list. The default is SEQUENTIAL. + """ def __init__( self, *, @@ -507,11 +495,11 @@ class BindingEventResponse(google.protobuf.message.Message): data: builtins.bytes = ..., concurrency: global___BindingEventResponse.BindingEventConcurrency.ValueType = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["concurrency", b"concurrency", "data", b"data", "states", b"states", "store_name", b"store_name", "to", b"to"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["concurrency", b"concurrency", "data", b"data", "states", b"states", "store_name", b"store_name", "to", b"to"]) -> None: ... global___BindingEventResponse = BindingEventResponse -@typing.final +@typing_extensions.final class ListTopicSubscriptionsResponse(google.protobuf.message.Message): """ListTopicSubscriptionsResponse is the message including the list of the subscribing topics.""" @@ -521,23 +509,22 @@ class ListTopicSubscriptionsResponse(google.protobuf.message.Message): @property def subscriptions(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___TopicSubscription]: """The list of topics.""" - def __init__( self, *, subscriptions: collections.abc.Iterable[global___TopicSubscription] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["subscriptions", b"subscriptions"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["subscriptions", b"subscriptions"]) -> None: ... global___ListTopicSubscriptionsResponse = ListTopicSubscriptionsResponse -@typing.final +@typing_extensions.final class TopicSubscription(google.protobuf.message.Message): """TopicSubscription represents topic and metadata.""" DESCRIPTOR: google.protobuf.descriptor.Descriptor - @typing.final + @typing_extensions.final class MetadataEntry(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -551,7 +538,7 @@ class TopicSubscription(google.protobuf.message.Message): key: builtins.str = ..., value: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... PUBSUB_NAME_FIELD_NUMBER: builtins.int TOPIC_FIELD_NUMBER: builtins.int @@ -563,22 +550,19 @@ class TopicSubscription(google.protobuf.message.Message): """Required. The name of the pubsub containing the topic below to subscribe to.""" topic: builtins.str """Required. The name of topic which will be subscribed""" - dead_letter_topic: builtins.str - """The optional dead letter queue for this topic to send events to.""" @property def metadata(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: """The optional properties used for this topic's subscription e.g. session id""" - @property def routes(self) -> global___TopicRoutes: """The optional routing rules to match against. In the gRPC interface, OnTopicEvent is still invoked but the matching path is sent in the TopicEventRequest. """ - + dead_letter_topic: builtins.str + """The optional dead letter queue for this topic to send events to.""" @property def bulk_subscribe(self) -> global___BulkSubscribeConfig: """The optional bulk subscribe settings for this topic.""" - def __init__( self, *, @@ -589,34 +573,33 @@ class TopicSubscription(google.protobuf.message.Message): dead_letter_topic: builtins.str = ..., bulk_subscribe: global___BulkSubscribeConfig | None = ..., ) -> None: ... - def HasField(self, field_name: typing.Literal["bulk_subscribe", b"bulk_subscribe", "routes", b"routes"]) -> builtins.bool: ... - def ClearField(self, field_name: typing.Literal["bulk_subscribe", b"bulk_subscribe", "dead_letter_topic", b"dead_letter_topic", "metadata", b"metadata", "pubsub_name", b"pubsub_name", "routes", b"routes", "topic", b"topic"]) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["bulk_subscribe", b"bulk_subscribe", "routes", b"routes"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["bulk_subscribe", b"bulk_subscribe", "dead_letter_topic", b"dead_letter_topic", "metadata", b"metadata", "pubsub_name", b"pubsub_name", "routes", b"routes", "topic", b"topic"]) -> None: ... global___TopicSubscription = TopicSubscription -@typing.final +@typing_extensions.final class TopicRoutes(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor RULES_FIELD_NUMBER: builtins.int DEFAULT_FIELD_NUMBER: builtins.int - default: builtins.str - """The default path for this topic.""" @property def rules(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___TopicRule]: """The list of rules for this topic.""" - + default: builtins.str + """The default path for this topic.""" def __init__( self, *, rules: collections.abc.Iterable[global___TopicRule] | None = ..., default: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["default", b"default", "rules", b"rules"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["default", b"default", "rules", b"rules"]) -> None: ... global___TopicRoutes = TopicRoutes -@typing.final +@typing_extensions.final class TopicRule(google.protobuf.message.Message): DESCRIPTOR: google.protobuf.descriptor.Descriptor @@ -638,11 +621,11 @@ class TopicRule(google.protobuf.message.Message): match: builtins.str = ..., path: builtins.str = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["match", b"match", "path", b"path"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["match", b"match", "path", b"path"]) -> None: ... global___TopicRule = TopicRule -@typing.final +@typing_extensions.final class BulkSubscribeConfig(google.protobuf.message.Message): """BulkSubscribeConfig is the message to pass settings for bulk subscribe""" @@ -664,11 +647,11 @@ class BulkSubscribeConfig(google.protobuf.message.Message): max_messages_count: builtins.int = ..., max_await_duration_ms: builtins.int = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["enabled", b"enabled", "max_await_duration_ms", b"max_await_duration_ms", "max_messages_count", b"max_messages_count"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["enabled", b"enabled", "max_await_duration_ms", b"max_await_duration_ms", "max_messages_count", b"max_messages_count"]) -> None: ... global___BulkSubscribeConfig = BulkSubscribeConfig -@typing.final +@typing_extensions.final class ListInputBindingsResponse(google.protobuf.message.Message): """ListInputBindingsResponse is the message including the list of input bindings.""" @@ -678,17 +661,16 @@ class ListInputBindingsResponse(google.protobuf.message.Message): @property def bindings(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]: """The list of input bindings.""" - def __init__( self, *, bindings: collections.abc.Iterable[builtins.str] | None = ..., ) -> None: ... - def ClearField(self, field_name: typing.Literal["bindings", b"bindings"]) -> None: ... + def ClearField(self, field_name: typing_extensions.Literal["bindings", b"bindings"]) -> None: ... global___ListInputBindingsResponse = ListInputBindingsResponse -@typing.final +@typing_extensions.final class HealthCheckResponse(google.protobuf.message.Message): """HealthCheckResponse is the message with the response to the health check. This message is currently empty as used as placeholder. diff --git a/dapr/version/version.py b/dapr/version/version.py index d40dfd78..112a2520 100644 --- a/dapr/version/version.py +++ b/dapr/version/version.py @@ -13,4 +13,4 @@ limitations under the License. """ -__version__ = '1.15.0' +__version__ = '1.15.0.dev' diff --git a/examples/demo_actor/demo_actor/requirements.txt b/examples/demo_actor/demo_actor/requirements.txt index abb9aae7..4c2215b5 100644 --- a/examples/demo_actor/demo_actor/requirements.txt +++ b/examples/demo_actor/demo_actor/requirements.txt @@ -1 +1 @@ -dapr-ext-fastapi>=1.15.0 +dapr-ext-fastapi-dev>=1.15.0.dev diff --git a/examples/demo_workflow/demo_workflow/requirements.txt b/examples/demo_workflow/demo_workflow/requirements.txt index 7e95391f..7f7a666d 100644 --- a/examples/demo_workflow/demo_workflow/requirements.txt +++ b/examples/demo_workflow/demo_workflow/requirements.txt @@ -1 +1 @@ -dapr-ext-workflow>=1.15.0 \ No newline at end of file +dapr-ext-workflow-dev>=1.15.0.dev \ No newline at end of file diff --git a/examples/invoke-simple/requirements.txt b/examples/invoke-simple/requirements.txt index 7abd0931..ee0ce707 100644 --- a/examples/invoke-simple/requirements.txt +++ b/examples/invoke-simple/requirements.txt @@ -1,2 +1,2 @@ -dapr-ext-grpc >= 1.15.0 -dapr >= 1.15.0 +dapr-ext-grpc-dev >= 1.15.0.dev +dapr-dev >= 1.15.0.dev diff --git a/examples/w3c-tracing/requirements.txt b/examples/w3c-tracing/requirements.txt index aee0c8e8..cd15885b 100644 --- a/examples/w3c-tracing/requirements.txt +++ b/examples/w3c-tracing/requirements.txt @@ -1,5 +1,5 @@ -dapr-ext-grpc >= 1.15.0 -dapr >= 1.15.0 +dapr-ext-grpc-dev >= 1.15.0.dev +dapr-dev >= 1.15.0.dev opentelemetry-sdk opentelemetry-instrumentation-grpc opentelemetry-exporter-zipkin diff --git a/examples/workflow/requirements.txt b/examples/workflow/requirements.txt index 348ac2d5..e220036d 100644 --- a/examples/workflow/requirements.txt +++ b/examples/workflow/requirements.txt @@ -1,2 +1,2 @@ -dapr-ext-workflow>=1.15.0 -dapr>=1.15.0 +dapr-ext-workflow-dev>=1.15.0.dev +dapr-dev>=1.15.0.dev diff --git a/ext/dapr-ext-fastapi/dapr/ext/fastapi/version.py b/ext/dapr-ext-fastapi/dapr/ext/fastapi/version.py index d40dfd78..112a2520 100644 --- a/ext/dapr-ext-fastapi/dapr/ext/fastapi/version.py +++ b/ext/dapr-ext-fastapi/dapr/ext/fastapi/version.py @@ -13,4 +13,4 @@ limitations under the License. """ -__version__ = '1.15.0' +__version__ = '1.15.0.dev' diff --git a/ext/dapr-ext-fastapi/setup.cfg b/ext/dapr-ext-fastapi/setup.cfg index a50ac6e0..560a795f 100644 --- a/ext/dapr-ext-fastapi/setup.cfg +++ b/ext/dapr-ext-fastapi/setup.cfg @@ -24,7 +24,7 @@ python_requires = >=3.9 packages = find_namespace: include_package_data = True install_requires = - dapr >= 1.15.0 + dapr-dev >= 1.15.0.dev uvicorn >= 0.11.6 fastapi >= 0.60.1 diff --git a/ext/dapr-ext-grpc/dapr/ext/grpc/version.py b/ext/dapr-ext-grpc/dapr/ext/grpc/version.py index d40dfd78..112a2520 100644 --- a/ext/dapr-ext-grpc/dapr/ext/grpc/version.py +++ b/ext/dapr-ext-grpc/dapr/ext/grpc/version.py @@ -13,4 +13,4 @@ limitations under the License. """ -__version__ = '1.15.0' +__version__ = '1.15.0.dev' diff --git a/ext/dapr-ext-grpc/setup.cfg b/ext/dapr-ext-grpc/setup.cfg index 4ad7170e..caf84a2e 100644 --- a/ext/dapr-ext-grpc/setup.cfg +++ b/ext/dapr-ext-grpc/setup.cfg @@ -24,7 +24,7 @@ python_requires = >=3.9 packages = find_namespace: include_package_data = True install_requires = - dapr >= 1.15.0 + dapr-dev >= 1.15.0.dev cloudevents >= 1.0.0 [options.packages.find] diff --git a/ext/dapr-ext-workflow/dapr/ext/workflow/dapr_workflow_client.py b/ext/dapr-ext-workflow/dapr/ext/workflow/dapr_workflow_client.py index cc384503..e5ec4314 100644 --- a/ext/dapr-ext-workflow/dapr/ext/workflow/dapr_workflow_client.py +++ b/ext/dapr-ext-workflow/dapr/ext/workflow/dapr_workflow_client.py @@ -158,7 +158,7 @@ def wait_for_workflow_start( fetch_payloads: If true, fetches the input, output payloads and custom status for the workflow instance. Defaults to false. timeout_in_seconds: The maximum time to wait for the workflow instance to start running. - Defaults to meaning no timeout. + Defaults to 0 seconds, meaning no timeout. Returns: WorkflowState record that describes the workflow instance and its execution status. diff --git a/ext/dapr-ext-workflow/dapr/ext/workflow/version.py b/ext/dapr-ext-workflow/dapr/ext/workflow/version.py index d40dfd78..112a2520 100644 --- a/ext/dapr-ext-workflow/dapr/ext/workflow/version.py +++ b/ext/dapr-ext-workflow/dapr/ext/workflow/version.py @@ -13,4 +13,4 @@ limitations under the License. """ -__version__ = '1.15.0' +__version__ = '1.15.0.dev' diff --git a/ext/dapr-ext-workflow/setup.cfg b/ext/dapr-ext-workflow/setup.cfg index 699c6ad0..3776ec89 100644 --- a/ext/dapr-ext-workflow/setup.cfg +++ b/ext/dapr-ext-workflow/setup.cfg @@ -24,7 +24,7 @@ python_requires = >=3.9 packages = find_namespace: include_package_data = True install_requires = - dapr >= 1.15.0 + dapr-dev >= 1.15.0.dev durabletask-dapr >= 0.2.0a7 [options.packages.find] diff --git a/ext/flask_dapr/flask_dapr/version.py b/ext/flask_dapr/flask_dapr/version.py index d40dfd78..112a2520 100644 --- a/ext/flask_dapr/flask_dapr/version.py +++ b/ext/flask_dapr/flask_dapr/version.py @@ -13,4 +13,4 @@ limitations under the License. """ -__version__ = '1.15.0' +__version__ = '1.15.0.dev' diff --git a/ext/flask_dapr/setup.cfg b/ext/flask_dapr/setup.cfg index 7e270fc1..64d15941 100644 --- a/ext/flask_dapr/setup.cfg +++ b/ext/flask_dapr/setup.cfg @@ -26,4 +26,4 @@ include_package_data = true zip_safe = false install_requires = Flask >= 1.1 - dapr >= 1.15.0 + dapr-dev >= 1.15.0.dev From 1de7c953b2a0d01842c4f5a89b1c3e7056382e79 Mon Sep 17 00:00:00 2001 From: Elena Kolevska Date: Thu, 6 Mar 2025 12:16:35 +0000 Subject: [PATCH 38/38] Updates docs error codes link Signed-off-by: Elena Kolevska --- examples/error_handling/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/error_handling/README.md b/examples/error_handling/README.md index 067b3ed1..cad94f81 100644 --- a/examples/error_handling/README.md +++ b/examples/error_handling/README.md @@ -1,6 +1,6 @@ # Example - Error handling -This guide demonstrates handling `DaprGrpcError` errors when using the Dapr python-SDK. It's important to note that not all Dapr gRPC status errors are currently captured and transformed into a `DaprGrpcError` by the SDK. Efforts are ongoing to enhance this aspect, and contributions are welcome. For detailed information on error handling in Dapr, refer to the [official documentation](https://docs.dapr.io/reference/errors). +This guide demonstrates handling `DaprGrpcError` errors when using the Dapr python-SDK. It's important to note that not all Dapr gRPC status errors are currently captured and transformed into a `DaprGrpcError` by the SDK. Efforts are ongoing to enhance this aspect, and contributions are welcome. For detailed information on error handling in Dapr, refer to the [official documentation](https://docs.dapr.io/developing-applications/error-codes/). The example involves creating a DaprClient and invoking the save_state method. It uses the default configuration from Dapr init in [self-hosted mode](https://github.com/dapr/cli#install-dapr-on-your-local-machine-self-hosted).