6666 ActivitySerializationContext ,
6767 DataConverter ,
6868 SerializationContext ,
69+ StorageDriverActivityInfo ,
70+ StorageDriverStoreContext ,
71+ StorageDriverWorkflowInfo ,
6972 WithSerializationContext ,
7073 WorkflowSerializationContext ,
7174)
@@ -6161,11 +6164,16 @@ async def _to_proto(
61616164 priority : temporalio .api .common .v1 .Priority | None = None
61626165 if self .priority :
61636166 priority = self .priority ._to_proto ()
6164- data_converter = client .data_converter .with_context (
6167+ data_converter = client .data_converter ._with_contexts (
61656168 WorkflowSerializationContext (
61666169 namespace = client .namespace ,
61676170 workflow_id = self .id ,
6168- )
6171+ ),
6172+ StorageDriverStoreContext (
6173+ target = StorageDriverWorkflowInfo (
6174+ id = self .id , type = self .workflow , namespace = client .namespace
6175+ ),
6176+ ),
61696177 )
61706178 action = temporalio .api .schedule .v1 .ScheduleAction (
61716179 start_workflow = temporalio .api .workflow .v1 .NewWorkflowExecutionInfo (
@@ -6210,7 +6218,8 @@ async def _to_proto(
62106218 # TODO (dan): confirm whether this be `is not None`
62116219 if self .typed_search_attributes :
62126220 temporalio .converter .encode_search_attributes (
6213- self .typed_search_attributes , action .start_workflow .search_attributes
6221+ self .typed_search_attributes ,
6222+ action .start_workflow .search_attributes ,
62146223 )
62156224 if self .headers :
62166225 await _apply_headers (
@@ -8077,11 +8086,16 @@ async def _build_signal_with_start_workflow_execution_request(
80778086 self , input : StartWorkflowInput
80788087 ) -> temporalio .api .workflowservice .v1 .SignalWithStartWorkflowExecutionRequest :
80798088 assert input .start_signal
8080- data_converter = self ._client .data_converter .with_context (
8089+ data_converter = self ._client .data_converter ._with_contexts (
80818090 WorkflowSerializationContext (
80828091 namespace = self ._client .namespace ,
80838092 workflow_id = input .id ,
8084- )
8093+ ),
8094+ StorageDriverStoreContext (
8095+ target = StorageDriverWorkflowInfo (
8096+ id = input .id , type = input .workflow , namespace = self ._client .namespace
8097+ ),
8098+ ),
80858099 )
80868100 req = temporalio .api .workflowservice .v1 .SignalWithStartWorkflowExecutionRequest (
80878101 signal_name = input .start_signal
@@ -8108,11 +8122,16 @@ async def _populate_start_workflow_execution_request(
81088122 ),
81098123 input : StartWorkflowInput | UpdateWithStartStartWorkflowInput ,
81108124 ) -> None :
8111- data_converter = self ._client .data_converter .with_context (
8125+ data_converter = self ._client .data_converter ._with_contexts (
81128126 WorkflowSerializationContext (
81138127 namespace = self ._client .namespace ,
81148128 workflow_id = input .id ,
8115- )
8129+ ),
8130+ StorageDriverStoreContext (
8131+ target = StorageDriverWorkflowInfo (
8132+ id = input .id , type = input .workflow , namespace = self ._client .namespace
8133+ ),
8134+ ),
81168135 )
81178136 req .namespace = self ._client .namespace
81188137 req .workflow_id = input .id
@@ -8228,11 +8247,18 @@ async def count_workflows(
82288247 )
82298248
82308249 async def query_workflow (self , input : QueryWorkflowInput ) -> Any :
8231- data_converter = self ._client .data_converter .with_context (
8250+ data_converter = self ._client .data_converter ._with_contexts (
82328251 WorkflowSerializationContext (
82338252 namespace = self ._client .namespace ,
82348253 workflow_id = input .id ,
8235- )
8254+ ),
8255+ StorageDriverStoreContext (
8256+ target = StorageDriverWorkflowInfo (
8257+ id = input .id ,
8258+ run_id = input .run_id or None ,
8259+ namespace = self ._client .namespace ,
8260+ ),
8261+ ),
82368262 )
82378263 req = temporalio .api .workflowservice .v1 .QueryWorkflowRequest (
82388264 namespace = self ._client .namespace ,
@@ -8255,7 +8281,10 @@ async def query_workflow(self, input: QueryWorkflowInput) -> Any:
82558281 await self ._apply_headers (input .headers , req .query .header .fields )
82568282 try :
82578283 resp = await self ._client .workflow_service .query_workflow (
8258- req , retry = True , metadata = input .rpc_metadata , timeout = input .rpc_timeout
8284+ req ,
8285+ retry = True ,
8286+ metadata = input .rpc_metadata ,
8287+ timeout = input .rpc_timeout ,
82598288 )
82608289 except RPCError as err :
82618290 # If the status is INVALID_ARGUMENT, we can assume it's a query
@@ -8281,11 +8310,18 @@ async def query_workflow(self, input: QueryWorkflowInput) -> Any:
82818310 return results [0 ]
82828311
82838312 async def signal_workflow (self , input : SignalWorkflowInput ) -> None :
8284- data_converter = self ._client .data_converter .with_context (
8313+ data_converter = self ._client .data_converter ._with_contexts (
82858314 WorkflowSerializationContext (
82868315 namespace = self ._client .namespace ,
82878316 workflow_id = input .id ,
8288- )
8317+ ),
8318+ StorageDriverStoreContext (
8319+ target = StorageDriverWorkflowInfo (
8320+ id = input .id ,
8321+ run_id = input .run_id or None ,
8322+ namespace = self ._client .namespace ,
8323+ ),
8324+ ),
82898325 )
82908326 req = temporalio .api .workflowservice .v1 .SignalWorkflowExecutionRequest (
82918327 namespace = self ._client .namespace ,
@@ -8306,11 +8342,18 @@ async def signal_workflow(self, input: SignalWorkflowInput) -> None:
83068342 )
83078343
83088344 async def terminate_workflow (self , input : TerminateWorkflowInput ) -> None :
8309- data_converter = self ._client .data_converter .with_context (
8345+ data_converter = self ._client .data_converter ._with_contexts (
83108346 WorkflowSerializationContext (
83118347 namespace = self ._client .namespace ,
83128348 workflow_id = input .id ,
8313- )
8349+ ),
8350+ StorageDriverStoreContext (
8351+ target = StorageDriverWorkflowInfo (
8352+ id = input .id ,
8353+ run_id = input .run_id or None ,
8354+ namespace = self ._client .namespace ,
8355+ ),
8356+ ),
83148357 )
83158358 req = temporalio .api .workflowservice .v1 .TerminateWorkflowExecutionRequest (
83168359 namespace = self ._client .namespace ,
@@ -8365,7 +8408,7 @@ async def _build_start_activity_execution_request(
83658408 self , input : StartActivityInput
83668409 ) -> temporalio .api .workflowservice .v1 .StartActivityExecutionRequest :
83678410 """Build StartActivityExecutionRequest from input."""
8368- data_converter = self ._client .data_converter .with_context (
8411+ data_converter = self ._client .data_converter ._with_contexts (
83698412 ActivitySerializationContext (
83708413 namespace = self ._client .namespace ,
83718414 activity_id = input .id ,
@@ -8374,7 +8417,14 @@ async def _build_start_activity_execution_request(
83748417 is_local = False ,
83758418 workflow_id = None ,
83768419 workflow_type = None ,
8377- )
8420+ ),
8421+ StorageDriverStoreContext (
8422+ target = StorageDriverActivityInfo (
8423+ id = input .id ,
8424+ type = input .activity_type ,
8425+ namespace = self ._client .namespace ,
8426+ ),
8427+ ),
83788428 )
83798429
83808430 req = temporalio .api .workflowservice .v1 .StartActivityExecutionRequest (
@@ -8560,11 +8610,20 @@ async def _build_update_workflow_execution_request(
85608610 input : StartWorkflowUpdateInput | UpdateWithStartUpdateWorkflowInput ,
85618611 workflow_id : str ,
85628612 ) -> temporalio .api .workflowservice .v1 .UpdateWorkflowExecutionRequest :
8563- data_converter = self ._client .data_converter .with_context (
8613+ data_converter = self ._client .data_converter ._with_contexts (
85648614 WorkflowSerializationContext (
85658615 namespace = self ._client .namespace ,
85668616 workflow_id = workflow_id ,
8567- )
8617+ ),
8618+ StorageDriverStoreContext (
8619+ target = StorageDriverWorkflowInfo (
8620+ id = workflow_id ,
8621+ run_id = (input .run_id or None )
8622+ if isinstance (input , StartWorkflowUpdateInput )
8623+ else None ,
8624+ namespace = self ._client .namespace ,
8625+ ),
8626+ ),
85688627 )
85698628 run_id , first_execution_run_id = (
85708629 (
@@ -8739,10 +8798,34 @@ async def _start_workflow_update_with_start(
87398798
87408799 ### Async activity calls
87418800
8801+ def _get_async_activity_store_context (
8802+ self , id_or_token : AsyncActivityIDReference | bytes
8803+ ) -> StorageDriverStoreContext :
8804+ if isinstance (id_or_token , AsyncActivityIDReference ):
8805+ if id_or_token .workflow_id :
8806+ return StorageDriverStoreContext (
8807+ target = StorageDriverWorkflowInfo (
8808+ id = id_or_token .workflow_id or None ,
8809+ run_id = id_or_token .run_id or None ,
8810+ namespace = self ._client .namespace ,
8811+ ),
8812+ )
8813+ return StorageDriverStoreContext (
8814+ target = StorageDriverActivityInfo (
8815+ id = id_or_token .activity_id ,
8816+ run_id = id_or_token .run_id or None ,
8817+ namespace = self ._client .namespace ,
8818+ ),
8819+ )
8820+ else :
8821+ return StorageDriverStoreContext (target = None )
8822+
87428823 async def heartbeat_async_activity (
87438824 self , input : HeartbeatAsyncActivityInput
87448825 ) -> None :
8745- data_converter = input .data_converter_override or self ._client .data_converter
8826+ data_converter = (
8827+ input .data_converter_override or self ._client .data_converter
8828+ )._with_store_context (self ._get_async_activity_store_context (input .id_or_token ))
87468829 details = (
87478830 None
87488831 if not input .details
@@ -8797,7 +8880,9 @@ async def heartbeat_async_activity(
87978880 )
87988881
87998882 async def complete_async_activity (self , input : CompleteAsyncActivityInput ) -> None :
8800- data_converter = input .data_converter_override or self ._client .data_converter
8883+ data_converter = (
8884+ input .data_converter_override or self ._client .data_converter
8885+ )._with_store_context (self ._get_async_activity_store_context (input .id_or_token ))
88018886 result = (
88028887 None
88038888 if input .result is temporalio .common ._arg_unset
@@ -8831,7 +8916,9 @@ async def complete_async_activity(self, input: CompleteAsyncActivityInput) -> No
88318916 )
88328917
88338918 async def fail_async_activity (self , input : FailAsyncActivityInput ) -> None :
8834- data_converter = input .data_converter_override or self ._client .data_converter
8919+ data_converter = (
8920+ input .data_converter_override or self ._client .data_converter
8921+ )._with_store_context (self ._get_async_activity_store_context (input .id_or_token ))
88358922
88368923 failure = temporalio .api .failure .v1 .Failure ()
88378924 await data_converter .encode_failure (input .error , failure )
@@ -8872,7 +8959,9 @@ async def fail_async_activity(self, input: FailAsyncActivityInput) -> None:
88728959 async def report_cancellation_async_activity (
88738960 self , input : ReportCancellationAsyncActivityInput
88748961 ) -> None :
8875- data_converter = input .data_converter_override or self ._client .data_converter
8962+ data_converter = (
8963+ input .data_converter_override or self ._client .data_converter
8964+ )._with_store_context (self ._get_async_activity_store_context (input .id_or_token ))
88768965 details = (
88778966 None
88788967 if not input .details
0 commit comments