Merge branch 'develop' into add_pdf_backend_hook

This commit is contained in:
Suraj Shetty 2025-02-19 22:53:26 +05:30 committed by GitHub
commit 0c81689d63
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
11 changed files with 42 additions and 28 deletions

View file

@ -324,9 +324,8 @@ def make_form_dict(request: Request):
frappe.throw(_("Invalid request arguments"))
@handle_does_not_exist_error
def handle_exception(e):
e = handle_does_not_exist_error(e)
response = None
http_status_code = getattr(e, "http_status_code", 500)
accept_header = frappe.get_request_header("Accept") or ""

View file

@ -9,7 +9,6 @@ import frappe
import frappe.email.smtp
from frappe import _
from frappe.email.email_body import get_message_id
from frappe.permissions import check_doctype_permission
from frappe.utils import (
cint,
get_datetime,

View file

@ -4,7 +4,6 @@
import frappe
@frappe.whitelist()
def get(name):
"""
Return the :term:`doclist` of the `Page` specified by `name`
@ -23,11 +22,10 @@ def get(name):
@frappe.whitelist(allow_guest=True)
def getpage():
def getpage(name: str):
"""
Load the page from `frappe.form` and send it via `frappe.response`
"""
page = frappe.form_dict.get("name")
doc = get(page)
doc = get(name)
frappe.response.docs.append(doc)

View file

@ -10,9 +10,9 @@ from frappe.utils.data import convert_utc_to_system_timezone
def get_context(context):
def get_time(path):
dt = os.path.getmtime(path)
return convert_utc_to_system_timezone(datetime.datetime.utcfromtimestamp(dt)).strftime(
"%a %b %d %H:%M %Y"
)
return convert_utc_to_system_timezone(
datetime.datetime.fromtimestamp(dt, tz=datetime.timezone.utc)
).strftime("%a %b %d %H:%M %Y")
def get_encrytion_status(path):
if "-enc" in path:

View file

@ -389,7 +389,7 @@ class Email:
if self.mail["Date"]:
try:
utc = email.utils.mktime_tz(email.utils.parsedate_tz(self.mail["Date"]))
utc_dt = datetime.datetime.utcfromtimestamp(utc)
utc_dt = datetime.datetime.fromtimestamp(utc, tz=datetime.timezone.utc)
self.date = convert_utc_to_system_timezone(utc_dt).strftime("%Y-%m-%d %H:%M:%S")
except Exception:
self.date = now()

View file

@ -1314,6 +1314,8 @@ class Document(BaseDocument, DocRef):
def clear_cache(self):
frappe.clear_document_cache(self.doctype, self.name)
frappe.db.after_commit.add(lambda: frappe.clear_document_cache(self.doctype, self.name))
frappe.db.after_rollback.add(lambda: frappe.clear_document_cache(self.doctype, self.name))
def reset_seen(self):
"""Clear _seen property and set current user as seen"""

View file

@ -853,12 +853,20 @@ def check_doctype_permission(doctype: str, ptype: str = "read") -> None:
frappe.local.message_log = _message_log
def handle_does_not_exist_error(e: Exception) -> Exception:
if isinstance(e, frappe.DoesNotExistError) and (doctype := getattr(e, "doctype", None)):
try:
check_doctype_permission(doctype)
def handle_does_not_exist_error(fn):
"""
Decorator to override DoesNotExistError when handling exceptions.
Requires the first argument to be an Exception.
"""
except frappe.PermissionError as _e:
return _e
@functools.wraps(fn)
def wrapper(e, *args, **kwargs):
if isinstance(e, frappe.DoesNotExistError) and (doctype := getattr(e, "doctype", None)):
try:
check_doctype_permission(doctype)
except frappe.PermissionError as _e:
return fn(_e, *args, **kwargs)
return e
return fn(e, *args, **kwargs)
return wrapper

View file

@ -1005,7 +1005,7 @@ export default class GridRow {
.data("df", df)
.appendTo(this.row)
.on("click", function (event) {
if (df.fieldtype === "Link") {
if (df.fieldtype === "Link" || df.fieldtype === "Dynamic Link") {
frappe.utils.sleep(500).then(() => {
let element_position = event.target.getBoundingClientRect();
$(this)

View file

@ -20,18 +20,21 @@ def get_response(path=None, http_status_code=200) -> Response:
return renderer_instance.render()
except Exception as e:
e = handle_does_not_exist_error(e)
return handle_exception(e, endpoint, path, http_status_code)
if isinstance(e, frappe.Redirect):
return RedirectPage(endpoint or path, e.http_status_code).render()
if isinstance(e, frappe.PermissionError):
return NotPermittedPage(endpoint, http_status_code, exception=e).render()
@handle_does_not_exist_error
def handle_exception(e, endpoint, path, http_status_code):
if isinstance(e, frappe.Redirect):
return RedirectPage(endpoint or path, e.http_status_code).render()
if isinstance(e, frappe.PageDoesNotExistError):
return NotFoundPage(endpoint, http_status_code).render()
if isinstance(e, frappe.PermissionError):
return NotPermittedPage(endpoint, http_status_code, exception=e).render()
return ErrorPage(exception=e).render()
if isinstance(e, frappe.PageDoesNotExistError):
return NotFoundPage(endpoint, http_status_code).render()
return ErrorPage(exception=e).render()
def get_response_content(path=None, http_status_code=200) -> str:

View file

@ -70,6 +70,9 @@ class WebsiteGenerator(Document):
super().clear_cache()
clear_cache(self.route)
frappe.db.after_commit.add(lambda: clear_cache(self.route))
frappe.db.after_rollback.add(lambda: clear_cache(self.route))
def scrub(self, text):
return cleanup_page_name(text).replace("_", "-")

View file

@ -6,7 +6,7 @@ from contextlib import suppress
import frappe
from frappe import _
from frappe.rate_limiter import rate_limit
from frappe.utils import validate_email_address
from frappe.utils import escape_html, validate_email_address
sitemap = 1
@ -30,6 +30,8 @@ def get_context(context):
def send_message(sender, message, subject="Website Query"):
sender = validate_email_address(sender, throw=True)
message = escape_html(message)
with suppress(frappe.OutgoingEmailError):
if forward_to_email := frappe.db.get_single_value("Contact Us Settings", "forward_to_email"):
frappe.sendmail(recipients=forward_to_email, reply_to=sender, content=message, subject=subject)