mirror of
https://github.com/servo/servo.git
synced 2025-06-23 08:34:42 +01:00
45 lines
1.3 KiB
Python
45 lines
1.3 KiB
Python
def main(request, response):
|
|
"""Code for generating large responses where the actual response data
|
|
isn't very important.
|
|
|
|
Two request parameters:
|
|
size (required): An integer number of bytes (no suffix) or kilobytes
|
|
("kb" suffix) or megabytes ("Mb" suffix).
|
|
string (optional): The string to repeat in the response. Defaults to "a".
|
|
|
|
Example:
|
|
/resources/large.py?size=32Mb&string=ab
|
|
"""
|
|
if not "size" in request.GET:
|
|
400, "Need an integer bytes parameter"
|
|
|
|
bytes_value = request.GET.first("size")
|
|
|
|
chunk_size = 1024
|
|
|
|
multipliers = {"kb": 1024,
|
|
"Mb": 1024*1024}
|
|
|
|
suffix = bytes_value[-2:]
|
|
if suffix in multipliers:
|
|
multiplier = multipliers[suffix]
|
|
bytes_value = bytes_value[:-2] * multiplier
|
|
|
|
try:
|
|
num_bytes = int(bytes_value)
|
|
except ValueError:
|
|
return 400, "Bytes must be an integer possibly with a kb or Mb suffix"
|
|
|
|
string = str(request.GET.first("string", "a"))
|
|
|
|
chunk = string * chunk_size
|
|
|
|
def content():
|
|
bytes_sent = 0
|
|
while bytes_sent < num_bytes:
|
|
if num_bytes - bytes_sent < len(chunk):
|
|
yield chunk[num_bytes - bytes_sent]
|
|
else:
|
|
yield chunk
|
|
bytes_sent += len(chunk)
|
|
return [("Content-Type", "text/plain")], content()
|