From 08ae980ea9128f3f1b75a614691c1a3f9c9f5d2a Mon Sep 17 00:00:00 2001 From: heitorlessa Date: Tue, 25 Jul 2023 14:39:50 +0200 Subject: [PATCH 1/5] fix(parameters): make cache aware of single vs multiple calls Signed-off-by: heitorlessa --- aws_lambda_powertools/utilities/parameters/base.py | 2 +- aws_lambda_powertools/utilities/parameters/types.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/aws_lambda_powertools/utilities/parameters/base.py b/aws_lambda_powertools/utilities/parameters/base.py index 710634636d0..411a2520ae9 100644 --- a/aws_lambda_powertools/utilities/parameters/base.py +++ b/aws_lambda_powertools/utilities/parameters/base.py @@ -27,7 +27,7 @@ from aws_lambda_powertools.shared import constants, user_agent from aws_lambda_powertools.shared.functions import resolve_max_age -from aws_lambda_powertools.utilities.parameters.types import TransformOptions +from aws_lambda_powertools.utilities.parameters.types import RecursiveOptions, TransformOptions from .exceptions import GetParameterError, TransformParameterError diff --git a/aws_lambda_powertools/utilities/parameters/types.py b/aws_lambda_powertools/utilities/parameters/types.py index faa06cee89e..a916f1a344d 100644 --- a/aws_lambda_powertools/utilities/parameters/types.py +++ b/aws_lambda_powertools/utilities/parameters/types.py @@ -1,3 +1,4 @@ from aws_lambda_powertools.shared.types import Literal TransformOptions = Literal["json", "binary", "auto", None] +RecursiveOptions = Literal[True, False] From efd82fbabe6521c878a308fb057e52395832de49 Mon Sep 17 00:00:00 2001 From: heitorlessa Date: Tue, 25 Jul 2023 15:16:51 +0200 Subject: [PATCH 2/5] chore: cleanup, add test for single and nested Signed-off-by: heitorlessa --- aws_lambda_powertools/utilities/parameters/base.py | 2 +- aws_lambda_powertools/utilities/parameters/types.py | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/aws_lambda_powertools/utilities/parameters/base.py b/aws_lambda_powertools/utilities/parameters/base.py index 411a2520ae9..710634636d0 100644 --- a/aws_lambda_powertools/utilities/parameters/base.py +++ b/aws_lambda_powertools/utilities/parameters/base.py @@ -27,7 +27,7 @@ from aws_lambda_powertools.shared import constants, user_agent from aws_lambda_powertools.shared.functions import resolve_max_age -from aws_lambda_powertools.utilities.parameters.types import RecursiveOptions, TransformOptions +from aws_lambda_powertools.utilities.parameters.types import TransformOptions from .exceptions import GetParameterError, TransformParameterError diff --git a/aws_lambda_powertools/utilities/parameters/types.py b/aws_lambda_powertools/utilities/parameters/types.py index a916f1a344d..faa06cee89e 100644 --- a/aws_lambda_powertools/utilities/parameters/types.py +++ b/aws_lambda_powertools/utilities/parameters/types.py @@ -1,4 +1,3 @@ from aws_lambda_powertools.shared.types import Literal TransformOptions = Literal["json", "binary", "auto", None] -RecursiveOptions = Literal[True, False] From c193a2c9a586eb239efb1d086651a9064f6fc9e8 Mon Sep 17 00:00:00 2001 From: heitorlessa Date: Tue, 21 Nov 2023 16:33:50 +0100 Subject: [PATCH 3/5] docs(event_handler): add note on binary+cors Signed-off-by: heitorlessa --- .../sam/micro_function_template.yaml | 28 +++++++++++-------- examples/event_handler_rest/sam/template.yaml | 5 ++++ 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/examples/event_handler_rest/sam/micro_function_template.yaml b/examples/event_handler_rest/sam/micro_function_template.yaml index dbde5c0e125..bd431dbf1b1 100644 --- a/examples/event_handler_rest/sam/micro_function_template.yaml +++ b/examples/event_handler_rest/sam/micro_function_template.yaml @@ -1,21 +1,25 @@ -AWSTemplateFormatVersion: '2010-09-09' +AWSTemplateFormatVersion: "2010-09-09" Transform: AWS::Serverless-2016-10-31 Description: > micro-function-example Globals: - Api: - TracingEnabled: true - Cors: # see CORS section - AllowOrigin: "'https://example.com'" - AllowHeaders: "'Content-Type,Authorization,X-Amz-Date'" - MaxAge: "'300'" - BinaryMediaTypes: # see Binary responses section - - "*~1*" # converts to */* for any binary type + Api: + TracingEnabled: true + Cors: # see CORS section + AllowOrigin: "'https://example.com'" + AllowHeaders: "'Content-Type,Authorization,X-Amz-Date'" + MaxAge: "'300'" + BinaryMediaTypes: # see Binary responses section + - "*~1*" # converts to */* for any binary type + # NOTE: use this stricter version if you're also using CORS; */* doesn't work with CORS + # see: https://github.com/aws-powertools/powertools-lambda-python/issues/3373#issuecomment-1821144779 + # - "image~1*" # converts to image/* + # - "*~1csv" # converts to */csv, eg text/csv, application/csv - Function: - Timeout: 5 - Runtime: python3.11 + Function: + Timeout: 5 + Runtime: python3.11 Resources: # Lambda Function Solely For /users endpoint diff --git a/examples/event_handler_rest/sam/template.yaml b/examples/event_handler_rest/sam/template.yaml index 41001011a56..2f8310773ca 100644 --- a/examples/event_handler_rest/sam/template.yaml +++ b/examples/event_handler_rest/sam/template.yaml @@ -11,6 +11,11 @@ Globals: MaxAge: "'300'" BinaryMediaTypes: # see Binary responses section - "*~1*" # converts to */* for any binary type + # NOTE: use this stricter version if you're also using CORS; */* doesn't work with CORS + # see: https://github.com/aws-powertools/powertools-lambda-python/issues/3373#issuecomment-1821144779 + # - "image~1*" # converts to image/* + # - "*~1csv" # converts to */csv, eg text/csv, application/csv + Function: Timeout: 5 Runtime: python3.9 From 1024845709c7a3896efe9af683e04f9d9deaa984 Mon Sep 17 00:00:00 2001 From: heitorlessa Date: Tue, 21 Nov 2023 16:40:33 +0100 Subject: [PATCH 4/5] docs(event_handler): add note CORS and */* mime don't work Signed-off-by: heitorlessa --- docs/core/event_handler/api_gateway.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/core/event_handler/api_gateway.md b/docs/core/event_handler/api_gateway.md index e9b15bf8c00..6868ce25d46 100644 --- a/docs/core/event_handler/api_gateway.md +++ b/docs/core/event_handler/api_gateway.md @@ -573,8 +573,8 @@ As a practical example, let's refactor our correlation ID middleware so it accep These are native middlewares that may become native features depending on customer demand. -| Middleware | Purpose | -| ---------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | +| Middleware | Purpose | +| ------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | | [SchemaValidationMiddleware](/lambda/python/latest/api/event_handler/middlewares/schema_validation.html){target="_blank"} | Validates API request body and response against JSON Schema, using [Validation utility](../../utilities/validation.md){target="_blank"} | #### Being a good citizen @@ -648,15 +648,15 @@ You can compress with gzip and base64 encode your responses via `compress` param ### Binary responses +???+ warning "Amazon API Gateway does not support `*/*` binary media type [when CORS is also configured](https://github.com/aws-powertools/powertools-lambda-python/issues/3373#issuecomment-1821144779){target='blank'}." + This feature requires API Gateway to configure binary media types, see [our sample infrastructure](#required-resources) for reference. + For convenience, we automatically base64 encode binary responses. You can also use in combination with `compress` parameter if your client supports gzip. Like `compress` feature, the client must send the `Accept` header with the correct media type. -???+ warning - This feature requires API Gateway to configure binary media types, see [our sample infrastructure](#required-resources) for reference. +!!! note "Lambda Function URLs handle binary media types automatically." -???+ note - Lambda Function URLs handle binary media types automatically. === "binary_responses.py" ```python hl_lines="17 23" From 0496e08aedaa044cb5bc92044bb1d42935b64f5b Mon Sep 17 00:00:00 2001 From: heitorlessa Date: Tue, 21 Nov 2023 16:41:18 +0100 Subject: [PATCH 5/5] chore: upgrade sample to python 3.11 Signed-off-by: heitorlessa --- examples/event_handler_rest/sam/template.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/event_handler_rest/sam/template.yaml b/examples/event_handler_rest/sam/template.yaml index 2f8310773ca..67000a39122 100644 --- a/examples/event_handler_rest/sam/template.yaml +++ b/examples/event_handler_rest/sam/template.yaml @@ -18,7 +18,7 @@ Globals: Function: Timeout: 5 - Runtime: python3.9 + Runtime: python3.11 Tracing: Active Environment: Variables: