durabletask 0.0.0.dev46__tar.gz → 0.0.0.dev48__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 (33) hide show
  1. {durabletask-0.0.0.dev46 → durabletask-0.0.0.dev48}/PKG-INFO +1 -1
  2. {durabletask-0.0.0.dev46 → durabletask-0.0.0.dev48}/durabletask/client.py +37 -0
  3. {durabletask-0.0.0.dev46 → durabletask-0.0.0.dev48}/durabletask.egg-info/PKG-INFO +1 -1
  4. {durabletask-0.0.0.dev46 → durabletask-0.0.0.dev48}/pyproject.toml +1 -1
  5. {durabletask-0.0.0.dev46 → durabletask-0.0.0.dev48}/LICENSE +0 -0
  6. {durabletask-0.0.0.dev46 → durabletask-0.0.0.dev48}/README.md +0 -0
  7. {durabletask-0.0.0.dev46 → durabletask-0.0.0.dev48}/durabletask/__init__.py +0 -0
  8. {durabletask-0.0.0.dev46 → durabletask-0.0.0.dev48}/durabletask/entities/__init__.py +0 -0
  9. {durabletask-0.0.0.dev46 → durabletask-0.0.0.dev48}/durabletask/entities/durable_entity.py +0 -0
  10. {durabletask-0.0.0.dev46 → durabletask-0.0.0.dev48}/durabletask/entities/entity_context.py +0 -0
  11. {durabletask-0.0.0.dev46 → durabletask-0.0.0.dev48}/durabletask/entities/entity_instance_id.py +0 -0
  12. {durabletask-0.0.0.dev46 → durabletask-0.0.0.dev48}/durabletask/entities/entity_lock.py +0 -0
  13. {durabletask-0.0.0.dev46 → durabletask-0.0.0.dev48}/durabletask/entities/entity_metadata.py +0 -0
  14. {durabletask-0.0.0.dev46 → durabletask-0.0.0.dev48}/durabletask/entities/entity_operation_failed_exception.py +0 -0
  15. {durabletask-0.0.0.dev46 → durabletask-0.0.0.dev48}/durabletask/internal/entity_state_shim.py +0 -0
  16. {durabletask-0.0.0.dev46 → durabletask-0.0.0.dev48}/durabletask/internal/exceptions.py +0 -0
  17. {durabletask-0.0.0.dev46 → durabletask-0.0.0.dev48}/durabletask/internal/grpc_interceptor.py +0 -0
  18. {durabletask-0.0.0.dev46 → durabletask-0.0.0.dev48}/durabletask/internal/helpers.py +0 -0
  19. {durabletask-0.0.0.dev46 → durabletask-0.0.0.dev48}/durabletask/internal/json_encode_output_exception.py +0 -0
  20. {durabletask-0.0.0.dev46 → durabletask-0.0.0.dev48}/durabletask/internal/orchestration_entity_context.py +0 -0
  21. {durabletask-0.0.0.dev46 → durabletask-0.0.0.dev48}/durabletask/internal/orchestrator_service_pb2.py +0 -0
  22. {durabletask-0.0.0.dev46 → durabletask-0.0.0.dev48}/durabletask/internal/orchestrator_service_pb2.pyi +0 -0
  23. {durabletask-0.0.0.dev46 → durabletask-0.0.0.dev48}/durabletask/internal/orchestrator_service_pb2_grpc.py +0 -0
  24. {durabletask-0.0.0.dev46 → durabletask-0.0.0.dev48}/durabletask/internal/proto_task_hub_sidecar_service_stub.py +0 -0
  25. {durabletask-0.0.0.dev46 → durabletask-0.0.0.dev48}/durabletask/internal/shared.py +0 -0
  26. {durabletask-0.0.0.dev46 → durabletask-0.0.0.dev48}/durabletask/py.typed +0 -0
  27. {durabletask-0.0.0.dev46 → durabletask-0.0.0.dev48}/durabletask/task.py +0 -0
  28. {durabletask-0.0.0.dev46 → durabletask-0.0.0.dev48}/durabletask/worker.py +0 -0
  29. {durabletask-0.0.0.dev46 → durabletask-0.0.0.dev48}/durabletask.egg-info/SOURCES.txt +0 -0
  30. {durabletask-0.0.0.dev46 → durabletask-0.0.0.dev48}/durabletask.egg-info/dependency_links.txt +0 -0
  31. {durabletask-0.0.0.dev46 → durabletask-0.0.0.dev48}/durabletask.egg-info/requires.txt +0 -0
  32. {durabletask-0.0.0.dev46 → durabletask-0.0.0.dev48}/durabletask.egg-info/top_level.txt +0 -0
  33. {durabletask-0.0.0.dev46 → durabletask-0.0.0.dev48}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: durabletask
3
- Version: 0.0.0.dev46
3
+ Version: 0.0.0.dev48
4
4
  Summary: A Durable Task Client SDK for Python
5
5
  License: MIT License
6
6
 
@@ -63,6 +63,12 @@ class PurgeInstancesResult:
63
63
  is_complete: bool
64
64
 
65
65
 
66
+ @dataclass
67
+ class CleanEntityStorageResult:
68
+ empty_entities_removed: int
69
+ orphaned_locks_released: int
70
+
71
+
66
72
  class OrchestrationFailedError(Exception):
67
73
  def __init__(self, message: str, failure_details: task.FailureDetails):
68
74
  super().__init__(message)
@@ -406,3 +412,34 @@ class TaskHubGrpcClient:
406
412
  else:
407
413
  break
408
414
  return entities
415
+
416
+ def clean_entity_storage(self,
417
+ remove_empty_entities: bool = True,
418
+ release_orphaned_locks: bool = True,
419
+ _continuation_token: Optional[pb2.StringValue] = None
420
+ ) -> CleanEntityStorageResult:
421
+ self._logger.info("Cleaning entity storage")
422
+
423
+ empty_entities_removed = 0
424
+ orphaned_locks_released = 0
425
+
426
+ while True:
427
+ req = pb.CleanEntityStorageRequest(
428
+ removeEmptyEntities=remove_empty_entities,
429
+ releaseOrphanedLocks=release_orphaned_locks,
430
+ continuationToken=_continuation_token
431
+ )
432
+ resp: pb.CleanEntityStorageResponse = self._stub.CleanEntityStorage(req)
433
+ empty_entities_removed += resp.emptyEntitiesRemoved
434
+ orphaned_locks_released += resp.orphanedLocksReleased
435
+
436
+ if resp.continuationToken and resp.continuationToken.value and resp.continuationToken.value != "0":
437
+ self._logger.info(f"Received continuation token with value {resp.continuationToken.value}, cleaning next page...")
438
+ if _continuation_token and _continuation_token.value and _continuation_token.value == resp.continuationToken.value:
439
+ self._logger.warning(f"Received the same continuation token value {resp.continuationToken.value} again, stopping to avoid infinite loop.")
440
+ break
441
+ _continuation_token = resp.continuationToken
442
+ else:
443
+ break
444
+
445
+ return CleanEntityStorageResult(empty_entities_removed, orphaned_locks_released)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: durabletask
3
- Version: 0.0.0.dev46
3
+ Version: 0.0.0.dev48
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.dev46"
12
+ version = "0.0.0.dev48"
13
13
  description = "A Durable Task Client SDK for Python"
14
14
  keywords = [
15
15
  "durable",