diff --git a/yaltik_dsl/odoo_dsl.py b/yaltik_dsl/odoo_dsl.py index 240dd14..f47217b 100644 --- a/yaltik_dsl/odoo_dsl.py +++ b/yaltik_dsl/odoo_dsl.py @@ -17,111 +17,109 @@ """ Odoo XML DSL """ -from typing import Text, Dict -from xml_base import XMLAttrs, XMLDictElement, xmlroot, xmln +from xml_base import xmlroot, xmln # XML helpers functions and macros # Odoo root XML Node -def odoo(children: Dict) -> ET.Element = {'tag': 'odoo', 'attrs': {}, 'children': children} |> xmlroot +odoo = lambda children: xmlroot({'tag': 'odoo', 'attrs': {}, 'children': children}) # Special data Node def data(*args): """ Allow optional args on data tag """ - if args |> len == 1: - {} |> args.insert$(0) where: args = args |> list + if len(args) == 1: + args = list(args) + args.insert(0, {}) return xmln('data', *args) # Aliases -def function(*args) -> XMLDictElement = xmln('function', *args) -def record(*args) -> XMLDictElement = xmln('record', *args) -def form(*args) -> XMLDictElement = xmln('form', *args) -def tree(*args) -> XMLDictElement = xmln('tree', *args) -def search(*args) -> XMLDictElement = xmln('search', *args) +function = lambda *args: xmln('function', *args) +record = lambda *args: xmln('record', *args) +form = lambda *args: xmln('form', *args) +tree = lambda *args: xmln('tree', *args) +search = lambda *args: xmln('search', *args) # Actions -def act_window(*args) -> XMLDictElement = xmln('act_window', *args) -def act_window_model(model: Text, attrs: XMLAttrs) -> XMLDictElement: +act_window = lambda *args: xmln('act_window', *args) +def act_window_model(model, attrs): """ Build new act_window from model and args """ - xmlid = '%s_view_action' % (('.', '_') |*> model.replace) - name = '%s Action' % ('.' |> model.split |> map$(-> _.capitalize()) |> list |> ' '.join) + xmlid = '%s_view_action' % (model.replace('.', '_')) + name = '%s Action' % ' '.join(map(lambda w: w.capitalize(), model.split('.'))) attrs_clone = attrs.copy() # Avoid side-effect - {'id': xmlid, 'name': name, 'res_model': model} |> attrs_clone.update + attrs_clone.update({'id': xmlid, 'name': name, 'res_model': model}) return act_window(attrs_clone) -def action_server_code(xmlid: Text, name: Text, modelref: Text, code: Text) -> XMLDictElement: +def action_server_code(xmlid, name, modelref, code): """ Server actions of type code """ - children = [name |> field_name, - ({'name': 'model_id', 'ref': modelref}, []) |*> field, - ({'name': 'state'}, ['code']) |*> field, - ({'name': 'code'}, [code]) |*> field] - return ({'id': xmlid, 'model': 'ir.actions.server'}, children) |*> record + children = [field_name(name), + field({'name': 'model_id', 'ref': modelref}, []), + field({'name': 'state'}, ['code']), + field({'name': 'code'}, [code])] + return record({'id': xmlid, 'model': 'ir.actions.server'}, children) -def client_action_multi(xmlid: Text, name: Text, model: Text, action: Text) -> XMLDictElement: +def client_action_multi(xmlid, name, model, action): """ Client action multi (ir.values), with own xmlid, name, targeted model and action """ - action = action |> "'ir.actions.server,%d'%{}".format - children = [name |> field_name, - {'name': 'key2', 'eval': "'client_action_multi'"} |> field, - {'name': 'model', 'eval': "'%s'" % model} |> field, - {'name': 'value', 'eval': action} |> field] - return ({'id': xmlid, 'model': 'ir.values'}, children) |*> record + action = "'ir.actions.server,%d'%{}".format(action) + children = [field_name(name), + field({'name': 'key2', 'eval': "'client_action_multi'"}), + field({'name': 'model', 'eval': "'%s'" % model}), + field({'name': 'value', 'eval': action})] + return record({'id': xmlid, 'model': 'ir.values'}, children) # Menus -def menuitem(*args) -> XMLDictElement = xmln('menuitem', *args) -def menuitem_model(model: Text, attrs: XMLAttrs) -> XMLDictElement: +menuitem = lambda *args: xmln('menuitem', *args) +def menuitem_model(model, attrs): """ Build new menuitem from model and attrs """ - model_und = ('.', '_') |*> model.replace + model_und = model.replace('.', '_') xmlid = '%s_menu' % model_und actionid = '%s_view_action' % model_und attrs_clone = attrs.copy() # Avoid side-effect - {'id': xmlid, 'action': actionid} |> attrs_clone.update + attrs_clone.update({'id': xmlid, 'action': actionid}) return menuitem(attrs_clone) # Form aliases -def group(*args) -> XMLDictElement = xmln('group', *args) -def header(*args) -> XMLDictElement = xmln('header', *args) -def footer(*args) -> XMLDictElement = xmln('footer', *args) -def sheet(*args) -> XMLDictElement = xmln('sheet', *args) -def button(*args) -> XMLDictElement = xmln('button', *args) -def p(*args) -> XMLDictElement = xmln('p', *args) -def xpath(*args) -> XMLDictElement = xmln('xpath', *args) -def attribute(name: Text, value: Text) -> XMLDictElement: - return ('attribute', {'name': name}, [value]) |*> xmln +group = lambda *args: xmln('group', *args) +header = lambda *args: xmln('header', *args) +footer = lambda *args: xmln('footer', *args) +sheet = lambda *args: xmln('sheet', *args) +button = lambda *args: xmln('button', *args) +p = lambda *args: xmln('p', *args) +xpath = lambda *args: xmln('xpath', *args) +attribute = lambda name, value: xmln('attribute', {'name': name}, [value]) # Fields -def field(*args) -> XMLDictElement = xmln('field', *args) -def field_name(name: Text) -> XMLDictElement = ({'name': 'name'}, [name]) |*> field -def field_model(model: Text) -> XMLDictElement = ({'name': 'model'}, [model]) |*> field -def field_inherit(xmlid: Text) -> XMLDictElement: - return ({'name': 'inherit_id', 'ref': xmlid}, []) |*> field -def field_arch(*args) -> XMLDictElement = {'name': 'arch', 'type': 'xml'} |> field$ <*| args +field = lambda *args: xmln('field', *args) +field_name = lambda name: field({'name': 'name'}, [name]) +field_model = lambda model: field({'name': 'model'}, [model]) +field_inherit = lambda xmlid: field({'name': 'inherit_id', 'ref': xmlid}, []) +field_arch = lambda *args: field({'name': 'arch', 'type': 'xml'}, *args) # Search -def filter(*args) -> XMLDictElement = xmln('filter', *args) +filter = lambda *args: xmln('filter', *args) # Views -def view(xmlid: Text, children: List) -> XMLDictElement: - return ({'id': xmlid, 'model': 'ir.ui.view'}, children) |*> record +view = lambda xmlid, children: record({'id': xmlid, 'model': 'ir.ui.view'}, children) -def view_def(xmlid: Text, name: Text, model: Text, arch: List) -> XMLDictElement: - return (xmlid, [field_name(name), field_model(model), field_arch(arch)]) |*> view +def view_def(xmlid, name, model, arch): + """ Shortcut for new view """ + return view(xmlid, [field_name(name), field_model(model), field_arch(arch)]) -def view_new(view_type: Text, model: Text, arch: List) -> XMLDictElement: +def view_new(view_type, model, arch): """ View : new view definition, based on type (form, tree, ...) and model ID """ - model_und = ('.', '_') |*> model.replace - model_cap = ('.' |> model.split |> map$(-> _.capitalize()) |> list |> ' '.join) + model_und = model.replace('.', '_') + model_cap = ' '.join(map(lambda w: w.capitalize(), model.split('.'))) xmlid = "%s_view_%s" % (model_und, view_type) - name = (model_cap, view_type.capitalize()) |> ' '.join - return (xmlid, name, model, arch) |*> view_def + name = ' '.join([model_cap, view_type.capitalize()]) + return view_def(xmlid, name, model, arch) -def view_inherit(filename: Text, model: Text, inherit: Text, arch: List) -> XMLDictElement: +def view_inherit(filename, model, inherit, arch): """ Inherited View simplification with name of the record, xmlid for model and inherited view """ - module = '.' |> filename.split |> .[2] - inherited = '.' |> inherit.split |> .[1] + module = filename.split('.')[2] + inherited = inherit.split('.')[1] xmlid = '%s_inherit_%s' % (inherited, module) - model_cap = ('.' |> model.split |> map$(-> _.capitalize()) |> list |> ' '.join) + model_cap = ' '.join(map(lambda w: w.capitalize(), model.split('.'))) name = '%s Adaptations' % model_cap - return view(xmlid, [name |> field_name, model |> field_model, - inherit |> field_inherit, arch |> field_arch]) + return view(xmlid, [field_name(name), field_model(model), + field_inherit(inherit), field_arch(arch)]) diff --git a/yaltik_dsl/test_odoo.py b/yaltik_dsl/test_odoo.py index 10d96a6..831f15b 100644 --- a/yaltik_dsl/test_odoo.py +++ b/yaltik_dsl/test_odoo.py @@ -26,209 +26,221 @@ class TestOdooBase(unittest.TestCase): """ Odoo Helpers tests """ def test_odoo(self): + """ Test odoo function """ element = od.odoo([]) - element `self.assertIsInstance` ET.Element - element.tag `self.assertEquals` 'odoo' + self.assertIsInstance(element, ET.Element) + self.assertEqual(element.tag, 'odoo') def test_data(self): + """ Test data function """ element = od.data([]) - element `self.assertIsInstance` XMLDictElement - element.tag `self.assertEquals` 'data' - element.attrs `self.assertEquals` {} + self.assertIsInstance(element, XMLDictElement) + self.assertEqual(element.tag, 'data') + self.assertEqual(element.attrs, {}) element = od.data({"one": "attribute"}, []) - element `self.assertIsInstance` XMLDictElement - element.tag `self.assertEquals` 'data' - element.attrs `self.assertEquals` {"one": "attribute"} + self.assertIsInstance(element, XMLDictElement) + self.assertEqual(element.tag, 'data') + self.assertEqual(element.attrs, {"one": "attribute"}) def test_aliases(self): """ Test simple aliases to xmln """ element = od.record({"one": "attribute"}, 'A child') - element `self.assertIsInstance` XMLDictElement - element.tag `self.assertEquals` 'record' - element.attrs `self.assertEquals` {"one": "attribute"} - element.children `self.assertEquals` ['A child'] + self.assertIsInstance(element, XMLDictElement) + self.assertEqual(element.tag, 'record') + self.assertEqual(element.attrs, {"one": "attribute"}) + self.assertEqual(element.children, ['A child']) element = od.tree() - element `self.assertIsInstance` XMLDictElement - element.tag `self.assertEquals` 'tree' + self.assertIsInstance(element, XMLDictElement) + self.assertEqual(element.tag, 'tree') def test_act_window_model(self): - element = ('sample.model', {'view_type': 'form'}) |*> od.act_window_model - element `self.assertIsInstance` XMLDictElement - element.tag `self.assertEquals` 'act_window' - element.attrs['view_type'] `self.assertEquals` 'form' - element.attrs['id'] `self.assertEquals` 'sample_model_view_action' - element.attrs['res_model'] `self.assertEquals` 'sample.model' - element.attrs['name'] `self.assertEquals` 'Sample Model Action' + """ Test act_window function """ + element = od.act_window_model('sample.model', {'view_type': 'form'}) + self.assertIsInstance(element, XMLDictElement) + self.assertEqual(element.tag, 'act_window') + self.assertEqual(element.attrs['view_type'], 'form') + self.assertEqual(element.attrs['id'], 'sample_model_view_action') + self.assertEqual(element.attrs['res_model'], 'sample.model') + self.assertEqual(element.attrs['name'], 'Sample Model Action') def test_menunitem_model(self): - element = ('sample.model', {'groups': 'base.user_employee'}) |*> od.menuitem_model - element `self.assertIsInstance` XMLDictElement - element.tag `self.assertEquals` 'menuitem' - element.attrs['groups'] `self.assertEquals` 'base.user_employee' - element.attrs['id'] `self.assertEquals` 'sample_model_menu' - element.attrs['action'] `self.assertEquals` 'sample_model_view_action' + """ Test menuitem function """ + element = od.menuitem_model('sample.model', {'groups': 'base.user_employee'}) + self.assertIsInstance(element, XMLDictElement) + self.assertEqual(element.tag, 'menuitem') + self.assertEqual(element.attrs['groups'], 'base.user_employee') + self.assertEqual(element.attrs['id'], 'sample_model_menu') + self.assertEqual(element.attrs['action'], 'sample_model_view_action') def test_attribute(self): + """ Test attribute function """ element = od.attribute('invisible', "1") - element `self.assertIsInstance` XMLDictElement - element.tag `self.assertEquals` 'attribute' - element.attrs['name'] `self.assertEquals` 'invisible' - element.children `self.assertEquals` ["1"] + self.assertIsInstance(element, XMLDictElement) + self.assertEqual(element.tag, 'attribute') + self.assertEqual(element.attrs['name'], 'invisible') + self.assertEqual(element.children, ["1"]) def test_fields(self): + """ Test fields function """ element = od.field({"one": "attribute"}, 'A child') - element `self.assertIsInstance` XMLDictElement - element.tag `self.assertEquals` 'field' + self.assertIsInstance(element, XMLDictElement) + self.assertEqual(element.tag, 'field') - element = 'A name' |> od.field_name - element `self.assertIsInstance` XMLDictElement - element.tag `self.assertEquals` 'field' - element.attrs['name'] `self.assertEquals` 'name' - element.children `self.assertEquals` ['A name'] + element = od.field_name('A name') + self.assertIsInstance(element, XMLDictElement) + self.assertEqual(element.tag, 'field') + self.assertEqual(element.attrs['name'], 'name') + self.assertEqual(element.children, ['A name']) - element = 'sample.model' |> od.field_model - element `self.assertIsInstance` XMLDictElement - element.tag `self.assertEquals` 'field' - element.attrs['name'] `self.assertEquals` 'model' - element.children `self.assertEquals` ['sample.model'] + element = od.field_model('sample.model') + self.assertIsInstance(element, XMLDictElement) + self.assertEqual(element.tag, 'field') + self.assertEqual(element.attrs['name'], 'model') + self.assertEqual(element.children, ['sample.model']) - element = 'module.xml_view' |> od.field_inherit - element `self.assertIsInstance` XMLDictElement - element.tag `self.assertEquals` 'field' - element.attrs['name'] `self.assertEquals` 'inherit_id' - element.attrs['ref'] `self.assertEquals` 'module.xml_view' - element.children |> self.assertFalse + element = od.field_inherit('module.xml_view') + self.assertIsInstance(element, XMLDictElement) + self.assertEqual(element.tag, 'field') + self.assertEqual(element.attrs['name'], 'inherit_id') + self.assertEqual(element.attrs['ref'], 'module.xml_view') + self.assertFalse(element.children) - element = od.field_arch() - element `self.assertIsInstance` XMLDictElement - element.tag `self.assertEquals` 'field' - element.attrs['name'] `self.assertEquals` 'arch' - element.attrs['type'] `self.assertEquals` 'xml' - element.children |> self.assertFalse + element = od.field_arch() + self.assertIsInstance(element, XMLDictElement) + self.assertEqual(element.tag, 'field') + self.assertEqual(element.attrs['name'], 'arch') + self.assertEqual(element.attrs['type'], 'xml') + self.assertFalse(element.children) def test_view(self): - element = od.view('view_xmlid', []) - element `self.assertIsInstance` XMLDictElement - element.tag `self.assertEquals` 'record' - element.attrs['id'] `self.assertEquals` 'view_xmlid' - element.attrs['model'] `self.assertEquals` 'ir.ui.view' - element.children |> self.assertFalse + """ Test view function """ + element = od.view('view_xmlid', []) + self.assertIsInstance(element, XMLDictElement) + self.assertEqual(element.tag, 'record') + self.assertEqual(element.attrs['id'], 'view_xmlid') + self.assertEqual(element.attrs['model'], 'ir.ui.view') + self.assertFalse(element.children) def test_view_def(self): - element = od.view_def('view_xmlid', 'View', 'sample.model', []) - element `self.assertIsInstance` XMLDictElement - element.tag `self.assertEquals` 'record' - element.attrs['id'] `self.assertEquals` 'view_xmlid' - element.attrs['model'] `self.assertEquals` 'ir.ui.view' - (element.children |> len) `self.assertEquals` 3 - element.children[0] `self.assertIsInstance` XMLDictElement - element.children[0].tag `self.assertEquals` 'field' - element.children[0].attrs['name'] `self.assertEquals` 'name' - element.children[0].children `self.assertEquals` ['View'] - element.children[1] `self.assertIsInstance` XMLDictElement - element.children[1].tag `self.assertEquals` 'field' - element.children[1].attrs['name'] `self.assertEquals` 'model' - element.children[1].children `self.assertEquals` ['sample.model'] - element.children[2] `self.assertIsInstance` XMLDictElement - element.children[2].tag `self.assertEquals` 'field' - element.children[2].attrs['name'] `self.assertEquals` 'arch' - element.children[2].attrs['type'] `self.assertEquals` 'xml' - element.children[2].children |> self.assertFalse + """ Test view_def function """ + element = od.view_def('view_xmlid', 'View', 'sample.model', []) + self.assertIsInstance(element, XMLDictElement) + self.assertEqual(element.tag, 'record') + self.assertEqual(element.attrs['id'], 'view_xmlid') + self.assertEqual(element.attrs['model'], 'ir.ui.view') + self.assertEqual((len(element.children)), 3) + self.assertIsInstance(element.children[0], XMLDictElement) + self.assertEqual(element.children[0].tag, 'field') + self.assertEqual(element.children[0].attrs['name'], 'name') + self.assertEqual(element.children[0].children, ['View']) + self.assertIsInstance(element.children[1], XMLDictElement) + self.assertEqual(element.children[1].tag, 'field') + self.assertEqual(element.children[1].attrs['name'], 'model') + self.assertEqual(element.children[1].children, ['sample.model']) + self.assertIsInstance(element.children[2], XMLDictElement) + self.assertEqual(element.children[2].tag, 'field') + self.assertEqual(element.children[2].attrs['name'], 'arch') + self.assertEqual(element.children[2].attrs['type'], 'xml') + self.assertFalse(element.children[2].children) def test_view_new(self): - element = od.view_new('tree', 'sample.model', []) - element `self.assertIsInstance` XMLDictElement - element.tag `self.assertEquals` 'record' - element.attrs['id'] `self.assertEquals` 'sample_model_view_tree' - element.attrs['model'] `self.assertEquals` 'ir.ui.view' - (element.children |> len) `self.assertEquals` 3 - element.children[0] `self.assertIsInstance` XMLDictElement - element.children[0].tag `self.assertEquals` 'field' - element.children[0].attrs['name'] `self.assertEquals` 'name' - element.children[0].children `self.assertEquals` ['Sample Model Tree'] - element.children[1] `self.assertIsInstance` XMLDictElement - element.children[1].tag `self.assertEquals` 'field' - element.children[1].attrs['name'] `self.assertEquals` 'model' - element.children[1].children `self.assertEquals` ['sample.model'] - element.children[2] `self.assertIsInstance` XMLDictElement - element.children[2].tag `self.assertEquals` 'field' - element.children[2].attrs['name'] `self.assertEquals` 'arch' - element.children[2].attrs['type'] `self.assertEquals` 'xml' - element.children[2].children |> self.assertFalse + """ Test view_new function """ + element = od.view_new('tree', 'sample.model', []) + self.assertIsInstance(element, XMLDictElement) + self.assertEqual(element.tag, 'record') + self.assertEqual(element.attrs['id'], 'sample_model_view_tree') + self.assertEqual(element.attrs['model'], 'ir.ui.view') + self.assertEqual((len(element.children)), 3) + self.assertIsInstance(element.children[0], XMLDictElement) + self.assertEqual(element.children[0].tag, 'field') + self.assertEqual(element.children[0].attrs['name'], 'name') + self.assertEqual(element.children[0].children, ['Sample Model Tree']) + self.assertIsInstance(element.children[1], XMLDictElement) + self.assertEqual(element.children[1].tag, 'field') + self.assertEqual(element.children[1].attrs['name'], 'model') + self.assertEqual(element.children[1].children, ['sample.model']) + self.assertIsInstance(element.children[2], XMLDictElement) + self.assertEqual(element.children[2].tag, 'field') + self.assertEqual(element.children[2].attrs['name'], 'arch') + self.assertEqual(element.children[2].attrs['type'], 'xml') + self.assertFalse(element.children[2].children) def test_view_inherit(self): - element = od.view_inherit('odoo.addons.module', 'sample.model', 'parent.view', []) - element `self.assertIsInstance` XMLDictElement - element.tag `self.assertEquals` 'record' - element.attrs['id'] `self.assertEquals` 'view_inherit_module' - element.attrs['model'] `self.assertEquals` 'ir.ui.view' - (element.children |> len) `self.assertEquals` 4 - element.children[0] `self.assertIsInstance` XMLDictElement - element.children[0].tag `self.assertEquals` 'field' - element.children[0].attrs['name'] `self.assertEquals` 'name' - element.children[0].children `self.assertEquals` ['Sample Model Adaptations'] - element.children[1] `self.assertIsInstance` XMLDictElement - element.children[1].tag `self.assertEquals` 'field' - element.children[1].attrs['name'] `self.assertEquals` 'model' - element.children[1].children `self.assertEquals` ['sample.model'] - element.children[2] `self.assertIsInstance` XMLDictElement - element.children[2].tag `self.assertEquals` 'field' - element.children[2].attrs['name'] `self.assertEquals` 'inherit_id' - element.children[2].children |> self.assertFalse - element.children[3] `self.assertIsInstance` XMLDictElement - element.children[3].tag `self.assertEquals` 'field' - element.children[3].attrs['name'] `self.assertEquals` 'arch' - element.children[3].attrs['type'] `self.assertEquals` 'xml' - element.children[3].children |> self.assertFalse + """ Test view_inherit function """ + element = od.view_inherit('odoo.addons.module', 'sample.model', 'parent.view', []) + self.assertIsInstance(element, XMLDictElement) + self.assertEqual(element.tag, 'record') + self.assertEqual(element.attrs['id'], 'view_inherit_module') + self.assertEqual(element.attrs['model'], 'ir.ui.view') + self.assertEqual((len(element.children)), 4) + self.assertIsInstance(element.children[0], XMLDictElement) + self.assertEqual(element.children[0].tag, 'field') + self.assertEqual(element.children[0].attrs['name'], 'name') + self.assertEqual(element.children[0].children, ['Sample Model Adaptations']) + self.assertIsInstance(element.children[1], XMLDictElement) + self.assertEqual(element.children[1].tag, 'field') + self.assertEqual(element.children[1].attrs['name'], 'model') + self.assertEqual(element.children[1].children, ['sample.model']) + self.assertIsInstance(element.children[2], XMLDictElement) + self.assertEqual(element.children[2].tag, 'field') + self.assertEqual(element.children[2].attrs['name'], 'inherit_id') + self.assertFalse(element.children[2].children) + self.assertIsInstance(element.children[3], XMLDictElement) + self.assertEqual(element.children[3].tag, 'field') + self.assertEqual(element.children[3].attrs['name'], 'arch') + self.assertEqual(element.children[3].attrs['type'], 'xml') + self.assertFalse(element.children[3].children) def test_action_server_code(self): - element = od.action_server_code('sample.xmlid', 'Code', 'sample.model', - '''record.do_something()''') - element `self.assertIsInstance` XMLDictElement - element.tag `self.assertEquals` 'record' - element.attrs['id'] `self.assertEquals` 'sample.xmlid' - element.attrs['model'] `self.assertEquals` 'ir.actions.server' - (element.children |> len) `self.assertEquals` 4 - element.children[0] `self.assertIsInstance` XMLDictElement - element.children[0].tag `self.assertEquals` 'field' - element.children[0].attrs['name'] `self.assertEquals` 'name' - element.children[0].children `self.assertEquals` ['Code'] - element.children[1] `self.assertIsInstance` XMLDictElement - element.children[1].tag `self.assertEquals` 'field' - element.children[1].attrs['name'] `self.assertEquals` 'model_id' - element.children[1].attrs['ref'] `self.assertEquals` 'sample.model' - element.children[1].children |> self.assertFalse - element.children[2].tag `self.assertEquals` 'field' - element.children[2].attrs['name'] `self.assertEquals` 'state' - element.children[2].children `self.assertEquals` ['code'] - element.children[3].tag `self.assertEquals` 'field' - element.children[3].attrs['name'] `self.assertEquals` 'code' - element.children[3].children `self.assertEquals` ['record.do_something()'] + """ Test action_server_code function """ + element = od.action_server_code('sample.xmlid', 'Code', 'sample.model', + '''record.do_something()''') + self.assertIsInstance(element, XMLDictElement) + self.assertEqual(element.tag, 'record') + self.assertEqual(element.attrs['id'], 'sample.xmlid') + self.assertEqual(element.attrs['model'], 'ir.actions.server') + self.assertEqual((len(element.children)), 4) + self.assertIsInstance(element.children[0], XMLDictElement) + self.assertEqual(element.children[0].tag, 'field') + self.assertEqual(element.children[0].attrs['name'], 'name') + self.assertEqual(element.children[0].children, ['Code']) + self.assertIsInstance(element.children[1], XMLDictElement) + self.assertEqual(element.children[1].tag, 'field') + self.assertEqual(element.children[1].attrs['name'], 'model_id') + self.assertEqual(element.children[1].attrs['ref'], 'sample.model') + self.assertFalse(element.children[1].children) + self.assertEqual(element.children[2].tag, 'field') + self.assertEqual(element.children[2].attrs['name'], 'state') + self.assertEqual(element.children[2].children, ['code']) + self.assertEqual(element.children[3].tag, 'field') + self.assertEqual(element.children[3].attrs['name'], 'code') + self.assertEqual(element.children[3].children, ['record.do_something()']) def test_client_action_multi(self): - element = od.client_action_multi('sample.xmlid', 'Multi', 'sample.model', 'sample.action') - element `self.assertIsInstance` XMLDictElement - element.tag `self.assertEquals` 'record' - element.attrs['id'] `self.assertEquals` 'sample.xmlid' - element.attrs['model'] `self.assertEquals` 'ir.values' - (element.children |> len) `self.assertEquals` 4 - element.children[0] `self.assertIsInstance` XMLDictElement - element.children[0].tag `self.assertEquals` 'field' - element.children[0].attrs['name'] `self.assertEquals` 'name' - element.children[0].children `self.assertEquals` ['Multi'] - element.children[1] `self.assertIsInstance` XMLDictElement - element.children[1].tag `self.assertEquals` 'field' - element.children[1].attrs['name'] `self.assertEquals` 'key2' - element.children[1].attrs['eval'] `self.assertEquals` "'client_action_multi'" - element.children[1].children |> self.assertFalse - element.children[2].tag `self.assertEquals` 'field' - element.children[2].attrs['name'] `self.assertEquals` 'model' - element.children[2].attrs['eval'] `self.assertEquals` "'sample.model'" - element.children[3].tag `self.assertEquals` 'field' - element.children[3].attrs['name'] `self.assertEquals` 'value' - element.children[3].attrs['eval'] `self.assertEquals` "'ir.actions.server,%d'%sample.action" + """ Test client_action_multi function """ + element = od.client_action_multi('sample.xmlid', 'Multi', 'sample.model', 'sample.action') + self.assertIsInstance(element, XMLDictElement) + self.assertEqual(element.tag, 'record') + self.assertEqual(element.attrs['id'], 'sample.xmlid') + self.assertEqual(element.attrs['model'], 'ir.values') + self.assertEqual((len(element.children)), 4) + self.assertIsInstance(element.children[0], XMLDictElement) + self.assertEqual(element.children[0].tag, 'field') + self.assertEqual(element.children[0].attrs['name'], 'name') + self.assertEqual(element.children[0].children, ['Multi']) + self.assertIsInstance(element.children[1], XMLDictElement) + self.assertEqual(element.children[1].tag, 'field') + self.assertEqual(element.children[1].attrs['name'], 'key2') + self.assertEqual(element.children[1].attrs['eval'], "'client_action_multi'") + self.assertFalse(element.children[1].children) + self.assertEqual(element.children[2].tag, 'field') + self.assertEqual(element.children[2].attrs['name'], 'model') + self.assertEqual(element.children[2].attrs['eval'], "'sample.model'") + self.assertEqual(element.children[3].tag, 'field') + self.assertEqual(element.children[3].attrs['name'], 'value') + self.assertEqual(element.children[3].attrs['eval'], "'ir.actions.server,%d'%sample.action") if __name__ == '__main__':