durabletask 0.0.0.dev42__tar.gz → 0.0.0.dev43__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.dev42 → durabletask-0.0.0.dev43}/PKG-INFO +1 -1
  2. {durabletask-0.0.0.dev42 → durabletask-0.0.0.dev43}/durabletask/client.py +52 -49
  3. {durabletask-0.0.0.dev42 → durabletask-0.0.0.dev43}/durabletask.egg-info/PKG-INFO +1 -1
  4. {durabletask-0.0.0.dev42 → durabletask-0.0.0.dev43}/pyproject.toml +1 -1
  5. {durabletask-0.0.0.dev42 → durabletask-0.0.0.dev43}/LICENSE +0 -0
  6. {durabletask-0.0.0.dev42 → durabletask-0.0.0.dev43}/README.md +0 -0
  7. {durabletask-0.0.0.dev42 → durabletask-0.0.0.dev43}/durabletask/__init__.py +0 -0
  8. {durabletask-0.0.0.dev42 → durabletask-0.0.0.dev43}/durabletask/entities/__init__.py +0 -0
  9. {durabletask-0.0.0.dev42 → durabletask-0.0.0.dev43}/durabletask/entities/durable_entity.py +0 -0
  10. {durabletask-0.0.0.dev42 → durabletask-0.0.0.dev43}/durabletask/entities/entity_context.py +0 -0
  11. {durabletask-0.0.0.dev42 → durabletask-0.0.0.dev43}/durabletask/entities/entity_instance_id.py +0 -0
  12. {durabletask-0.0.0.dev42 → durabletask-0.0.0.dev43}/durabletask/entities/entity_lock.py +0 -0
  13. {durabletask-0.0.0.dev42 → durabletask-0.0.0.dev43}/durabletask/entities/entity_metadata.py +0 -0
  14. {durabletask-0.0.0.dev42 → durabletask-0.0.0.dev43}/durabletask/entities/entity_operation_failed_exception.py +0 -0
  15. {durabletask-0.0.0.dev42 → durabletask-0.0.0.dev43}/durabletask/internal/entity_state_shim.py +0 -0
  16. {durabletask-0.0.0.dev42 → durabletask-0.0.0.dev43}/durabletask/internal/exceptions.py +0 -0
  17. {durabletask-0.0.0.dev42 → durabletask-0.0.0.dev43}/durabletask/internal/grpc_interceptor.py +0 -0
  18. {durabletask-0.0.0.dev42 → durabletask-0.0.0.dev43}/durabletask/internal/helpers.py +0 -0
  19. {durabletask-0.0.0.dev42 → durabletask-0.0.0.dev43}/durabletask/internal/json_encode_output_exception.py +0 -0
  20. {durabletask-0.0.0.dev42 → durabletask-0.0.0.dev43}/durabletask/internal/orchestration_entity_context.py +0 -0
  21. {durabletask-0.0.0.dev42 → durabletask-0.0.0.dev43}/durabletask/internal/orchestrator_service_pb2.py +0 -0
  22. {durabletask-0.0.0.dev42 → durabletask-0.0.0.dev43}/durabletask/internal/orchestrator_service_pb2.pyi +0 -0
  23. {durabletask-0.0.0.dev42 → durabletask-0.0.0.dev43}/durabletask/internal/orchestrator_service_pb2_grpc.py +0 -0
  24. {durabletask-0.0.0.dev42 → durabletask-0.0.0.dev43}/durabletask/internal/proto_task_hub_sidecar_service_stub.py +0 -0
  25. {durabletask-0.0.0.dev42 → durabletask-0.0.0.dev43}/durabletask/internal/shared.py +0 -0
  26. {durabletask-0.0.0.dev42 → durabletask-0.0.0.dev43}/durabletask/py.typed +0 -0
  27. {durabletask-0.0.0.dev42 → durabletask-0.0.0.dev43}/durabletask/task.py +0 -0
  28. {durabletask-0.0.0.dev42 → durabletask-0.0.0.dev43}/durabletask/worker.py +0 -0
  29. {durabletask-0.0.0.dev42 → durabletask-0.0.0.dev43}/durabletask.egg-info/SOURCES.txt +0 -0
  30. {durabletask-0.0.0.dev42 → durabletask-0.0.0.dev43}/durabletask.egg-info/dependency_links.txt +0 -0
  31. {durabletask-0.0.0.dev42 → durabletask-0.0.0.dev43}/durabletask.egg-info/requires.txt +0 -0
  32. {durabletask-0.0.0.dev42 → durabletask-0.0.0.dev43}/durabletask.egg-info/top_level.txt +0 -0
  33. {durabletask-0.0.0.dev42 → durabletask-0.0.0.dev43}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: durabletask
