Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 13 additions & 10 deletions fastapi_gateway_ultra/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ def route(
name: Optional[str] = None,
callbacks: Optional[List[BaseRoute]] = None,
openapi_extra: Optional[Dict[str, Any]] = None,
request_timeout: int = 60,
):
"""

Expand Down Expand Up @@ -98,6 +99,7 @@ def route(
https://fastapi.tiangolo.com/advanced/openapi-callbacks/
:param openapi_extra: See documentation for details -
https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/
:param request_timeout: request timeout to inner service, default is 60 sec

:return: wrapped endpoint result as is
"""
Expand Down Expand Up @@ -133,10 +135,8 @@ def wrapper(f):
async def inner(request: Request, response: Response, **kwargs):
scope = request.scope
scope_method = scope["method"].lower()
content_type = str(request.headers.get('Content-Type'))
request_form = (
await request.form() if 'x-www-form-urlencoded' in content_type else None
)
content_type = str(request.headers.get("Content-Type"))
request_form = await request.form() if "x-www-form-urlencoded" in content_type else None

prepare_microservice_path = f"{service_url}{gateway_path}"
if service_path:
Expand All @@ -146,7 +146,6 @@ async def inner(request: Request, response: Response, **kwargs):
request_body = await unzip_body_object(
necessary_params=body_params,
all_params=kwargs,

)

request_query = await unzip_query_params(
Expand All @@ -168,16 +167,13 @@ async def inner(request: Request, response: Response, **kwargs):
)

try:
(
resp_data,
status_code_from_service,
microservice_headers,
) = await make_request(
(resp_data, status_code_from_service, microservice_headers,) = await make_request(
url=microservice_url,
method=scope_method,
data=request_data,
query=request_query,
headers=request_headers,
timeout=request_timeout,
)

except ClientConnectorError:
Expand All @@ -198,6 +194,13 @@ async def inner(request: Request, response: Response, **kwargs):
)

response.headers.update(service_headers)

if status_code_from_service >= 400:
raise HTTPException(
status_code=status_code_from_service,
detail=resp_data.get("detail", resp_data)
)

response.status_code = status_code_from_service

return resp_data
Expand Down