[IMP] Make wizard work
[odoo/odoo.git] / openerp / tools / view_validation.py
index f6f2684..7e710d5 100644 (file)
@@ -11,13 +11,23 @@ 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))]')
+    """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::*'):
+        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."""
-    return not arch.xpath('//tree[not((field) and (button) and (@string))]')
+    """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::*'):
+        if child.tag not in ('field', 'button'):
+            return False
+    return True
 
 
 def valid_att_in_field(arch):
@@ -26,12 +36,12 @@ def valid_att_in_field(arch):
 
 
 def valid_att_in_label(arch):
-    """A `for` and `string` attribute must be in a `label` node."""
+    """A `for` and `string` attribute must be on a `label` node."""
     return not arch.xpath('//label[not ((@for) or (@string))]')
 
 
 def valid_att_in_form(arch):
-    """A `string` attribute must be in a `form` node."""
+    """A `string` attribute must be on a `form` node."""
     return not arch.xpath('//form[not (@string)]')
 
 
@@ -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