Mercurial > hg > TagInTheMiddle
comparison taginthemiddle/middleware.py @ 19:57ca873ed9bf default tip
make this a pluggable system and start reorging infrastructure for that
| author | Jeff Hammel <jhammel@mozilla.com> |
|---|---|
| date | Tue, 25 May 2010 07:48:53 -0700 |
| parents | 1701e5b0b0eb |
| children |
comparison
equal
deleted
inserted
replaced
| 18:3bf478cb3166 | 19:57ca873ed9bf |
|---|---|
| 1 """ | 1 """ |
| 2 request dispatcher: | 2 apply and display tags via WSGI middleware; |
| 3 data persisting across requests should go here | 3 request dispatcher component |
| 4 """ | 4 """ |
| 5 | 5 |
| 6 import os | 6 import os |
| 7 | 7 |
| 8 from handlers import TagCloud, ViewTags, PostTags | 8 from handlers import TagCloud, ViewTags, PostTags |
| 9 from model import Tags | |
| 10 | 9 |
| 11 from genshi.template import TemplateLoader | 10 from genshi.template import TemplateLoader |
| 12 from lxmlmiddleware import LXMLMiddleware | 11 from lxmlmiddleware import LXMLMiddleware |
| 13 from paste.fileapp import FileApp | 12 from paste.fileapp import FileApp |
| 14 from pkg_resources import resource_filename | 13 from pkg_resources import resource_filename |
| 18 | 17 |
| 19 # instance defaults | 18 # instance defaults |
| 20 defaults = { 'auto_reload': 'False', | 19 defaults = { 'auto_reload': 'False', |
| 21 'template_dirs': '', | 20 'template_dirs': '', |
| 22 'patterns': '*', # glob pattern: all URLs by default | 21 'patterns': '*', # glob pattern: all URLs by default |
| 23 'tags_file': None, | |
| 24 'tags_url': 'tags', # base URL for viewing tags | 22 'tags_url': 'tags', # base URL for viewing tags |
| 25 'post_url': '.tags', # sub-URL for posting tags | 23 'post_url': '.tags', # sub-URL for posting tags |
| 26 'author': None, # for RSS | 24 'author': None, # for RSS |
| 25 'engine': None | |
| 27 } | 26 } |
| 28 | 27 |
| 29 def __init__(self, app, **kw): | 28 def __init__(self, app, **kw): |
| 30 self.app = app | 29 self.app = app |
| 31 | 30 |
| 32 # set instance parameters from kw and defaults | 31 # set instance parameters from kw and defaults |
| 33 for key in self.defaults: | 32 for key in self.defaults: |
| 34 setattr(self, key, kw.get(key, self.defaults[key])) | 33 setattr(self, key, kw.get(key, self.defaults[key])) |
| 35 self.auto_reload = self.auto_reload.lower() == 'true' | 34 self.auto_reload = self.auto_reload.lower() == 'true' |
| 36 assert self.tags_file is not None | |
| 37 self.tags = Tags(self.tags_file) | |
| 38 self.patterns = self.patterns.strip().split() | 35 self.patterns = self.patterns.strip().split() |
| 39 | 36 |
| 40 # request handlers | 37 # request handlers |
| 41 self.handlers = [ TagCloud, ViewTags, PostTags ] | 38 self.handlers = [ TagCloud, ViewTags, PostTags ] |
| 42 | 39 |
| 43 # template loader | 40 # template loader |
| 44 self.template_dirs = self.template_dirs.split() | 41 self.template_dirs = self.template_dirs.split() |
| 45 self.template_dirs.append(resource_filename(__name__, 'templates')) | 42 self.template_dirs.append(resource_filename(__name__, 'templates')) |
| 46 self.loader = TemplateLoader(self.template_dirs, | 43 self.loader = TemplateLoader(self.template_dirs, |
| 47 auto_reload=self.auto_reload) | 44 auto_reload=self.auto_reload) |
| 45 | |
| 46 # tag engine | |
| 47 assert self.engine is not None, 'Must specify a tag.engine' | |
| 48 | 48 |
| 49 def __call__(self, environ, start_response): | 49 def __call__(self, environ, start_response): |
| 50 | 50 |
| 51 # get a request object | 51 # get a request object |
| 52 request = Request(environ) | 52 request = Request(environ) |
