Skip to content

Commit 20e6576

Browse files
vip-amznAstraea Quinn S
authored andcommitted
fix(testing-sdk): update WaitDetails to use scheduled_end_timestamp and use datetime
1 parent 6cadeb8 commit 20e6576

File tree

11 files changed

+151
-124
lines changed

11 files changed

+151
-124
lines changed

.github/workflows/deploy-examples.yml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,16 @@ jobs:
8686
FUNCTION_NAME="${EXAMPLE_NAME_CLEAN}-Python"
8787
fi
8888
89+
# Clean up existing function if present to avoid conflicts
90+
echo "Cleaning up existing function if present..."
91+
aws lambda delete-function \
92+
--function-name "$FUNCTION_NAME" \
93+
--endpoint-url "$LAMBDA_ENDPOINT" \
94+
--region "$AWS_REGION" 2>/dev/null || echo "No existing function to clean up"
95+
96+
# Give AWS time to process the deletion
97+
sleep 5
98+
8999
echo "Deploying ${{ matrix.example.name }} as $FUNCTION_NAME"
90100
hatch run examples:deploy "${{ matrix.example.name }}" --function-name "$FUNCTION_NAME"
91101
@@ -119,6 +129,10 @@ jobs:
119129
# Run integration tests
120130
hatch run test:examples-integration
121131
132+
# Wait for function to be ready
133+
echo "Waiting for function to be active..."
134+
aws lambda wait function-active --function-name "$QUALIFIED_FUNCTION_NAME" --endpoint-url "$LAMBDA_ENDPOINT" --region "$AWS_REGION"
135+
122136
- name: Invoke Lambda function - ${{ matrix.example.name }}
123137
env:
124138
LAMBDA_ENDPOINT: ${{ secrets.LAMBDA_ENDPOINT_BETA }}

examples/test/test_wait.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,4 @@ def test_wait(durable_runner):
2424
wait_ops = [op for op in result.operations if op.operation_type.value == "WAIT"]
2525
assert len(wait_ops) == 1
2626
wait_op = wait_ops[0]
27-
assert wait_op.scheduled_timestamp is not None
27+
assert wait_op.scheduled_end_timestamp is not None

