1515import warnings
1616from abc import ABC , abstractmethod
1717from contextlib import contextmanager
18- from dataclasses import dataclass
18+ from dataclasses import dataclass , field
1919from datetime import datetime , timedelta , timezone
2020from typing import (
2121 Any ,
@@ -214,9 +214,8 @@ def _cancel(
214214 warnings .warn (f"Cannot find activity to cancel for token { task_token !r} " )
215215 return
216216 logger .debug ("Cancelling activity %s, reason: %s" , task_token , cancel .reason )
217- activity .cancellation_details = (
218- temporalio .activity .ActivityCancellationDetails ._fromProto (cancel .details )
219- )
217+ activity .cancellation_details .cancelled = cancel .details .is_cancelled
218+ activity .cancellation_details .paused = cancel .details .is_paused
220219 activity .cancel (cancelled_by_request = True )
221220
222221 def _heartbeat (self , task_token : bytes , * details : Any ) -> None :
@@ -424,8 +423,6 @@ async def _run_activity(
424423 headers = start .header_fields ,
425424 )
426425
427- running_activity .cancellation_details = None
428-
429426 # Set the context early so the logging adapter works and
430427 # interceptors have it
431428 temporalio .activity ._Context .set (
@@ -441,8 +438,7 @@ async def _run_activity(
441438 runtime_metric_meter = None
442439 if sync_non_threaded
443440 else self ._metric_meter ,
444- # Function reference to the running activity's cancellation details
445- cancellation_details = lambda : running_activity .cancellation_details ,
441+ cancellation_details = running_activity .cancellation_details ,
446442 )
447443 )
448444 temporalio .activity .logger .debug ("Starting activity" )
@@ -553,8 +549,8 @@ class _RunningActivity:
553549 done : bool = False
554550 cancelled_by_request : bool = False
555551 cancelled_due_to_heartbeat_error : Optional [Exception ] = None
556- cancellation_details : Optional [ temporalio .activity .ActivityCancellationDetails ] = (
557- None
552+ cancellation_details : temporalio .activity .ActivityCancellationDetails = field (
553+ default_factory = temporalio . activity . ActivityCancellationDetails
558554 )
559555
560556 def cancel (
@@ -751,9 +747,7 @@ def _execute_sync_activity(
751747 temporalio .converter .PayloadConverter ,
752748 ],
753749 runtime_metric_meter : Optional [temporalio .common .MetricMeter ],
754- cancellation_details : Callable [
755- [], Optional [temporalio .activity .ActivityCancellationDetails ]
756- ],
750+ cancellation_details : Optional [temporalio .activity .ActivityCancellationDetails ],
757751 fn : Callable [..., Any ],
758752 * args : Any ,
759753) -> Any :
0 commit comments