view uploader/dispatcher.py @ 1:a02c4fcd7001

* optionally require auth * give a real version
author k0s <k0scist@gmail.com>
date Sun, 27 Dec 2009 13:29:27 -0500
parents 827f7577f940
children 0b5fce452087
line wrap: on
line source

"""
request dispatcher
"""

import os
from handlers import Get, Post
from webob import Request, exc

class Dispatcher(object):

    ### class level variables
    defaults = { 'directory': None,
                 'auth': 'False' }

    def __init__(self, **kw):
        for key in self.defaults:
            setattr(self, key, kw.get(key, self.defaults[key]))
        self.handlers = [ Get, Post ]
        assert os.path.exists(self.directory)
        self.auth = self.auth.lower() == 'true'

    ### methods dealing with HTTP
    def __call__(self, environ, start_response):
        request = Request(environ)
        if self.auth and not request.remote_user:
            return exc.HTTPUnauthorized()(environ, start_response)
        for h in self.handlers:
            if h.match(request):
                handler = h(self, request)
                break
        else:
            handler = exc.HTTPNotFound
        res = handler()
        return res(environ, start_response)