From 9d84f387e0b802d06def4c1315934e57634b462e Mon Sep 17 00:00:00 2001 From: Makarand Bauskar Date: Fri, 1 Sep 2017 09:10:26 +0530 Subject: [PATCH 1/3] [hotfix] socket command error eof while connecting to email server (#4025) * [hotfix] socket command error eof while connecting to email server * [minor] codecy fixes --- frappe/email/doctype/email_account/email_account.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/frappe/email/doctype/email_account/email_account.py b/frappe/email/doctype/email_account/email_account.py index 2886a3db27..1a9ccbc015 100755 --- a/frappe/email/doctype/email_account/email_account.py +++ b/frappe/email/doctype/email_account/email_account.py @@ -246,7 +246,12 @@ class EmailAccount(Document): else: email_sync_rule = self.build_email_sync_rule() - email_server = self.get_incoming_server(in_receive=True, email_sync_rule=email_sync_rule) + email_server = None + try: + email_server = self.get_incoming_server(in_receive=True, email_sync_rule=email_sync_rule) + except Exception: + frappe.log_error(title=_("Error while connecting to email account {0}").format(self.name)) + if not email_server: return From 6fa9967a048c0b26f721abfc39598326ec388799 Mon Sep 17 00:00:00 2001 From: Makarand Bauskar Date: Fri, 1 Sep 2017 09:16:32 +0530 Subject: [PATCH 2/3] [hotfix] throw DoesNotExistError if doctype is not available on Delete api (#4013) * [hotfix] throw DoesNotExistError if doctype is not available on Delete api * [fixes] aded tests cases and codecy, travis fixes --- frappe/__init__.py | 4 ++-- frappe/api.py | 2 +- frappe/client.py | 2 +- frappe/model/delete_doc.py | 7 +++++-- frappe/tests/test_client.py | 8 ++++++++ 5 files changed, 17 insertions(+), 6 deletions(-) diff --git a/frappe/__init__.py b/frappe/__init__.py index b10706bee9..3f67735c35 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -642,7 +642,7 @@ def get_meta_module(doctype): return frappe.modules.load_doctype_module(doctype) def delete_doc(doctype=None, name=None, force=0, ignore_doctypes=None, for_reload=False, - ignore_permissions=False, flags=None): + ignore_permissions=False, flags=None, ignore_on_trash=False, ignore_missing=True): """Delete a document. Calls `frappe.model.delete_doc.delete_doc`. :param doctype: DocType of document to be delete. @@ -653,7 +653,7 @@ def delete_doc(doctype=None, name=None, force=0, ignore_doctypes=None, for_reloa :param ignore_permissions: Ignore user permissions.""" import frappe.model.delete_doc frappe.model.delete_doc.delete_doc(doctype, name, force, ignore_doctypes, for_reload, - ignore_permissions, flags) + ignore_permissions, flags, ignore_on_trash, ignore_missing) def delete_doc_if_exists(doctype, name, force=0): """Delete document if exists.""" diff --git a/frappe/api.py b/frappe/api.py index f99afb7a4f..1bb2a4a581 100644 --- a/frappe/api.py +++ b/frappe/api.py @@ -95,7 +95,7 @@ def handle(): if frappe.local.request.method=="DELETE": # Not checking permissions here because it's checked in delete_doc - frappe.delete_doc(doctype, name) + frappe.delete_doc(doctype, name, ignore_missing=False) frappe.local.response.http_status_code = 202 frappe.local.response.message = "ok" frappe.db.commit() diff --git a/frappe/client.py b/frappe/client.py index f257f6abbe..0a02739928 100644 --- a/frappe/client.py +++ b/frappe/client.py @@ -208,7 +208,7 @@ def delete(doctype, name): :param doctype: DocType of the document to be deleted :param name: name of the document to be deleted''' - frappe.delete_doc(doctype, name) + frappe.delete_doc(doctype, name, ignore_missing=False) @frappe.whitelist() def set_default(key, value, parent=None): diff --git a/frappe/model/delete_doc.py b/frappe/model/delete_doc.py index 802a2c665c..1f0d894f97 100644 --- a/frappe/model/delete_doc.py +++ b/frappe/model/delete_doc.py @@ -15,7 +15,7 @@ from frappe.utils.global_search import delete_for_document from six import string_types def delete_doc(doctype=None, name=None, force=0, ignore_doctypes=None, for_reload=False, - ignore_permissions=False, flags=None, ignore_on_trash=False): + ignore_permissions=False, flags=None, ignore_on_trash=False, ignore_missing=True): """ Deletes a doc(dt, dn) and validates if it is not submitted and not linked in a live record """ @@ -34,7 +34,10 @@ def delete_doc(doctype=None, name=None, force=0, ignore_doctypes=None, for_reloa # already deleted..? if not frappe.db.exists(doctype, name): - return + if not ignore_missing: + raise frappe.DoesNotExistError + else: + return False # delete passwords delete_all_passwords_for(doctype, name) diff --git a/frappe/tests/test_client.py b/frappe/tests/test_client.py index a98a71cbc0..f524e58579 100644 --- a/frappe/tests/test_client.py +++ b/frappe/tests/test_client.py @@ -13,3 +13,11 @@ class TestClient(unittest.TestCase): frappe.set_value('ToDo', todo.name, {'description': 'test 2'}) self.assertEquals(frappe.get_value('ToDo', todo.name, 'description'), 'test 2') + def test_delete(self): + from frappe.client import delete + + todo = frappe.get_doc(dict(doctype='ToDo', description='description')).insert() + delete("ToDo", todo.name) + + self.assertFalse(frappe.db.exists("ToDo", todo.name)) + self.assertRaises(frappe.DoesNotExistError, delete, "ToDo", todo.name) From c2891d5306a7c8deb4970da1c5c94a0176219ff5 Mon Sep 17 00:00:00 2001 From: mbauskar Date: Fri, 1 Sep 2017 10:48:35 +0600 Subject: [PATCH 3/3] bumped to version 8.9.2 --- frappe/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/__init__.py b/frappe/__init__.py index 3f67735c35..b342854adf 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -14,7 +14,7 @@ import os, sys, importlib, inspect, json from .exceptions import * from .utils.jinja import get_jenv, get_template, render_template, get_email_from_template -__version__ = '8.9.1' +__version__ = '8.9.2' __title__ = "Frappe Framework" local = Local()