Skip to content

Commit 4451e77

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

File tree

3 files changed

+10
-16
lines changed

3 files changed

+10
-16
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

+7-13
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
import warnings
1616
from abc import ABC, abstractmethod
1717
from contextlib import contextmanager
18-
from dataclasses import dataclass
18+
from dataclasses import dataclass, field
1919
from datetime import datetime, timedelta, timezone
2020
from 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

Comments
 (0)