Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- coding: utf-8 -*-
- import cherrypy
- import os
- import types
- import re
- from Cheetah.Template import Template
- __all__ = ['CheetahTemplateTool']
- class PageTemplate(Template):
- """
- Thank you SickBeard
- """
- def __init__(self, base_dir, template, *args, **KWs):
- KWs['file'] = os.path.join(base_dir, template)
- super(PageTemplate, self).__init__(*args, **KWs)
- application = cherrypy.tree.apps['']
- config = application.config
- self.sbRoot = base_dir
- self.sbHttpPort = config['global']['server.socket_port']
- self.sbHttpsPort = self.sbHttpPort
- self.sbHttpsEnabled = False
- if cherrypy.request.headers['Host'][0] == '[':
- self.sbHost = re.match("^\[.*\]", cherrypy.request.headers['Host'], re.X|re.M|re.S).group(0)
- else:
- self.sbHost = re.match("^[^:]+", cherrypy.request.headers['Host'], re.X|re.M|re.S).group(0)
- if "X-Forwarded-Host" in cherrypy.request.headers:
- self.sbHost = cherrypy.request.headers['X-Forwarded-Host']
- if "X-Forwarded-Port" in cherrypy.request.headers:
- self.sbHttpPort = cherrypy.request.headers['X-Forwarded-Port']
- self.sbHttpsPort = self.sbHttpPort
- if "X-Forwarded-Proto" in cherrypy.request.headers:
- self.sbHttpsEnabled = True if cherrypy.request.headers['X-Forwarded-Proto'] == 'https' else False
- #self.sbPID = str(aquapi.PID)
- self.menu = [
- { 'title': 'Home', 'key': 'home' },
- { 'title': 'Users', 'key': 'users' },
- { 'title': 'Config', 'key': 'config' },
- ]
- def render(self):
- return unicode(self).encode('utf-8', 'xmlcharrefreplace')
- class CheetahTemplateTool(cherrypy.Tool):
- _base_dir = ''
- def __init__(self, base_dir, cache_dir):
- self._base_dir = base_dir
- cherrypy.Tool.__init__(self, 'before_handler', self.render)
- def __call__(self, *args, **kwargs):
- if args and isinstance(args[0], (types.FunctionType, types.MethodType)):
- # @template
- args[0].exposed = True
- return cherrypy.Tool.__call__(self, **kwargs)(args[0])
- else:
- # @template()
- def wrap(f):
- f.exposed = True
- return cherrypy.Tool.__call__(self, *args, **kwargs)(f)
- return wrap
- def render(self, template = None):
- cherrypy.request.config['template'] = template
- handler = cherrypy.serving.request.handler
- def wrap(*args, **kwargs):
- return self._render(handler, *args, **kwargs)
- cherrypy.serving.request.handler = wrap
- def _render(self, handler, *args, **kwargs):
- template = cherrypy.request.config['template']
- if not template:
- parts = []
- if hasattr(handler.callable, '__self__'):
- parts.append(handler.callable.__self__.__class__.__name__.lower())
- if hasattr(handler.callable, '__name__'):
- parts.append(handler.callable.__name__.lower())
- template = u'/'.join(parts)
- return template
- data = handler(*args, **kwargs) or {}
- page_template = PageTemplate(self._base_dir, '{0}.html'.format(template), **data)
- return unicode(page_template).encode('utf-8', 'xmlcharrefreplace')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement