view simpypi/wsgi.py @ 27:fb03f34a982f

stub using new fileserver
author Jeff Hammel <jhammel@mozilla.com>
date Wed, 29 Feb 2012 16:51:04 -0800
parents 90777e79ea13
children ab52f46a3682
line wrap: on
line source

"""
request dispatcher:
data persisting across requests should go here
"""

import os
#from handlers import Index
from webob import Request, Response, exc

here = os.path.dirname(os.path.abspath(__file__))

class SimPyPI(object):

    ### class level variables
# XXX unneeded for now
#    defaults = {'auto_reload': 'False',
#                'template_dirs': '',
#                }

    def __init__(self, directory, index=None):

        self.directory = directory
        assert os.path.exists(directory)

        # set instance parameters from kw and defaults
# XXX unneeded for now
#        for key in self.defaults:
#            setattr(self, key, kw.get(key, self.defaults[key]))
#        self.auto_reload = self.auto_reload.lower() == 'true'

        # request handlers
        self.handlers = dict([(method, getattr(self, method))
                              for method in ('GET', 'POST')])
# XXX unneeded for now
#        self.handlers = [ Index ]

        # cache index HTML
        self.index = index or os.path.join(here, 'templates', 'index.html')
        assert os.path.exists(self.index)
        self.index = file(self.index).read()

        # template directories
#        self.template_dirs = self.template_dirs.split()
#        self.template_dirs = [os.path.join(here, 'templates')]

    def __call__(self, environ, start_response):

        # get a request object
        request = Request(environ)

        # get the path
 #       path = request.path_info.strip('/').split('/')
 #       if path == ['']:
 #           path = []
 #       request.environ['path'] = path

        # match the request to a handler
        handler = self.handlers.get(request.method)
        if handler:
            res = handler(request)
        else:
            res = exc.HTTPNotFound()
#        for h in self.handlers:
#            handler = h.match(self, request)
#            if handler is not None:
#                break
#        else:
#            handler = exc.HTTPNotFound

        # get response
#        res = handler()
        return res(environ, start_response)

    def GET(self, request):
        return Response(body=self.index, content_type='text/html')

    def POST(self, request):
        """handle posting a package"""

        # get the package
        package = self.request.POST.get('package')

        # redirect to the main page
        # TODO
        # self.redirect(self.link(self.handler_path))