84 lines
3 KiB
Python
84 lines
3 KiB
Python
from cherrypy.filters.basefilter import BaseFilter
|
|
import cherrypy, os
|
|
from Cheetah.Template import Template
|
|
|
|
# ######################################################## #
|
|
# Configuration de Cheetah #
|
|
# ######################################################## #
|
|
|
|
def serverSidePath(self, path):
|
|
if (cherrypy.config.configMap["global"]["server.environment"] == "development"):
|
|
if os.path.isfile(cherrypy.config.configMap["global"]["rootDir"]+'/templates/'+path+".dev"):
|
|
return cherrypy.config.configMap["global"]["rootDir"]+'/templates/'+path+".dev"
|
|
# les template se trouve dans le dossier template
|
|
return cherrypy.config.configMap["global"]["rootDir"]+'/templates/'+path
|
|
|
|
# on surcharge cette fonction dans la classe Template
|
|
Template.serverSidePath = serverSidePath
|
|
|
|
|
|
##########################
|
|
# templatesEngine
|
|
##########################
|
|
#
|
|
# Application des templates,
|
|
# avec plein de test chians
|
|
#
|
|
class TemplatesFilter(BaseFilter):
|
|
|
|
def _getBodyTemplate(self, body):
|
|
if isinstance(body, dict):
|
|
if body.has_key('template'):
|
|
if body['template'].endswith(".py"):
|
|
return body['template']
|
|
elif body['template'].endswith(".tmpl"):
|
|
return body['template']
|
|
else:
|
|
return body['template'] + ".tmpl"
|
|
return False
|
|
|
|
def _isStandaloneBody(self, body):
|
|
if isinstance(body, dict):
|
|
if body.has_key('standalone'):
|
|
return body['standalone']
|
|
if body.has_key('template'):
|
|
return False
|
|
else:
|
|
return True
|
|
return True
|
|
|
|
|
|
def _getBodyNameSpace(self, body):
|
|
if isinstance(body, dict):
|
|
if body.has_key('values'):
|
|
return body['values']
|
|
return {}
|
|
|
|
def _useMainTemplate(self, body):
|
|
try:
|
|
t = Template(file='main.tmpl', searchList=[body,{'login':cherrypy.session['uid'], 'environment':cherrypy.config.configMap["global"]["server.environment"]}])
|
|
except:
|
|
t = Template(file='main.tmpl', searchList=[body,{'login':'', 'environment':cherrypy.config.configMap["global"]["server.environment"]}])
|
|
|
|
return str(t)
|
|
|
|
def goWithThisDict(self, aDict):
|
|
body = aDict
|
|
bodyTemplate = self._getBodyTemplate(body)
|
|
if bodyTemplate:
|
|
templatevalues = self._getBodyNameSpace(body)
|
|
t = Template(file=bodyTemplate, searchList=[templatevalues])
|
|
body['page'] = str(t)
|
|
|
|
if not self._isStandaloneBody(body):
|
|
body = self._useMainTemplate(body)
|
|
else:
|
|
body = body["page"]
|
|
cherrypy.response.body = body
|
|
|
|
|
|
def beforeFinalize(self):
|
|
|
|
body = cherrypy.response.body
|
|
if isinstance(body, dict):
|
|
self.goWithThisDict(body)
|