From c41ef2de2d2dc081818da0ffd5116cfc5ef7827c Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 14 Nov 2016 13:17:47 +0530 Subject: [PATCH 1/6] Delete razorpay_integration.json --- frappe/data/app_listing/razorpay_integration.json | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 frappe/data/app_listing/razorpay_integration.json diff --git a/frappe/data/app_listing/razorpay_integration.json b/frappe/data/app_listing/razorpay_integration.json deleted file mode 100644 index 8041027daf..0000000000 --- a/frappe/data/app_listing/razorpay_integration.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "app_url": "https://frappe.github.io/razorpay_integration", - "app_name": "razorpay_integration", - "app_icon": "octicon octicon-credit-card", - "app_color": "#179bd7", - "app_description": "Accept Payment via Razorpay", - "app_publisher": "Frappe", - "app_email": "hello@frappe.io", - "repo_url": "https://github.com/frappe/razorpay_integration.git", - "app_title": "Razorpay Integration", - "app_version": "1.0.0", - "app_category": "Integrations", - "featured": 1 -} From bfecd424c15ba3fbffc34b5760a8e58ed32b51a5 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 14 Nov 2016 13:17:57 +0530 Subject: [PATCH 2/6] Delete paypal_integration.json --- frappe/data/app_listing/paypal_integration.json | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 frappe/data/app_listing/paypal_integration.json diff --git a/frappe/data/app_listing/paypal_integration.json b/frappe/data/app_listing/paypal_integration.json deleted file mode 100644 index a03f08fa40..0000000000 --- a/frappe/data/app_listing/paypal_integration.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "app_url": "https://frappe.github.io/paypal_integration", - "app_name": "paypal_integration", - "app_icon": "octicon octicon-credit-card", - "app_color": "#179bd7", - "app_description": "Accept Payment via PayPal", - "app_publisher": "Frappe", - "app_email": "hello@frappe.io", - "repo_url": "https://github.com/frappe/paypal_integration.git", - "app_title": "Paypal Integration", - "app_version": "1.0.0", - "app_category": "Integrations", - "featured": 1 -} From faba31b556455650c372fcdb0450921811e43113 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Mon, 14 Nov 2016 14:54:26 +0530 Subject: [PATCH 3/6] [fix] css for shopping cart --- frappe/public/css/website.css | 8 ++++++-- frappe/public/less/website.less | 10 ++++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/frappe/public/css/website.css b/frappe/public/css/website.css index 10124bb4df..74d02e461b 100644 --- a/frappe/public/css/website.css +++ b/frappe/public/css/website.css @@ -891,10 +891,14 @@ li .footer-child-item { padding-right: 15px; border-right: 1px solid #d1d8dd; } +.shopping-cart .cart-icon .dropdown-toggle { + text-decoration: none !important; +} .badge-wrapper { - min-height: 17px; - min-width: 17px; display: inline-block; + margin-left: 7px; + margin-top: -3px; + padding: 2px 7px; border: 1px solid #d1d8dd; border-radius: 3px; color: #7575ff; diff --git a/frappe/public/less/website.less b/frappe/public/less/website.less index 8bdeafa350..77c81e0531 100644 --- a/frappe/public/less/website.less +++ b/frappe/public/less/website.less @@ -617,15 +617,21 @@ li .footer-child-item { padding-bottom:2000px; margin-bottom:-2000px;} .shopping-cart { + .cart-icon { + .dropdown-toggle { + text-decoration: none !important; + } + } margin-top:12px; margin-bottom:8px; padding-right:15px; border-right: 1px solid @border-color; } .badge-wrapper { - min-height: 17px; - min-width: 17px; display: inline-block; + margin-left: 7px; + margin-top: -3px; + padding: 2px 7px; border: 1px solid @border-color; border-radius: 3px; color: #7575ff; From 612d612b7ebc7668621755f0adb69b99c85494c5 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Mon, 14 Nov 2016 17:22:08 +0530 Subject: [PATCH 4/6] [hot] fix bug that caused session crashing when cache was full --- frappe/__init__.py | 4 ++-- frappe/translate.py | 12 ++++++------ frappe/utils/redis_wrapper.py | 17 ++++++++++------- 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/frappe/__init__.py b/frappe/__init__.py index e068c23b97..af6aadeb8b 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -135,6 +135,8 @@ def init(site, sites_path=None, new_site=False): local.jenv = None local.jloader =None local.cache = {} + local.form_dict = _dict() + local.session = _dict() setup_module_map() @@ -149,8 +151,6 @@ def connect(site=None, db_name=None): if site: init(site) local.db = Database(user=db_name or local.conf.db_name) - local.form_dict = _dict() - local.session = _dict() set_user("Administrator") def get_site_config(sites_path=None, site_path=None): diff --git a/frappe/translate.py b/frappe/translate.py index 19a253f169..45f8394b3c 100644 --- a/frappe/translate.py +++ b/frappe/translate.py @@ -94,7 +94,7 @@ def get_dict(fortype, name=None): fortype = fortype.lower() cache = frappe.cache() asset_key = fortype + ":" + (name or "-") - translation_assets = cache.hget("translation_assets", frappe.local.lang) or {} + translation_assets = cache.hget("translation_assets", frappe.local.lang, shared=True) or {} if not asset_key in translation_assets: if fortype=="doctype": @@ -123,7 +123,7 @@ def get_dict(fortype, name=None): translation_assets[asset_key] = message_dict - cache.hset("translation_assets", frappe.local.lang, translation_assets) + cache.hset("translation_assets", frappe.local.lang, translation_assets, shared=True) return translation_assets[asset_key] @@ -203,7 +203,7 @@ def load_lang(lang, apps=None): if lang=='en': return {} - out = frappe.cache().hget("lang_full_dict", lang) + out = frappe.cache().hget("lang_full_dict", lang, shared=True) if not out: out = {} for app in (apps or frappe.get_all_apps(True)): @@ -216,7 +216,7 @@ def load_lang(lang, apps=None): parent_out.update(out) out = parent_out - frappe.cache().hset("lang_full_dict", lang, out) + frappe.cache().hset("lang_full_dict", lang, out, shared=True) return out or {} @@ -260,8 +260,8 @@ def clear_cache(): # clear translations saved in boot cache cache.delete_key("bootinfo") - cache.delete_key("lang_full_dict") - cache.delete_key("translation_assets") + cache.delete_key("lang_full_dict", shared=True) + cache.delete_key("translation_assets", shared=True) cache.delete_key("lang_user_translations") def get_messages_for_app(app): diff --git a/frappe/utils/redis_wrapper.py b/frappe/utils/redis_wrapper.py index 06d124447d..9798d2aef6 100644 --- a/frappe/utils/redis_wrapper.py +++ b/frappe/utils/redis_wrapper.py @@ -8,7 +8,9 @@ from frappe.utils import cstr class RedisWrapper(redis.Redis): """Redis client that will automatically prefix conf.db_name""" - def make_key(self, key, user=None): + def make_key(self, key, user=None, shared=False): + if shared: + return key if user: if user == True: user = frappe.session.user @@ -129,12 +131,13 @@ class RedisWrapper(redis.Redis): def llen(self, key): return super(redis.Redis, self).llen(self.make_key(key)) - def hset(self, name, key, value): + def hset(self, name, key, value, shared=False): if not name in frappe.local.cache: frappe.local.cache[name] = {} frappe.local.cache[name][key] = value try: - super(redis.Redis, self).hset(self.make_key(name), key, pickle.dumps(value)) + super(redis.Redis, self).hset(self.make_key(name, shared=shared), + key, pickle.dumps(value)) except redis.exceptions.ConnectionError: pass @@ -142,7 +145,7 @@ class RedisWrapper(redis.Redis): return {key: pickle.loads(value) for key, value in super(redis.Redis, self).hgetall(self.make_key(name)).iteritems()} - def hget(self, name, key, generator=None): + def hget(self, name, key, generator=None, shared=False): if not name in frappe.local.cache: frappe.local.cache[name] = {} if key in frappe.local.cache[name]: @@ -150,7 +153,7 @@ class RedisWrapper(redis.Redis): value = None try: - value = super(redis.Redis, self).hget(self.make_key(name), key) + value = super(redis.Redis, self).hget(self.make_key(name, shared=shared), key) except redis.exceptions.ConnectionError: pass @@ -165,12 +168,12 @@ class RedisWrapper(redis.Redis): pass return value - def hdel(self, name, key): + def hdel(self, name, key, shared=False): if name in frappe.local.cache: if key in frappe.local.cache[name]: del frappe.local.cache[name][key] try: - super(redis.Redis, self).hdel(self.make_key(name), key) + super(redis.Redis, self).hdel(self.make_key(name, shared=shared), key) except redis.exceptions.ConnectionError: pass From 0f6420517aca124ebea955e0f8e3a2a8dd8ef52b Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Mon, 14 Nov 2016 17:33:12 +0530 Subject: [PATCH 5/6] [hot-fix] fix test and print format --- frappe/utils/redis_wrapper.py | 10 +++++----- frappe/www/print.py | 4 ++++ 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/frappe/utils/redis_wrapper.py b/frappe/utils/redis_wrapper.py index 9798d2aef6..59e9a65cca 100644 --- a/frappe/utils/redis_wrapper.py +++ b/frappe/utils/redis_wrapper.py @@ -102,23 +102,23 @@ class RedisWrapper(redis.Redis): def delete_key(self, *args, **kwargs): self.delete_value(*args, **kwargs) - def delete_value(self, keys, user=None, make_keys=True): + def delete_value(self, keys, user=None, make_keys=True, shared=False): """Delete value, list of values.""" if not isinstance(keys, (list, tuple)): keys = (keys, ) for key in keys: + if key in frappe.local.cache: + del frappe.local.cache[key] + if make_keys: - key = self.make_key(key) + key = self.make_key(key, shared=shared) try: self.delete(key) except redis.exceptions.ConnectionError: pass - if key in frappe.local.cache: - del frappe.local.cache[key] - def lpush(self, key, value): super(redis.Redis, self).lpush(self.make_key(key), value) diff --git a/frappe/www/print.py b/frappe/www/print.py index e40ceb4a00..3db4a5cf81 100644 --- a/frappe/www/print.py +++ b/frappe/www/print.py @@ -270,6 +270,10 @@ def make_layout(doc, meta, format_data=None): doc.set(df.fieldname, True) # show this field if is_visible(df, doc) and has_value(df, doc): + if page[-1]['columns'] == []: + # if no column, add one + page[-1]['columns'].append({'fields': []}) + page[-1]['columns'][-1]['fields'].append(df) # section has fields From 335df74b42e63e357c487ac785097bcc5222f7b4 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 14 Nov 2016 18:09:06 +0600 Subject: [PATCH 6/6] bumped to version 7.1.13 --- frappe/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/__init__.py b/frappe/__init__.py index 78d331be74..fdfcf56a14 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -13,7 +13,7 @@ import os, sys, importlib, inspect, json from .exceptions import * from .utils.jinja import get_jenv, get_template, render_template -__version__ = '7.1.12' +__version__ = '7.1.13' __title__ = "Frappe Framework" local = Local()