Mercurial > mozilla > hg > dogfood
changeset 0:b3fd8f98df32
initial stub
author | Jeff Hammel <jhammel@mozilla.com> |
---|---|
date | Wed, 10 Oct 2012 16:01:56 -0700 |
parents | |
children | 2cb8b06d64df |
files | README.txt dogdish/__init__.py dogdish/dispatcher.py setup.py |
diffstat | 4 files changed, 132 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/README.txt Wed Oct 10 16:01:56 2012 -0700 @@ -0,0 +1,8 @@ +dogdish +---------- + +dogfooding for b2g upderver + +-- + +http://update.boot2gecko.org/nightly/update.xml \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dogdish/__init__.py Wed Oct 10 16:01:56 2012 -0700 @@ -0,0 +1,1 @@ +#
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dogdish/dispatcher.py Wed Oct 10 16:01:56 2012 -0700 @@ -0,0 +1,95 @@ +""" +request dispatcher +""" + +from webob import Request, exc + +from cgi import escape +from urlparse import urlparse +from webob import Response, exc + +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" hashFunction="SHA512" hashValue="84edb1f53891cf983bc0f6066d31492f43e2d063aaceb05e1c51876f4fde81635afeb7ce3203dee6f65dd59be0cae5c73c49093b625c99acd4118000ad72dda8" size="42924805"/> + </update> +</updates>""" + + @classmethod + def match(cls, request): + return request.method == 'GET' + + def __call__(self): + name = self.request.GET.get('name', 'world') + retval = """<html><body><form method="post">Hello, +<input type="text" name="name" value="%s"/></form></body></html>""" + return Response(content_type='text/html', + body=retval % name) + +class Dispatcher(object): + + ### class level variables + defaults = {} + + def __init__(self, **kw): + for key in self.defaults: + setattr(self, key, kw.get(key, self.defaults[key])) + self.handlers = [ Get ] + if self.app: + assert hasattr(self.app, '__call__') + + ### 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: + if self.app: + return self.app(environ, start_response) + 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() + + dispatcher = Dispatcher() + + server = simple_server.make_server(host='0.0.0.0', port=options.port, app=app) + server.serve_forever() + +if __name__ == '__main__': + main()
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/setup.py Wed Oct 10 16:01:56 2012 -0700 @@ -0,0 +1,28 @@ +from setuptools import setup, find_packages + +try: + description = file('README.txt').read() +except IOError: + description = '' + +version = "0.0" + +setup(name='dogdish', + version=version, + description="dogfooding for b2g upderver", + long_description=description, + classifiers=[], # Get strings from http://www.python.org/pypi?%3Aaction=list_classifiers + author='Jeff Hammel', + author_email='jhammel@mozilla.com', + url='http://update.boot2gecko.org/nightly/update.xml', + license="", + packages=find_packages(exclude=['ez_setup', 'examples', 'tests']), + include_package_data=True, + zip_safe=False, + install_requires=[ + # -*- Extra requirements: -*- + 'WebOb' + ], + entry_points=""" + """, + )