durabletask 0.0.0.dev70__tar.gz → 0.0.0.dev72__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 (48) hide show
  1. {durabletask-0.0.0.dev70 → durabletask-0.0.0.dev72}/PKG-INFO +1 -1
  2. {durabletask-0.0.0.dev70 → durabletask-0.0.0.dev72}/durabletask/client.py +9 -10
  3. {durabletask-0.0.0.dev70 → durabletask-0.0.0.dev72}/durabletask/internal/grpc_resiliency.py +2 -1
  4. {durabletask-0.0.0.dev70 → durabletask-0.0.0.dev72}/durabletask/worker.py +5 -4
  5. {durabletask-0.0.0.dev70 → durabletask-0.0.0.dev72}/durabletask.egg-info/PKG-INFO +1 -1
  6. {durabletask-0.0.0.dev70 → durabletask-0.0.0.dev72}/pyproject.toml +1 -1
  7. {durabletask-0.0.0.dev70 → durabletask-0.0.0.dev72}/LICENSE +0 -0
  8. {durabletask-0.0.0.dev70 → durabletask-0.0.0.dev72}/README.md +0 -0
  9. {durabletask-0.0.0.dev70 → durabletask-0.0.0.dev72}/durabletask/__init__.py +0 -0
  10. {durabletask-0.0.0.dev70 → durabletask-0.0.0.dev72}/durabletask/entities/__init__.py +0 -0
  11. {durabletask-0.0.0.dev70 → durabletask-0.0.0.dev72}/durabletask/entities/durable_entity.py +0 -0
  12. {durabletask-0.0.0.dev70 → durabletask-0.0.0.dev72}/durabletask/entities/entity_context.py +0 -0
  13. {durabletask-0.0.0.dev70 → durabletask-0.0.0.dev72}/durabletask/entities/entity_instance_id.py +0 -0
  14. {durabletask-0.0.0.dev70 → durabletask-0.0.0.dev72}/durabletask/entities/entity_lock.py +0 -0
  15. {durabletask-0.0.0.dev70 → durabletask-0.0.0.dev72}/durabletask/entities/entity_metadata.py +0 -0
  16. {durabletask-0.0.0.dev70 → durabletask-0.0.0.dev72}/durabletask/entities/entity_operation_failed_exception.py +0 -0
  17. {durabletask-0.0.0.dev70 → durabletask-0.0.0.dev72}/durabletask/extensions/__init__.py +0 -0
  18. {durabletask-0.0.0.dev70 → durabletask-0.0.0.dev72}/durabletask/extensions/azure_blob_payloads/__init__.py +0 -0
  19. {durabletask-0.0.0.dev70 → durabletask-0.0.0.dev72}/durabletask/extensions/azure_blob_payloads/blob_payload_store.py +0 -0
  20. {durabletask-0.0.0.dev70 → durabletask-0.0.0.dev72}/durabletask/extensions/azure_blob_payloads/options.py +0 -0
  21. {durabletask-0.0.0.dev70 → durabletask-0.0.0.dev72}/durabletask/grpc_options.py +0 -0
  22. {durabletask-0.0.0.dev70 → durabletask-0.0.0.dev72}/durabletask/history.py +0 -0
  23. {durabletask-0.0.0.dev70 → durabletask-0.0.0.dev72}/durabletask/internal/client_helpers.py +0 -0
  24. {durabletask-0.0.0.dev70 → durabletask-0.0.0.dev72}/durabletask/internal/entity_state_shim.py +0 -0
  25. {durabletask-0.0.0.dev70 → durabletask-0.0.0.dev72}/durabletask/internal/exceptions.py +0 -0
  26. {durabletask-0.0.0.dev70 → durabletask-0.0.0.dev72}/durabletask/internal/grpc_interceptor.py +0 -0
  27. {durabletask-0.0.0.dev70 → durabletask-0.0.0.dev72}/durabletask/internal/helpers.py +0 -0
  28. {durabletask-0.0.0.dev70 → durabletask-0.0.0.dev72}/durabletask/internal/history_helpers.py +0 -0
  29. {durabletask-0.0.0.dev70 → durabletask-0.0.0.dev72}/durabletask/internal/json_encode_output_exception.py +0 -0
  30. {durabletask-0.0.0.dev70 → durabletask-0.0.0.dev72}/durabletask/internal/orchestration_entity_context.py +0 -0
  31. {durabletask-0.0.0.dev70 → durabletask-0.0.0.dev72}/durabletask/internal/orchestrator_service_pb2.py +0 -0
  32. {durabletask-0.0.0.dev70 → durabletask-0.0.0.dev72}/durabletask/internal/orchestrator_service_pb2.pyi +0 -0
  33. {durabletask-0.0.0.dev70 → durabletask-0.0.0.dev72}/durabletask/internal/orchestrator_service_pb2_grpc.py +0 -0
  34. {durabletask-0.0.0.dev70 → durabletask-0.0.0.dev72}/durabletask/internal/proto_task_hub_sidecar_service_stub.py +0 -0
  35. {durabletask-0.0.0.dev70 → durabletask-0.0.0.dev72}/durabletask/internal/shared.py +0 -0
  36. {durabletask-0.0.0.dev70 → durabletask-0.0.0.dev72}/durabletask/internal/tracing.py +0 -0
  37. {durabletask-0.0.0.dev70 → durabletask-0.0.0.dev72}/durabletask/payload/__init__.py +0 -0
  38. {durabletask-0.0.0.dev70 → durabletask-0.0.0.dev72}/durabletask/payload/helpers.py +0 -0
  39. {durabletask-0.0.0.dev70 → durabletask-0.0.0.dev72}/durabletask/payload/store.py +0 -0
  40. {durabletask-0.0.0.dev70 → durabletask-0.0.0.dev72}/durabletask/py.typed +0 -0
  41. {durabletask-0.0.0.dev70 → durabletask-0.0.0.dev72}/durabletask/task.py +0 -0
  42. {durabletask-0.0.0.dev70 → durabletask-0.0.0.dev72}/durabletask/testing/__init__.py +0 -0
  43. {durabletask-0.0.0.dev70 → durabletask-0.0.0.dev72}/durabletask/testing/in_memory_backend.py +0 -0
  44. {durabletask-0.0.0.dev70 → durabletask-0.0.0.dev72}/durabletask.egg-info/SOURCES.txt +0 -0
  45. {durabletask-0.0.0.dev70 → durabletask-0.0.0.dev72}/durabletask.egg-info/dependency_links.txt +0 -0
  46. {durabletask-0.0.0.dev70 → durabletask-0.0.0.dev72}/durabletask.egg-info/requires.txt +0 -0
  47. {durabletask-0.0.0.dev70 → durabletask-0.0.0.dev72}/durabletask.egg-info/top_level.txt +0 -0
  48. {durabletask-0.0.0.dev70 → durabletask-0.0.0.dev72}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: durabletask
