seitime-frappe/frappe/www/search.py
Gavin D'souza d3250f6504 refactor(whitelisted): Add typing hints to APIs
* Refactor type checks defined in APIs
* Remove dead/deprecated kwargs usages
* Added appropriate hints to APIs and consecutive utils defined in the following modules:
 - frappe.realtime
 - frappe.translate
 - frappe.utils.global_search
 - frappe.www.third_party_apps
 - frappe.www.search
 - frappe.www.printview
2022-12-15 13:47:05 +05:30

63 lines
1.5 KiB
Python

import markupsafe
import frappe
from frappe import _
from frappe.core.utils import html2text
from frappe.utils import sanitize_html
from frappe.utils.global_search import web_search
def get_context(context):
context.no_cache = 1
if frappe.form_dict.q:
query = str(markupsafe.escape(sanitize_html(frappe.form_dict.q)))
context.title = _("Search Results for")
context.query = query
context.route = "/search"
context.update(get_search_results(query, frappe.utils.sanitize_html(frappe.form_dict.scope)))
else:
context.title = _("Search")
@frappe.whitelist(allow_guest=True)
def get_search_results(text: str, scope: str = None, start: int = 0, as_html: bool = False):
results = web_search(text, scope, start, limit=21)
out = frappe._dict()
if len(results) == 21:
out.has_more = 1
results = results[:20]
for d in results:
try:
d.content = html2text(d.content)
index = d.content.lower().index(text.lower())
d.content = (
d.content[:index]
+ "<mark>"
+ d.content[index:][: len(text)]
+ "</mark>"
+ d.content[index + len(text) :]
)
if index < 40:
start = 0
prefix = ""
else:
start = index - 40
prefix = "..."
suffix = ""
if (index + len(text) + 47) < len(d.content):
suffix = "..."
d.preview = prefix + d.content[start : start + len(text) + 87] + suffix
except Exception:
d.preview = html2text(d.content)[:97] + "..."
out.results = results
if as_html:
out.results = frappe.render_template("templates/includes/search_result.html", out)
return out