15
15
import warnings
16
16
from abc import ABC , abstractmethod
17
17
from contextlib import contextmanager
18
- from dataclasses import dataclass
18
+ from dataclasses import dataclass , field
19
19
from datetime import datetime , timedelta , timezone
20
20
from typing import (
21
21
Any ,
@@ -214,9 +214,8 @@ def _cancel(
214
214
warnings .warn (f"Cannot find activity to cancel for token { task_token !r} " )
215
215
return
216
216
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
220
219
activity .cancel (cancelled_by_request = True )
221
220
222
221
def _heartbeat (self , task_token : bytes , * details : Any ) -> None :
@@ -424,8 +423,6 @@ async def _run_activity(
424
423
headers = start .header_fields ,
425
424
)
426
425
427
- running_activity .cancellation_details = None
428
-
429
426
# Set the context early so the logging adapter works and
430
427
# interceptors have it
431
428
temporalio .activity ._Context .set (
@@ -441,8 +438,7 @@ async def _run_activity(
441
438
runtime_metric_meter = None
442
439
if sync_non_threaded
443
440
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 ,
446
442
)
447
443
)
448
444
temporalio .activity .logger .debug ("Starting activity" )
@@ -553,8 +549,8 @@ class _RunningActivity:
553
549
done : bool = False
554
550
cancelled_by_request : bool = False
555
551
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
558
554
)
559
555
560
556
def cancel (
@@ -751,9 +747,7 @@ def _execute_sync_activity(
751
747
temporalio .converter .PayloadConverter ,
752
748
],
753
749
runtime_metric_meter : Optional [temporalio .common .MetricMeter ],
754
- cancellation_details : Callable [
755
- [], Optional [temporalio .activity .ActivityCancellationDetails ]
756
- ],
750
+ cancellation_details : Optional [temporalio .activity .ActivityCancellationDetails ],
757
751
fn : Callable [..., Any ],
758
752
* args : Any ,
759
753
) -> Any :
0 commit comments