view requestdumpster/dumpster.py @ 8:eb260393caef

this is about as far as I want to get without webob
author Jeff Hammel <k0scist@gmail.com>
date Wed, 16 Dec 2015 10:51:32 -0800
parents 83c51f45b82d
children db2ab581cedb
line wrap: on
line source

#!/usr/bin/env python

"""
dump HTTP requests
"""

# imports
import argparse
import os
import sys
import time
from wsgiref import simple_server

# module globals
__all__ = ['RequestDumpster']

class RequestDumpster(object):
    """WSGI interface to dump HTTP requests"""

    def __init__(self, directory=None):
        if directory is not None and not os.path.isdir(directory):
            raise Exception("Not a directory")
        self.directory = directory

    def __call__(self, environ, start_response):
        """WSGI"""

        body = """{REQUEST_METHOD} {PATH_INFO} {SERVER_PROTOCOL}""".format(**environ)

        start_response('200 OK', [('Content-Type', 'text/plain')])
        return [body]

def main(args=sys.argv[1:]):
    """CLI"""

    # parse command line arguments
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument('-p', '--port', dest='port',
                        type=int, default=9555,
                        help="port to serve on")
    parser.add_argument('-d', '--directory', dest='directory',
                        help="directory to output requests to")
    options = parser.parse_args()

    # instantiate WSGI app
    app = RequestDumpster(directory=options.directory)

    # construct url
    url = 'http://localhost:{port}/'.format(port=options.port)

    # serve some web
    host = '127.0.0.1'
    server = simple_server.make_server(host=host,
                                       port=options.port,
                                       app=app)
    print url
    try:
        server.serve_forever()
    except KeyboardInterrupt:
        pass


if __name__ == '__main__':
    main()