Skip to content

Commit 5c8299a

Browse files
committed
use object reference instead of function, picklable
1 parent 890ec02 commit 5c8299a

File tree

3 files changed

+11
-13
lines changed

3 files changed

+11
-13
lines changed

temporalio/activity.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ class _Context:
174174
temporalio.converter.PayloadConverter,
175175
]
176176
runtime_metric_meter: Optional[temporalio.common.MetricMeter]
177-
cancellation_details: Callable[[], Optional[ActivityCancellationDetails]]
177+
cancellation_details: Optional[ActivityCancellationDetails] = None
178178
_logger_details: Optional[Mapping[str, Any]] = None
179179
_payload_converter: Optional[temporalio.converter.PayloadConverter] = None
180180
_metric_meter: Optional[temporalio.common.MetricMeter] = None
@@ -289,7 +289,7 @@ def info() -> Info:
289289

290290
def cancellation_details() -> Optional[ActivityCancellationDetails]:
291291
"""Cancellation details of the currenct activity, if any"""
292-
return _Context.current().cancellation_details()
292+
return _Context.current().cancellation_details
293293

294294

295295
def heartbeat(*details: Any) -> None:

temporalio/testing/_activity.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ def __init__(
168168
else self.cancel_thread_raiser.shielded,
169169
payload_converter_class_or_instance=env.payload_converter,
170170
runtime_metric_meter=env.metric_meter,
171-
cancellation_details=lambda: env.cancellation_details,
171+
cancellation_details=env.cancellation_details,
172172
)
173173
self.task: Optional[asyncio.Task] = None
174174

temporalio/worker/_activity.py

+8-10
Original file line numberDiff line numberDiff line change
@@ -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,7 +423,8 @@ async def _run_activity(
424423
headers=start.header_fields,
425424
)
426425

427-
running_activity.cancellation_details = None
426+
cancellation_details = temporalio.activity.ActivityCancellationDetails()
427+
running_activity.cancellation_details = cancellation_details
428428

429429
# Set the context early so the logging adapter works and
430430
# interceptors have it
@@ -442,7 +442,7 @@ async def _run_activity(
442442
if sync_non_threaded
443443
else self._metric_meter,
444444
# Function reference to the running activity's cancellation details
445-
cancellation_details=lambda: running_activity.cancellation_details,
445+
cancellation_details=cancellation_details,
446446
)
447447
)
448448
temporalio.activity.logger.debug("Starting activity")
@@ -553,8 +553,8 @@ class _RunningActivity:
553553
done: bool = False
554554
cancelled_by_request: bool = False
555555
cancelled_due_to_heartbeat_error: Optional[Exception] = None
556-
cancellation_details: Optional[temporalio.activity.ActivityCancellationDetails] = (
557-
None
556+
cancellation_details: temporalio.activity.ActivityCancellationDetails = (
557+
temporalio.activity.ActivityCancellationDetails()
558558
)
559559

560560
def cancel(
@@ -751,9 +751,7 @@ def _execute_sync_activity(
751751
temporalio.converter.PayloadConverter,
752752
],
753753
runtime_metric_meter: Optional[temporalio.common.MetricMeter],
754-
cancellation_details: Callable[
755-
[], Optional[temporalio.activity.ActivityCancellationDetails]
756-
],
754+
cancellation_details: Optional[temporalio.activity.ActivityCancellationDetails],
757755
fn: Callable[..., Any],
758756
*args: Any,
759757
) -> Any:

0 commit comments

Comments
 (0)