Mercurial > mozilla > hg > dogfood
view dogdish/dispatcher.py @ 8:ebb65758d725
add a default directory
author | Jeff Hammel <jhammel@mozilla.com> |
---|---|
date | Tue, 16 Oct 2012 16:34:22 -0700 |
parents | 65d0a1153864 |
children | f517d80bafe0 |
line wrap: on
line source
#!/usr/bin/env python """ dogdish https://bugzilla.mozilla.org/show_bug.cgi?id=800118 """ import os import sys from urlparse import urlparse from webob import Request from webob import Response, exc here = os.path.dirname(os.path.abspath(__file__)) class Handler(object): def __init__(self, request): self.request = request self.application_path = urlparse(request.application_url)[2] def link(self, path=(), permanant=False): if isinstance(path, basestring): path = [ path ] path = [ i.strip('/') for i in path ] if permanant: application_url = [ self.request.application_url ] else: application_url = [ self.application_path ] path = application_url + path return '/'.join(path) def redirect(self, location): raise exc.HTTPSeeOther(location=location) class Get(Handler): body = """<?xml version="1.0"?> <updates> <update type="minor" appVersion="19.0a1" version="19.0a1" extensionVersion="19.0a1" buildID="20121010114416" licenseURL="http://www.mozilla.com/test/sample-eula.html" detailsURL="http://www.mozilla.com/test/sample-details.html"> <patch type="complete" URL="http://update.boot2gecko.org/nightly/b2g_update_2012-10-10_114416.mar%s" hashFunction="SHA512" hashValue="84edb1f53891cf983bc0f6066d31492f43e2d063aaceb05e1c51876f4fde81635afeb7ce3203dee6f65dd59be0cae5c73c49093b625c99acd4118000ad72dda8" size="42924805"/> </update> </updates>""" @classmethod def match(cls, request): return request.method == 'GET' def __call__(self): body = self.body query = {} dogfood_id = self.request.GET.get('dogfood_id') if dogfood_id: query['dogfood_id'] = dogfood_id # build query string if query: query = '?' + '&'.join(['%s=%s' % (key, value) for key, value in query.items()]) else: query = '' return Response(content_type='text/xml', body=body % query) class Dispatcher(object): ### class level variables defaults = {'directory': here} def __init__(self, **kw): for key in self.defaults: setattr(self, key, kw.get(key, self.defaults[key])) self.handlers = [ Get ] ### methods dealing with HTTP def __call__(self, environ, start_response): request = Request(environ) for h in self.handlers: if h.match(request): handler = h(request) break else: handler = exc.HTTPNotFound res = handler() return res(environ, start_response) def main(args=sys.argv[1:]): """CLI entry point""" import optparse from wsgiref import simple_server parser = optparse.OptionParser() parser.add_option('-p', '--port', dest='port', default=8080, type='int', help="port to serve on") options, args = parser.parse_args() app = Dispatcher() print "http://localhost:%s/" % options.port server = simple_server.make_server(host='0.0.0.0', port=options.port, app=app) server.serve_forever() if __name__ == '__main__': main()