durabletask 1.2.0.dev8__tar.gz → 1.2.0.dev9__tar.gz

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.
Files changed (31) hide show
  1. {durabletask-1.2.0.dev8 → durabletask-1.2.0.dev9}/PKG-INFO +1 -1
  2. {durabletask-1.2.0.dev8 → durabletask-1.2.0.dev9}/durabletask/internal/helpers.py +9 -2
  3. {durabletask-1.2.0.dev8 → durabletask-1.2.0.dev9}/durabletask/task.py +4 -2
  4. {durabletask-1.2.0.dev8 → durabletask-1.2.0.dev9}/durabletask.egg-info/PKG-INFO +1 -1
  5. {durabletask-1.2.0.dev8 → durabletask-1.2.0.dev9}/pyproject.toml +1 -1
  6. {durabletask-1.2.0.dev8 → durabletask-1.2.0.dev9}/LICENSE +0 -0
  7. {durabletask-1.2.0.dev8 → durabletask-1.2.0.dev9}/README.md +0 -0
  8. {durabletask-1.2.0.dev8 → durabletask-1.2.0.dev9}/durabletask/__init__.py +0 -0
  9. {durabletask-1.2.0.dev8 → durabletask-1.2.0.dev9}/durabletask/client.py +0 -0
  10. {durabletask-1.2.0.dev8 → durabletask-1.2.0.dev9}/durabletask/entities/__init__.py +0 -0
  11. {durabletask-1.2.0.dev8 → durabletask-1.2.0.dev9}/durabletask/entities/durable_entity.py +0 -0
  12. {durabletask-1.2.0.dev8 → durabletask-1.2.0.dev9}/durabletask/entities/entity_context.py +0 -0
  13. {durabletask-1.2.0.dev8 → durabletask-1.2.0.dev9}/durabletask/entities/entity_instance_id.py +0 -0
  14. {durabletask-1.2.0.dev8 → durabletask-1.2.0.dev9}/durabletask/entities/entity_lock.py +0 -0
  15. {durabletask-1.2.0.dev8 → durabletask-1.2.0.dev9}/durabletask/entities/entity_metadata.py +0 -0
  16. {durabletask-1.2.0.dev8 → durabletask-1.2.0.dev9}/durabletask/internal/entity_state_shim.py +0 -0
  17. {durabletask-1.2.0.dev8 → durabletask-1.2.0.dev9}/durabletask/internal/exceptions.py +0 -0
  18. {durabletask-1.2.0.dev8 → durabletask-1.2.0.dev9}/durabletask/internal/grpc_interceptor.py +0 -0
  19. {durabletask-1.2.0.dev8 → durabletask-1.2.0.dev9}/durabletask/internal/orchestration_entity_context.py +0 -0
  20. {durabletask-1.2.0.dev8 → durabletask-1.2.0.dev9}/durabletask/internal/orchestrator_service_pb2.py +0 -0
  21. {durabletask-1.2.0.dev8 → durabletask-1.2.0.dev9}/durabletask/internal/orchestrator_service_pb2.pyi +0 -0
  22. {durabletask-1.2.0.dev8 → durabletask-1.2.0.dev9}/durabletask/internal/orchestrator_service_pb2_grpc.py +0 -0
  23. {durabletask-1.2.0.dev8 → durabletask-1.2.0.dev9}/durabletask/internal/proto_task_hub_sidecar_service_stub.py +0 -0
  24. {durabletask-1.2.0.dev8 → durabletask-1.2.0.dev9}/durabletask/internal/shared.py +0 -0
  25. {durabletask-1.2.0.dev8 → durabletask-1.2.0.dev9}/durabletask/py.typed +0 -0
  26. {durabletask-1.2.0.dev8 → durabletask-1.2.0.dev9}/durabletask/worker.py +0 -0
  27. {durabletask-1.2.0.dev8 → durabletask-1.2.0.dev9}/durabletask.egg-info/SOURCES.txt +0 -0
  28. {durabletask-1.2.0.dev8 → durabletask-1.2.0.dev9}/durabletask.egg-info/dependency_links.txt +0 -0
  29. {durabletask-1.2.0.dev8 → durabletask-1.2.0.dev9}/durabletask.egg-info/requires.txt +0 -0
  30. {durabletask-1.2.0.dev8 → durabletask-1.2.0.dev9}/durabletask.egg-info/top_level.txt +0 -0
  31. {durabletask-1.2.0.dev8 → durabletask-1.2.0.dev9}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: durabletask
3
- Version: 1.2.0.dev8
3
+ Version: 1.2.0.dev9
4
4
  Summary: A Durable Task Client SDK for Python
5
5
  License: MIT License
6
6
 
@@ -116,11 +116,18 @@ def new_sub_orchestration_failed_event(event_id: int, ex: Exception) -> pb.Histo
116
116
  )
117
117
 
118
118
 
119
- def new_failure_details(ex: Exception) -> pb.TaskFailureDetails:
119
+ def new_failure_details(ex: Exception, _visited: Optional[set[int]] = None) -> pb.TaskFailureDetails:
120
+ if _visited is None:
121
+ _visited = set()
122
+ _visited.add(id(ex))
123
+ inner: Optional[BaseException] = ex.__cause__ or ex.__context__
124
+ if len(_visited) > 10 or (inner and id(inner) in _visited) or not isinstance(inner, Exception):
125
+ inner = None
120
126
  return pb.TaskFailureDetails(
121
127
  errorType=type(ex).__name__,
122
128
  errorMessage=str(ex),
123
- stackTrace=wrappers_pb2.StringValue(value=''.join(traceback.format_tb(ex.__traceback__)))
129
+ stackTrace=wrappers_pb2.StringValue(value=''.join(traceback.format_tb(ex.__traceback__))),
130
+ innerFailure=new_failure_details(inner, _visited) if inner else None
124
131
  )
125
132
 
126
133
 
@@ -302,8 +302,10 @@ class FailureDetails:
302
302
  class TaskFailedError(Exception):
303
303
  """Exception type for all orchestration task failures."""
304
304
 
305
- def __init__(self, message: str, details: pb.TaskFailureDetails):
305
+ def __init__(self, message: str, details: Union[pb.TaskFailureDetails, Exception]):
306
306
  super().__init__(message)
307
+ if isinstance(details, Exception):
308
+ details = pbh.new_failure_details(details)
307
309
  self._details = FailureDetails(
308
310
  details.errorMessage,
309
311
  details.errorType,
@@ -424,7 +426,7 @@ class CompletableTask(Task[T]):
424
426
  if self._parent is not None:
425
427
  self._parent.on_child_completed(self)
426
428
 
427
- def fail(self, message: str, details: pb.TaskFailureDetails):
429
+ def fail(self, message: str, details: Union[Exception, pb.TaskFailureDetails]):
428
430
  if self._is_complete:
429
431
  raise ValueError('The task has already completed.')
430
432
  self._exception = TaskFailedError(message, details)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: durabletask
3
- Version: 1.2.0.dev8
3
+ Version: 1.2.0.dev9
4
4
  Summary: A Durable Task Client SDK for Python
5
5
  License: MIT License
6
6
 
@@ -9,7 +9,7 @@ build-backend = "setuptools.build_meta"
9
9
 
10
10
  [project]
11
11
  name = "durabletask"
12
- version = "1.2.0.dev8"
12
+ version = "1.2.0.dev9"
13
13
  description = "A Durable Task Client SDK for Python"
14
14
  keywords = [
15
15
  "durable",