leader/follower in template
This commit is contained in:
parent
1b65d22eaa
commit
729b35d372
@ -33,6 +33,7 @@ from Cheetah.Template import Template as ChtTemplate
|
||||
from Cheetah.NameMapper import NotFound as CheetahNotFound
|
||||
|
||||
from tiramisu import Config
|
||||
from tiramisu.error import PropertiesOptionError
|
||||
|
||||
from .config import patch_dir
|
||||
from .error import FileNotFound, TemplateError, TemplateDisabled
|
||||
@ -42,7 +43,7 @@ from .i18n import _
|
||||
log = logging.getLogger(__name__)
|
||||
log.addHandler(logging.NullHandler())
|
||||
|
||||
class IsDefined(object):
|
||||
class IsDefined:
|
||||
"""
|
||||
filtre permettant de ne pas lever d'exception au cas où
|
||||
la variable Creole n'est pas définie
|
||||
@ -64,7 +65,7 @@ class IsDefined(object):
|
||||
return varname in self.context
|
||||
|
||||
|
||||
class CreoleGet(object):
|
||||
class CreoleGet:
|
||||
def __init__(self, context):
|
||||
self.context = context
|
||||
|
||||
@ -85,14 +86,14 @@ class CreoleGet(object):
|
||||
@classmethod
|
||||
def cl_compile(kls, *args, **kwargs):
|
||||
kwargs['compilerSettings'] = {'directiveStartToken' : '%',
|
||||
'cheetahVarStartToken' : '%%',
|
||||
'EOLSlurpToken' : '%',
|
||||
'PSPStartToken' : 'µ' * 10,
|
||||
'PSPEndToken' : 'µ' * 10,
|
||||
'commentStartToken' : 'µ' * 10,
|
||||
'commentEndToken' : 'µ' * 10,
|
||||
'multiLineCommentStartToken' : 'µ' * 10,
|
||||
'multiLineCommentEndToken' : 'µ' * 10}
|
||||
'cheetahVarStartToken' : '%%',
|
||||
'EOLSlurpToken' : '%',
|
||||
'PSPStartToken' : 'µ' * 10,
|
||||
'PSPEndToken' : 'µ' * 10,
|
||||
'commentStartToken' : 'µ' * 10,
|
||||
'commentEndToken' : 'µ' * 10,
|
||||
'multiLineCommentStartToken' : 'µ' * 10,
|
||||
'multiLineCommentEndToken' : 'µ' * 10}
|
||||
return kls.old_compile(*args, **kwargs)
|
||||
ChtTemplate.old_compile = ChtTemplate.compile
|
||||
ChtTemplate.compile = cl_compile
|
||||
@ -123,7 +124,7 @@ class CheetahTemplate(ChtTemplate):
|
||||
}])
|
||||
|
||||
|
||||
class CreoleMaster(object):
|
||||
class CreoleLeader:
|
||||
def __init__(self, value, slave=None, index=None):
|
||||
"""
|
||||
On rend la variable itérable pour pouvoir faire:
|
||||
@ -148,8 +149,8 @@ class CreoleMaster(object):
|
||||
"""
|
||||
if name in self.slave:
|
||||
value = self.slave[name]
|
||||
if isinstance(value, Exception):
|
||||
raise value
|
||||
if isinstance(value, PropertiesOptionError):
|
||||
raise AttributeError()
|
||||
return value
|
||||
else:
|
||||
return getattr(self._value, name)
|
||||
@ -160,7 +161,7 @@ class CreoleMaster(object):
|
||||
ret = {}
|
||||
for key, values in self.slave.items():
|
||||
ret[key] = values[index]
|
||||
return CreoleMaster(self._value[index], ret, index)
|
||||
return CreoleLeader(self._value[index], ret, index)
|
||||
|
||||
def __iter__(self):
|
||||
"""Iterate over master.slave.
|
||||
@ -171,7 +172,7 @@ class CreoleMaster(object):
|
||||
ret = {}
|
||||
for key, values in self.slave.items():
|
||||
ret[key] = values[i]
|
||||
yield CreoleMaster(self._value[i], ret, i)
|
||||
yield CreoleLeader(self._value[i], ret, i)
|
||||
|
||||
def __len__(self):
|
||||
"""Delegate to master value
|
||||
@ -179,7 +180,7 @@ class CreoleMaster(object):
|
||||
return len(self._value)
|
||||
|
||||
def __repr__(self):
|
||||
"""Show CreoleMaster as dictionary.
|
||||
"""Show CreoleLeader as dictionary.
|
||||
|
||||
The master value is stored under 'value' key.
|
||||
The slaves are stored under 'slave' key.
|
||||
@ -218,31 +219,17 @@ class CreoleMaster(object):
|
||||
def __contains__(self, item):
|
||||
return item in self._value
|
||||
|
||||
def add_slave(self, name, value):
|
||||
"""Add a slave variable
|
||||
|
||||
Minimal check on type and value of the slave in regards to the
|
||||
master one.
|
||||
|
||||
@param name: name of the slave variable
|
||||
@type name: C{str}
|
||||
@param value: value of the slave variable
|
||||
"""
|
||||
def add_slave(self, config, name, path):
|
||||
if isinstance(self._value, list):
|
||||
if not isinstance(value, list):
|
||||
raise TypeError
|
||||
elif len(value) != len(self._value):
|
||||
raise ValueError(_('length mismatch'))
|
||||
new_value = []
|
||||
for val in value:
|
||||
if isinstance(val, dict):
|
||||
new_value.append(ValueError(val['err']))
|
||||
else:
|
||||
new_value.append(val)
|
||||
value = new_value
|
||||
elif isinstance(value, list):
|
||||
raise TypeError
|
||||
self.slave[name] = value
|
||||
values = []
|
||||
for idx in range(len(self._value)):
|
||||
try:
|
||||
values.append(config.option(path, idx).value.get())
|
||||
except PropertiesOptionError as err:
|
||||
values.append(err)
|
||||
else:
|
||||
raise Exception('hu?')
|
||||
self.slave[name] = values
|
||||
|
||||
|
||||
class CreoleTemplateEngine:
|
||||
@ -265,36 +252,25 @@ class CreoleTemplateEngine:
|
||||
eos[func] = getattr(eosfunc, func)
|
||||
self.eosfunc = eos
|
||||
self.creole_variables_dict = {}
|
||||
self.load_eole_variables(self.config.option('creole'))
|
||||
self.load_eole_variables(self.config, self.config.option('creole'))
|
||||
|
||||
def load_eole_variables(self, optiondescription):
|
||||
def load_eole_variables(self, config, optiondescription):
|
||||
# remplacement des variables EOLE
|
||||
for option in optiondescription.list('all'):
|
||||
if option.option.isoptiondescription():
|
||||
if option.option.isleadership():
|
||||
print('leadership')
|
||||
# raise Exception('a faire')
|
||||
for idx, suboption in enumerate(option.list('all')):
|
||||
if idx == 0:
|
||||
leader = CreoleLeader(suboption.value.get())
|
||||
self.creole_variables_dict[suboption.option.name()] = leader
|
||||
else:
|
||||
leader.add_slave(config,
|
||||
suboption.option.name(),
|
||||
suboption.option.path())
|
||||
else:
|
||||
self.load_eole_variables(option)
|
||||
self.load_eole_variables(config, option)
|
||||
else:
|
||||
self.creole_variables_dict[option.option.name()] = option.value.get()
|
||||
#if varname.find('.') != -1:
|
||||
# #support des groupes
|
||||
# mastername, slavename = varname.split('.')
|
||||
# if not mastername in self.creole_variables_dict or not \
|
||||
# isinstance(self.creole_variables_dict [mastername],
|
||||
# CreoleMaster):
|
||||
# # Create the master variable
|
||||
# if mastername in values:
|
||||
# self.creole_variables_dict[mastername] = CreoleMaster(values[mastername])
|
||||
# else:
|
||||
# #only for CreoleLint
|
||||
# self.creole_variables_dict[mastername] = CreoleMaster(value)
|
||||
# #test only for CreoleLint
|
||||
# if mastername != slavename:
|
||||
# self.creole_variables_dict[mastername].add_slave(slavename, value)
|
||||
#else:
|
||||
# self.creole_variables_dict[varname] = value
|
||||
|
||||
def patch_template(self,
|
||||
filename: str):
|
||||
|
Loading…
Reference in New Issue
Block a user