3
- Version: 0.0.0.dev70
3
+ Version: 0.0.0.dev72
4
4
  Summary: A Durable Task Client SDK for Python
5
5
  License: MIT License
6
6
 
@@ -224,7 +224,7 @@ class TaskHubGrpcClient:
224
224
  method_name: str,
225
225
  request: Any,
226
226
  *,
227
- timeout: Optional[int] = None):
227
+ timeout: Optional[float] = None):
228
228
  method = getattr(self._stub, method_name)
229
229
  try:
230
230
  if timeout is None:
@@ -406,7 +406,7 @@ class TaskHubGrpcClient:
406
406
 
407
407
  def wait_for_orchestration_start(self, instance_id: str, *,
408
408
  fetch_payloads: bool = False,
409
- timeout: int = 60) -> Optional[OrchestrationState]:
409
+ timeout: float = 60) -> Optional[OrchestrationState]:
410
410
  req = pb.GetInstanceRequest(instanceId=instance_id, getInputsAndOutputs=fetch_payloads)
411
411
  try:
412
412
  self._logger.info(f"Waiting up to {timeout}s for instance '{instance_id}' to start.")
@@ -427,7 +427,7 @@ class TaskHubGrpcClient:
427
427
 
428
428
  def wait_for_orchestration_completion(self, instance_id: str, *,
429
429
  fetch_payloads: bool = True,
430
- timeout: int = 60) -> Optional[OrchestrationState]:
430
+ timeout: float = 60) -> Optional[OrchestrationState]:
431
431
  req = pb.GetInstanceRequest(instanceId=instance_id, getInputsAndOutputs=fetch_payloads)
