Mercurial > hg > TagInTheMiddle
view taginthemiddle/middleware.py @ 0:1c5cbbde4299
initial commit of middleware tagging; doesnt yet work
author | Jeff Hammel <jhammel@mozilla.com> |
---|---|
date | Tue, 04 May 2010 08:37:15 -0700 |
parents | |
children | 837cfc05d4d9 |
line wrap: on
line source
""" request dispatcher: data persisting across requests should go here """ import os from handlers import Index from model import Tags from genshi.template import TemplateLoader from lxmlmiddleware import LXMLMiddleware from paste.fileapp import FileApp from pkg_resources import resource_filename from webob import Request, Response, exc # tags have: # - a list of resources they're applied to # for now just assume auth is on and that anyone authenticated may tag # e.g. a tags file # foo = /bar /fleem/baz etc # cats = /cats /blog/mycat class Tagger(LXMLMiddleware): # instance defaults defaults = { 'auto_reload': 'False', 'template_dirs': '', 'patterns': '*' 'tags_file': None, 'url': 'tags' 'post_url': '.tags' } def __init__(self, app, **kw): self.app = app # set instance parameters from kw and defaults for key in self.defaults: setattr(self, key, kw.get(key, self.defaults[key])) self.auto_reload = self.auto_reload.lower() == 'true' assert self.tags_file is not None self.tags self.patterns = self.patterns.strip().split() # request handlers self.handlers = [ Cloud ] # template loader self.template_dirs = self.template_dirs.split() self.template_dirs.append(resource_filename(__name__, 'templates')) self.loader = TemplateLoader(self.template_dirs, auto_reload=self.auto_reload) 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 for h in self.handlers: handler = h.match(self, request) if handler is not None: break else: if self.app: return self.app(environ, start_response) handler = exc.HTTPNotFound # add navigation links to handler [example] if hasattr(handler, 'data'): handler.data.setdefault('links', []) for h in self.handlers: handler.data['links'].append((handler.link(h.handler_path), h.__name__)) # get response res = handler() return res(environ, start_response)