refactor: gracefully fail while clearing demo data
diff --git a/erpnext/setup/demo.py b/erpnext/setup/demo.py
index 355c373..bb64ba1 100644
--- a/erpnext/setup/demo.py
+++ b/erpnext/setup/demo.py
@@ -6,6 +6,7 @@
from random import randint
import frappe
+from frappe import _
from frappe.utils import add_days, getdate
import erpnext
@@ -33,12 +34,20 @@
@frappe.whitelist()
def clear_demo_data():
frappe.only_for("System Manager")
- company = frappe.db.get_single_value("Global Defaults", "demo_company")
- create_transaction_deletion_record(company)
- clear_masters()
- delete_company(company)
- default_company = frappe.db.get_single_value("Global Defaults", "default_company")
- frappe.db.set_default("company", default_company)
+ try:
+ company = frappe.db.get_single_value("Global Defaults", "demo_company")
+ create_transaction_deletion_record(company)
+ clear_masters()
+ delete_company(company)
+ default_company = frappe.db.get_single_value("Global Defaults", "default_company")
+ frappe.db.set_default("company", default_company)
+ except Exception:
+ frappe.db.rollback()
+ frappe.log_error("Failed to erase demo data")
+ frappe.throw(
+ _("Failed to erase demo data, please delete the demo company manually."),
+ title=_("Could Not Delete Demo Data"),
+ )
def create_demo_company():
@@ -154,10 +163,10 @@
clear_demo_record(item)
-def clear_demo_record(doctype):
- doc_type = doctype.get("doctype")
- del doctype["doctype"]
- doc = frappe.get_doc(doc_type, doctype)
+def clear_demo_record(document):
+ doc_type = document.get("doctype")
+ del document["doctype"]
+ doc = frappe.get_doc(doc_type, document)
frappe.delete_doc(doc.doctype, doc.name, ignore_permissions=True)