From ca7eeb0ed0449755ef978512deb1c4827b773026 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 8 Oct 2015 15:59:02 +0200 Subject: [PATCH] [IMP] http: make ir.http.routing_map a standard lazy property Is currently a function emulating a lazy property. --- openerp/addons/base/ir/ir_http.py | 19 +++++++++---------- openerp/http.py | 2 +- openerp/modules/loading.py | 6 +++--- 3 files changed, 13 insertions(+), 14 deletions(-) diff --git a/openerp/addons/base/ir/ir_http.py b/openerp/addons/base/ir/ir_http.py index 9f08d09f170..864e29f3b2e 100644 --- a/openerp/addons/base/ir/ir_http.py +++ b/openerp/addons/base/ir/ir_http.py @@ -20,6 +20,7 @@ import openerp.models from openerp import http from openerp.http import request from openerp.osv import osv, orm +from openerp.tools import lazy_property _logger = logging.getLogger(__name__) @@ -62,7 +63,7 @@ class ir_http(osv.AbstractModel): return {'model': ModelConverter, 'models': ModelsConverter} def _find_handler(self, return_rule=False): - return self.routing_map().bind_to_environ(request.httprequest.environ).match(return_rule=return_rule) + return self.routing_map.bind_to_environ(request.httprequest.environ).match(return_rule=return_rule) def _auth_method_user(self): request.uid = request.session.uid @@ -187,16 +188,14 @@ class ir_http(osv.AbstractModel): except openerp.models.MissingError: return self._handle_exception(werkzeug.exceptions.NotFound()) + @lazy_property def routing_map(self): - if not hasattr(self, '_routing_map'): - _logger.info("Generating routing map") - installed = request.registry._init_modules - {'web'} - if openerp.tools.config['test_enable']: - installed.add(openerp.modules.module.current_test) - mods = [''] + openerp.conf.server_wide_modules + sorted(installed) - self._routing_map = http.routing_map(mods, False, converters=self._get_converters()) - - return self._routing_map + _logger.info("Generating routing map") + installed = request.registry._init_modules - {'web'} + if openerp.tools.config['test_enable']: + installed.add(openerp.modules.module.current_test) + mods = [''] + openerp.conf.server_wide_modules + sorted(installed) + return http.routing_map(mods, False, converters=self._get_converters()) def convert_exception_to(to_type, with_message=False): """ Should only be called from an exception handler. Fetches the current diff --git a/openerp/http.py b/openerp/http.py index 54e54d1e597..bf5367ff927 100644 --- a/openerp/http.py +++ b/openerp/http.py @@ -1591,7 +1591,7 @@ class Root(object): def get_db_router(self, db): if not db: return self.nodb_routing_map - return request.registry['ir.http'].routing_map() + return request.registry['ir.http'].routing_map def db_list(force=False, httprequest=None): dbs = openerp.service.db.list_dbs(force) diff --git a/openerp/modules/loading.py b/openerp/modules/loading.py index bc81d9a06bf..1c9efc938ff 100644 --- a/openerp/modules/loading.py +++ b/openerp/modules/loading.py @@ -182,9 +182,9 @@ def load_module_graph(cr, graph, status=None, perform_checks=True, skip_modules= report.record_result(load_test(module_name, idref, mode)) # Python tests ir_http = registry['ir.http'] - if hasattr(ir_http, '_routing_map'): - # Force routing map to be rebuilt between each module test suite - del(ir_http._routing_map) + # Force routing map to be rebuilt between each module test suite + vars(ir_http).pop('routing_map', None) + report.record_result(openerp.modules.module.run_unit_tests(module_name, cr.dbname)) processed_modules.append(package.name)