コード例 #1
0
    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"]))
コード例 #2
0
    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"]))
コード例 #3
0
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)