comparison decoupage/web.py @ 101:747c7e337c56

add local directory for template rendering
author Jeff Hammel <k0scist@gmail.com>
date Tue, 31 Jan 2017 10:24:42 -0800
parents 82ee67b95a0c
children 450aff4c97e3
comparison
equal deleted inserted replaced
100:82ee67b95a0c 101:747c7e337c56
22 from formatters import formatters 22 from formatters import formatters
23 from genshi.builder import Markup 23 from genshi.builder import Markup
24 from genshi.template import TemplateLoader 24 from genshi.template import TemplateLoader
25 from genshi.template.base import TemplateError 25 from genshi.template.base import TemplateError
26 from genshi.template.base import TemplateSyntaxError 26 from genshi.template.base import TemplateSyntaxError
27 from genshi.template.loader import TemplateNotFound
27 from martini.config import ConfigMunger 28 from martini.config import ConfigMunger
28 from paste.fileapp import FileApp 29 from paste.fileapp import FileApp
29 from pkg_resources import iter_entry_points 30 from pkg_resources import iter_entry_points
30 from pkg_resources import load_entry_point 31 from pkg_resources import load_entry_point
31 from pkg_resources import resource_filename 32 from pkg_resources import resource_filename
32 from webob import Request, Response, exc 33 from webob import Request, Response, exc
33 34
35
34 transformers = transformers() 36 transformers = transformers()
35 string = (str, unicode) 37 string = (str, unicode)
38
36 39
37 class FileSorter(object): 40 class FileSorter(object):
38 def __init__(self, *keys): 41 def __init__(self, *keys):
39 self.keys = keys 42 self.keys = keys
40 def __call__(self, item): 43 def __call__(self, item):
235 else: 238 else:
236 for _directory in self.template_directories: 239 for _directory in self.template_directories:
237 if template in os.listdir(_directory): 240 if template in os.listdir(_directory):
238 break 241 break
239 else: 242 else:
240 raise IOError("template %s not found" % template) 243 raise TemplateNotFound("template %s not found" % template)
244
245 # extend template `search_path` to include local directory
246 self.loader.search_path.insert(0, directory)
241 try: 247 try:
242 template = self.loader.load(template) 248 template = self.loader.load(template)
243 res = template.generate(**data).render('html', doctype='html') 249 res = template.generate(**data).render('html', doctype='html')
244 except (TemplateError, TemplateSyntaxError), e: 250 except (TemplateError, TemplateSyntaxError, TemplateNotFound), e:
245 if local_index: 251 if local_index:
246 print repr(e) 252 print repr(e)
247 return self.fileserver(local_index) 253 return self.fileserver(local_index)
248 raise 254 raise
255 finally:
256 self.loader.search_path.pop(0)
249 257
250 # set charset if given 258 # set charset if given
251 kw = {} 259 kw = {}
252 if self.charset: 260 if self.charset:
253 kw['charset'] = self.charset 261 kw['charset'] = self.charset