scripts/intranet/ClassesIntranet/TemplatesManager.py
bos 5d71550f6b Commit massif sur l'intranet
darcs-hash:20070602131029-c992d-820d228ff611f44b2a1fcb185633a65d865baad2.gz
2007-06-02 15:10:29 +02:00

111 lines
3.5 KiB
Python

# -*- coding: utf-8 -*-
from cherrypy.filters.basefilter import BaseFilter
import cherrypy, os
from Cheetah.Template import Template
import crans.cp as _crans_cp
from ClassesIntranet import current_module
# ######################################################## #
# Configuration de Cheetah #
# ######################################################## #
def serverSidePath(self, path):
root_dir = cherrypy.config.configMap["global"]["rootDir"]
if os.path.isfile(path):
return path
try:
module_name = current_module()
hyp_path = root_dir + '/modules/' + module_name + '/templates/' + path
if os.path.isfile(hyp_path):
return hyp_path
except:
pass
return root_dir + '/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 _getCorrectStaticMethod(self):
try:
module_name = current_module()
if module_name != None:
def static(truc):
return "/" + module_name + "/static/" + truc
return static
except:
pass
def static(truc):
return "/static/" + truc
return static
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):
values = {'environment':cherrypy.config.configMap["global"]["server.environment"],
'static':self._getCorrectStaticMethod(),
}
try:
t = Template(file='main.tmpl', searchList= [body,{'login':cherrypy.session['uid']}, values])
except:
t = Template(file='main.tmpl', searchList=[body,{'login':''},values])
return t.__str__()
def goWithThisDict(self, aDict):
body = aDict
bodyTemplate = self._getBodyTemplate(body)
if bodyTemplate:
templatevalues = self._getBodyNameSpace(body)
defaultvalues = {'static':self._getCorrectStaticMethod()}
t = Template(file=bodyTemplate, searchList=[templatevalues, defaultvalues])
body['page'] = t.__str__()
if not self._isStandaloneBody(body):
body = self._useMainTemplate(body)
else:
body = body["page"]
body.encode("utf8")
cherrypy.response.body = body
def beforeFinalize(self):
body = cherrypy.response.body
if isinstance(body, dict):
self.goWithThisDict(body)