httpJinja.py (1863B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\carbon\common\script\net\httpJinja.py 2 import cherrypy 3 import jinja2 4 import blue 5 import scriber 6 from carbon.common.script.net.httpSettings import TEMPLATES_DIR 7 scriber.init([blue.paths.ResolvePath('res:/scriber')]) 8 9 def CherryPyApp(): 10 return cherrypy.request.app 11 12 13 def TemplateRender(template, **kwargs): 14 context = {} 15 context.update(kwargs) 16 if cherrypy.request.app is not None: 17 context.update({'request': cherrypy.request, 18 'app_url': cherrypy.request.app.script_name}) 19 return scriber.scribe(template, **context) 20 21 22 class JinjaHandler(cherrypy.dispatch.LateParamPageHandler): 23 24 def __init__(self, env, template_name, next_handler): 25 self.env = env 26 self.template_name = template_name 27 self.next_handler = next_handler 28 29 def __call__(self): 30 context = {} 31 try: 32 r = self.next_handler() 33 context.update(r) 34 except ValueError as e: 35 cherrypy.log('%s (handler for "%s" returned "%s")' % (e, self.template_name, repr(r)), traceback=True) 36 37 context.update({'request': cherrypy.request, 38 'app_url': cherrypy.request.app.script_name}) 39 return scriber.scribe(self.template_name, **context) 40 41 42 class JinjaLoader(object): 43 44 def __init__(self): 45 self.env = jinja2.Environment(loader=jinja2.FileSystemLoader(TEMPLATES_DIR)) 46 47 def __call__(self, template): 48 cherrypy.request.handler = JinjaHandler(self.env, template, cherrypy.request.handler) 49 50 def add_filter(self, func): 51 self.env.filters[func.__name__] = func 52 return func 53 54 def add_global(self, func): 55 self.env.globals[func.__name__] = func 56 return func 57 58 59 loader = JinjaLoader() 60 cherrypy.tools.jinja = cherrypy.Tool('before_handler', loader, priority=70)