3
- Version: 0.0.0.dev42
3
+ Version: 0.0.0.dev43
4
4
  Summary: A Durable Task Client SDK for Python
5
5
  License: MIT License
6
6
 
@@ -57,10 +57,10 @@ class OrchestrationState:
57
57
  self.failure_details)
58
58
 
59
59
 
60
+ @dataclass
60
61
  class PurgeInstancesResult:
61
- def __init__(self, deleted_instance_count: int, is_complete: bool):
62
- self.deleted_instance_count = deleted_instance_count
63
- self.is_complete = is_complete
62
+ deleted_instance_count: int
63
+ is_complete: bool
64
64
 
65
65
 
66
66
  class OrchestrationFailedError(Exception):
@@ -183,7 +183,7 @@ class TaskHubGrpcClient:
183
183
  _continuation_token: Optional[pb2.StringValue] = None
184
184
  ) -> List[OrchestrationState]:
185
185
  if max_instance_count is None:
186
- # DTS backend does not behave well with max_instance_count = None, so we set to max 32-bit signed value
186
+ # Some backends do not behave well with max_instance_count = None, so we set to max 32-bit signed value
187
187
  max_instance_count = (1 << 31) - 1
188
188
 
189
189
  self._logger.info(f"Querying orchestration instances with filters - "
@@ -194,29 +194,31 @@ class TaskHubGrpcClient:
194
194
  f"fetch_inputs_and_outputs={fetch_inputs_and_outputs}, "
195
195
  f"continuation_token={_continuation_token.value if _continuation_token else None}")
196
196
 
197
- req = pb.QueryInstancesRequest(
198
- query=pb.InstanceQuery(
199
- runtimeStatus=[status.value for status in runtime_status] if runtime_status else None,
200
- createdTimeFrom=helpers.new_timestamp(created_time_from) if created_time_from else None,
201
- createdTimeTo=helpers.new_timestamp(created_time_to) if created_time_to else None,
202
- maxInstanceCount=max_instance_count,
203
- fetchInputsAndOutputs=fetch_inputs_and_outputs,
204
- continuationToken=_continuation_token
205
- )
206
- )
207
- resp: pb.QueryInstancesResponse = self._stub.QueryInstances(req)
208
- states = [parse_orchestration_state(res) for res in resp.orchestrationState]
209
- # Check the value for continuationToken - none or "0" indicates that there are no more results.
210
- if resp.continuationToken and resp.continuationToken.value and resp.continuationToken.value != "0":
211
- self._logger.info(f"Received continuation token with value {resp.continuationToken.value}, fetching next list of instances...")
212
- states += self.get_orchestration_state_by(
213
- created_time_from,
214
- created_time_to,
215
- runtime_status,
216
- max_instance_count,
217
- fetch_inputs_and_outputs,
218
- _continuation_token=resp.continuationToken
197
+ states = []
198
+
199
+ while True:
200
+ req = pb.QueryInstancesRequest(
201
+ query=pb.InstanceQuery(
202
+ runtimeStatus=[status.value for status in runtime_status] if runtime_status else None,
203
+ createdTimeFrom=helpers.new_timestamp(created_time_from) if created_time_from else None,
204
+ createdTimeTo=helpers.new_timestamp(created_time_to) if created_time_to else None,
205
+ maxInstanceCount=max_instance_count,
206
+ fetchInputsAndOutputs=fetch_inputs_and_outputs,
207
+ continuationToken=_continuation_token
208
+ )
219
209
  )
210
+ resp: pb.QueryInstancesResponse = self._stub.QueryInstances(req)
211
+ states += [parse_orchestration_state(res) for res in resp.orchestrationState]
212
+ # Check the value for continuationToken - none or "0" indicates that there are no more results.
213
+ if resp.continuationToken and resp.continuationToken.value and resp.continuationToken.value != "0":
214
+ self._logger.info(f"Received continuation token with value {resp.continuationToken.value}, fetching next list of instances...")
215
+ if _continuation_token and _continuation_token.value and _continuation_token.value == resp.continuationToken.value:
216
+ self._logger.warning(f"Received the same continuation token value {resp.continuationToken.value} again, stopping to avoid infinite loop.")
217
+ break
218
+ _continuation_token = resp.continuationToken
219
+ else:
220
+ break
221
+
220
222
  states = [state for state in states if state is not None] # Filter out any None values
221
223
  return states
222
224
 
@@ -377,28 +379,29 @@ class TaskHubGrpcClient:
377
379
  f"include_state={include_state}, "
378
380
  f"include_transient={include_transient}, "
379
381
  f"page_size={page_size}")
380
- query_request = pb.QueryEntitiesRequest(
381
- query=pb.EntityQuery(
382
- instanceIdStartsWith=helpers.get_string_value(instance_id_starts_with),
383
- lastModifiedFrom=helpers.new_timestamp(last_modified_from) if last_modified_from else None,
384
- lastModifiedTo=helpers.new_timestamp(last_modified_to) if last_modified_to else None,
385
- includeState=include_state,
386
- includeTransient=include_transient,
387
- pageSize=helpers.get_int_value(page_size),
388
- continuationToken=_continuation_token
389
- )
390
- )
391
- resp: pb.QueryEntitiesResponse = self._stub.QueryEntities(query_request)
392
- entities = [EntityMetadata.from_entity_metadata(entity, query_request.query.includeState) for entity in resp.entities]
393
- if resp.continuationToken and resp.continuationToken.value != "0":
394
- self._logger.info(f"Received continuation token with value {resp.continuationToken.value}, fetching next page of entities...")
395
- entities += self.get_entities_by(
396
- instance_id_starts_with=instance_id_starts_with,
397
- last_modified_from=last_modified_from,
398
- last_modified_to=last_modified_to,
399
- include_state=include_state,
400
- include_transient=include_transient,
401
- page_size=page_size,
402
- _continuation_token=resp.continuationToken
382
+
383
+ entities = []
384
+
385
+ while True:
386
+ query_request = pb.QueryEntitiesRequest(
387
+ query=pb.EntityQuery(
388
+ instanceIdStartsWith=helpers.get_string_value(instance_id_starts_with),
389
+ lastModifiedFrom=helpers.new_timestamp(last_modified_from) if last_modified_from else None,
390
+ lastModifiedTo=helpers.new_timestamp(last_modified_to) if last_modified_to else None,
391
+ includeState=include_state,
392
+ includeTransient=include_transient,
393
+ pageSize=helpers.get_int_value(page_size),
394
+ continuationToken=_continuation_token
395
+ )
403
396
  )
397
+ resp: pb.QueryEntitiesResponse = self._stub.QueryEntities(query_request)
398
+ entities += [EntityMetadata.from_entity_metadata(entity, query_request.query.includeState) for entity in resp.entities]
399
+ if resp.continuationToken and resp.continuationToken.value and resp.continuationToken.value != "0":
400
+ self._logger.info(f"Received continuation token with value {resp.continuationToken.value}, fetching next page of entities...")
401
+ if _continuation_token and _continuation_token.value and _continuation_token.value == resp.continuationToken.value:
402
+ self._logger.warning(f"Received the same continuation token value {resp.continuationToken.value} again, stopping to avoid infinite loop.")
403
+ break
404
+ _continuation_token = resp.continuationToken
405
+ else:
406
+ break
404
407
  return entities
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: durabletask
3
- Version: 0.0.0.dev42
3
+ Version: 0.0.0.dev43
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.dev42"
12
+ version = "0.0.0.dev43"
13
13
  description = "A Durable Task Client SDK for Python"
14
14
  keywords = [
15
15
  "durable",