MCPcopy Create free account
hub / github.com/encode/starlette / GZipMiddleware

Class GZipMiddleware

starlette/middleware/gzip.py:44–78  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

42
43
44class GZipMiddleware:
45 def __init__(
46 self,
47 app: ASGIApp,
48 minimum_size: int = 500,
49 compresslevel: int = 9,
50 thread_minimum_size: int = 128 * 1024, # 128 KiB
51 *,
52 exclude_content_types: tuple[str, ...] = DEFAULT_EXCLUDED_CONTENT_TYPES,
53 ) -> None:
54 self.app = app
55 self.minimum_size = minimum_size
56 self.compresslevel = compresslevel
57 self.thread_minimum_size = thread_minimum_size
58 self.exclude_content_types = _normalize_content_types(exclude_content_types)
59
60 async def __call__(self, scope: Scope, receive: Receive, send: Send) -> None:
61 if scope["type"] != "http": # pragma: no cover
62 await self.app(scope, receive, send)
63 return
64
65 headers = Headers(scope=scope)
66 responder: ASGIApp
67 if "gzip" in headers.get("Accept-Encoding", ""):
68 responder = GZipResponder(
69 self.app,
70 self.minimum_size,
71 compresslevel=self.compresslevel,
72 thread_minimum_size=self.thread_minimum_size,
73 exclude_content_types=self.exclude_content_types,
74 )
75 else:
76 responder = IdentityResponder(self.app, self.minimum_size, exclude_content_types=self.exclude_content_types)
77
78 await responder(scope, receive, send)
79
80
81class IdentityResponder:

Calls

no outgoing calls