From 1109b4cb35a37ac09cca4754e9e822ea81d0ce07 Mon Sep 17 00:00:00 2001 From: "sgo@tinyerp.com" <> Date: Mon, 4 Feb 2013 15:03:24 +0530 Subject: [PATCH] [IMP]add session tag for yaml and based on session user whole yaml tested bzr revid: sgo@tinyerp.com-20130204093324-6jdty26tepmvjhhs --- .../addons/base/security/ir.model.access.csv | 2 +- openerp/tools/yaml_import.py | 17 ++++++++++++++--- openerp/tools/yaml_tag.py | 13 +++++++++++++ 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/openerp/addons/base/security/ir.model.access.csv b/openerp/addons/base/security/ir.model.access.csv index 35d5b82bc41..3a29108d61e 100644 --- a/openerp/addons/base/security/ir.model.access.csv +++ b/openerp/addons/base/security/ir.model.access.csv @@ -17,7 +17,7 @@ "access_ir_model_constraint","ir_model_constraint","model_ir_model_constraint",,1,0,0,0 "access_ir_model_relation","ir_model_relation","model_ir_model_relation",,1,0,0,0 "access_ir_model_access_all","ir_model_access_all","model_ir_model_access",,1,0,0,0 -"access_ir_model_data_all","ir_model_data all","model_ir_model_data",,1,0,0,0 +"access_ir_model_data_all","ir_model_data all","model_ir_model_data",,1,1,1,1 "access_ir_model_fields_all","ir_model_fields all","model_ir_model_fields",,1,0,0,0 "access_ir_module_category_group_user","ir_module_category group_user","model_ir_module_category",,1,0,0,0 "access_ir_module_module_group_user","ir_module_module group_user","model_ir_module_module","group_system",1,1,1,1 diff --git a/openerp/tools/yaml_import.py b/openerp/tools/yaml_import.py index 3172caac1f4..1629ee1b9be 100644 --- a/openerp/tools/yaml_import.py +++ b/openerp/tools/yaml_import.py @@ -88,6 +88,9 @@ def is_ir_set(node): def is_string(node): return isinstance(node, basestring) +def is_session(node): + return _is_yaml_mapping(node, yaml_tag.Session) + class RecordDictWrapper(dict): """ Used to pass a record as locals in eval: @@ -324,7 +327,7 @@ class YamlInterpreter(object): record_dict = self._create_record(model, fields, view_info, default=default) _logger.debug("RECORD_DICT %s" % record_dict) - id = self.pool.get('ir.model.data')._update(self.cr, SUPERUSER_ID, record.model, \ + id = self.pool.get('ir.model.data')._update(self.cr, self.uid, record.model, \ self.module, record_dict, record.id, noupdate=self.isnoupdate(record), mode=self.mode, context=context) self.id_map[record.id] = int(id) if config.get('import_partial'): @@ -760,7 +763,7 @@ class YamlInterpreter(object): keyword = 'client_action_relate' value = 'ir.actions.act_window,%s' % id replace = node.replace or True - self.pool.get('ir.model.data').ir_set(self.cr, SUPERUSER_ID, 'action', keyword, \ + self.pool.get('ir.model.data').ir_set(self.cr, self.uid, 'action', keyword, \ node.id, [node.src_model], value, replace=replace, noupdate=self.isnoupdate(node), isobject=True, xml_id=node.id) # TODO add remove ir.model.data @@ -775,10 +778,16 @@ class YamlInterpreter(object): self.pool.get(node.model).unlink(self.cr, self.uid, ids) else: self._log("Record not deleted.") + + def process_session(self, node): + record, fields = node.items()[0] + uid = self.get_id(record.uid) + self.uid = uid + _logger.debug("RECORD_DICT %s" % uid) def process_url(self, node): self.validate_xml_id(node.id) - + res = {'name': node.name, 'url': node.url, 'target': node.target} id = self.pool.get('ir.model.data')._update(self.cr, SUPERUSER_ID, \ @@ -889,6 +898,8 @@ class YamlInterpreter(object): self.process_act_window(node) elif is_report(node): self.process_report(node) + elif is_session(node): + self.process_session(node) elif is_workflow(node): if isinstance(node, types.DictionaryType): self.process_workflow(node) diff --git a/openerp/tools/yaml_tag.py b/openerp/tools/yaml_tag.py index b22787ddf98..c4d5f251479 100644 --- a/openerp/tools/yaml_tag.py +++ b/openerp/tools/yaml_tag.py @@ -32,6 +32,13 @@ class Record(YamlTag): def __str__(self): return '!record {model: %s, id: %s}:' % (str(self.model,), str(self.id,)) +class Session(YamlTag): + def __init__(self, uid, **kwargs): + self.uid = uid + super(Session, self).__init__(**kwargs) + def __str__(self): + return '!session {uid: %s}:' % (str(self.uid,)) + class Python(YamlTag): def __init__(self, model, severity=logging.ERROR, name="", **kwargs): self.model= model @@ -113,6 +120,11 @@ def record_constructor(loader, node): assert "id" in kwargs, "'id' argument is required for !record" return Record(**kwargs) +def session_constructor(loader, node): + kwargs = loader.construct_mapping(node) + assert "uid" in kwargs, "'uid' argument is required for !session" + return Session(**kwargs) + def python_constructor(loader, node): kwargs = loader.construct_mapping(node) return Python(**kwargs) @@ -182,6 +194,7 @@ def add_constructors(): yaml.add_constructor(u"!eval", eval_constructor) yaml.add_multi_constructor(u"!ref", ref_constructor) yaml.add_constructor(u"!ir_set", ir_set_constructor) + yaml.add_constructor(u"!session", session_constructor) add_constructors()