Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions RELEASING.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ The tag should be the version of the package being bumped, prepended with a desc
- **SDK only:** `sdk-v<version>` (e.g., `sdk-v1.6.0`)
- **OTel only:** `otel-v<version>` (e.g., `otel-v0.3.0`)
- **Testing only:** `testing-v<version>` (e.g., `testing-v1.2.1`)
- **Telemetry Exporter only:** `telemetry-exporter-v<version>` (e.g., `telemetry-exporter-v1.0.0`)
- **Telemetry Exporter only:** `telemetry-exporter-v<version>` (e.g., `telemetry-exporter-v0.0.1`)
- **Multiple packages in a single release:** comma-separate the sub-tags (e.g., `sdk-v1.6.0,otel-v0.3.0`)

Examples:
Expand All @@ -55,7 +55,7 @@ Examples:
sdk-v1.6.0
otel-v0.3.0
testing-v1.2.1
telemetry-exporter-v1.0.0
telemetry-exporter-v0.0.1
sdk-v1.6.0,otel-v0.3.0
```

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ hooks and emits one curated `DurableExecutionTelemetry` record per execution
to the configured exporters. The wire record keeps the JS camelCase field
names so records read identically across SDKs.

> **Experimental.** Like its JS counterpart, this plugin is experimental and may
> change or be removed in future releases.

## Install

```bash
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ license = "Apache-2.0"
keywords = ["observability", "durable-execution-telemetry", "durable-execution"]
authors = [{ name = "AWS durable-execution-dev", email = "durable-execution-dev@amazon.com" }]
classifiers = [
"Development Status :: 5 - Production/Stable",
"Development Status :: 4 - Beta",
"Programming Language :: Python",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: 2026-present Amazon.com, Inc. or its affiliates.
#
# SPDX-License-Identifier: Apache-2.0
__version__ = "1.0.0"
__version__ = "0.0.1"

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -101,13 +101,15 @@ class OperationInfo:
result: str | None = field(
default=None,
kw_only=True,
metadata={"experimental": True},
)
"""The serialized operation result, when available."""
"""EXPERIMENTAL: The serialized operation result, when available."""
error: ErrorObject | None = field(
default=None,
kw_only=True,
metadata={"experimental": True},
)
"""The operation error, when available."""
"""EXPERIMENTAL: The operation error, when available."""
attempt: int | None = field(default=None, kw_only=True)

@staticmethod
Expand Down Expand Up @@ -254,8 +256,9 @@ class InvocationInfo:
repr=False,
compare=False,
hash=False,
metadata={"experimental": True},
)
"""The deserialized execution input, when available.
"""EXPERIMENTAL: The deserialized execution input, when available.

Surfaced to instrumentation plugins that need to record it (e.g. Durable
Execution Telemetry). Mirrors the JS SDK's ``InvocationInfo.executionInput``.
Expand All @@ -281,8 +284,9 @@ class InvocationInfo:
repr=False,
compare=False,
hash=False,
metadata={"experimental": True},
)
"""Checkpointed operations for this execution, keyed by id.
"""EXPERIMENTAL: Checkpointed operations for this execution, keyed by id.

A point-in-time view of the execution's operation map: as observed at the
start of the invocation on ``on_invocation_start``, and as observed at the
Expand All @@ -309,8 +313,9 @@ class InvocationStartInfo(InvocationInfo):
repr=False,
compare=False,
hash=False,
metadata={"experimental": True},
)
"""Operations updated externally while this execution was suspended.
"""EXPERIMENTAL: Operations updated externally while this execution was suspended.

A wait timer that expired, a callback that was delivered, or a chained
invoke that completed between the previous invocation and this one. This is
Expand All @@ -328,16 +333,18 @@ class InvocationEndInfo(InvocationInfo):
status: InvocationStatus = field(kw_only=True)
error: ErrorObject | None = field(
default=None,
metadata={"experimental": True},
)
"""The invocation error, when available."""
"""EXPERIMENTAL: The invocation error, when available."""
execution_result: str | None = field(
default=None,
kw_only=True,
repr=False,
compare=False,
hash=False,
metadata={"experimental": True},
)
"""The serialized execution result, when available.
"""EXPERIMENTAL: The serialized execution result, when available.

A JSON string, or ``""`` when the result was checkpointed out-of-band for a
large payload. Mirrors the JS SDK's ``InvocationEndInfo.executionResult``.
Expand Down
24 changes: 24 additions & 0 deletions packages/aws-durable-execution-sdk-python/tests/plugin_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
from aws_durable_execution_sdk_python.plugin import (
DurableInstrumentationPlugin,
InvocationEndInfo,
InvocationInfo,
InvocationStatus,
InvocationStartInfo,
OperationChangeInfo,
Expand Down Expand Up @@ -316,6 +317,29 @@ def test_invocation_end_info_converts_service_invocation_status(self):

self.assertIs(info.status, InvocationStatus.PENDING)

def test_payload_fields_are_marked_experimental(self):
plugin_info_types = (
OperationInfo,
OperationStartInfo,
OperationEndInfo,
OperationChangeInfo,
UserFunctionStartInfo,
UserFunctionEndInfo,
InvocationInfo,
InvocationStartInfo,
InvocationEndInfo,
)
payload_field_terms = ("input", "output", "result", "error")

for info_type in plugin_info_types:
for info_field in fields(info_type):
if any(term in info_field.name for term in payload_field_terms):
self.assertIs(
info_field.metadata.get("experimental"),
True,
f"{info_type.__name__}.{info_field.name}",
)

def test_operation_start_info(self):
self.assertEqual(OPERATION_START_INFO.sub_type, OperationSubType.CALLBACK)
self.assertEqual(OPERATION_START_INFO.name, "my-op")
Expand Down
Loading