From 01c6a55031692fd9d39e1f0083ccad8238ff549d Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Tue, 20 Jan 2026 12:27:19 +0530 Subject: [PATCH] perf: random memory optimizations (#36102) * perf: preload mysqlclient Now the default choice instead of PyMySQL. * perf: Lazy load JWT OAuth is not used that frequently, on that many sites. * perf: Lazy load whoosh Rarely loaded --- frappe/app.py | 2 +- frappe/oauth.py | 5 ++++- frappe/search/__init__.py | 5 ++--- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/frappe/app.py b/frappe/app.py index 49cacb9a46..29a82ffb0a 100644 --- a/frappe/app.py +++ b/frappe/app.py @@ -48,7 +48,7 @@ import frappe.boot import frappe.client import frappe.core.doctype.file.file import frappe.core.doctype.user.user -import frappe.database.mariadb.database # Load database related utils +import frappe.database.mariadb.mysqlclient # Load database related utils import frappe.database.query import frappe.desk.desktop # workspace import frappe.desk.form.save diff --git a/frappe/oauth.py b/frappe/oauth.py index 2cbeb9a362..098e17a009 100644 --- a/frappe/oauth.py +++ b/frappe/oauth.py @@ -5,7 +5,6 @@ import re from http import cookies from urllib.parse import unquote, urljoin, urlparse -import jwt from oauthlib.openid import RequestValidator import frappe @@ -302,6 +301,8 @@ class OAuthWebRequestValidator(RequestValidator): # OpenID Connect def finalize_id_token(self, id_token, token, token_handler, request): + import jwt + # Check whether frappe server URL is set id_token_header = {"typ": "jwt", "alg": "HS256"} @@ -437,6 +438,8 @@ class OAuthWebRequestValidator(RequestValidator): - OpenIDConnectImplicit - OpenIDConnectHybrid """ + import jwt + if id_token_hint: try: user = None diff --git a/frappe/search/__init__.py b/frappe/search/__init__.py index 959e0884a8..997b7db975 100644 --- a/frappe/search/__init__.py +++ b/frappe/search/__init__.py @@ -2,14 +2,13 @@ # License: MIT. See LICENSE import frappe -from frappe.search.full_text_search import FullTextSearch -from frappe.search.sqlite_search import SQLiteSearch -from frappe.search.website_search import WebsiteSearch from frappe.utils import cint @frappe.whitelist(allow_guest=True) def web_search(query, scope=None, limit=20): + from frappe.search.website_search import WebsiteSearch + limit = cint(limit) ws = WebsiteSearch(index_name="web_routes") return ws.search(query, scope, limit)