From 89bbf76c445e7a2b6d1c1066cdd9910fef559fe6 Mon Sep 17 00:00:00 2001 From: Jeremy Kersten Date: Fri, 13 Mar 2020 15:16:55 +0000 Subject: [PATCH] [FIX] website: perf - get most specific in SQL Before this commit, we would get all the pages for the requested URL then filter to get the most specific. This can just be done in SQL by sorting website_id desc so the specific are returned first. Note that this will respect 41897f0dbab. This will avoid having to prefetch the generic page when it is useless. Related to #47257 task-2211013 X-original-commit: b31294592a80d9e55f887f0122cc01225b64966c --- addons/website/models/ir_http.py | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/addons/website/models/ir_http.py b/addons/website/models/ir_http.py index c3f298eddf3..80ec1d9f0c7 100644 --- a/addons/website/models/ir_http.py +++ b/addons/website/models/ir_http.py @@ -237,22 +237,15 @@ class Http(models.AbstractModel): page_domain = [('url', '=', req_page)] + request.website.website_domain() published_domain = page_domain - # need to bypass website_published, to apply is_most_specific - # filter later if not publisher - pages = request.env['website.page'].sudo().search(published_domain, order='website_id') - pages = pages.filtered(pages._is_most_specific_page) - - if not request.website.is_publisher(): - pages = pages.filtered('is_visible') - - mypage = pages[0] if pages else False - _, ext = os.path.splitext(req_page) - if mypage: - return request.render(mypage.get_view_identifier(), { - # 'path': req_page[1:], + # specific page first + page = request.env['website.page'].sudo().search(published_domain, order='website_id asc', limit=1) + if page and (request.website.is_publisher() or page.is_visible): + _, ext = os.path.splitext(req_page) + return request.render(page.get_view_identifier(), { 'deletable': True, - 'main_object': mypage, + 'main_object': page, }, mimetype=_guess_mimetype(ext)) + return False @classmethod def _serve_redirect(cls):