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()