src/aws_durable_execution_sdk_python_testing/checkpoint/processors/base.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -122,12 +122,14 @@ def _create_wait_details(
122122
"""Create WaitDetails from OperationUpdate."""
123123
if update.operation_type == OperationType.WAIT and update.wait_options:
124124
if current_operation and current_operation.wait_details:
125-
scheduled_timestamp = current_operation.wait_details.scheduled_timestamp
125+
scheduled_end_timestamp = (
126+
current_operation.wait_details.scheduled_end_timestamp
127+
)
126128
else:
127-
scheduled_timestamp = datetime.datetime.now(
129+
scheduled_end_timestamp = datetime.datetime.now(
128130
tz=datetime.UTC
129131
) + timedelta(seconds=update.wait_options.wait_seconds)
130-
return WaitDetails(scheduled_timestamp=scheduled_timestamp)
132+
return WaitDetails(scheduled_end_timestamp=scheduled_end_timestamp)
131133
return None
132134

133135
def _translate_update_to_operation(

src/aws_durable_execution_sdk_python_testing/checkpoint/processors/wait.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,14 @@ def process(
4141
wait_seconds = (
4242
update.wait_options.wait_seconds if update.wait_options else 0
4343
)
44-
scheduled_timestamp = datetime.now(UTC) + timedelta(
44+
scheduled_end_timestamp = datetime.now(UTC) + timedelta(
4545
seconds=wait_seconds
4646
)
4747

4848
# Create WaitDetails with scheduled timestamp
49-
wait_details = WaitDetails(scheduled_timestamp=scheduled_timestamp)
49+
wait_details = WaitDetails(
50+
scheduled_end_timestamp=scheduled_end_timestamp
51+
)
5052

5153
# Create new operation with wait details
5254
wait_operation = Operation(

src/aws_durable_execution_sdk_python_testing/model.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1663,7 +1663,7 @@ def events_to_operations(events: list[Event]) -> list[Operation]:
16631663
operation = replace(
16641664
operation,
16651665
wait_details=WaitDetails(
1666-
scheduled_timestamp=event.wait_started_details.scheduled_end_timestamp
1666+
scheduled_end_timestamp=event.wait_started_details.scheduled_end_timestamp
16671667
),
16681668
)
16691669

@@ -1783,8 +1783,8 @@ class ListDurableExecutionsByFunctionRequest:
17831783
qualifier: str | None = None
17841784
durable_execution_name: str | None = None
17851785
status_filter: list[str] | None = None
1786-
time_after: str | None = None
1787-
time_before: str | None = None
1786+
started_after: str | None = None
1787+
started_before: str | None = None
17881788
marker: str | None = None
17891789
max_items: int = 0
17901790
reverse_order: bool | None = None
@@ -1796,8 +1796,8 @@ def from_dict(cls, data: dict) -> ListDurableExecutionsByFunctionRequest:
17961796
qualifier=data.get("Qualifier"),
17971797
durable_execution_name=data.get("DurableExecutionName"),
17981798
status_filter=data.get("StatusFilter"),
1799-
time_after=data.get("TimeAfter"),
1800-
time_before=data.get("TimeBefore"),
1799+
started_after=data.get("StartedAfter"),
1800+
started_before=data.get("StartedBefore"),
18011801
marker=data.get("Marker"),
18021802
max_items=data.get("MaxItems", 0),
18031803
reverse_order=data.get("ReverseOrder"),
@@ -1811,10 +1811,10 @@ def to_dict(self) -> dict[str, Any]:
18111811
result["DurableExecutionName"] = self.durable_execution_name
18121812
if self.status_filter is not None:
18131813
result["StatusFilter"] = self.status_filter
1814-
if self.time_after is not None:
1815-
result["TimeAfter"] = self.time_after
1816-
if self.time_before is not None:
1817-
result["TimeBefore"] = self.time_before
1814+
if self.started_after is not None:
1815+
result["StartedAfter"] = self.started_after
1816+
if self.started_before is not None:
1817+
result["StartedBefore"] = self.started_before
18181818
if self.marker is not None:
18191819
result["Marker"] = self.marker
18201820
if self.max_items is not None:

src/aws_durable_execution_sdk_python_testing/runner.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,7 @@ def from_svc_operation(
266266

267267
@dataclass(frozen=True)
268268
class WaitOperation(Operation):
269-
scheduled_timestamp: datetime.datetime | None = None
269+
scheduled_end_timestamp: datetime.datetime | None = None
270270

271271
@staticmethod
272272
def from_svc_operation(
@@ -285,8 +285,8 @@ def from_svc_operation(
285285
sub_type=operation.sub_type,
286286
start_timestamp=operation.start_timestamp,
287287
end_timestamp=operation.end_timestamp,
288-
scheduled_timestamp=(
289-
operation.wait_details.scheduled_timestamp
288+
scheduled_end_timestamp=(
289+
operation.wait_details.scheduled_end_timestamp
290290
if operation.wait_details
291291
else None
292292
),

src/aws_durable_execution_sdk_python_testing/web/handlers.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -578,9 +578,9 @@ def handle(self, parsed_route: Route, request: HTTPRequest) -> HTTPResponse:
578578
if status_filter := self._parse_query_param(request, "statusFilter"):
579579
query_params["StatusFilter"] = [status_filter] # Convert to list
580580
if time_after := self._parse_query_param(request, "timeAfter"):
581-
query_params["TimeAfter"] = time_after
581+
query_params["StartedAfter"] = time_after
582582
if time_before := self._parse_query_param(request, "timeBefore"):
583-
query_params["TimeBefore"] = time_before
583+
query_params["StartedBefore"] = time_before
584584
if marker := self._parse_query_param(request, "marker"):
585585
query_params["Marker"] = marker
586586
if max_items_str := self._parse_query_param(request, "maxItems"):
@@ -608,8 +608,8 @@ def handle(self, parsed_route: Route, request: HTTPRequest) -> HTTPResponse:
608608
status_filter=list_request.status_filter[0]
609609
if list_request.status_filter
610610
else None,
611-
time_after=list_request.time_after,
612-
time_before=list_request.time_before,
611+
time_after=list_request.started_after,
612+
time_before=list_request.started_before,
613613
marker=list_request.marker,
614614
max_items=list_request.max_items
615615
if list_request.max_items > 0

tests/checkpoint/processors/base_test.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,7 @@ def test_create_wait_details_with_current_operation():
320320
processor = MockProcessor()
321321
scheduled_time = datetime.datetime.now(tz=datetime.UTC)
322322
current_op = Mock()
323-
current_op.wait_details = WaitDetails(scheduled_timestamp=scheduled_time)
323+
current_op.wait_details = WaitDetails(scheduled_end_timestamp=scheduled_time)
324324

325325
wait_options = WaitOptions(wait_seconds=30)
326326
update = OperationUpdate(
@@ -333,7 +333,7 @@ def test_create_wait_details_with_current_operation():
333333
result = processor.create_wait_details(update, current_op)
334334

335335
assert isinstance(result, WaitDetails)
336-
assert result.scheduled_timestamp == scheduled_time
336+
assert result.scheduled_end_timestamp == scheduled_time
337337

338338

339339
def test_create_wait_details_without_current_operation():
@@ -349,7 +349,7 @@ def test_create_wait_details_without_current_operation():
349349
result = processor.create_wait_details(update, None)
350350

351351
assert isinstance(result, WaitDetails)
352-
assert result.scheduled_timestamp > datetime.datetime.now(tz=datetime.UTC)
352+
assert result.scheduled_end_timestamp > datetime.datetime.now(tz=datetime.UTC)
353353

354354

355355
def test_create_wait_details_non_wait_type():

tests/checkpoint/processors/wait_test.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ def test_process_start_action():
6767
assert result.status == OperationStatus.STARTED
6868
assert result.name == "test-wait"
6969
assert result.wait_details is not None
70-
assert result.wait_details.scheduled_timestamp > datetime.now(UTC)
70+
assert result.wait_details.scheduled_end_timestamp > datetime.now(UTC)
7171

7272
assert len(notifier.wait_timer_calls) == 1
7373
assert notifier.wait_timer_calls[0] == (execution_arn, "wait-123", 30)
@@ -269,7 +269,7 @@ def test_wait_details_created_correctly():
269269
before_time = datetime.now(UTC)
270270
result = processor.process(update, None, notifier, execution_arn)
271271

272-
assert result.wait_details.scheduled_timestamp > before_time
272+
assert result.wait_details.scheduled_end_timestamp > before_time
273273

274274

275275
def test_no_completed_or_failed_calls():

0 commit comments

Comments
 (0)