Mercurial > hg > decoupage
comparison decoupage/web.py @ 26:f306089d6def
now use contenttransformer to serve files if /transformer in directory configuration; TODO: cache on a per-directory basis
author | k0s <k0scist@gmail.com> |
---|---|
date | Sun, 17 Jan 2010 19:49:04 -0500 |
parents | d5775f3667a2 |
children | 89a72b2fd149 e384d4569ac3 |
comparison
equal
deleted
inserted
replaced
25:d5775f3667a2 | 26:f306089d6def |
---|---|
2 decoupage: a view with webob | 2 decoupage: a view with webob |
3 """ | 3 """ |
4 | 4 |
5 import os | 5 import os |
6 | 6 |
7 from contenttransformer.app import FileTypeTransformer | |
7 from formatters import formatters | 8 from formatters import formatters |
8 | 9 |
9 from genshi.builder import Markup | 10 from genshi.builder import Markup |
10 from genshi.template import TemplateLoader | 11 from genshi.template import TemplateLoader |
11 from genshi.template.base import TemplateError | 12 from genshi.template.base import TemplateError |
58 | 59 |
59 # template loader | 60 # template loader |
60 self.loader = TemplateLoader(self.template_directories, | 61 self.loader = TemplateLoader(self.template_directories, |
61 auto_reload=self.auto_reload) | 62 auto_reload=self.auto_reload) |
62 | 63 |
64 | |
65 | |
63 ### methods dealing with HTTP | 66 ### methods dealing with HTTP |
64 def __call__(self, environ, start_response): | 67 def __call__(self, environ, start_response): |
65 request = Request(environ) | 68 request = Request(environ) |
66 filename = request.path_info.strip('/') | 69 filename = request.path_info.strip('/') |
67 path = os.path.join(self.directory, filename) | 70 path = os.path.join(self.directory, filename) |
72 raise exc.HTTPMovedPermanently(add_slash=True) | 75 raise exc.HTTPMovedPermanently(add_slash=True) |
73 | 76 |
74 res = self.get(request) | 77 res = self.get(request) |
75 return res(environ, start_response) | 78 return res(environ, start_response) |
76 else: | 79 else: |
77 fileserver = self.fileserver(path) | 80 conf = self.conf(request.path_info.rsplit('/',1)[0]) |
81 if '/transformer' in conf: | |
82 args = [i.split('=', 1) for i in conf['/transformer'].split(',') if '=' in i] | |
83 fileserver = FileTypeTransformer(*args) | |
84 else: | |
85 fileserver = FileApp | |
86 | |
87 fileserver = fileserver(path) | |
78 return fileserver(environ, start_response) | 88 return fileserver(environ, start_response) |
79 else: | 89 else: |
80 raise exc.HTTPNotFound() | 90 raise exc.HTTPNotFound() |
81 | 91 |
82 | 92 |
195 inherit_directory = '/%s' % '/'.join(path_tuple[:-1]) | 205 inherit_directory = '/%s' % '/'.join(path_tuple[:-1]) |
196 if inherit_directory: | 206 if inherit_directory: |
197 parent_configuration = self.conf(inherit_directory) | 207 parent_configuration = self.conf(inherit_directory) |
198 for key, value in parent_configuration.items(): | 208 for key, value in parent_configuration.items(): |
199 if key.startswith('/') and key not in conf: | 209 if key.startswith('/') and key not in conf: |
200 conf[key] = value | 210 conf[key] = value |
201 | 211 |
202 # cache configuration | 212 # cache configuration |
203 if not self.auto_reload: | 213 if not self.auto_reload: |
204 if not hasattr(self, '_conf'): | 214 if not hasattr(self, '_conf'): |
205 self._conf = {} | 215 self._conf = {} |