[fix] missing hash cache clearing and breadcrumbs fixversion-14
@@ -428,6 +428,9 @@ def has_website_permission(doctype, ptype="read", doc=None, user=None, verbose=F | |||||
hooks = (get_hooks("has_website_permission") or {}).get(doctype, []) | hooks = (get_hooks("has_website_permission") or {}).get(doctype, []) | ||||
if hooks: | if hooks: | ||||
if isinstance(doc, basestring): | |||||
doc = get_doc(doctype, doc) | |||||
for method in hooks: | for method in hooks: | ||||
result = call(get_attr(method), doc=doc, ptype=ptype, user=user, verbose=verbose) | result = call(get_attr(method), doc=doc, ptype=ptype, user=user, verbose=verbose) | ||||
# if even a single permission check is Falsy | # if even a single permission check is Falsy | ||||
@@ -95,8 +95,7 @@ def clear_notifications(user="*"): | |||||
frappe.cache().delete_keys("notification_count:") | frappe.cache().delete_keys("notification_count:") | ||||
else: | else: | ||||
# delete count for user | # delete count for user | ||||
for key in frappe.cache().get_keys("notification_count:"): | |||||
frappe.cache().hdel(key, user) | |||||
frappe.cache().hdel_keys("notification_count:", user) | |||||
def delete_notification_count_for(doctype): | def delete_notification_count_for(doctype): | ||||
frappe.cache().delete_key("notification_count:" + doctype) | frappe.cache().delete_key("notification_count:" + doctype) | ||||
@@ -31,7 +31,7 @@ def clear_cache(user=None): | |||||
cache = frappe.cache() | cache = frappe.cache() | ||||
groups = ("bootinfo", "user_recent", "user_roles", "user_doc", "lang", | groups = ("bootinfo", "user_recent", "user_roles", "user_doc", "lang", | ||||
"defaults", "user_permissions", "roles") | |||||
"defaults", "user_permissions", "roles", "home_page") | |||||
if user: | if user: | ||||
for name in groups: | for name in groups: | ||||
@@ -136,8 +136,15 @@ class RedisWrapper(redis.Redis): | |||||
except redis.exceptions.ConnectionError: | except redis.exceptions.ConnectionError: | ||||
pass | pass | ||||
def hdel_keys(self, name_starts_with, key): | |||||
"""Delete hash names with wildcard `*` and key""" | |||||
for name in frappe.cache().get_keys(name_starts_with): | |||||
name = name.split("|", 1)[1] | |||||
self.hdel(name, key) | |||||
def hkeys(self, name): | def hkeys(self, name): | ||||
try: | try: | ||||
return super(redis.Redis, self).hkeys(self.make_key(name)) | return super(redis.Redis, self).hkeys(self.make_key(name)) | ||||
except redis.exceptions.ConnectionError: | except redis.exceptions.ConnectionError: | ||||
return [] | return [] | ||||
@@ -217,6 +217,7 @@ def clear_cache(path=None): | |||||
clear_sitemap() | clear_sitemap() | ||||
frappe.clear_cache("Guest") | frappe.clear_cache("Guest") | ||||
frappe.cache().delete_value("_website_pages") | frappe.cache().delete_value("_website_pages") | ||||
frappe.cache().delete_value("home_page") | |||||
for method in frappe.get_hooks("website_clear_cache"): | for method in frappe.get_hooks("website_clear_cache"): | ||||
frappe.get_attr(method)(path) | frappe.get_attr(method)(path) |
@@ -59,8 +59,10 @@ def set_breadcrumbs(out, context): | |||||
"""Build breadcrumbs template (deprecated)""" | """Build breadcrumbs template (deprecated)""" | ||||
out["no_breadcrumbs"] = context.get("no_breadcrumbs", 0) or ("<!-- no-breadcrumbs -->" in out.get("content", "")) | out["no_breadcrumbs"] = context.get("no_breadcrumbs", 0) or ("<!-- no-breadcrumbs -->" in out.get("content", "")) | ||||
# breadcrumbs | |||||
if not out["no_breadcrumbs"] and "breadcrumbs" not in out: | |||||
if out["no_breadcrumbs"]: | |||||
out["breadcrumbs"] = "" | |||||
elif "breadcrumbs" not in out: | |||||
out["breadcrumbs"] = frappe.get_template("templates/includes/breadcrumbs.html").render(context) | out["breadcrumbs"] = frappe.get_template("templates/includes/breadcrumbs.html").render(context) | ||||
def set_title_and_header(out, context): | def set_title_and_header(out, context): | ||||