Skip to content

Commit 8d5081f

Browse files
authored
Merge branch 'develop' into rf/3892
2 parents 7d79ab1 + e79eef4 commit 8d5081f

File tree

9 files changed

+114
-57
lines changed

9 files changed

+114
-57
lines changed

CHANGELOG.md

+6
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,15 @@
44
<a name="unreleased"></a>
55
# Unreleased
66

7+
## Bug Fixes
8+
9+
* **internal:** call ruff with correct args ([#3901](https://github.com/aws-powertools/powertools-lambda-python/issues/3901))
10+
711
## Maintenance
812

913
* **deps:** bump squidfunk/mkdocs-material from `7be068b` to `3678304` in /docs ([#3894](https://github.com/aws-powertools/powertools-lambda-python/issues/3894))
14+
* **deps-dev:** bump mkdocs-material from 9.5.12 to 9.5.13 ([#3895](https://github.com/aws-powertools/powertools-lambda-python/issues/3895))
15+
* **deps-dev:** bump cdklabs-generative-ai-cdk-constructs from 0.1.81 to 0.1.82 ([#3896](https://github.com/aws-powertools/powertools-lambda-python/issues/3896))
1016

1117

1218
<a name="v2.35.0"></a>

aws_lambda_powertools/utilities/data_classes/bedrock_agent_event.py

+14
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from functools import cached_property
12
from typing import Any, Dict, List, Optional
23

34
from aws_lambda_powertools.utilities.data_classes.common import BaseProxyEvent, DictWrapper
@@ -112,3 +113,16 @@ def query_string_parameters(self) -> Optional[Dict[str, str]]:
112113
@property
113114
def resolved_headers_field(self) -> Optional[Dict[str, Any]]:
114115
return {}
116+
117+
@cached_property
118+
def json_body(self) -> Any:
119+
# In Bedrock Agent events, body parameters are encoded differently
120+
# @see https://docs.aws.amazon.com/bedrock/latest/userguide/agents-lambda.html#agents-lambda-input
121+
if not self.request_body:
122+
return None
123+
124+
json_body = self.request_body.content.get("application/json")
125+
if not json_body:
126+
return None
127+
128+
return {x.name: x.value for x in json_body.properties}

aws_lambda_powertools/utilities/data_classes/sqs_event.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from functools import cached_property
2-
from typing import Any, Dict, Iterator, Optional, Type, TypeVar
2+
from typing import Any, Dict, ItemsView, Iterator, Optional, Type, TypeVar
33

44
from aws_lambda_powertools.utilities.data_classes import S3Event
55
from aws_lambda_powertools.utilities.data_classes.common import DictWrapper
@@ -82,6 +82,9 @@ def __getitem__(self, key: str) -> Optional[SQSMessageAttribute]: # type: ignor
8282
item = super().get(key)
8383
return None if item is None else SQSMessageAttribute(item) # type: ignore
8484

85+
def items(self) -> ItemsView[str, SQSMessageAttribute]: # type: ignore
86+
return {k: SQSMessageAttribute(v) for k, v in super().items()}.items() # type: ignore
87+
8588

8689
class SQSRecord(DictWrapper):
8790
"""An Amazon SQS message"""

layer/scripts/layer-balancer/go.mod

+11-11
Original file line numberDiff line numberDiff line change
@@ -3,25 +3,25 @@ module layerbalancer
33
go 1.18
44

55
require (
6-
github.com/aws/aws-sdk-go-v2 v1.25.2
7-
github.com/aws/aws-sdk-go-v2/config v1.27.6
8-
github.com/aws/aws-sdk-go-v2/service/lambda v1.53.1
6+
github.com/aws/aws-sdk-go-v2 v1.25.3
7+
github.com/aws/aws-sdk-go-v2/config v1.27.7
8+
github.com/aws/aws-sdk-go-v2/service/lambda v1.53.2
99
golang.org/x/exp v0.0.0-20230321023759-10a507213a29
1010
golang.org/x/sync v0.6.0
1111
)
1212

1313
require (
1414
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.1 // indirect
15-
github.com/aws/aws-sdk-go-v2/credentials v1.17.6 // indirect
16-
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.15.2 // indirect
17-
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.2 // indirect
18-
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.2 // indirect
15+
github.com/aws/aws-sdk-go-v2/credentials v1.17.7 // indirect
16+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.15.3 // indirect
17+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.3 // indirect
18+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.3 // indirect
1919
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 // indirect
2020
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.1 // indirect
21-
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.4 // indirect
22-
github.com/aws/aws-sdk-go-v2/service/sso v1.20.1 // indirect
23-
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.1 // indirect
24-
github.com/aws/aws-sdk-go-v2/service/sts v1.28.3 // indirect
21+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.5 // indirect
22+
github.com/aws/aws-sdk-go-v2/service/sso v1.20.2 // indirect
23+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.2 // indirect
24+
github.com/aws/aws-sdk-go-v2/service/sts v1.28.4 // indirect
2525
github.com/aws/smithy-go v1.20.1 // indirect
2626
github.com/jmespath/go-jmespath v0.4.0 // indirect
2727
)

layer/scripts/layer-balancer/go.sum

+22-23
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,35 @@
1-
github.com/aws/aws-sdk-go-v2 v1.25.2 h1:/uiG1avJRgLGiQM9X3qJM8+Qa6KRGK5rRPuXE0HUM+w=
2-
github.com/aws/aws-sdk-go-v2 v1.25.2/go.mod h1:Evoc5AsmtveRt1komDwIsjHFyrP5tDuF1D1U+6z6pNo=
1+
github.com/aws/aws-sdk-go-v2 v1.25.3 h1:xYiLpZTQs1mzvz5PaI6uR0Wh57ippuEthxS4iK5v0n0=
2+
github.com/aws/aws-sdk-go-v2 v1.25.3/go.mod h1:35hUlJVYd+M++iLI3ALmVwMOyRYMmRqUXpTtRGW+K9I=
33
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.1 h1:gTK2uhtAPtFcdRRJilZPx8uJLL2J85xK11nKtWL0wfU=
44
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.1/go.mod h1:sxpLb+nZk7tIfCWChfd+h4QwHNUR57d8hA1cleTkjJo=
5-
github.com/aws/aws-sdk-go-v2/config v1.27.6 h1:WmoH1aPrxwcqAZTTnETjKr+fuvqzKd4hRrKxQUiuKP4=
6-
github.com/aws/aws-sdk-go-v2/config v1.27.6/go.mod h1:W9RZFF2pL+OhnUSZsQS/eDMWD8v+R+yWgjj3nSlrXVU=
7-
github.com/aws/aws-sdk-go-v2/credentials v1.17.6 h1:akhj/nSC6SEx3OmiYGG/7mAyXMem9ZNVVf+DXkikcTk=
8-
github.com/aws/aws-sdk-go-v2/credentials v1.17.6/go.mod h1:chJZuJ7TkW4kiMwmldOJOEueBoSkUb4ynZS1d9dhygo=
9-
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.15.2 h1:AK0J8iYBFeUk2Ax7O8YpLtFsfhdOByh2QIkHmigpRYk=
10-
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.15.2/go.mod h1:iRlGzMix0SExQEviAyptRWRGdYNo3+ufW/lCzvKVTUc=
11-
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.2 h1:bNo4LagzUKbjdxE0tIcR9pMzLR2U/Tgie1Hq1HQ3iH8=
12-
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.2/go.mod h1:wRQv0nN6v9wDXuWThpovGQjqF1HFdcgWjporw14lS8k=
13-
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.2 h1:EtOU5jsPdIQNP+6Q2C5e3d65NKT1PeCiQk+9OdzO12Q=
14-
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.2/go.mod h1:tyF5sKccmDz0Bv4NrstEr+/9YkSPJHrcO7UsUKf7pWM=
5+
github.com/aws/aws-sdk-go-v2/config v1.27.7 h1:JSfb5nOQF01iOgxFI5OIKWwDiEXWTyTgg1Mm1mHi0A4=
6+
github.com/aws/aws-sdk-go-v2/config v1.27.7/go.mod h1:PH0/cNpoMO+B04qET699o5W92Ca79fVtbUnvMIZro4I=
7+
github.com/aws/aws-sdk-go-v2/credentials v1.17.7 h1:WJd+ubWKoBeRh7A5iNMnxEOs982SyVKOJD+K8HIezu4=
8+
github.com/aws/aws-sdk-go-v2/credentials v1.17.7/go.mod h1:UQi7LMR0Vhvs+44w5ec8Q+VS+cd10cjwgHwiVkE0YGU=
9+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.15.3 h1:p+y7FvkK2dxS+FEwRIDHDe//ZX+jDhP8HHE50ppj4iI=
10+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.15.3/go.mod h1:/fYB+FZbDlwlAiynK9KDXlzZl3ANI9JkD0Uhz5FjNT4=
11+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.3 h1:ifbIbHZyGl1alsAhPIYsHOg5MuApgqOvVeI8wIugXfs=
12+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.3/go.mod h1:oQZXg3c6SNeY6OZrDY+xHcF4VGIEoNotX2B4PrDeoJI=
13+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.3 h1:Qvodo9gHG9F3E8SfYOspPeBt0bjSbsevK8WhRAUHcoY=
14+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.3/go.mod h1:vCKrdLXtybdf/uQd/YfVR2r5pcbNuEYKzMQpcxmeSJw=
1515
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 h1:hT8rVHwugYE2lEfdFE0QWVo81lF7jMrYJVDWI+f+VxU=
1616
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0/go.mod h1:8tu/lYfQfFe6IGnaOdrpVgEL2IrrDOf6/m9RQum4NkY=
1717
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.1 h1:EyBZibRTVAs6ECHZOw5/wlylS9OcTzwyjeQMudmREjE=
1818
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.1/go.mod h1:JKpmtYhhPs7D97NL/ltqz7yCkERFW5dOlHyVl66ZYF8=
19-
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.4 h1:jRiWxyuVO8PlkN72wDMVn/haVH4SDCBkUt0Lf/dxd7s=
20-
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.4/go.mod h1:Ru7vg1iQ7cR4i7SZ/JTLYN9kaXtbL69UdgG0OQWQxW0=
21-
github.com/aws/aws-sdk-go-v2/service/lambda v1.53.1 h1:UP4ijiKqXUneKAHGd5Z8AnuFadzXwzasUXmrUyY/Lx0=
22-
github.com/aws/aws-sdk-go-v2/service/lambda v1.53.1/go.mod h1:j7LmUBmzv17DtxTqO7DQ/HTnyfFB9ouspZo5C9WWxzk=
23-
github.com/aws/aws-sdk-go-v2/service/sso v1.20.1 h1:utEGkfdQ4L6YW/ietH7111ZYglLJvS+sLriHJ1NBJEQ=
24-
github.com/aws/aws-sdk-go-v2/service/sso v1.20.1/go.mod h1:RsYqzYr2F2oPDdpy+PdhephuZxTfjHQe7SOBcZGoAU8=
25-
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.1 h1:9/GylMS45hGGFCcMrUZDVayQE1jYSIN6da9jo7RAYIw=
26-
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.1/go.mod h1:YjAPFn4kGFqKC54VsHs5fn5B6d+PCY2tziEa3U/GB5Y=
27-
github.com/aws/aws-sdk-go-v2/service/sts v1.28.3 h1:TkiFkSVX990ryWIMBCT4kPqZEgThQe1xPU/AQXavtvU=
28-
github.com/aws/aws-sdk-go-v2/service/sts v1.28.3/go.mod h1:xYNauIUqSuvzlPVb3VB5no/n48YGhmlInD3Uh0Co8Zc=
19+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.5 h1:K/NXvIftOlX+oGgWGIa3jDyYLDNsdVhsjHmsBH2GLAQ=
20+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.5/go.mod h1:cl9HGLV66EnCmMNzq4sYOti+/xo8w34CsgzVtm2GgsY=
21+
github.com/aws/aws-sdk-go-v2/service/lambda v1.53.2 h1:lkPeNqnIPFKWEhHbdT1oinjmhTjb9ZU01tFfXgi4UAM=
22+
github.com/aws/aws-sdk-go-v2/service/lambda v1.53.2/go.mod h1:BvYv8HrEOHY7GQTDA3abDNj2sn/vtOZZJ9QuxZ+BSBI=
23+
github.com/aws/aws-sdk-go-v2/service/sso v1.20.2 h1:XOPfar83RIRPEzfihnp+U6udOveKZJvPQ76SKWrLRHc=
24+
github.com/aws/aws-sdk-go-v2/service/sso v1.20.2/go.mod h1:Vv9Xyk1KMHXrR3vNQe8W5LMFdTjSeWk0gBZBzvf3Qa0=
25+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.2 h1:pi0Skl6mNl2w8qWZXcdOyg197Zsf4G97U7Sso9JXGZE=
26+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.2/go.mod h1:JYzLoEVeLXk+L4tn1+rrkfhkxl6mLDEVaDSvGq9og90=
27+
github.com/aws/aws-sdk-go-v2/service/sts v1.28.4 h1:Ppup1nVNAOWbBOrcoOxaxPeEnSFB2RnnQdguhXpmeQk=
28+
github.com/aws/aws-sdk-go-v2/service/sts v1.28.4/go.mod h1:+K1rNPVyGxkRuv9NNiaZ4YhBFuyw2MMA9SlIJ1Zlpz8=
2929
github.com/aws/smithy-go v1.20.1 h1:4SZlSlMr36UEqC7XOyRVb27XMeZubNcBNN+9IgEPIQw=
3030
github.com/aws/smithy-go v1.20.1/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E=
3131
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
3232
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
33-
github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg=
3433
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
3534
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
3635
github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8=

poetry.lock

+19-19
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

+3-3
Original file line numberDiff line numberDiff line change
@@ -70,12 +70,12 @@ aws-cdk-lib = "^2.131.0"
7070
"aws-cdk.aws-apigatewayv2-integrations-alpha" = "^2.38.1-alpha.0"
7171
"aws-cdk.aws-apigatewayv2-authorizers-alpha" = "^2.38.1-alpha.0"
7272
"aws-cdk.aws-lambda-python-alpha" = "^2.130.0a0"
73-
"cdklabs.generative-ai-cdk-constructs" = "^0.1.82"
73+
"cdklabs.generative-ai-cdk-constructs" = "^0.1.83"
7474
pytest-benchmark = "^4.0.0"
7575
mypy-boto3-appconfig = "^1.34.0"
7676
mypy-boto3-cloudformation = "^1.34.32"
7777
mypy-boto3-cloudwatch = "^1.34.40"
78-
mypy-boto3-dynamodb = "^1.34.46"
78+
mypy-boto3-dynamodb = "^1.34.57"
7979
mypy-boto3-lambda = "^1.34.46"
8080
mypy-boto3-logs = "^1.34.16"
8181
mypy-boto3-secretsmanager = "^1.34.43"
@@ -92,7 +92,7 @@ ijson = "^3.2.2"
9292
typed-ast = { version = "^1.5.5", python = "< 3.8" }
9393
hvac = "^2.1.0"
9494
aws-requests-auth = "^0.4.3"
95-
datadog-lambda = "^5.85.0"
95+
datadog-lambda = "^5.89.0"
9696

9797
[tool.poetry.extras]
9898
parser = ["pydantic"]

tests/functional/event_handler/test_bedrock_agent.py

+27
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22
from typing import Any, Dict
33

44
from aws_lambda_powertools.event_handler import BedrockAgentResolver, Response, content_types
5+
from aws_lambda_powertools.event_handler.openapi.params import Body
56
from aws_lambda_powertools.event_handler.openapi.pydantic_loader import PYDANTIC_V2
7+
from aws_lambda_powertools.shared.types import Annotated
68
from aws_lambda_powertools.utilities.data_classes import BedrockAgentEvent
79
from tests.functional.utils import load_event
810

@@ -157,3 +159,28 @@ def claims():
157159

158160
body = result["response"]["responseBody"]["text/plain"]["body"]
159161
assert body == "Something went wrong"
162+
163+
164+
def test_bedrock_agent_with_post():
165+
# GIVEN a Bedrock Agent resolver with a POST method
166+
app = BedrockAgentResolver()
167+
168+
@app.post("/send-reminders", description="Sends reminders")
169+
def send_reminders(
170+
_claim_id: Annotated[int, Body(description="Claim ID", alias="claimId")],
171+
_pending_documents: Annotated[str, Body(description="Social number and VAT", alias="pendingDocuments")],
172+
) -> Annotated[bool, Body(description="returns true if I like the email")]:
173+
return True
174+
175+
# WHEN calling the event handler
176+
result = app(load_event("bedrockAgentPostEvent.json"), {})
177+
178+
# THEN process the event correctly
179+
assert result["messageVersion"] == "1.0"
180+
assert result["response"]["apiPath"] == "/send-reminders"
181+
assert result["response"]["httpMethod"] == "POST"
182+
assert result["response"]["httpStatusCode"] == 200
183+
184+
# THEN return the correct result
185+
body = result["response"]["responseBody"]["application/json"]["body"]
186+
assert json.loads(body) is True

tests/unit/data_classes/test_sqs_event.py

+8
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
from aws_lambda_powertools.utilities.data_classes import S3Event, SQSEvent
44
from aws_lambda_powertools.utilities.data_classes.sns_event import SNSMessage
5+
from aws_lambda_powertools.utilities.data_classes.sqs_event import SQSMessageAttributes
56
from tests.functional.utils import load_event
67

78

@@ -132,3 +133,10 @@ def test_decode_nested_sns_event():
132133
raw_message = json.loads(raw_body["Message"])
133134
assert message["message"] == raw_message["message"]
134135
assert message["username"] == raw_message["username"]
136+
137+
138+
def test_sqs_event_typing():
139+
attributes = SQSMessageAttributes({"key": {"stringValue": "value", "dataType": "String"}})
140+
141+
# This assertion compares the return from .items() to the return of __getitem__
142+
assert list(attributes.items())[0][1] == attributes["key"]

0 commit comments

Comments
 (0)