[IMP] Added ir_set.

[FIX] ActWindow __init__

bzr revid: jth@openerp.com-20100305093722-s62ly3eabzn5mup5
This commit is contained in:
Julien Thewys 2010-03-05 10:37:22 +01:00
parent a93473787e
commit 434c1fb2ca
1 changed files with 27 additions and 11 deletions

View File

@ -66,7 +66,7 @@ class ActWindow(YamlTag):
def __init__(self, model, action, **kwargs):
self.model = model
self.action = action
super(Workflow, self).__init__(**kwargs)
super(ActWindow, self).__init__(**kwargs)
class Function(YamlTag):
def __init__(self, model, name, **kwargs):
@ -94,10 +94,9 @@ class Eval(YamlTag):
self.expression = expression
super(Eval, self).__init__()
class Ref(YamlTag):
def __init__(self, xmlid):
self.xmlid = xmlid
super(Ref, self).__init__()
class IrSet(YamlTag):
def __init__(self):
super(IrSet, self).__init__()
def assert_constructor(loader, node):
kwargs = loader.construct_mapping(node)
@ -143,9 +142,9 @@ def eval_constructor(loader, node):
expression = loader.construct_scalar(node)
return Eval(expression)
def ref_constructor(loader, node):
xmlid = loader.construct_scalar(node)
return Ref(xmlid)
def ir_set_constructor(loader, node):
kwargs = loader.construct_mapping(node)
return IrSet(**kwargs)
yaml.add_constructor(u"!assert", assert_constructor)
yaml.add_constructor(u"!record", record_constructor)
@ -158,7 +157,7 @@ yaml.add_constructor(u"!context", context_constructor)
yaml.add_constructor(u"!delete", delete_constructor)
yaml.add_constructor(u"!url", url_constructor)
yaml.add_constructor(u"!eval", eval_constructor)
yaml.add_constructor(u"!ref", ref_constructor)
yaml.add_constructor(u"!ir_set", ir_set_constructor)
def _is_yaml_mapping(node, tag_constructor):
value = isinstance(node, types.DictionaryType) \
@ -204,8 +203,8 @@ def is_url(node):
def is_eval(node):
return isinstance(node, Eval)
def is_ref(node):
return isinstance(node, Ref)
def is_ir_set(node):
return _is_yaml_mapping(node, IrSet)
class TestReport(object):
@ -611,6 +610,21 @@ class YamlInterpreter(object):
replace = node.replace or True
self.pool.get('ir.model.data').ir_set(self.cr, self.uid, \
'action', keyword, node.url, ["ir.actions.url"], value, replace=replace, isobject=True, xml_id=node.id)
def process_ir_set(self, node):
if not self.mode == 'init':
return False
_, fields = node.items()[0]
res = {}
for fieldname, expression in fields.items():
if isinstance(expression, Eval):
value = eval(expression.expression, {'ref': self._ref, '_ref': self._ref})
else:
value = expression
res[fieldname] = value
self.pool.get('ir.model.data').ir_set(self.cr, self.uid, res['key'], res['key2'], \
res['name'], res['models'], res['value'], replace=res.get('replace',True), \
isobject=res.get('isobject', False), meta=res.get('meta',None))
def process(self, yaml_string):
"""Processes a Yaml string. Custom tags are interpreted by 'process_' instance methods."""
@ -643,6 +657,8 @@ class YamlInterpreter(object):
self.process_url(node)
elif is_context(node):
self.process_context(node)
elif is_ir_set(node):
self.process_ir_set(node)
elif is_act_window(node):
self.process_act_window(node)
elif is_workflow(node):