[Python] Pass multiple JSONResponse in fastapi endpoint [duplicate]

Discussão em 'Python' iniciado por Stack, Janeiro 26, 2025.

  1. Stack

    Stack Membro Participativo

    Good night guys, I have a question, I have a function on an endpoint using fastapi, when I make the request, it executes and returns me return JSONResponse(status_code=200, content={"result": 'result'}) . Ok so far, but I want to pass more than one of this JSONResponse.

    My idea would be to pass several to test JSONResponse, to be able to create tests and test my apis

    JSONResponse(status_code=500, content={"Erro": result})

    JSONResponse(status_code=422, content={"Erro": result})

    JSONResponse(status_code=404, content={"Erro": result})


    I even made an endpoint, to do a little test, if I have the error return. But it keeps giving status code 200 I see that I batched JSONResponse, in the code. But it was to try to find where the return problem was.

    @application.post("/division")
    def calculator_division(item_to_calculator: Item_to_calculator):
    try:
    json_item = jsonable_encoder(item_to_calculator)
    result = json_item['first_item'] / json_item['second_item']
    except Exception as e:
    sys.stdout.write(f'Exception: {e}')
    return JSONResponse(status_code=500, content={"Error":'Error'})
    return JSONResponse(status_code=200, content={"result": result})



    Return in terminal:

    services-calculator_api-1 | Exception: float division by zeroINFO: 172.23.0.3:60058 - "POST /division HTTP/1.1" 500 Internal Server Error
    services-calculator_api-1 | ERROR: Exception in ASGI application
    services-calculator_api-1 | Traceback (most recent call last):
    services-calculator_api-1 | File "/usr/local/lib/python3.9/site-packages/uvicorn/protocols/http/httptools_impl.py", line 419, in run_asgi
    services-calculator_api-1 | result = await app( # type: ignore[func-returns-value]
    services-calculator_api-1 | File "/usr/local/lib/python3.9/site-packages/uvicorn/middleware/proxy_headers.py", line 78, in __call__
    services-calculator_api-1 | return await self.app(scope, receive, send)
    services-calculator_api-1 | File "/usr/local/lib/python3.9/site-packages/fastapi/applications.py", line 271, in __call__
    services-calculator_api-1 | await super().__call__(scope, receive, send)
    services-calculator_api-1 | File "/usr/local/lib/python3.9/site-packages/starlette/applications.py", line 118, in __call__
    services-calculator_api-1 | await self.middleware_stack(scope, receive, send)
    services-calculator_api-1 | File "/usr/local/lib/python3.9/site-packages/starlette/middleware/errors.py", line 184, in __call__
    services-calculator_api-1 | raise exc
    services-calculator_api-1 | File "/usr/local/lib/python3.9/site-packages/starlette/middleware/errors.py", line 162, in __call__
    services-calculator_api-1 | await self.app(scope, receive, _send)
    services-calculator_api-1 | File "/usr/local/lib/python3.9/site-packages/starlette/middleware/exceptions.py", line 79, in __call__
    services-calculator_api-1 | raise exc
    services-calculator_api-1 | File "/usr/local/lib/python3.9/site-packages/starlette/middleware/exceptions.py", line 68, in __call__
    services-calculator_api-1 | await self.app(scope, receive, sender)
    services-calculator_api-1 | File "/usr/local/lib/python3.9/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in __call__
    services-calculator_api-1 | raise e
    services-calculator_api-1 | File "/usr/local/lib/python3.9/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    services-calculator_api-1 | await self.app(scope, receive, send)
    services-calculator_api-1 | File "/usr/local/lib/python3.9/site-packages/starlette/routing.py", line 706, in __call__
    services-calculator_api-1 | await route.handle(scope, receive, send)
    services-calculator_api-1 | File "/usr/local/lib/python3.9/site-packages/starlette/routing.py", line 276, in handle
    services-calculator_api-1 | await self.app(scope, receive, send)
    services-calculator_api-1 | File "/usr/local/lib/python3.9/site-packages/starlette/routing.py", line 66, in app
    services-calculator_api-1 | response = await func(request)
    services-calculator_api-1 | File "/usr/local/lib/python3.9/site-packages/fastapi/routing.py", line 237, in app
    services-calculator_api-1 | raw_response = await run_endpoint_function(
    services-calculator_api-1 | File "/usr/local/lib/python3.9/site-packages/fastapi/routing.py", line 165, in run_endpoint_function
    services-calculator_api-1 | return await run_in_threadpool(dependant.call, **values)
    services-calculator_api-1 | File "/usr/local/lib/python3.9/site-packages/starlette/concurrency.py", line 41, in run_in_threadpool
    services-calculator_api-1 | return await anyio.to_thread.run_sync(func, *args)
    services-calculator_api-1 | File "/usr/local/lib/python3.9/site-packages/anyio/to_thread.py", line 31, in run_sync
    services-calculator_api-1 | return await get_asynclib().run_sync_in_worker_thread(
    services-calculator_api-1 | File "/usr/local/lib/python3.9/site-packages/anyio/_backends/_asyncio.py", line 937, in run_sync_in_worker_thread
    services-calculator_api-1 | return await future
    services-calculator_api-1 | File "/usr/local/lib/python3.9/site-packages/anyio/_backends/_asyncio.py", line 867, in run
    services-calculator_api-1 | result = context.run(func, *args)
    services-calculator_api-1 | File "/apis/./app/main.py", line 58, in calculator_division
    services-calculator_api-1 | return JSONResponse(status_code=200, content={"result": result})
    services-calculator_api-1 | UnboundLocalError: local variable 'result' referenced before assignment



    I want to know another way to pass several different status_code responses so I can test the endpoint calls. Because the exception is not working very well. Thank you for your attention. Good night.

    I want to know another way to pass several different status_code responses so I can test the endpoint calls. Because the exception is not working very well. Thank you for your attention. Good night.

    Continue reading...

Compartilhe esta Página