aws-durable-execution-sdk-python 1.6.0__tar.gz → 1.7.0__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 (77) hide show
  1. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/.gitignore +3 -1
  2. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/PKG-INFO +1 -1
  3. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/pyproject.toml +1 -1
  4. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/src/aws_durable_execution_sdk_python/__about__.py +1 -1
  5. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/src/aws_durable_execution_sdk_python/concurrency/executor.py +22 -2
  6. aws_durable_execution_sdk_python-1.7.0/src/aws_durable_execution_sdk_python/constants.py +6 -0
  7. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/src/aws_durable_execution_sdk_python/context.py +299 -184
  8. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/src/aws_durable_execution_sdk_python/execution.py +19 -7
  9. aws_durable_execution_sdk_python-1.7.0/src/aws_durable_execution_sdk_python/filesystem_serdes.py +264 -0
  10. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/src/aws_durable_execution_sdk_python/logger.py +31 -9
  11. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/src/aws_durable_execution_sdk_python/operation/child.py +3 -5
  12. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/src/aws_durable_execution_sdk_python/operation/step.py +0 -3
  13. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/src/aws_durable_execution_sdk_python/operation/wait_for_condition.py +0 -2
  14. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/src/aws_durable_execution_sdk_python/plugin.py +197 -41
  15. aws_durable_execution_sdk_python-1.7.0/src/aws_durable_execution_sdk_python/preview.py +196 -0
  16. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/src/aws_durable_execution_sdk_python/state.py +95 -69
  17. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/src/aws_durable_execution_sdk_python/types.py +46 -0
  18. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/tests/concurrency_test.py +139 -2
  19. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/tests/context_test.py +470 -2
  20. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/tests/e2e/checkpoint_response_int_test.py +1 -1
  21. aws_durable_execution_sdk_python-1.7.0/tests/e2e/filesystem_serdes_int_test.py +488 -0
  22. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/tests/execution_test.py +15 -2
  23. aws_durable_execution_sdk_python-1.7.0/tests/filesystem_serdes_test.py +790 -0
  24. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/tests/logger_test.py +18 -19
  25. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/tests/operation/map_test.py +15 -10
  26. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/tests/plugin_test.py +150 -0
  27. aws_durable_execution_sdk_python-1.7.0/tests/preview_test.py +212 -0
  28. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/tests/state_test.py +300 -54
  29. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/LICENSE +0 -0
  30. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/NOTICE +0 -0
  31. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/README.md +0 -0
  32. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/src/aws_durable_execution_sdk_python/.gitignore +0 -0
  33. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/src/aws_durable_execution_sdk_python/__init__.py +0 -0
  34. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/src/aws_durable_execution_sdk_python/concurrency/__init__.py +0 -0
  35. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/src/aws_durable_execution_sdk_python/concurrency/models.py +0 -0
  36. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/src/aws_durable_execution_sdk_python/config.py +0 -0
  37. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/src/aws_durable_execution_sdk_python/exceptions.py +0 -0
  38. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/src/aws_durable_execution_sdk_python/identifier.py +0 -0
  39. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/src/aws_durable_execution_sdk_python/lambda_service.py +0 -0
  40. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/src/aws_durable_execution_sdk_python/operation/__init__.py +0 -0
  41. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/src/aws_durable_execution_sdk_python/operation/base.py +0 -0
  42. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/src/aws_durable_execution_sdk_python/operation/callback.py +0 -0
  43. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/src/aws_durable_execution_sdk_python/operation/invoke.py +0 -0
  44. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/src/aws_durable_execution_sdk_python/operation/map.py +0 -0
  45. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/src/aws_durable_execution_sdk_python/operation/parallel.py +0 -0
  46. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/src/aws_durable_execution_sdk_python/operation/wait.py +0 -0
  47. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/src/aws_durable_execution_sdk_python/py.typed +0 -0
  48. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/src/aws_durable_execution_sdk_python/retries.py +0 -0
  49. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/src/aws_durable_execution_sdk_python/serdes.py +0 -0
  50. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/src/aws_durable_execution_sdk_python/suspend.py +0 -0
  51. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/src/aws_durable_execution_sdk_python/threading.py +0 -0
  52. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/src/aws_durable_execution_sdk_python/waits.py +0 -0
  53. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/tests/__init__.py +0 -0
  54. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/tests/config_test.py +0 -0
  55. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/tests/durable_executions_python_language_sdk_test.py +0 -0
  56. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/tests/e2e/__init__.py +0 -0
  57. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/tests/e2e/execution_int_test.py +0 -0
  58. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/tests/e2e/map_with_concurrent_waits_int_test.py +0 -0
  59. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/tests/exceptions_test.py +0 -0
  60. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/tests/lambda_service_test.py +0 -0
  61. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/tests/operation/__init__.py +0 -0
  62. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/tests/operation/base_test.py +0 -0
  63. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/tests/operation/callback_test.py +0 -0
  64. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/tests/operation/child_test.py +0 -0
  65. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/tests/operation/invoke_test.py +0 -0
  66. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/tests/operation/parallel_test.py +0 -0
  67. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/tests/operation/step_test.py +0 -0
  68. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/tests/operation/wait_for_condition_test.py +0 -0
  69. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/tests/operation/wait_test.py +0 -0
  70. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/tests/retries_test.py +0 -0
  71. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/tests/serdes_test.py +0 -0
  72. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/tests/suspend_test.py +0 -0
  73. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/tests/test_helpers.py +0 -0
  74. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/tests/threading_test.py +0 -0
  75. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/tests/types_test.py +0 -0
  76. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/tests/waits_test.py +0 -0
  77. {aws_durable_execution_sdk_python-1.6.0 → aws_durable_execution_sdk_python-1.7.0}/tests/with_retry_test.py +0 -0
