54 lines
1.9 KiB
Python
54 lines
1.9 KiB
Python
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
|
|
# License: MIT. See LICENSE
|
|
|
|
import frappe
|
|
from frappe.utils import strip
|
|
from frappe.utils.data import add_to_date, get_datetime
|
|
from frappe.website.doctype.website_theme.website_theme import get_active_theme
|
|
|
|
base_template_path = "www/website_script.js"
|
|
|
|
# NOTE: This is misleading.
|
|
# We want to avoid Redis cache and instead use proxy cache as website_script.js gets loaded on
|
|
# every website page and never really changes.
|
|
no_cache = True
|
|
|
|
# 5 minutes public cache, SWR after that to avoid hard "misses".
|
|
cache_headers = {"Cache-Control": "public,max-age=300,stale-while-revalidate=10800"}
|
|
|
|
|
|
def get_context(context):
|
|
should_cache = not_modified_recently(frappe.get_website_settings("modified"))
|
|
|
|
website_script = frappe.get_cached_doc("Website Script")
|
|
context.javascript = website_script.javascript or ""
|
|
should_cache &= not_modified_recently(website_script.modified)
|
|
|
|
if theme := get_active_theme():
|
|
js = strip(theme.js or "")
|
|
if js:
|
|
context.javascript += "\n" + js
|
|
should_cache &= not_modified_recently(theme.modified)
|
|
|
|
if not frappe.conf.developer_mode:
|
|
context["google_analytics_id"] = get_setting("google_analytics_id")
|
|
context["google_analytics_anonymize_ip"] = get_setting("google_analytics_anonymize_ip")
|
|
|
|
# Heuristics/DX:
|
|
# If none of the documents are being modified right now then we can cache this page.
|
|
# Ref: https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching#heuristic_caching
|
|
if should_cache:
|
|
frappe.local.response_headers.update(cache_headers)
|
|
|
|
|
|
def not_modified_recently(timestamp):
|
|
ten_minutes_ago = add_to_date(minutes=-10, as_datetime=True, as_string=False)
|
|
|
|
return ten_minutes_ago > get_datetime(timestamp)
|
|
|
|
|
|
def get_setting(field_name):
|
|
"""Return value of field_name frok Website Settings or Site Config."""
|
|
website_settings = frappe.get_website_settings(field_name)
|
|
conf = frappe.conf.get(field_name)
|
|
return website_settings or conf
|