| # (c) 2005 Ian Bicking and contributors; written for Paste (http://pythonpaste.org) |
| # Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php |
| # (c) 2005 Clark C. Evans |
| # This module is part of the Python Paste Project and is released under |
| # the MIT License: http://www.opensource.org/licenses/mit-license.php |
| # This code was written with funding by http://prometheusresearch.com |
| """ |
| Various Applications for Debugging/Testing Purposes |
| """ |
| |
| import time |
| __all__ = ['SimpleApplication', 'SlowConsumer'] |
| |
| |
| class SimpleApplication(object): |
| """ |
| Produces a simple web page |
| """ |
| def __call__(self, environ, start_response): |
| body = b"<html><body>simple</body></html>" |
| start_response("200 OK", [('Content-Type', 'text/html'), |
| ('Content-Length', str(len(body)))]) |
| return [body] |
| |
| class SlowConsumer(object): |
| """ |
| Consumes an upload slowly... |
| |
| NOTE: This should use the iterator form of ``wsgi.input``, |
| but it isn't implemented in paste.httpserver. |
| """ |
| def __init__(self, chunk_size = 4096, delay = 1, progress = True): |
| self.chunk_size = chunk_size |
| self.delay = delay |
| self.progress = True |
| |
| def __call__(self, environ, start_response): |
| size = 0 |
| total = environ.get('CONTENT_LENGTH') |
| if total: |
| remaining = int(total) |
| while remaining > 0: |
| if self.progress: |
| print("%s of %s remaining" % (remaining, total)) |
| if remaining > 4096: |
| chunk = environ['wsgi.input'].read(4096) |
| else: |
| chunk = environ['wsgi.input'].read(remaining) |
| if not chunk: |
| break |
| size += len(chunk) |
| remaining -= len(chunk) |
| if self.delay: |
| time.sleep(self.delay) |
| body = "<html><body>%d bytes</body></html>" % size |
| else: |
| body = ('<html><body>\n' |
| '<form method="post" enctype="multipart/form-data">\n' |
| '<input type="file" name="file">\n' |
| '<input type="submit" >\n' |
| '</form></body></html>\n') |
| print("bingles") |
| start_response("200 OK", [('Content-Type', 'text/html'), |
| ('Content-Length', len(body))]) |
| return [body] |
| |
| def make_test_app(global_conf): |
| return SimpleApplication() |
| |
| make_test_app.__doc__ = SimpleApplication.__doc__ |
| |
| def make_slow_app(global_conf, chunk_size=4096, delay=1, progress=True): |
| from paste.deploy.converters import asbool |
| return SlowConsumer( |
| chunk_size=int(chunk_size), |
| delay=int(delay), |
| progress=asbool(progress)) |
| |
| make_slow_app.__doc__ = SlowConsumer.__doc__ |