@@ -14,7 +14,7 @@ import os, sys, importlib, inspect, json | |||||
from .exceptions import * | from .exceptions import * | ||||
from .utils.jinja import get_jenv, get_template, render_template, get_email_from_template | 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" | __title__ = "Frappe Framework" | ||||
local = Local() | local = Local() | ||||
@@ -643,7 +643,7 @@ def get_meta_module(doctype): | |||||
return frappe.modules.load_doctype_module(doctype) | return frappe.modules.load_doctype_module(doctype) | ||||
def delete_doc(doctype=None, name=None, force=0, ignore_doctypes=None, for_reload=False, | 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`. | """Delete a document. Calls `frappe.model.delete_doc.delete_doc`. | ||||
:param doctype: DocType of document to be delete. | :param doctype: DocType of document to be delete. | ||||
@@ -654,7 +654,7 @@ def delete_doc(doctype=None, name=None, force=0, ignore_doctypes=None, for_reloa | |||||
:param ignore_permissions: Ignore user permissions.""" | :param ignore_permissions: Ignore user permissions.""" | ||||
import frappe.model.delete_doc | import frappe.model.delete_doc | ||||
frappe.model.delete_doc.delete_doc(doctype, name, force, ignore_doctypes, for_reload, | 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): | def delete_doc_if_exists(doctype, name, force=0): | ||||
"""Delete document if exists.""" | """Delete document if exists.""" | ||||
@@ -95,7 +95,7 @@ def handle(): | |||||
if frappe.local.request.method=="DELETE": | if frappe.local.request.method=="DELETE": | ||||
# Not checking permissions here because it's checked in delete_doc | # 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.http_status_code = 202 | ||||
frappe.local.response.message = "ok" | frappe.local.response.message = "ok" | ||||
frappe.db.commit() | frappe.db.commit() | ||||
@@ -208,7 +208,7 @@ def delete(doctype, name): | |||||
:param doctype: DocType of the document to be deleted | :param doctype: DocType of the document to be deleted | ||||
:param name: name 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() | @frappe.whitelist() | ||||
def set_default(key, value, parent=None): | def set_default(key, value, parent=None): | ||||
@@ -246,7 +246,12 @@ class EmailAccount(Document): | |||||
else: | else: | ||||
email_sync_rule = self.build_email_sync_rule() | 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: | if not email_server: | ||||
return | return | ||||
@@ -15,7 +15,7 @@ from frappe.utils.global_search import delete_for_document | |||||
from six import string_types | from six import string_types | ||||
def delete_doc(doctype=None, name=None, force=0, ignore_doctypes=None, for_reload=False, | 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 | 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..? | # already deleted..? | ||||
if not frappe.db.exists(doctype, name): | if not frappe.db.exists(doctype, name): | ||||
return | |||||
if not ignore_missing: | |||||
raise frappe.DoesNotExistError | |||||
else: | |||||
return False | |||||
# delete passwords | # delete passwords | ||||
delete_all_passwords_for(doctype, name) | delete_all_passwords_for(doctype, name) | ||||
@@ -13,3 +13,11 @@ class TestClient(unittest.TestCase): | |||||
frappe.set_value('ToDo', todo.name, {'description': 'test 2'}) | frappe.set_value('ToDo', todo.name, {'description': 'test 2'}) | ||||
self.assertEquals(frappe.get_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) |