async-durable-execution 2.2.0__tar.gz → 2.4.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 (71) hide show
  1. {async_durable_execution-2.2.0 → async_durable_execution-2.4.0}/PKG-INFO +20 -7
  2. {async_durable_execution-2.2.0 → async_durable_execution-2.4.0}/README.md +14 -4
  3. {async_durable_execution-2.2.0 → async_durable_execution-2.4.0}/async_durable_execution/__about__.py +1 -1
  4. {async_durable_execution-2.2.0 → async_durable_execution-2.4.0}/async_durable_execution/__init__.py +65 -15
  5. {async_durable_execution-2.2.0 → async_durable_execution-2.4.0}/async_durable_execution/_core/__init__.py +19 -3
  6. async_durable_execution-2.4.0/async_durable_execution/_core/aws_http.py +915 -0
  7. {async_durable_execution-2.2.0 → async_durable_execution-2.4.0}/async_durable_execution/_core/client.py +44 -57
  8. {async_durable_execution-2.2.0 → async_durable_execution-2.4.0}/async_durable_execution/_core/config.py +1 -1
  9. {async_durable_execution-2.2.0 → async_durable_execution-2.4.0}/async_durable_execution/_core/context.py +178 -22
  10. {async_durable_execution-2.2.0 → async_durable_execution-2.4.0}/async_durable_execution/_core/exceptions.py +23 -13
  11. {async_durable_execution-2.2.0 → async_durable_execution-2.4.0}/async_durable_execution/_core/execution.py +4 -4
  12. {async_durable_execution-2.2.0 → async_durable_execution-2.4.0}/async_durable_execution/_core/logger.py +4 -1
  13. {async_durable_execution-2.2.0 → async_durable_execution-2.4.0}/async_durable_execution/_core/models.py +256 -283
  14. {async_durable_execution-2.2.0 → async_durable_execution-2.4.0}/async_durable_execution/_core/serdes.py +227 -18
  15. {async_durable_execution-2.2.0 → async_durable_execution-2.4.0}/async_durable_execution/_core/state.py +7 -7
  16. async_durable_execution-2.4.0/async_durable_execution/_extension/__init__.py +23 -0
  17. async_durable_execution-2.4.0/async_durable_execution/_operation/__init__.py +1 -0
  18. async_durable_execution-2.4.0/async_durable_execution/_operation/callback.py +41 -0
  19. async_durable_execution-2.4.0/async_durable_execution/_operation/child.py +47 -0
  20. {async_durable_execution-2.2.0/async_durable_execution/_extension → async_durable_execution-2.4.0/async_durable_execution/_operation}/flow.py +34 -8
  21. async_durable_execution-2.4.0/async_durable_execution/_operation/invoke.py +50 -0
  22. {async_durable_execution-2.2.0/async_durable_execution/_extension → async_durable_execution-2.4.0/async_durable_execution/_operation}/map.py +28 -7
  23. {async_durable_execution-2.2.0/async_durable_execution/_extension → async_durable_execution-2.4.0/async_durable_execution/_operation}/parallel.py +258 -47
  24. {async_durable_execution-2.2.0/async_durable_execution/_extension → async_durable_execution-2.4.0/async_durable_execution/_operation}/recurse.py +13 -8
  25. {async_durable_execution-2.2.0/async_durable_execution/_extension → async_durable_execution-2.4.0/async_durable_execution/_operation}/replay_safe.py +1 -1
  26. async_durable_execution-2.4.0/async_durable_execution/_operation/step.py +56 -0
  27. async_durable_execution-2.4.0/async_durable_execution/_operation/wait.py +40 -0
  28. {async_durable_execution-2.2.0/async_durable_execution/_extension → async_durable_execution-2.4.0/async_durable_execution/_operation}/wait_for_callback.py +60 -4
  29. {async_durable_execution-2.2.0/async_durable_execution/_extension → async_durable_execution-2.4.0/async_durable_execution/_operation}/wait_for_condition.py +112 -65
  30. {async_durable_execution-2.2.0/async_durable_execution/_extension → async_durable_execution-2.4.0/async_durable_execution/_operation}/with_retry.py +41 -3
  31. async_durable_execution-2.4.0/async_durable_execution/_primitive/base.py +178 -0
  32. {async_durable_execution-2.2.0 → async_durable_execution-2.4.0}/async_durable_execution/_primitive/callback.py +20 -36
  33. {async_durable_execution-2.2.0 → async_durable_execution-2.4.0}/async_durable_execution/_primitive/child.py +37 -19
  34. {async_durable_execution-2.2.0 → async_durable_execution-2.4.0}/async_durable_execution/_primitive/invoke.py +15 -35
  35. {async_durable_execution-2.2.0 → async_durable_execution-2.4.0}/async_durable_execution/_primitive/step.py +348 -37
  36. {async_durable_execution-2.2.0 → async_durable_execution-2.4.0}/async_durable_execution/_primitive/wait.py +7 -33
  37. {async_durable_execution-2.2.0 → async_durable_execution-2.4.0}/async_durable_execution/_runner/cloud/__init__.py +127 -99
  38. async_durable_execution-2.4.0/async_durable_execution/_runner/exceptions.py +55 -0
  39. {async_durable_execution-2.2.0 → async_durable_execution-2.4.0}/async_durable_execution/_runner/local/__init__.py +7 -8
  40. {async_durable_execution-2.2.0 → async_durable_execution-2.4.0}/async_durable_execution/_runner/local/execution.py +1 -100
  41. {async_durable_execution-2.2.0 → async_durable_execution-2.4.0}/async_durable_execution/_runner/local/executor.py +6 -76
  42. async_durable_execution-2.4.0/async_durable_execution/_runner/local/model.py +205 -0
  43. {async_durable_execution-2.2.0 → async_durable_execution-2.4.0}/async_durable_execution/_runner/local/processor.py +1 -1
  44. {async_durable_execution-2.2.0 → async_durable_execution-2.4.0}/async_durable_execution/_runner/local/processors/base.py +11 -2
  45. {async_durable_execution-2.2.0 → async_durable_execution-2.4.0}/async_durable_execution/_runner/local/processors/step.py +25 -10
  46. {async_durable_execution-2.2.0 → async_durable_execution-2.4.0}/async_durable_execution/_runner/local/scheduler.py +9 -35
  47. {async_durable_execution-2.2.0 → async_durable_execution-2.4.0}/async_durable_execution/_runner/model.py +199 -885
  48. async_durable_execution-2.4.0/async_durable_execution/extension.py +701 -0
  49. async_durable_execution-2.4.0/async_durable_execution/filesystem_serdes.py +741 -0
  50. async_durable_execution-2.4.0/async_durable_execution/preview.py +181 -0
  51. {async_durable_execution-2.2.0 → async_durable_execution-2.4.0}/pyproject.toml +16 -8
  52. async_durable_execution-2.2.0/async_durable_execution/_extension/__init__.py +0 -1
  53. async_durable_execution-2.2.0/async_durable_execution/_primitive/base.py +0 -101
  54. async_durable_execution-2.2.0/async_durable_execution/_runner/exceptions.py +0 -276
  55. async_durable_execution-2.2.0/async_durable_execution/_runner/local/model.py +0 -275
  56. {async_durable_execution-2.2.0 → async_durable_execution-2.4.0}/.gitignore +0 -0
  57. {async_durable_execution-2.2.0 → async_durable_execution-2.4.0}/LICENSE +0 -0
  58. {async_durable_execution-2.2.0 → async_durable_execution-2.4.0}/NOTICE +0 -0
  59. {async_durable_execution-2.2.0 → async_durable_execution-2.4.0}/async_durable_execution/.gitignore +0 -0
  60. {async_durable_execution-2.2.0 → async_durable_execution-2.4.0}/async_durable_execution/_core/task.py +0 -0
  61. {async_durable_execution-2.2.0 → async_durable_execution-2.4.0}/async_durable_execution/_primitive/__init__.py +0 -0
  62. {async_durable_execution-2.2.0 → async_durable_execution-2.4.0}/async_durable_execution/_runner/__init__.py +0 -0
  63. {async_durable_execution-2.2.0 → async_durable_execution-2.4.0}/async_durable_execution/_runner/local/processors/__init__.py +0 -0
  64. {async_durable_execution-2.2.0 → async_durable_execution-2.4.0}/async_durable_execution/_runner/local/processors/callback.py +0 -0
  65. {async_durable_execution-2.2.0 → async_durable_execution-2.4.0}/async_durable_execution/_runner/local/processors/context.py +0 -0
  66. {async_durable_execution-2.2.0 → async_durable_execution-2.4.0}/async_durable_execution/_runner/local/processors/execution.py +0 -0
  67. {async_durable_execution-2.2.0 → async_durable_execution-2.4.0}/async_durable_execution/_runner/local/processors/invoke.py +0 -0
  68. {async_durable_execution-2.2.0 → async_durable_execution-2.4.0}/async_durable_execution/_runner/local/processors/wait.py +0 -0
  69. {async_durable_execution-2.2.0 → async_durable_execution-2.4.0}/async_durable_execution/_runner/local/time_scale.py +0 -0
  70. {async_durable_execution-2.2.0 → async_durable_execution-2.4.0}/async_durable_execution/_runner/py.typed +0 -0
  71. {async_durable_execution-2.2.0 → async_durable_execution-2.4.0}/async_durable_execution/py.typed +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.5
