Raw File
large.py
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()
back to top