From 11fe7e24e46cd45e1cad71d1470fd078d1a9f26d Mon Sep 17 00:00:00 2001 From: Pratik Vyas Date: Tue, 31 Mar 2015 12:41:25 +0530 Subject: [PATCH 1/5] Update requirements.txt --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 1a431ed337..89ce2dd125 100644 --- a/requirements.txt +++ b/requirements.txt @@ -9,7 +9,7 @@ markupsafe mysql-python==1.2.5 pygeoip python-dateutil -python-memcached +python-memcached==1.53 pytz six slugify From aef6baf798603634a2bc3583d7b5f0fc8dcb86b8 Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Tue, 31 Mar 2015 13:07:29 +0530 Subject: [PATCH 2/5] [hotfix] encode path before removing file --- frappe/utils/file_manager.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/frappe/utils/file_manager.py b/frappe/utils/file_manager.py index e6a61789ed..b3194ecf7c 100644 --- a/frappe/utils/file_manager.py +++ b/frappe/utils/file_manager.py @@ -228,10 +228,14 @@ def delete_file_data_content(doc): def delete_file_from_filesystem(doc): path = doc.file_name + if path.startswith("files/"): path = frappe.utils.get_site_path("public", doc.file_name) else: path = frappe.utils.get_site_path("public", "files", doc.file_name) + + path = encode(path) + if os.path.exists(path): os.remove(path) From e480abff16c6b5ccaf9e596b9235216678706225 Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Wed, 1 Apr 2015 11:29:05 +0530 Subject: [PATCH 3/5] [fix] compensate for the ridiculous shortcoming of email.utils.parseaddr :disappointed: --- frappe/utils/__init__.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/frappe/utils/__init__.py b/frappe/utils/__init__.py index 7987f4614c..09becd9f9d 100644 --- a/frappe/utils/__init__.py +++ b/frappe/utils/__init__.py @@ -63,8 +63,13 @@ def extract_email_id(email): def validate_email_add(email_str): """Validates the email string""" + if email_str and " " in email_str and "<" not in email_str: + # example: "test@example.com test2@example.com" will return "test@example.comtest2" after parseaddr!!! + return False + email = extract_email_id(email_str) match = re.match("[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?", email.lower()) + if not match: return False From bb67242a6e8c5e70ce33b97a593714340e630f72 Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Mon, 6 Apr 2015 17:27:14 +0530 Subject: [PATCH 4/5] [fix] update_routes_of_descendants --- frappe/website/website_generator.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/frappe/website/website_generator.py b/frappe/website/website_generator.py index d1388634b4..57c83fefdb 100644 --- a/frappe/website/website_generator.py +++ b/frappe/website/website_generator.py @@ -96,16 +96,15 @@ class WebsiteGenerator(Document): if old_route and old_route != self.get_route(): # clear cache of old routes - old_routes = frappe.get_all(self.doctype, fields=["parent_website_route", "page_name"], - filters={"parent_website_route": ("like", old_route + "%")}) + old_routes = frappe.get_all(self.doctype, filters={"parent_website_route": ("like", old_route + "%")}) if old_routes: - for old_route in old_routes: - clear_cache(make_route(old_route)) + for like_old_route in old_routes: + clear_cache(frappe.get_doc(self.doctype, like_old_route.name).get_route()) frappe.db.sql("""update `tab{0}` set parent_website_route = replace(parent_website_route, %s, %s), - modified = %s + modified = %s, modified_by = %s where parent_website_route like %s""".format(self.doctype), (old_route, self.get_route(), now(), frappe.session.user, old_route + "%")) From 095a92560a528b204f3d32464ce55dc14e8cae55 Mon Sep 17 00:00:00 2001 From: Pratik Vyas Date: Thu, 9 Apr 2015 12:29:00 +0600 Subject: [PATCH 5/5] bumped to version 4.13.6 --- frappe/__version__.py | 2 +- frappe/hooks.py | 2 +- setup.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/frappe/__version__.py b/frappe/__version__.py index 29c39694fb..3a520d65e8 100644 --- a/frappe/__version__.py +++ b/frappe/__version__.py @@ -1,2 +1,2 @@ from __future__ import unicode_literals -__version__ = "4.13.5" +__version__ = "4.13.6" diff --git a/frappe/hooks.py b/frappe/hooks.py index 8b6fafd18e..9c74b8cf7c 100644 --- a/frappe/hooks.py +++ b/frappe/hooks.py @@ -4,7 +4,7 @@ app_title = "Frappe Framework" app_publisher = "Web Notes Technologies Pvt. Ltd." app_description = "Full Stack Web Application Framework in Python" app_icon = "assets/frappe/images/frappe.svg" -app_version = "4.13.5" +app_version = "4.13.6" app_color = "#3498db" app_email = "support@frappe.io" diff --git a/setup.py b/setup.py index 166e103f80..9340dfe961 100644 --- a/setup.py +++ b/setup.py @@ -1,7 +1,7 @@ from setuptools import setup, find_packages import os -version = "4.13.5" +version = "4.13.6" with open("requirements.txt", "r") as f: install_requires = f.readlines()