@@ -33,5 +33,7 @@ dist/
33
33
 
34
34
  **/build/
35
35
  **/*.zip
36
+ .aws-sam/
37
+ **/template.generated.json
36
38
 
37
- .env
39
+ .env
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aws-durable-execution-sdk-python
3
- Version: 1.6.0
3
+ Version: 1.7.0
4
4
  Summary: AWS Durable Execution SDK for Python
5
5
  Project-URL: Documentation, https://github.com/aws/aws-durable-execution-sdk-python#readme
6
6
  Project-URL: Issues, https://github.com/aws/aws-durable-execution-sdk-python/issues
@@ -63,7 +63,7 @@ target-version = "py311"
63
63
 
64
64
  [tool.ruff.lint]
65
65
  preview = true
66
- select = ["TID252"] # Enforce absolute imports (ban relative imports)
66
+ select = ["E4", "E7", "E9", "F", "TID252"] # pycodestyle (E4/E7/E9) + Pyflakes + absolute imports
67
67
 
68
68
  [tool.ruff.lint.isort]
69
69
  known-first-party = ["aws_durable_execution_sdk_python"]
@@ -1,4 +1,4 @@
1
1
  # SPDX-FileCopyrightText: 2025-present Amazon.com, Inc. or its affiliates.
2
2
  #
3
3
  # SPDX-License-Identifier: Apache-2.0
4
- __version__ = "1.6.0"
4
+ __version__ = "1.7.0"
@@ -30,7 +30,7 @@ from aws_durable_execution_sdk_python.exceptions import (
30
30
  TimedSuspendExecution,
31
31
  )
32
32
  from aws_durable_execution_sdk_python.identifier import OperationIdentifier
33
- from aws_durable_execution_sdk_python.lambda_service import ErrorObject, OperationType
33
+ from aws_durable_execution_sdk_python.lambda_service import ErrorObject
34
34
  from aws_durable_execution_sdk_python.operation.child import child_handler
35
35
 
36
36
 
@@ -475,6 +475,27 @@ class ConcurrentExecutor(ABC, Generic[CallableType, ResultType]):
475
475
  name=name,
476
476
  )
477
477
 
478
+ # The branch/iteration container op is resolved here via child_handler,
479
+ # bypassing context.run_in_child_context and therefore the parent's
480
+ # `_replay_aware`. Replicate the two things `_replay_aware` would have
481
+ # done for this container op while replaying:
482
+ # 1. Existence flip: a brand-new branch (no checkpoint) is new work,
483
+ # so the child must start in NEW rather than inheriting REPLAY —
484
+ # otherwise logs before the branch's first inner op are wrongly
485
+ # de-duplicated during a map/parallel replay.
486
+ # 2. Replay hook: a branch that already has a checkpoint was observed
487
+ # in a prior invocation, so emit the plugin replay hook (once).
488
+ # Virtual (FLAT) branches do not checkpoint themselves, so neither
489
+ # applies; their inner operations still self-correct via `_replay_aware`.
490
+ if not is_virtual and child_context.is_replaying():
491
+ branch_checkpoint = child_context.state.get_checkpoint_result(operation_id)
492
+ if not branch_checkpoint.is_existent():
493
+ child_context._set_replay_status_new() # noqa: SLF001
494
+ elif branch_checkpoint.operation is not None:
495
+ child_context.state.emit_operation_replay_hook(
496
+ branch_checkpoint.operation
497
+ )
498
+
478
499
  def run_in_child_handler() -> ResultType:
479
500
  return self.execute_item(child_context, executable)
480
501
 
@@ -489,7 +510,6 @@ class ConcurrentExecutor(ABC, Generic[CallableType, ResultType]):
489
510
  is_virtual=is_virtual,
490
511
  ),
491
512
  )
492
- child_context.state.track_replay(operation_id=operation_id)
493
513
  return result
494
514
 
495
515
  def replay(self, execution_state: ExecutionState, executor_context: DurableContext):
@@ -0,0 +1,6 @@
1
+ """Shared internal constants."""
2
+
3
+ # Maximum checkpoint payload size in bytes (256KB).
4
+ # Payloads exceeding this limit trigger ReplayChildren mode in child contexts,
5
+ # and overflow-to-file behavior in FileSystemSerDes.
6
+ CHECKPOINT_SIZE_LIMIT_BYTES = 256 * 1024