init
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
import gzip
|
||||
from fastapi import Request, APIRouter, FastAPI
|
||||
from fastapi.responses import Response
|
||||
from typing import Callable
|
||||
from fastapi.middleware.gzip import GZipMiddleware
|
||||
from fastapi.routing import APIRoute
|
||||
|
||||
|
||||
class GzipRequest(Request):
|
||||
async def body(self) -> bytes:
|
||||
if not hasattr(self, '_body'):
|
||||
body = await super().body()
|
||||
if 'gzip' in self.headers.getlist('Content-Encoding'):
|
||||
body = gzip.decompress(body)
|
||||
if 'application/json;charset=UTF-8' in self.headers.getlist('Content-Type'):
|
||||
body = body.decode()
|
||||
pass
|
||||
self._body = body
|
||||
return self._body
|
||||
|
||||
|
||||
class GzipRoute(APIRoute):
|
||||
def get_route_handler(self) -> Callable:
|
||||
original_route_handler = super().get_route_handler()
|
||||
|
||||
async def custom_route_handler(request: Request) -> Response:
|
||||
request = GzipRequest(request.scope, request.receive)
|
||||
return await original_route_handler(request)
|
||||
|
||||
return custom_route_handler
|
||||
|
||||
|
||||
def register_gzip_request(router: APIRouter):
|
||||
router.route_class = GzipRoute
|
||||
pass
|
||||
|
||||
|
||||
def register_gzip_response(app: FastAPI):
|
||||
app.add_middleware(GZipMiddleware)
|
||||
pass
|
||||
|
||||
def gzip_zip(content):
|
||||
bytes_com = gzip.compress(str(content).encode('utf-8'))
|
||||
# base64_data = base64.b64encode(bytes_com)
|
||||
# back = base64_data.decode()
|
||||
return bytes_com
|
||||
|
||||
|
||||
def gzip_unzip(content):
|
||||
if content:
|
||||
# base64_data = base64.b64decode(content)
|
||||
bytes_decom = gzip.decompress(content)
|
||||
str_unzip = bytes_decom.decode()
|
||||
return str_unzip
|
||||
else:
|
||||
return None
|
||||
Reference in New Issue
Block a user