def test_print_view_without_errors(self): user = frappe.get_last_doc("User") messages_before = frappe.get_message_log() ret = get_html_and_style(doc=user.as_json(), print_format="Standard", no_letterhead=1) messages_after = frappe.get_message_log() if len(messages_after) > len(messages_before): new_messages = messages_after[len(messages_before):] self.fail("Print view showing error/warnings: \n" + "\n".join(str(msg) for msg in new_messages)) # html should exist self.assertTrue(bool(ret["html"]))
def assertDocPrint(self, doctype, docname): doc = frappe.get_doc(doctype, docname) doc.set("__onload", frappe._dict()) doc.run_method("onload") messages_before = frappe.get_message_log() ret = get_html_and_style(doc=doc.as_json(), print_format="Standard", no_letterhead=1) messages_after = frappe.get_message_log() if len(messages_after) > len(messages_before): new_messages = messages_after[len(messages_before):] self.fail("Print view showing error/warnings: \n" + "\n".join(str(msg) for msg in new_messages)) # html should exist self.assertTrue(bool(ret["html"]))
def bulk_workflow_approval(docnames, doctype, action): from collections import defaultdict # dictionaries for logging errored_transactions = defaultdict(list) successful_transactions = defaultdict(list) # WARN: message log is cleared print("Clearing frappe.message_log...") frappe.clear_messages() docnames = json.loads(docnames) for (idx, docname) in enumerate(docnames, 1): message_dict = {} try: show_progress(docnames, _('Applying: {0}').format(action), idx, docname) apply_workflow(frappe.get_doc(doctype, docname), action) frappe.db.commit() except Exception as e: if not frappe.message_log: # Exception is raised manually and not from msgprint or throw message = "{0}".format(e.__class__.__name__) if e.args: message += " : {0}".format(e.args[0]) message_dict = {"docname": docname, "message": message} errored_transactions[docname].append(message_dict) frappe.db.rollback() frappe.log_error(frappe.get_traceback(), "Workflow {0} threw an error for {1} {2}".format(action, doctype, docname)) finally: if not message_dict: if frappe.message_log: messages = frappe.get_message_log() for message in messages: frappe.message_log.pop() message_dict = {"docname": docname, "message": message.get("message")} if message.get("raise_exception", False): errored_transactions[docname].append(message_dict) else: successful_transactions[docname].append(message_dict) else: successful_transactions[docname].append({"docname": docname, "message": None}) if errored_transactions and successful_transactions: indicator = "orange" elif errored_transactions: indicator = "red" else: indicator = "green" print_workflow_log(errored_transactions, _("Errored Transactions"), doctype, indicator) print_workflow_log(successful_transactions, _("Successful Transactions"), doctype, indicator)