2
2
  Name: async-durable-execution
3
- Version: 2.2.0
3
+ Version: 2.4.0
4
4
  Summary: Community-maintained durable execution SDK for AWS Lambda in Python
5
5
  Project-URL: Documentation, https://github.com/zhongkechen/async-durable-execution#readme
6
6
  Project-URL: Issues, https://github.com/zhongkechen/async-durable-execution/issues
@@ -17,12 +17,15 @@ Classifier: Programming Language :: Python :: 3.11
17
17
  Classifier: Programming Language :: Python :: 3.12
18
18
  Classifier: Programming Language :: Python :: 3.13
19
19
  Classifier: Programming Language :: Python :: 3.14
20
+ Classifier: Programming Language :: Python :: 3.15
20
21
  Classifier: Programming Language :: Python :: Implementation :: CPython
21
22
  Classifier: Programming Language :: Python :: Implementation :: PyPy
22
23
  Requires-Python: >=3.10
23
24
  Requires-Dist: botocore<1.43.1,>=1.42.90
24
25
  Provides-Extra: aioboto
25
- Requires-Dist: aiobotocore; extra == 'aioboto'
26
+ Requires-Dist: httpx<1,>=0.28.1; extra == 'aioboto'
27
+ Provides-Extra: httpx
28
+ Requires-Dist: httpx<1,>=0.28.1; extra == 'httpx'
26
29
  Provides-Extra: typing
