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 = {}