Tai Truong
fix readme
d202ada
raw
history blame
2.08 kB
from fastapi import HTTPException
from loguru import logger
from langflow.services.deps import get_settings_service
class MaxFileSizeException(HTTPException):
def __init__(self, detail: str = "File size is larger than the maximum file size {}MB"):
super().__init__(status_code=413, detail=detail)
# Adapted from https://github.com/steinnes/content-size-limit-asgi/blob/master/content_size_limit_asgi/middleware.py#L26
class ContentSizeLimitMiddleware:
"""Content size limiting middleware for ASGI applications.
Args:
app (ASGI application): ASGI application
max_content_size (optional): the maximum content size allowed in bytes, None for no limit
exception_cls (optional): the class of exception to raise (ContentSizeExceeded is the default)
"""
def __init__(
self,
app,
):
self.app = app
self.logger = logger
def receive_wrapper(self, receive):
received = 0
async def inner():
max_file_size_upload = get_settings_service().settings.max_file_size_upload
nonlocal received
message = await receive()
if message["type"] != "http.request" or max_file_size_upload is None:
return message
body_len = len(message.get("body", b""))
received += body_len
if received > max_file_size_upload * 1024 * 1024:
# max_content_size is in bytes, convert to MB
received_in_mb = round(received / (1024 * 1024), 3)
msg = (
f"Content size limit exceeded. Maximum allowed is {max_file_size_upload}MB"
f" and got {received_in_mb}MB."
)
raise MaxFileSizeException(msg)
return message
return inner
async def __call__(self, scope, receive, send):
if scope["type"] != "http":
await self.app(scope, receive, send)
return
wrapper = self.receive_wrapper(receive)
await self.app(scope, wrapper, send)