From 3d3d51df0d481be8bc40650b005616f6b82c1610 Mon Sep 17 00:00:00 2001 From: "ajay javiya (OpenERP)" Date: Mon, 6 Aug 2012 19:07:28 +0530 Subject: [PATCH 1/2] [IMP]: Improve validation bzr revid: aja@tinyerp.com-20120806133728-sa372lbgoc8rdebu --- openerp/tests/test_view_validation.py | 13 ++++++------- openerp/tools/view_validation.py | 24 ++++++++++++++++-------- 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/openerp/tests/test_view_validation.py b/openerp/tests/test_view_validation.py index 4e28bf4d482..c79bb367426 100644 --- a/openerp/tests/test_view_validation.py +++ b/openerp/tests/test_view_validation.py @@ -52,12 +52,13 @@ valid_form = etree.parse(StringIO('''\ invalid_graph = etree.parse(StringIO('''\ - + ''')).getroot() @@ -81,12 +82,10 @@ invalid_tree = etree.parse(StringIO('''\ valid_tree= etree.parse(StringIO('''\ - - + ''')).getroot() diff --git a/openerp/tools/view_validation.py b/openerp/tools/view_validation.py index 40e9e5be1e0..e4324d143f1 100644 --- a/openerp/tools/view_validation.py +++ b/openerp/tools/view_validation.py @@ -12,12 +12,22 @@ def valid_page_in_book(arch): def valid_field_in_graph(arch): """A `field` node must be below a `graph` node.""" - return not arch.xpath('//graph[not ((field) and (@string))]') + if arch.xpath('//graph[not (@string)]'): + return False + for child in arch.xpath('/graph/child::*'): + if child.tag != 'field': + return False + return True def valid_field_in_tree(arch): """A `field` and `button` node must be below a `tree` node. And tree must have `string` attribute.""" - return not arch.xpath('//tree[not((field) or (button)) and (@string)]') + if arch.xpath('//tree[not (@string)]'): + return False + for child in arch.xpath('/tree/child::*'): + if child.tag not in ('field', 'button'): + return False + return True def valid_att_in_field(arch): @@ -57,20 +67,18 @@ def valid_type_in_col(arch): def valid_view(arch): if arch.tag == 'form': - for pred in [valid_page_in_book,valid_att_in_form,valid_type_in_colspan,\ - valid_type_in_col,valid_att_in_field,valid_att_in_label]: + for pred in [valid_page_in_book, valid_att_in_form, valid_type_in_colspan,\ + valid_type_in_col, valid_att_in_field, valid_att_in_label]: if not pred(arch): _logger.error('Invalid XML: %s', pred.__doc__) return False elif arch.tag == 'graph': - for pred in [valid_field_in_graph,valid_type_in_colspan,valid_type_in_col,\ - valid_att_in_field,valid_att_in_label]: + for pred in [valid_field_in_graph, valid_att_in_field]: if not pred(arch): _logger.error('Invalid XML: %s', pred.__doc__) return False elif arch.tag == 'tree': - for pred in [valid_field_in_tree,valid_type_in_colspan,valid_type_in_col,\ - valid_att_in_field,valid_att_in_label]: + for pred in [valid_field_in_tree, valid_att_in_field]: if not pred(arch): _logger.error('Invalid XML: %s', pred.__doc__) return False From 6ba2d5da9667ecffea0dfd94ee9d8ae4ffb82b0c Mon Sep 17 00:00:00 2001 From: "ajay javiya (OpenERP)" Date: Tue, 7 Aug 2012 12:24:55 +0530 Subject: [PATCH 2/2] [FIX]:Fix a predicate function doc bzr revid: aja@tinyerp.com-20120807065455-hn71rrs0yoav0zi5 --- openerp/tools/view_validation.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openerp/tools/view_validation.py b/openerp/tools/view_validation.py index e4324d143f1..7e710d55816 100644 --- a/openerp/tools/view_validation.py +++ b/openerp/tools/view_validation.py @@ -11,7 +11,7 @@ def valid_page_in_book(arch): def valid_field_in_graph(arch): - """A `field` node must be below a `graph` node.""" + """A `graph` must have `string` attribute and an immediate node of `graph` view must be `field`.""" if arch.xpath('//graph[not (@string)]'): return False for child in arch.xpath('/graph/child::*'): @@ -21,7 +21,7 @@ def valid_field_in_graph(arch): def valid_field_in_tree(arch): - """A `field` and `button` node must be below a `tree` node. And tree must have `string` attribute.""" + """A `tree` must have `string` attribute and an immediate node of `tree` view must be `field` or `button`.""" if arch.xpath('//tree[not (@string)]'): return False for child in arch.xpath('/tree/child::*'):