python / expert
Snippet
Generator Pipeline Middleware for Streaming HTTP Response Chunks
This pattern demonstrates using Python generator functions inside Django middleware to process StreamingHttpResponse payloads. By wrapping response.streaming_content with a generator, data chunks are modified in real time during client transmission without loading the entire stream into application RAM.
snippet.py
python
1
2
3
4
5
6
7
8
9
10
11
12
13
from typing import Callable, Iterablefrom django.http import HttpRequest, StreamingHttpResponsedef stream_transformation_middleware(get_response: Callable):def middleware(request: HttpRequest):response = get_response(request)if isinstance(response, StreamingHttpResponse):def transform(content: Iterable[bytes]):for chunk in content:yield chunk.upper()response.streaming_content = transform(response.streaming_content)return responsereturn middleware
django
Breakdown
1
from typing import Callable, Iterable
Imports type annotations for callables and iterable chunk containers.
2
from django.http import HttpRequest, StreamingHttpResponse
Imports core HTTP request and streaming response classes from Django.
3
def stream_transformation_middleware(get_response: Callable):
Defines middleware factory accepting response resolver callable.
4
def middleware(request: HttpRequest):
Constructs request handler wrapper processing incoming requests.
5
response = get_response(request)
Invokes downstream view handler returning HTTP response.
6
if isinstance(response, StreamingHttpResponse):
Checks if returned response is an instance of streaming HTTP response.
7
def transform(content: Iterable[bytes]):
Defines inner generator processing chunk iterables on-the-fly.
8
for chunk in content:
Iterates over yielded byte chunks from original streaming payload.
9
yield chunk.upper()
Transforms byte payload and yields chunk incrementally without loading full response into memory.
10
response.streaming_content = transform(response.streaming_content)
Replaces streaming iterator pipeline with transformed generator.
11
return response
Returns updated HTTP response instance to middleware caller chain.
12
return middleware
Returns constructed middleware function callable.