diff --git a/frappe/__init__.py b/frappe/__init__.py index fe008f82c9..20c96e4c60 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -1470,6 +1470,15 @@ def get_version(doctype, name, limit = None, head = False, raise_err = True): def ping(): return "pong" + +def safe_encode(param, encoding = 'utf-8'): + try: + param = param.encode(encoding) + except Exception: + pass + return param + + def safe_decode(param, encoding = 'utf-8'): try: param = param.decode(encoding) @@ -1479,4 +1488,4 @@ def safe_decode(param, encoding = 'utf-8'): def parse_json(val): from frappe.utils import parse_json - return parse_json(val) + return parse_json(val) \ No newline at end of file diff --git a/frappe/email/queue.py b/frappe/email/queue.py index e20b221a6f..80fce6ab1d 100755 --- a/frappe/email/queue.py +++ b/frappe/email/queue.py @@ -6,7 +6,7 @@ from six.moves import range import frappe from six.moves import html_parser as HTMLParser import smtplib, quopri, json -from frappe import msgprint, throw, _ +from frappe import msgprint, throw, _, safe_decode from frappe.email.smtp import SMTPServer, get_outgoing_email_account from frappe.email.email_body import get_email, get_formatted_html, add_attachment from frappe.utils.verified_command import get_signed_params, verify_request @@ -510,7 +510,7 @@ def prepare_message(email, recipient, recipients_list): message = message.replace("", recipient) message = (message and message.encode('utf8')) or '' - message = frappe.safe_decode(message) + message = safe_decode(message) if not email.attachments: return message diff --git a/frappe/model/utils/user_settings.py b/frappe/model/utils/user_settings.py index 2045e3a5b2..84ae3d9ee7 100644 --- a/frappe/model/utils/user_settings.py +++ b/frappe/model/utils/user_settings.py @@ -39,7 +39,7 @@ def update_user_settings(doctype, user_settings, for_update=False): def sync_user_settings(): '''Sync from cache to database (called asynchronously via the browser)''' for key, data in iteritems(frappe.cache().hgetall('_user_settings')): - doctype, user = key.split('::') + doctype, user = frappe.safe_encode(key).split('::') # WTF? frappe.db.sql('''insert into __UserSettings (user, doctype, data) values (%s, %s, %s) on duplicate key update data=%s''', (user, doctype, data, data))