Skip to content

Add error messages and headers in response for failed requests on the s3 endpoint #13

@surajmn1

Description

@surajmn1
  1. when the user sends an invalid bucket name or path name , this must be included as a error message in the failed response . The below error in the server logs The specified bucket does not exist must be included in the failed response message .
    expected sample error response -
{
    "status": 422 , // http status
    "details":{
        "field":"s3_bucket" ,  // JSON field which errored
        "message":"specified bucket does not exist" // error message to be shown in form
    }
}

Server logs -

metafacts-server_1  | ERROR:    Exception in ASGI application
metafacts-server_1  | Traceback (most recent call last):
metafacts-server_1  |   File "/usr/local/lib/python3.9/site-packages/uvicorn/protocols/http/httptools_impl.py", line 390, in run_asgi
metafacts-server_1  |     result = await app(self.scope, self.receive, self.send)
metafacts-server_1  |   File "/usr/local/lib/python3.9/site-packages/uvicorn/middleware/proxy_headers.py", line 45, in __call__
metafacts-server_1  |     return await self.app(scope, receive, send)
metafacts-server_1  |   File "/usr/local/lib/python3.9/site-packages/fastapi/applications.py", line 208, in __call__
metafacts-server_1  |     await super().__call__(scope, receive, send)
metafacts-server_1  |   File "/usr/local/lib/python3.9/site-packages/starlette/applications.py", line 112, in __call__
metafacts-server_1  |     await self.middleware_stack(scope, receive, send)
metafacts-server_1  |   File "/usr/local/lib/python3.9/site-packages/starlette/middleware/errors.py", line 181, in __call__
metafacts-server_1  |     raise exc
metafacts-server_1  |   File "/usr/local/lib/python3.9/site-packages/starlette/middleware/errors.py", line 159, in __call__
metafacts-server_1  |     await self.app(scope, receive, _send)
metafacts-server_1  |   File "/usr/local/lib/python3.9/site-packages/starlette/middleware/cors.py", line 92, in __call__
metafacts-server_1  |     await self.simple_response(scope, receive, send, request_headers=headers)
metafacts-server_1  |   File "/usr/local/lib/python3.9/site-packages/starlette/middleware/cors.py", line 147, in simple_response
metafacts-server_1  |     await self.app(scope, receive, send)
metafacts-server_1  |   File "/usr/local/lib/python3.9/site-packages/starlette/exceptions.py", line 82, in __call__
metafacts-server_1  |     raise exc
metafacts-server_1  |   File "/usr/local/lib/python3.9/site-packages/starlette/exceptions.py", line 71, in __call__
metafacts-server_1  |     await self.app(scope, receive, sender)
metafacts-server_1  |   File "/usr/local/lib/python3.9/site-packages/starlette/routing.py", line 656, in __call__
metafacts-server_1  |     await route.handle(scope, receive, send)
metafacts-server_1  |   File "/usr/local/lib/python3.9/site-packages/starlette/routing.py", line 259, in handle
metafacts-server_1  |     await self.app(scope, receive, send)
metafacts-server_1  |   File "/usr/local/lib/python3.9/site-packages/starlette/routing.py", line 61, in app
metafacts-server_1  |     response = await func(request)
metafacts-server_1  |   File "/usr/local/lib/python3.9/site-packages/fastapi/routing.py", line 226, in app
metafacts-server_1  |     raw_response = await run_endpoint_function(
metafacts-server_1  |   File "/usr/local/lib/python3.9/site-packages/fastapi/routing.py", line 159, in run_endpoint_function
metafacts-server_1  |     return await dependant.call(**values)
metafacts-server_1  |   File "/app/./app/api/api_v1/routers/meta_data.py", line 71, in get_meta_data_from_s3
metafacts-server_1  |     meta_data = await create_meta_data_for_s3_bucket(
metafacts-server_1  |   File "/app/./app/utils/meta_data.py", line 124, in create_meta_data_for_s3_bucket
metafacts-server_1  |     tasks = [
metafacts-server_1  |   File "/app/./app/utils/meta_data.py", line 124, in <listcomp>
metafacts-server_1  |     tasks = [
metafacts-server_1  |   File "/usr/local/lib/python3.9/site-packages/boto3/resources/collection.py", line 81, in __iter__
metafacts-server_1  |     for page in self.pages():
metafacts-server_1  |   File "/usr/local/lib/python3.9/site-packages/boto3/resources/collection.py", line 171, in pages
metafacts-server_1  |     for page in pages:
metafacts-server_1  |   File "/usr/local/lib/python3.9/site-packages/botocore/paginate.py", line 269, in __iter__
metafacts-server_1  |     response = self._make_request(current_kwargs)
metafacts-server_1  |   File "/usr/local/lib/python3.9/site-packages/botocore/paginate.py", line 357, in _make_request
metafacts-server_1  |     return self._method(**current_kwargs)
metafacts-server_1  |   File "/usr/local/lib/python3.9/site-packages/botocore/client.py", line 508, in _api_call
metafacts-server_1  |     return self._make_api_call(operation_name, kwargs)
metafacts-server_1  |   File "/usr/local/lib/python3.9/site-packages/botocore/client.py", line 915, in _make_api_call
metafacts-server_1  |     raise error_class(parsed_response, operation_name)
metafacts-server_1  | botocore.errorfactory.NoSuchBucket: An error occurred (NoSuchBucket) when calling the ListObjects operation: The specified bucket does not exist
  1. The response headers of a failed request are not the same as a successful request this is causing errors in the front end . i think it is mostly due to the cors headers not being included in a failed request .

response headers received for successful request -

access-control-allow-credentials: true
access-control-allow-origin: *
content-length: 928
content-type: application/json
date: Tue, 29 Nov 2022 06:42:23 GMT
server: uvicorn

response headers received for failed request -

content-length: 2707
content-type: text/plain; charset=utf-8
date: Tue, 29 Nov 2022 06:43:17 GMT
server: uvicorn

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions