diff --git a/openerp/addons/base/ir/ir_ui_view.py b/openerp/addons/base/ir/ir_ui_view.py index f67f65f2c1c..198b85e86a7 100644 --- a/openerp/addons/base/ir/ir_ui_view.py +++ b/openerp/addons/base/ir/ir_ui_view.py @@ -955,4 +955,18 @@ class view(osv.osv): ids = map(itemgetter(0), cr.fetchall()) return self._check_xml(cr, uid, ids) + def _validate_module_views(self, cr, uid, module): + """Validate architecture of all the views of a given module""" + assert not self.pool._init or module in self.pool._init_modules + cr.execute("""SELECT max(v.id) + FROM ir_ui_view v + LEFT JOIN ir_model_data md ON (md.model = 'ir.ui.view' AND md.res_id = v.id) + WHERE md.module = %s + GROUP BY coalesce(v.inherit_id, v.id) + """, (module,)) + + for vid, in cr.fetchall(): + if not self._check_xml(cr, uid, [vid]): + self.raise_view_error(cr, uid, "Can't validate view", vid) + # vim:et: diff --git a/openerp/modules/loading.py b/openerp/modules/loading.py index 5635e42e780..2b507acc0bb 100644 --- a/openerp/modules/loading.py +++ b/openerp/modules/loading.py @@ -3,7 +3,7 @@ # # OpenERP, Open Source Management Solution # Copyright (C) 2004-2009 Tiny SPRL (). -# Copyright (C) 2010-2013 OpenERP s.a. (). +# Copyright (C) 2010-2014 OpenERP s.a. (). # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -153,7 +153,6 @@ def load_module_graph(cr, graph, status=None, perform_checks=True, skip_modules= loaded_modules.append(package.name) if hasattr(package, 'init') or hasattr(package, 'update') or package.state in ('to install', 'to upgrade'): init_module_models(cr, package.name, models) - registry._init_modules.add(package.name) status['progress'] = float(index) / len(graph) # Can't put this line out of the loop: ir.module.module will be @@ -182,6 +181,10 @@ def load_module_graph(cr, graph, status=None, perform_checks=True, skip_modules= migrations.migrate_module(package, 'post') + registry._init_modules.add(package.name) + # validate all the views at a whole + registry['ir.ui.view']._validate_module_views(cr, SUPERUSER_ID, module_name) + if has_demo: # launch tests only in demo mode, allowing tests to use demo data. if tools.config.options['test_enable']: @@ -207,6 +210,7 @@ def load_module_graph(cr, graph, status=None, perform_checks=True, skip_modules= if hasattr(package, kind): delattr(package, kind) + registry._init_modules.add(package.name) cr.commit() # The query won't be valid for models created later (i.e. custom model