Skip to content

Commit dc0db82

Browse files
committed
Add a Lambda Context Dataclass
1 parent 72879ac commit dc0db82

3 files changed

Lines changed: 49 additions & 10 deletions

File tree

src/aws_durable_execution_sdk_python_testing/invoker.py

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
from __future__ import annotations
22

33
import json
4-
import time
54
from typing import TYPE_CHECKING, Any, Protocol
65

76
import boto3 # type: ignore
@@ -11,11 +10,11 @@
1110
DurableExecutionInvocationOutput,
1211
InitialExecutionState,
1312
)
14-
from aws_durable_execution_sdk_python.lambda_context import LambdaContext
1513

1614
from aws_durable_execution_sdk_python_testing.exceptions import (
1715
DurableFunctionsTestError,
1816
)
17+
from aws_durable_execution_sdk_python_testing.model import LambdaContext
1918

2019

2120
if TYPE_CHECKING:
@@ -46,12 +45,9 @@ def create_test_lambda_context() -> LambdaContext:
4645
}
4746

4847
return LambdaContext(
49-
invoke_id="test-invoke-12345",
48+
aws_request_id="test-invoke-12345",
5049
client_context=client_context_dict,
51-
cognito_identity=cognito_identity_dict,
52-
epoch_deadline_time_in_ms=int(
53-
(time.time() + 900) * 1000
54-
), # 15 minutes from now
50+
identity=cognito_identity_dict,
5551
invoked_function_arn="arn:aws:lambda:us-west-2:123456789012:function:test-function",
5652
tenant_id="test-tenant-789",
5753
)

src/aws_durable_execution_sdk_python_testing/model.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,48 @@
2525
)
2626

2727

28+
@dataclass(frozen=True)
29+
class LambdaContext:
30+
"""Lambda context for testing."""
31+
32+
aws_request_id: str
33+
log_group_name: str | None = None
34+
log_stream_name: str | None = None
35+
function_name: str | None = None
36+
memory_limit_in_mb: str | None = None
37+
function_version: str | None = None
38+
invoked_function_arn: str | None = None
39+
tenant_id: str | None = None
40+
client_context: dict | None = None
41+
identity: dict | None = None
42+
43+
def get_remaining_time_in_millis(self) -> int:
44+
return 900000 # 15 minutes default
45+
46+
def log(self, msg) -> None:
47+
pass # No-op for testing
48+
49+
@classmethod
50+
def from_dict(cls, data: dict[str, Any]):
51+
required_fields = ["aws_request_id"]
52+
for field in required_fields:
53+
if field not in data:
54+
msg: str = f"Missing required field: {field}"
55+
raise InvalidParameterValueException(msg)
56+
return cls(
57+
aws_request_id=data["aws_request_id"],
58+
log_group_name=data.get("log_group_name"),
59+
log_stream_name=data.get("log_stream_name"),
60+
function_name=data.get("function_name"),
61+
memory_limit_in_mb=data.get("memory_limit_in_mb"),
62+
function_version=data.get("function_version"),
63+
invoked_function_arn=data.get("invoked_function_arn"),
64+
tenant_id=data.get("tenant_id"),
65+
client_context=data.get("client_context"),
66+
identity=data.get("identity"),
67+
)
68+
69+
2870
# Web API specific models (not in Smithy but needed for web interface)
2971
@dataclass(frozen=True)
3072
class StartDurableExecutionInput:

tests/invoker_test.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,22 +11,23 @@
1111
InitialExecutionState,
1212
InvocationStatus,
1313
)
14-
from aws_durable_execution_sdk_python.lambda_context import LambdaContext
1514

1615
from aws_durable_execution_sdk_python_testing.execution import Execution
1716
from aws_durable_execution_sdk_python_testing.invoker import (
1817
InProcessInvoker,
1918
LambdaInvoker,
2019
create_test_lambda_context,
2120
)
22-
from aws_durable_execution_sdk_python_testing.model import StartDurableExecutionInput
21+
from aws_durable_execution_sdk_python_testing.model import (
22+
StartDurableExecutionInput,
23+
LambdaContext,
24+
)
2325

2426

2527
def test_create_test_lambda_context():
2628
"""Test creating a test lambda context."""
2729
context = create_test_lambda_context()
2830

29-
assert isinstance(context, LambdaContext)
3031
assert (
3132
context.invoked_function_arn
3233
== "arn:aws:lambda:us-west-2:123456789012:function:test-function"

0 commit comments

Comments
 (0)