Closed
Description
Expected Behaviour
I expect the APIGatewayHttpResolver to route my request to the proper annotated function, eg:
@app.get("/something")
def something():
# does something...
Current Behaviour
For some requests, I get the error ValueError: [TypeError('cannot convert dictionary update sequence element #0 to a sequence'), TypeError('vars() argument must have __dict__ attribute')]
I'm using the serverless framework to package and deploy my app. I'm also using the serverless-python-requirements plugin to package my app.
See attached snippet for full traceback.
Code snippet
ANY /teams (λ: handler)
Traceback (most recent call last):
File "/usr/local/lib/python3.11/site-packages/aws_lambda_powertools/event_handler/openapi/encoders.py", line 272, in _dump_other
backend-1 |
data = dict(obj)
^^^^^^^^^
TypeError: cannot convert dictionary update sequence element #0 to a sequence
backend-1 |
During handling of the above exception, another exception occurred:
backend-1 |
Traceback (most recent call last):
File "/usr/local/lib/python3.11/site-packages/aws_lambda_powertools/event_handler/openapi/encoders.py", line 276, in _dump_other
data = vars(obj)
^^^^^^^^^
TypeError: vars() argument must have __dict__ attribute
backend-1 |
The above exception was the direct cause of the following exception:
backend-1 |
Traceback (most recent call last):
File "/app/node_modules/serverless-offline/src/lambda/handler-runner/python-runner/invoke.py", line 97, in <module>
backend-1 |
result = handler(input['event'], context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/aws_lambda_powertools/tracing/tracer.py", line 317, in decorate
response = lambda_handler(event, context, **kwargs)
^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/app/app/handlers.py", line 192, in handler
return app.resolve(event, context)
^^^^^^^^^^^^^^^^^^^
^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/aws_lambda_powertools/event_handler/api_gateway.py", line 1918, in resolve
backend-1 |
response = self._resolve().build(self.current_event, self._cors)
^^^^^^^^^^^^^^
^
File "/usr/local/lib/python3.11/site-packages/aws_lambda_powertools/event_handler/api_gateway.py", line 2025, in _resolve
backend-1 |
return self._call_route(route, route_keys) # pass fn args
backend-1 |
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/aws_lambda_powertools/event_handler/api_gateway.py", line 2103, in _call_route
backend-1 |
route(router_middlewares=self._router_middlewares, app=self, route_arguments=route_arguments),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/aws_lambda_powertools/event_handler/api_gateway.py", line 407, in __call__
backend-1 |
return self._middleware_stack(app)
backend-1 |
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/aws_lambda_powertools/event_handler/api_gateway.py", line 1314, in __call__
backend-1 |
return self.current_middleware(app, self.next_middleware)
backend-1 |
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/aws_lambda_powertools/event_handler/middlewares/base.py", line 121, in __call__
return self.handler(app, next_middleware)
backend-1 |
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/aws_lambda_powertools/event_handler/middlewares/openapi_validation.py", line 133, in handler
return self._handle_response(route=route, response=response)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/aws_lambda_powertools/event_handler/middlewares/openapi_validation.py", line 140, in _handle_response
response.body = self._serialize_response(
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/aws_lambda_powertools/event_handler/middlewares/openapi_validation.py", line 200, in _serialize_response
return jsonable_encoder(response_content, custom_serializer=self._validation_serializer)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/aws_lambda_powertools/event_handler/openapi/encoders.py", line 122, in jsonable_encoder
backend-1 |
return _dump_sequence(
^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/aws_lambda_powertools/event_handler/openapi/encoders.py", line 245, in _dump_sequence
jsonable_encoder(
File "/usr/local/lib/python3.11/site-packages/aws_lambda_powertools/event_handler/openapi/encoders.py", line 145, in jsonable_encoder
return _dump_other(
^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/aws_lambda_powertools/event_handler/openapi/encoders.py", line 279, in _dump_other
raise ValueError(errors) from e
ValueError: [TypeError('cannot convert dictionary update sequence element #0 to a sequence'), TypeError('vars() argument must have __dict__ attribute')]
### Possible Solution
_No response_
### Steps to Reproduce
My project is not easy to reproduce locally and I can't share it publicly, but I would be OK with sharing my screen or sending certain files privately to powertools-lambda-python contributors.
### Powertools for AWS Lambda (Python) version
latest
### AWS Lambda function runtime
3.11
### Packaging format used
PyPi
### Debugging logs
_No response_
Metadata
Metadata
Assignees
Type
Projects
Status
Shipped