27
30
  Requires-Dist: botocore-stubs<1.43.0,>=1.42.40; extra == 'typing'
28
31
  Description-Content-Type: text/markdown
@@ -72,11 +75,13 @@ composition, and APIs designed for modern Python applications.
72
75
 
73
76
  - **[Async-first durable code](https://zhongkechen.github.io/async-durable-execution/official-python-sdk-comparison.html#programming-model)** - Compared with the official AWS SDK, user-provided durable handlers, steps, child contexts, `flow` nodes, callback submitters, map item functions, parallel branches, and wait-for-condition checks are written with `async def`.
74
77
  - **[Operations not available in the official SDK](https://zhongkechen.github.io/async-durable-execution/api/extension/replay_safe.html)** - This SDK adds [replay-safe helpers](https://zhongkechen.github.io/async-durable-execution/api/extension/replay_safe.html) (`random()`, `now()`, `timestamp()`, and `uuid()`) and [durable self-invocation](https://zhongkechen.github.io/async-durable-execution/api/extension/recurse.html) (`recurse()`).
78
+ - **[Stable custom operation SPI](https://zhongkechen.github.io/async-durable-execution/custom-operations.html)** - Third-party packages can reserve opaque deterministic primitive identities, use custom subtypes, and build stateful replay-safe operations without importing SDK internals.
75
79
  - **[Declarative DAG workflows](https://zhongkechen.github.io/async-durable-execution/api/extension/flow.html#quick-start)** - Define acyclic workflows with typed node inputs, inferred or conditional dependencies, failure routes, and durable operations inside each node. The SDK validates the graph before execution and skips nodes that are not required by the selected outputs.
76
80
  - **[Background operation tasks](https://zhongkechen.github.io/async-durable-execution/advanced-usage.html#background-operation-tasks)** - Durable operations such as `step(...)`, `wait(...)`, `invoke(...)`, `recurse(...)`, `run_in_child_context(...)`, and `flow(...)` return `asyncio.Task` objects, so independent operations can run in the background and be awaited together with `asyncio.gather` without using `parallel()` or `map()`.
77
81
  - **[Pythonic operation parameters](https://zhongkechen.github.io/async-durable-execution/migrating-from-official-python-sdk.html#api-mapping)** - Operations use direct keyword arguments, standard Python types such as `datetime.timedelta`, and keyword-only names instead of configuration wrapper objects.
82
+ - **[Composable SerDes pipelines](https://zhongkechen.github.io/async-durable-execution/serdes-pipelines.html)** - Chain async string transformations and offload large checkpoint payloads to EFS or S3 Files with bounded previews and validated immutable storage.
78
83
  - **[Integrated local and cloud runner](https://zhongkechen.github.io/async-durable-execution/api/runner.html)** - Runner functionality now ships through `async_durable_execution`, with separate local and cloud runner factories and typed test result helpers.
79
- - **[Async Lambda client support](https://zhongkechen.github.io/async-durable-execution/advanced-usage.html#lambda-client-selection)** - Install the optional `aioboto` extra to use an async Lambda client; otherwise the SDK uses the bundled sync client through an async adapter.
84
+ - **[Model-free Lambda clients](https://zhongkechen.github.io/async-durable-execution/advanced-usage.html#lambda-client-selection)** - The SDK owns its Lambda REST wire format instead of depending on botocore service models. Install the optional `httpx` extra to send requests with HTTPX; otherwise the same requests use botocore's synchronous HTTP transport through an async adapter.
80
85
  - **[Replay-aware logging with stdlib logging](https://zhongkechen.github.io/async-durable-execution/migrating-from-official-python-sdk.html#logging)** - Standard `logging` loggers are enriched by durable context filtering so workflow logs remain replay safe.
81
86
  - **[Lambda layer packaging](https://zhongkechen.github.io/async-durable-execution/advanced-usage.html#lambda-layer-packaging)** - The repo includes tooling and workflows to build and publish an SDK Lambda layer for functions that do not vendor dependencies directly.
82
87
 
@@ -88,13 +93,20 @@ Install the execution SDK:
88
93
  pip install async-durable-execution
89
94
  ```
90
95
 
91
- For an async Lambda service client, install the optional `aioboto` extra:
96
+ For an async Lambda service client, install the optional `httpx` extra:
92
97
 
93
98
  ```console
94
- pip install "async-durable-execution[aioboto]"
99
+ pip install "async-durable-execution[httpx]"
95
100
  ```
96
101
 
97
- The `aioboto` extra installs `aiobotocore`, which lets the SDK create an async Lambda client for durable checkpoint and state APIs. Without it, the SDK uses the bundled `botocore` dependency through a threaded async adapter.
102
+ The `httpx` extra installs HTTPX, which the SDK uses for asynchronous
103
+ model-free Lambda REST calls. Without it, the SDK sends the same signed
104
+ requests with botocore's synchronous HTTP transport through a threaded async
105
+ adapter. Botocore continues to provide AWS credentials, endpoint metadata, and
106
+ SigV4 signing, but its generated Lambda service model is not used.
107
+
108
+ The previous `aioboto` extra remains available as a backward-compatible alias
109
+ for `httpx`.
98
110
 
99
111
  Create a durable Lambda handler:
100
112
 
@@ -247,6 +259,7 @@ For the developer workflow to run or deploy example integration tests, see the [
247
259
  - **[Deploy and Invoke](https://zhongkechen.github.io/async-durable-execution/deployment.html)** - Configure IAM, qualified function identifiers, invocations, CloudFormation, and SAM
248
260
  - **[Using Synchronous Code](https://zhongkechen.github.io/async-durable-execution/using-synchronous-code.html)** - Wrap existing synchronous business logic and blocking clients safely
249
261
  - **[Advanced Usage](https://zhongkechen.github.io/async-durable-execution/advanced-usage.html)** - Explore background operation tasks, batch completion conditions, Lambda clients, and Lambda layers
262
+ - **[Custom Durable Operations](https://zhongkechen.github.io/async-durable-execution/custom-operations.html)** - Build third-party durable operation libraries on the stable extension-author interface
250
263
  - **[Runner Architecture](https://zhongkechen.github.io/async-durable-execution/runner-architecture.html)** - Local and cloud runner execution flow, components, and diagrams
251
264
  - **[Contributing Guide](https://github.com/zhongkechen/async-durable-execution/blob/main/CONTRIBUTING.md)** - Development workflow, Hatch commands, testing, and pull request guidance
252
265
 
@@ -43,11 +43,13 @@ composition, and APIs designed for modern Python applications.
43
43
 
44
44
  - **[Async-first durable code](https://zhongkechen.github.io/async-durable-execution/official-python-sdk-comparison.html#programming-model)** - Compared with the official AWS SDK, user-provided durable handlers, steps, child contexts, `flow` nodes, callback submitters, map item functions, parallel branches, and wait-for-condition checks are written with `async def`.
45
45
  - **[Operations not available in the official SDK](https://zhongkechen.github.io/async-durable-execution/api/extension/replay_safe.html)** - This SDK adds [replay-safe helpers](https://zhongkechen.github.io/async-durable-execution/api/extension/replay_safe.html) (`random()`, `now()`, `timestamp()`, and `uuid()`) and [durable self-invocation](https://zhongkechen.github.io/async-durable-execution/api/extension/recurse.html) (`recurse()`).
46
+ - **[Stable custom operation SPI](https://zhongkechen.github.io/async-durable-execution/custom-operations.html)** - Third-party packages can reserve opaque deterministic primitive identities, use custom subtypes, and build stateful replay-safe operations without importing SDK internals.
46
47
  - **[Declarative DAG workflows](https://zhongkechen.github.io/async-durable-execution/api/extension/flow.html#quick-start)** - Define acyclic workflows with typed node inputs, inferred or conditional dependencies, failure routes, and durable operations inside each node. The SDK validates the graph before execution and skips nodes that are not required by the selected outputs.
47
48
  - **[Background operation tasks](https://zhongkechen.github.io/async-durable-execution/advanced-usage.html#background-operation-tasks)** - Durable operations such as `step(...)`, `wait(...)`, `invoke(...)`, `recurse(...)`, `run_in_child_context(...)`, and `flow(...)` return `asyncio.Task` objects, so independent operations can run in the background and be awaited together with `asyncio.gather` without using `parallel()` or `map()`.
48
49
  - **[Pythonic operation parameters](https://zhongkechen.github.io/async-durable-execution/migrating-from-official-python-sdk.html#api-mapping)** - Operations use direct keyword arguments, standard Python types such as `datetime.timedelta`, and keyword-only names instead of configuration wrapper objects.
50
+ - **[Composable SerDes pipelines](https://zhongkechen.github.io/async-durable-execution/serdes-pipelines.html)** - Chain async string transformations and offload large checkpoint payloads to EFS or S3 Files with bounded previews and validated immutable storage.
49
51
  - **[Integrated local and cloud runner](https://zhongkechen.github.io/async-durable-execution/api/runner.html)** - Runner functionality now ships through `async_durable_execution`, with separate local and cloud runner factories and typed test result helpers.
50
- - **[Async Lambda client support](https://zhongkechen.github.io/async-durable-execution/advanced-usage.html#lambda-client-selection)** - Install the optional `aioboto` extra to use an async Lambda client; otherwise the SDK uses the bundled sync client through an async adapter.
52
+ - **[Model-free Lambda clients](https://zhongkechen.github.io/async-durable-execution/advanced-usage.html#lambda-client-selection)** - The SDK owns its Lambda REST wire format instead of depending on botocore service models. Install the optional `httpx` extra to send requests with HTTPX; otherwise the same requests use botocore's synchronous HTTP transport through an async adapter.
51
53
  - **[Replay-aware logging with stdlib logging](https://zhongkechen.github.io/async-durable-execution/migrating-from-official-python-sdk.html#logging)** - Standard `logging` loggers are enriched by durable context filtering so workflow logs remain replay safe.
52
54
  - **[Lambda layer packaging](https://zhongkechen.github.io/async-durable-execution/advanced-usage.html#lambda-layer-packaging)** - The repo includes tooling and workflows to build and publish an SDK Lambda layer for functions that do not vendor dependencies directly.
53
55
 
@@ -59,13 +61,20 @@ Install the execution SDK:
59
61
  pip install async-durable-execution
60
62
  ```
61
63
 
62
- For an async Lambda service client, install the optional `aioboto` extra:
64
+ For an async Lambda service client, install the optional `httpx` extra:
63
65
 
64
66
  ```console
65
- pip install "async-durable-execution[aioboto]"
67
+ pip install "async-durable-execution[httpx]"
66
68
  ```
67
69
 
68
- The `aioboto` extra installs `aiobotocore`, which lets the SDK create an async Lambda client for durable checkpoint and state APIs. Without it, the SDK uses the bundled `botocore` dependency through a threaded async adapter.
70
+ The `httpx` extra installs HTTPX, which the SDK uses for asynchronous
71
+ model-free Lambda REST calls. Without it, the SDK sends the same signed
72
+ requests with botocore's synchronous HTTP transport through a threaded async
73
+ adapter. Botocore continues to provide AWS credentials, endpoint metadata, and
74
+ SigV4 signing, but its generated Lambda service model is not used.
75
+
76
+ The previous `aioboto` extra remains available as a backward-compatible alias
77
+ for `httpx`.
69
78
 
70
79
  Create a durable Lambda handler:
71
80
 
@@ -218,6 +227,7 @@ For the developer workflow to run or deploy example integration tests, see the [
218
227
  - **[Deploy and Invoke](https://zhongkechen.github.io/async-durable-execution/deployment.html)** - Configure IAM, qualified function identifiers, invocations, CloudFormation, and SAM
219
228
  - **[Using Synchronous Code](https://zhongkechen.github.io/async-durable-execution/using-synchronous-code.html)** - Wrap existing synchronous business logic and blocking clients safely
220
229
  - **[Advanced Usage](https://zhongkechen.github.io/async-durable-execution/advanced-usage.html)** - Explore background operation tasks, batch completion conditions, Lambda clients, and Lambda layers
230
+ - **[Custom Durable Operations](https://zhongkechen.github.io/async-durable-execution/custom-operations.html)** - Build third-party durable operation libraries on the stable extension-author interface
221
231
  - **[Runner Architecture](https://zhongkechen.github.io/async-durable-execution/runner-architecture.html)** - Local and cloud runner execution flow, components, and diagrams
222
232
  - **[Contributing Guide](https://github.com/zhongkechen/async-durable-execution/blob/main/CONTRIBUTING.md)** - Development workflow, Hatch commands, testing, and pull request guidance
223
233
 
@@ -2,4 +2,4 @@
2
2
  #
3
3
  # SPDX-License-Identifier: Apache-2.0
4
4
 
5
- __version__ = "2.2.0"
5
+ __version__ = "2.4.0"
@@ -6,6 +6,7 @@ from .__about__ import __version__
6
6
  # Core runtime and supporting public APIs
7
7
  from ._core import (
8
8
  CallableRuntimeError,
9
+ ComposableSerDes,
9
10
  DurableContext,
10
11
  DurableExecutionsError,
11
12
  DurableServiceClient,
@@ -22,27 +23,46 @@ from ._core import (
22
23
  OperationSubType,
23
24
  OperationType,
24
25
  RetryStrategy,
26
+ RetryableSerDesError,
25
27
  SerDes,
26
28
  SerDesContext,
27
29
  SerDesError,
30
+ SerDesPipelineError,
31
+ SerDesStage,
28
32
  UserlandError,
29
33
  ValidationError,
30
34
  create_default_sync_client,
35
+ create_serdes_pipeline,
31
36
  durable_callable,
32
37
  durable_execution,
33
38
  get_current_context,
34
39
  get_durable_context,
35
40
  get_serdes_context,
41
+ is_composable_serdes,
42
+ )
43
+ from .filesystem_serdes import (
44
+ FileSystemPathEncoding,
45
+ FileSystemSerDesMode,
46
+ FileSystemSerDesStage,
47
+ FileSystemSerDesStageConfig,
48
+ create_file_system_serdes_stage,
49
+ )
50
+ from .preview import (
51
+ FieldMatchMode,
52
+ PreviewConfig,
53
+ PreviewField,
54
+ PreviewMode,
55
+ build_preview,
36
56
  )
37
57
 
38
58
  # Durable operations
39
- from ._extension.with_retry import (
59
+ from ._operation.with_retry import (
40
60
  WithRetryContext,
41
61
  get_with_retry_context,
42
62
  with_retry,
43
63
  )
44
- from ._extension.map import MapItemContext, get_map_item_context, map
45
- from ._extension.flow import (
64
+ from ._operation.map import MapItemContext, get_map_item_context, map
65
+ from ._operation.flow import (
46
66
  FlowDefinitionError,
47
67
  FlowExecutionError,
48
68
  FlowNode,
@@ -56,7 +76,7 @@ from ._extension.flow import (
56
76
  get_node_context,
57
77
  node,
58
78
  )
59
- from ._extension.parallel import (
79
+ from ._operation.parallel import (
60
80
  BatchItem,
61
81
  BatchItemStatus,
62
82
  BatchResult,
@@ -66,38 +86,46 @@ from ._extension.parallel import (
66
86
  CompletionStatus,
67
87
  NestingType,
68
88
  )
69
- from ._extension.wait_for_condition import (
89
+ from ._operation.wait_for_condition import (
70
90
  PollingStrategy,
71
91
  WaitForConditionCheckContext,
72
92
  WaitForConditionError,
73
93
  get_wait_for_condition_check_context,
74
94
  wait_for_condition,
75
95
  )
76
- from ._primitive.invoke import invoke
77
- from ._extension.recurse import recurse
78
- from ._extension.parallel import (
96
+ from ._operation.invoke import invoke
97
+ from ._operation.recurse import recurse
98
+ from ._operation.parallel import (
79
99
  parallel,
80
100
  )
81
- from ._primitive.callback import (
101
+ from ._operation.callback import (
82
102
  Callback,
83
103
  CallbackError,
84
104
  create_callback,
85
105
  )
86
- from ._extension.wait_for_callback import (
106
+ from ._operation.wait_for_callback import (
87
107
  WaitForCallbackContext,
88
108
  get_wait_for_callback_context,
89
109
  wait_for_callback,
90
110
  )
91
- from ._primitive.child import SummaryGenerator, run_in_child_context
92
- from ._primitive.step import (
111
+ from ._operation.child import SummaryGenerator, run_in_child_context
112
+ from ._operation.step import (
93
113
  StepContext,
94
114
  StepInterruptedError,
95
115
  StepSemantics,
96
116
  get_step_context,
97
117
  step,
98
118
  )
99
- from ._extension.replay_safe import now, random, timestamp, uuid
100
- from ._primitive.wait import wait
119
+ from ._operation.replay_safe import now, random, timestamp, uuid
120
+ from ._operation.wait import wait
121
+ from .extension import (
122
+ ExtensionContext,
123
+ ExtensionOperation,
124
+ ExtensionStepFunction,
125
+ ExtensionStepResult,
126
+ ExtensionStepRetryStrategy,
127
+ get_extension_context,
128
+ )
101
129
  from ._runner import (
102
130
  DurableFunctionCloudTestRunner,
103
131
  DurableFunctionLocalTestRunner,
@@ -108,10 +136,13 @@ from ._runner import (
108
136
 
109
137
  __all__ = [
110
138
  "__version__",
139
+ "build_preview",
111
140
  "create_callback",
112
141
  "create_cloud_runner",
113
142
  "create_default_sync_client",
143
+ "create_file_system_serdes_stage",
114
144
  "create_local_runner",
145
+ "create_serdes_pipeline",
115
146
  "durable_callable",
116
147
  "durable_dag",
117
148
  "durable_execution",
@@ -119,6 +150,7 @@ __all__ = [
119
150
  "flow",
120
151
  "get_current_context",
121
152
  "get_durable_context",
153
+ "get_extension_context",
122
154
  "get_map_item_context",
123
155
  "get_node_context",
124
156
  "get_serdes_context",
@@ -127,6 +159,7 @@ __all__ = [
127
159
  "get_wait_for_condition_check_context",
128
160
  "get_with_retry_context",
129
161
  "invoke",
162
+ "is_composable_serdes",
130
163
  "map",
131
164
  "now",
132
165
  "node",
@@ -147,6 +180,7 @@ __all__ = [
147
180
  "Callback",
148
181
  "CallbackError",
149
182
  "CallableRuntimeError",
183
+ "ComposableSerDes",
150
184
  "CompletionConfig",
151
185
  "CompletionDecision",
152
186
  "CompletionReason",
@@ -159,7 +193,17 @@ __all__ = [
159
193
  "DurableExecutionsError",
160
194
  "ErrorObject",
161
195
  "ExecutionError",
196
+ "ExtensionContext",
197
+ "ExtensionOperation",
198
+ "ExtensionStepFunction",
199
+ "ExtensionStepResult",
200
+ "ExtensionStepRetryStrategy",
162
201
  "ExtendedTypeSerDes",
202
+ "FieldMatchMode",
203
+ "FileSystemPathEncoding",
204
+ "FileSystemSerDesMode",
205
+ "FileSystemSerDesStage",
206
+ "FileSystemSerDesStageConfig",
163
207
  "FlowDefinitionError",
164
208
  "FlowExecutionError",
165
209
  "FlowNode",
@@ -178,10 +222,17 @@ __all__ = [
178
222
  "OperationStatus",
179
223
  "OperationSubType",
180
224
  "OperationType",
225
+ "PollingStrategy",
226
+ "PreviewConfig",
227
+ "PreviewField",
228
+ "PreviewMode",
181
229
  "RetryStrategy",
230
+ "RetryableSerDesError",
182
231
  "SerDes",
183
232
  "SerDesContext",
184
233
  "SerDesError",
234
+ "SerDesPipelineError",
235
+ "SerDesStage",
185
236
  "StepContext",
186
237
  "StepInterruptedError",
187
238
  "StepSemantics",
@@ -192,5 +243,4 @@ __all__ = [
192
243
  "WaitForConditionCheckContext",
193
244
  "WaitForConditionError",
194
245
  "WithRetryContext",
195
- "PollingStrategy",
196
246
  ]
@@ -3,7 +3,9 @@
3
3
  from .client import (
4
4
  DurableServiceClient,
5
5
  aioboto_is_installed,
6
+ create_default_async_client,
6
7
  create_default_sync_client,
8
+ httpx_is_installed,
7
9
  )
8
10
  from .config import (
9
11
  Duration,
@@ -15,6 +17,7 @@ from .config import (
15
17
  from .context import (
16
18
  DurableContext,
17
19
  OperationContext,
20
+ SerDesContext,
18
21
  bind_current_context,
19
22
  bind_durable_definition,
20
23
  ensure_durable_operations_allowed,
@@ -30,6 +33,7 @@ from .exceptions import (
30
33
  InvalidStateError,
31
34
  InvocationError,
32
35
  OrphanedChildException,
36
+ RetryableSerDesError,
33
37
  SerDesError,
34
38
  SuspendExecution,
35
39
  TerminationReason,
@@ -50,6 +54,8 @@ from .execution import (
50
54
  durable_execution,
51
55
  )
52
56
  from .models import (
57
+ AwsApiModel,
58
+ BotoSerializableModel,
53
59
  CallbackDetails,
54
60
  CallbackOptions,
55
61
  CallbackTimeoutType,
@@ -64,34 +70,38 @@ from .models import (
64
70
  ExecutionDetails,
65
71
  InvocationStatus,
66
72
  LambdaContext,
73
+ MappingModel,
67
74
  Operation,
68
75
  OperationAction,
69
76
  OperationIdentifier,
70
77
  OperationPayload,
71
78
  OperationStatus,
72
79
  OperationSubType,
80
+ OperationSubTypeValue,
73
81
  OperationType,
74
82
  OperationUpdate,
75
- SerializableModel,
76
83
  StateOutput,
77
84
  StepDetails,
78
85
  TimestampConverter,
79
86
  WaitDetails,
80
87
  WaitOptions,
81
- _metadata,
82
88
  )
83
89
  from .serdes import (
90
+ ComposableSerDes,
84
91
  DEFAULT_JSON_SERDES,
85
92
  EncodedValue,
86
93
  ExtendedTypeSerDes,
87
94
  JsonSerDes,
88
95
  PassThroughSerDes,
89
96
  SerDes,
90
- SerDesContext,
97
+ SerDesPipelineError,
98
+ SerDesStage,
91
99
  TypeCodecExtension,
92
100
  TypeTag,
101
+ create_serdes_pipeline,
93
102
  deserialize,
94
103
  get_serdes_context,
104
+ is_composable_serdes,
95
105
  serialize,
96
106
  )
97
107
  from .state import RECURSIVE_LEVEL_INPUT_FIELD, ExecutionState
@@ -99,6 +109,7 @@ from .task import create_eager_task
99
109
 
100
110
  __all__ = [
101
111
  "CallableRuntimeError",
112
+ "ComposableSerDes",
102
113
  "DurableContext",
103
114
  "DurableExecutionsError",
104
115
  "DurableServiceClient",
@@ -115,15 +126,20 @@ __all__ = [
115
126
  "OperationSubType",
116
127
  "OperationType",
117
128
  "RetryStrategy",
129
+ "RetryableSerDesError",
118
130
  "SerDes",
119
131
  "SerDesContext",
120
132
  "SerDesError",
133
+ "SerDesPipelineError",
134
+ "SerDesStage",
121
135
  "UserlandError",
122
136
  "ValidationError",
123
137
  "create_default_sync_client",
138
+ "create_serdes_pipeline",
124
139
  "durable_callable",
125
140
  "durable_execution",
126
141
  "get_current_context",
127
142
  "get_durable_context",
128
143
  "get_serdes_context",
144
+ "is_composable_serdes",
129
145
  ]