432
432
  try:
433
433
  self._logger.info(f"Waiting {timeout}s for instance '{instance_id}' to complete.")
@@ -685,7 +685,7 @@ class AsyncTaskHubGrpcClient:
685
685
  method_name: str,
686
686
  request: Any,
687
687
  *,
688
- timeout: Optional[int] = None):
688
+ timeout: Optional[float] = None):
689
689
  method = getattr(self._stub, method_name)
690
690
  try:
691
691
  if timeout is None:
@@ -733,10 +733,9 @@ class AsyncTaskHubGrpcClient:
733
733
  await asyncio.sleep(30.0)
734
734
  await channel.close()
735
735
  finally:
736
- try:
737
- self._retired_channels.remove(channel)
738
- except ValueError:
739
- pass
736
+ async with self._recreate_lock:
737
+ if channel in self._retired_channels:
738
+ self._retired_channels.remove(channel)
740
739
 
741
740
  async def schedule_new_orchestration(self, orchestrator: Union[task.Orchestrator[TInput, TOutput], str], *,
742
741
  input: Optional[TInput] = None,
@@ -843,7 +842,7 @@ class AsyncTaskHubGrpcClient:
843
842
 
844
843
  async def wait_for_orchestration_start(self, instance_id: str, *,
845
844
  fetch_payloads: bool = False,
846
- timeout: int = 60) -> Optional[OrchestrationState]:
845
+ timeout: float = 60) -> Optional[OrchestrationState]:
847
846
  req = pb.GetInstanceRequest(instanceId=instance_id, getInputsAndOutputs=fetch_payloads)
848
847
  try:
849
848
  self._logger.info(f"Waiting up to {timeout}s for instance '{instance_id}' to start.")
@@ -863,7 +862,7 @@ class AsyncTaskHubGrpcClient:
863
862
 
864
863
  async def wait_for_orchestration_completion(self, instance_id: str, *,
865
864
  fetch_payloads: bool = True,
866
- timeout: int = 60) -> Optional[OrchestrationState]:
865
+ timeout: float = 60) -> Optional[OrchestrationState]:
867
866
  req = pb.GetInstanceRequest(instanceId=instance_id, getInputsAndOutputs=fetch_payloads)
868
867
  try:
869
868
  self._logger.info(f"Waiting {timeout}s for instance '{instance_id}' to complete.")
@@ -13,7 +13,8 @@ def get_full_jitter_delay_seconds(
13
13
  attempt: int,
14
14
  *,
15
15
  base_seconds: float,
16
- cap_seconds: float) -> float:
16
+ cap_seconds: float,
17
+ ) -> float:
17
18
  capped_attempt = min(attempt, 30)
18
19
  upper_bound = min(cap_seconds, base_seconds * (2 ** capped_attempt))
19
20
  return random.random() * upper_bound
@@ -194,7 +194,7 @@ class _InFlightChannelTracker:
194
194
  try:
195
195
  channel.close()
196
196
  except Exception:
197
- pass
197
+ logging.debug("Ignoring channel close failure during worker cleanup.", exc_info=True)
198
198
 
199
199
 
200
200
  class VersioningOptions:
@@ -744,9 +744,10 @@ class TaskHubGrpcWorker:
744
744
 
745
745
  def wrap_execution(handler, release):
746
746
  def wrapped(*args, **kwargs):
747
- result = handler(*args, **kwargs)
748
- release()
749
- return result
747
+ try:
748
+ return handler(*args, **kwargs)
749
+ finally:
750
+ release()
750
751
 
751
752
  return wrapped
752
753
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: durabletask
3
- Version: 0.0.0.dev70
3
+ Version: 0.0.0.dev72
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 = "0.0.0.dev70"
12
+ version = "0.0.0.dev72"
13
13
  description = "A Durable Task Client SDK for Python"
14
14
  keywords = [
15
15
  "durable",