From 584727f5e74c9ff389bbf2f51e94acddc65ae09c Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Wed, 15 Jan 2025 14:21:56 +0530 Subject: [PATCH] perf: negative website redirect caching (#29179) --- frappe/website/path_resolver.py | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/frappe/website/path_resolver.py b/frappe/website/path_resolver.py index dafda9357a..e519d848a6 100644 --- a/frappe/website/path_resolver.py +++ b/frappe/website/path_resolver.py @@ -114,6 +114,18 @@ def resolve_redirect(path, query_string=None): # use r as a string prefix if you use regex groups or want to escape any string literal ] """ + + redirect_to = frappe.cache.hget("website_redirects", path) + if redirect_to: + if isinstance(redirect_to, dict): + frappe.flags.redirect_location = redirect_to["path"] + raise frappe.Redirect(redirect_to["status_code"]) + frappe.flags.redirect_location = redirect_to + raise frappe.Redirect + + if redirect_to is False: + return + redirects = frappe.get_hooks("website_redirects") redirects += frappe.get_all( "Website Route Redirect", ["source", "target", "redirect_http_status"], order_by=None @@ -122,15 +134,6 @@ def resolve_redirect(path, query_string=None): if not redirects: return - redirect_to = frappe.cache.hget("website_redirects", path) - - if redirect_to: - if isinstance(redirect_to, dict): - frappe.flags.redirect_location = redirect_to["path"] - raise frappe.Redirect(redirect_to["status_code"]) - frappe.flags.redirect_location = redirect_to - raise frappe.Redirect - for rule in redirects: pattern = rule["source"].strip("/ ") + "$" path_to_match = path @@ -151,6 +154,8 @@ def resolve_redirect(path, query_string=None): ) raise frappe.Redirect(status_code) + frappe.cache.hset("website_redirects", path_to_match, False) + def resolve_path(path): if not path: