datashare-python 0.10.4__py3-none-any.whl → 0.10.6__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -8,7 +8,7 @@ from contextlib import contextmanager
8
8
  from contextvars import ContextVar
9
9
  from copy import deepcopy
10
10
  from functools import wraps
11
- from inspect import signature
11
+ from inspect import iscoroutinefunction, signature
12
12
  from types import UnionType
13
13
  from typing import (
14
14
  Annotated,
@@ -28,6 +28,7 @@ from temporalio.activity import _Definition
28
28
  from temporalio.api.common.v1 import Payload
29
29
  from temporalio.client import WorkflowHandle
30
30
  from temporalio.converter import DataConverter
31
+ from temporalio.service import RPCError
31
32
  from temporalio.worker import (
32
33
  ActivityInboundInterceptor,
33
34
  ActivityOutboundInterceptor,
@@ -332,7 +333,8 @@ def _get_progress_handler(
332
333
  weight=weight,
333
334
  min_progress_interval_s=min_progress_interval_s,
334
335
  )
335
- return handler.progress
336
+ handler = _fail_safe(handler.progress, "emit progress", excs=(RPCError,))
337
+ return handler
336
338
 
337
339
 
338
340
  def _is_progress(t: type) -> bool:
@@ -438,7 +440,7 @@ class _HeartbeatInboundInterceptor(ActivityInboundInterceptor):
438
440
  period = heartbeat_timeout.total_seconds() / self._n_missed_before_timeout
439
441
  # We don't want a failing hearbeat to fail the worker task so we just
440
442
  # ignore any exception
441
- heartbeat_fn = _fail_safe(self._outbound.heartbeat)
443
+ heartbeat_fn = _fail_safe(self._outbound.heartbeat, "heartbeat")
442
444
  heartbeat_task = asyncio.create_task(_heartbeat_every(heartbeat_fn, period))
443
445
  try:
444
446
  activity.heartbeat()
@@ -449,19 +451,32 @@ class _HeartbeatInboundInterceptor(ActivityInboundInterceptor):
449
451
  await asyncio.wait([heartbeat_task])
450
452
 
451
453
 
452
- def _fail_safe(
453
- fn: Callable[[Any], None], excs: tuple[type[Exception]] | None = None
454
- ) -> Callable[[Any], None]:
454
+ def _fail_safe[**P, T](
455
+ fn: Callable[P, T],
456
+ action: str,
457
+ excs: tuple[type[Exception]] | None = None,
458
+ ) -> Callable[P, T]:
455
459
  if excs is None:
456
460
  excs = (Exception,)
461
+ if iscoroutinefunction(fn):
457
462
 
458
- @wraps(fn)
459
- def wrapper(*args, **kwargs) -> None:
460
- try:
461
- fn(*args, **kwargs)
462
- except excs as exc:
463
- msg = f"failed to heartbeat due to {exc}"
464
- logger.exception(msg)
463
+ @wraps(fn)
464
+ async def wrapper(*args: P.args, **kwargs: P.kwargs) -> None:
465
+ try:
466
+ return await fn(*args, **kwargs)
467
+ except excs as exc:
468
+ msg = f"failed to {action} due to {exc}"
469
+ logger.exception(msg)
470
+
471
+ else:
472
+
473
+ @wraps(fn)
474
+ def wrapper(*args: P.args, **kwargs: P.kwargs) -> None:
475
+ try:
476
+ return fn(*args, **kwargs)
477
+ except excs as exc:
478
+ msg = f"failed to {action} due to {exc}"
479
+ logger.exception(msg)
465
480
 
466
481
  return wrapper
467
482
 
Binary file
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: datashare-python
3
- Version: 0.10.4
3
+ Version: 0.10.6
4
4
  Summary: Manage Python tasks and local resources in Datashare
5
5
  Project-URL: Homepage, https://icij.github.io/datashare-python/
6
6
  Project-URL: Documentation, https://icij.github.io/datashare-python/
@@ -7,7 +7,7 @@ datashare_python/constants.py,sha256=-Irwd2bbnFGIkLVJi_SiQ7PM2eNW3Ia_co4SE6z4j-A
7
7
  datashare_python/dependencies.py,sha256=Q-BIhCwWu-GGp9omYNhENZ88cF0QJ8spfaMZX40mmNU,4386
8
8
  datashare_python/discovery.py,sha256=3mUck2GUSKu2DSP9-MM1OdVM4FqFKqfBeSQDQZxgh2g,7177
9
9
  datashare_python/exceptions.py,sha256=bVHEAXxDPKfxeeMC0hJXEsrJkgsKO2ESAhxWU96GA4M,496
10
- datashare_python/interceptors.py,sha256=2EvXsFUv3VbVhUYNc1_tjqTEBZUKGQoQsDkRJr7Uu94,15948
10
+ datashare_python/interceptors.py,sha256=-XC-y_MvGyHlZQ6jItfMRPAmKwQkQzzncpAGxceKlwM,16485
11
11
  datashare_python/logging_.py,sha256=96KNXhP-JR5ybu9dld4VLtF7v7PfiphOCR1Nio-mmUs,4483
12
12
  datashare_python/mimetypes_.py,sha256=mjQgaqnSFZEcl3LoLDGBaBBjTTzwYfSNZND9Fmkk2zs,49682
13
13
  datashare_python/objects.py,sha256=93-GeH-lX6vTVlHHhvftXKRd6l5kJggDR-kV3IQz_1Q,16434
@@ -15,14 +15,14 @@ datashare_python/task_client.py,sha256=oTmP8bvZW0UyhLNMi1AV3XIAx7hrdbxNRss2Mw2az
15
15
  datashare_python/template.py,sha256=N1uM8TRXh5tQPV7BC1oJj-Pdm2Gs_SkjaXv50RnNYso,4682
16
16
  datashare_python/types_.py,sha256=cPcCkIk6ecILrKetPnAsrb0njHYuWJU3eZicUXy2lF8,1278
17
17
  datashare_python/utils.py,sha256=fRQGNG1OR80S2y7VMnh6FLpwQfyFRdJl9EhaXUkfHEY,26772
18
- datashare_python/worker-template.tar.gz,sha256=CEnZOXCCwABJMjbB2k0bXpKDM8tMMX-vl9aYm8lrGB0,280857
18
+ datashare_python/worker-template.tar.gz,sha256=NjG5Ds1-TW_QwG31yYYROfNurHu2U8fv2A57O85TEnU,280872
19
19
  datashare_python/worker.py,sha256=ad36_yJOgwtj8KBheWndGkqaP_2aXTPSrYaHrbCXTvg,8389
20
20
  datashare_python/cli/__init__.py,sha256=9BPWtssDgsVfWMsZ1TtZCla0EC_kai4RHttr8oNLYOE,1401
21
21
  datashare_python/cli/project.py,sha256=w32Gy9AOL5B00uDT4in7YUCt2g68FnNbvwg2M3a8G6o,946
22
22
  datashare_python/cli/task.py,sha256=GsyR5o0fN4Pd8tJKAUgivAvCBKT3L4Ay5j_BCW1XBHk,5828
23
23
  datashare_python/cli/utils.py,sha256=p69CQb0zfixuyBkiZprhdMCc_NuYwXyAn6vC9H1UzAw,911
24
24
  datashare_python/cli/worker.py,sha256=x0p3a1_NsZPbmV7-WSVMRyW3_iadYcgyZKbDvWgymQc,5790
25
- datashare_python-0.10.4.dist-info/METADATA,sha256=RJhsOTO4hxU063lYAZajC-1XGiaPVEDtEsO5-7uy4Nc,1012
26
- datashare_python-0.10.4.dist-info/WHEEL,sha256=zOwg4jB6zX2kU910N-cMawjivD6tO8NEWvE12je1bVk,87
27
- datashare_python-0.10.4.dist-info/entry_points.txt,sha256=ILE7auxabHWiu3GC-AunWnzjhOI_SbZp7D4GqZHlLw4,68
28
- datashare_python-0.10.4.dist-info/RECORD,,
25
+ datashare_python-0.10.6.dist-info/METADATA,sha256=eO-0j7ZIjMv6q6FBoP9-EQLhj88cn8zwLorTgqhm53Y,1012
26
+ datashare_python-0.10.6.dist-info/WHEEL,sha256=zOwg4jB6zX2kU910N-cMawjivD6tO8NEWvE12je1bVk,87
27
+ datashare_python-0.10.6.dist-info/entry_points.txt,sha256=ILE7auxabHWiu3GC-AunWnzjhOI_SbZp7D4GqZHlLw4,68
28
+ datashare_python-0.10.6.dist-info/RECORD,,