From 755c7be7faacc8caf00824e926e6641d4d1d9e35 Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Tue, 11 Aug 2015 16:19:42 +0530 Subject: [PATCH 1/2] [fix] missing hash cache clearing and breadcrumbs fix --- frappe/desk/notifications.py | 3 +-- frappe/sessions.py | 2 +- frappe/utils/redis_wrapper.py | 7 +++++++ frappe/website/render.py | 1 + frappe/website/template.py | 6 ++++-- 5 files changed, 14 insertions(+), 5 deletions(-) diff --git a/frappe/desk/notifications.py b/frappe/desk/notifications.py index e38621829a..b3e6d85673 100644 --- a/frappe/desk/notifications.py +++ b/frappe/desk/notifications.py @@ -95,8 +95,7 @@ def clear_notifications(user="*"): frappe.cache().delete_keys("notification_count:") else: # 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): frappe.cache().delete_key("notification_count:" + doctype) diff --git a/frappe/sessions.py b/frappe/sessions.py index d4d98f7c18..262048e48d 100644 --- a/frappe/sessions.py +++ b/frappe/sessions.py @@ -31,7 +31,7 @@ def clear_cache(user=None): cache = frappe.cache() groups = ("bootinfo", "user_recent", "user_roles", "user_doc", "lang", - "defaults", "user_permissions", "roles") + "defaults", "user_permissions", "roles", "home_page") if user: for name in groups: diff --git a/frappe/utils/redis_wrapper.py b/frappe/utils/redis_wrapper.py index 2469a7b900..7d5cd9ed0c 100644 --- a/frappe/utils/redis_wrapper.py +++ b/frappe/utils/redis_wrapper.py @@ -136,8 +136,15 @@ class RedisWrapper(redis.Redis): except redis.exceptions.ConnectionError: 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): try: return super(redis.Redis, self).hkeys(self.make_key(name)) except redis.exceptions.ConnectionError: return [] + diff --git a/frappe/website/render.py b/frappe/website/render.py index 9735a55544..e06f7b12b9 100644 --- a/frappe/website/render.py +++ b/frappe/website/render.py @@ -217,6 +217,7 @@ def clear_cache(path=None): clear_sitemap() frappe.clear_cache("Guest") frappe.cache().delete_value("_website_pages") + frappe.cache().delete_value("home_page") for method in frappe.get_hooks("website_clear_cache"): frappe.get_attr(method)(path) diff --git a/frappe/website/template.py b/frappe/website/template.py index 92ac2022b0..e9aa826244 100644 --- a/frappe/website/template.py +++ b/frappe/website/template.py @@ -59,8 +59,10 @@ def set_breadcrumbs(out, context): """Build breadcrumbs template (deprecated)""" out["no_breadcrumbs"] = context.get("no_breadcrumbs", 0) or ("" 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) def set_title_and_header(out, context): From 154bdd82e7bbd2dc77d8ab3e38488d875975bb86 Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Tue, 11 Aug 2015 16:47:59 +0530 Subject: [PATCH 2/2] [minor] website permissions --- frappe/__init__.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/frappe/__init__.py b/frappe/__init__.py index f5b5c29b64..86c63f3ba4 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -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, []) if hooks: + if isinstance(doc, basestring): + doc = get_doc(doctype, doc) + for method in hooks: result = call(get_attr(method), doc=doc, ptype=ptype, user=user, verbose=verbose) # if even a single permission check is Falsy