From 228c817c330583a246bca7905fa903eacdea278d Mon Sep 17 00:00:00 2001 From: Florent Xicluna Date: Wed, 1 Feb 2012 15:30:32 +0100 Subject: [PATCH] [IMP] faster implementation for Root.find_handler. bzr revid: florent.xicluna@gmail.com-20120201143032-pshpu4uhvl61nr9z --- addons/web/common/http.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/addons/web/common/http.py b/addons/web/common/http.py index 016aff3754e..eb3f6093691 100644 --- a/addons/web/common/http.py +++ b/addons/web/common/http.py @@ -541,17 +541,17 @@ class Root(object): :returns: a callable matching the path sections, or ``None`` :rtype: ``Controller | None`` """ - if len(l): - for i in range(len(l), 0, -1): - ps = "/" + "/".join(l[0:i]) - if ps in controllers_path: - c = controllers_path[ps] - rest = l[i:] or ['index'] - meth = rest[0] + if l: + ps = '/' + '/'.join(l) + meth = 'index' + while ps: + c = controllers_path.get(ps) + if c: m = getattr(c, meth) if getattr(m, 'exposed', False): _logger.debug("Dispatching to %s %s %s", ps, c, meth) return m + ps, _slash, meth = ps.rpartition('/') return None class LibException(Exception):