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="""
+      """,
+      )