Skip to content

Commit

Permalink
Allow aws path parameters to be None (#97)
Browse files Browse the repository at this point in the history
  • Loading branch information
dkraczkowski authored Feb 1, 2022
1 parent e90744f commit 7592709
Show file tree
Hide file tree
Showing 5 changed files with 38 additions and 5 deletions.
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@ __pycache__
/dist
/examples/serverless/node_modules
/examples/serverless/.serverless
/.DS_Store
.DS_Store
/.python-version
./tests/fixtures/generated_dtos.py
2 changes: 1 addition & 1 deletion chocs/__version__.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = "1.5.1"
__version__ = "1.5.2"
10 changes: 8 additions & 2 deletions chocs/serverless/aws.py
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ def create_http_request_from_aws_http_api(event: AwsEvent, context: AwsContext)
query_string=HttpQueryString(event.get("rawQueryString", "")),
headers=HttpHeaders(headers),
)
request.path_parameters = event.get("pathParameters", {})
request.path_parameters = get_normalised_path_parameters(event)

request.attributes["aws_context"] = context
request.attributes["aws_event"] = event
Expand Down Expand Up @@ -163,7 +163,7 @@ def create_http_request_from_aws_rest_api(event: AwsEvent, context: AwsContext)
query_string=HttpQueryString(raw_query_string),
headers=HttpHeaders(headers),
)
request.path_parameters = event.get("pathParameters", {})
request.path_parameters = get_normalised_path_parameters(event)

request.attributes["aws_context"] = context
request.attributes["aws_event"] = event
Expand Down Expand Up @@ -195,6 +195,12 @@ def get_normalised_headers_from_aws(event: AwsEvent) -> Dict[str, str]:
return headers


def get_normalised_path_parameters(event: AwsEvent) -> Dict[str, Any]:
path_parameters = event.get("pathParameters", {})

return path_parameters if path_parameters is not None else {}


def get_normalised_body_from_aws(event: AwsEvent) -> BytesIO:
body = event.get("body", "")
if event.get("isBase64Encoded", False):
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[tool.poetry]
name = "chocs"
version = "1.5.1"
version = "1.5.2"
description = "Lightweight and powerful WSGI/AWS lambda framework for rapid building rest applications."
authors = [
"Dawid Kraczkowski <[email protected]>"
Expand Down
27 changes: 27 additions & 0 deletions tests/serverless/test_aws_serverless.py
Original file line number Diff line number Diff line change
Expand Up @@ -135,3 +135,30 @@ def test_callback(request: HttpRequest) -> HttpResponse:

assert response["isBase64Encoded"] is False
assert response["body"] == "/test/123"


@pytest.mark.parametrize("aws_event", [
"fixtures/lambda_http_api_event.json",
"fixtures/lambda_rest_api_event.json",
])
def test_can_pass_none_in_path_parameters(aws_event: str) -> None:
# given
def test_callback(request: HttpRequest) -> HttpResponse:
assert request.path_parameters == {}
return HttpResponse("OK")

dir_path = os.path.dirname(os.path.realpath(__file__))
event_json = json.load(
open(os.path.join(dir_path, "..", aws_event))
)
event_json["pathParameters"] = None
serverless_callback = AwsServerlessFunction(test_callback)

# when
response = serverless_callback(event_json, {})

# then
assert response["statusCode"] == 200



0 comments on commit 7592709

Please sign in to comment.