KeyError: u'state'

Getting the following error while opening “Sales Invoice”:

Traceback (most recent call last):
  File "/home/akshay/frappe-bench/apps/frappe/frappe/app.py", line 55, in application
    response = frappe.handler.handle()
  File "/home/akshay/frappe-bench/apps/frappe/frappe/handler.py", line 19, in handle
    execute_cmd(cmd)
  File "/home/akshay/frappe-bench/apps/frappe/frappe/handler.py", line 36, in execute_cmd
    ret = frappe.call(method, **frappe.form_dict)
  File "/home/akshay/frappe-bench/apps/frappe/frappe/__init__.py", line 882, in call
    return fn(*args, **newargs)
  File "/home/akshay/frappe-bench/apps/frappe/frappe/desk/form/load.py", line 70, in getdoctype
    docs = get_meta_bundle(doctype)
  File "/home/akshay/frappe-bench/apps/frappe/frappe/desk/form/load.py", line 81, in get_meta_bundle
    bundle = [frappe.desk.form.meta.get_meta(doctype)]
  File "/home/akshay/frappe-bench/apps/frappe/frappe/desk/form/meta.py", line 25, in get_meta
    meta.set_translations(frappe.local.lang)
  File "/home/akshay/frappe-bench/apps/frappe/frappe/desk/form/meta.py", line 159, in set_translations
    self.set("__messages", frappe.get_lang_dict("doctype", self.name))
  File "/home/akshay/frappe-bench/apps/frappe/frappe/__init__.py", line 62, in get_lang_dict
    return get_dict(fortype, name)
  File "/home/akshay/frappe-bench/apps/frappe/frappe/translate.py", line 99, in get_dict
    messages = get_messages_from_doctype(name)
  File "/home/akshay/frappe-bench/apps/frappe/frappe/translate.py", line 337, in get_messages_from_doctype
    messages.extend(get_messages_from_workflow(doctype=name))
  File "/home/akshay/frappe-bench/apps/frappe/frappe/translate.py", line 370, in get_messages_from_workflow
    for state in states if is_translatable(state['state'])])
KeyError: u'state'

I have set-up a workflow on Sales Invoice which seems to be causing trouble. The workflow is in inactive mode.

I may be wrong but it seems like state is never containing state as key here:

Also look at line 365, states is assigned values with message as the column.

any ideas?

Run bench update and see if problem still persists.

did it a few minutes ago

Delete that workflow and try again.

tried opening workflow doc to delete it … unable to open Workflow doc … gives this error

Traceback (most recent call last):
  File "/home/akshay/frappe-bench/apps/frappe/frappe/app.py", line 55, in application
    response = frappe.handler.handle()
  File "/home/akshay/frappe-bench/apps/frappe/frappe/handler.py", line 19, in handle
    execute_cmd(cmd)
  File "/home/akshay/frappe-bench/apps/frappe/frappe/handler.py", line 36, in execute_cmd
    ret = frappe.call(method, **frappe.form_dict)
  File "/home/akshay/frappe-bench/apps/frappe/frappe/__init__.py", line 882, in call
    return fn(*args, **newargs)
  File "/home/akshay/frappe-bench/apps/frappe/frappe/desk/form/load.py", line 70, in getdoctype
    docs = get_meta_bundle(doctype)
  File "/home/akshay/frappe-bench/apps/frappe/frappe/desk/form/load.py", line 81, in get_meta_bundle
    bundle = [frappe.desk.form.meta.get_meta(doctype)]
  File "/home/akshay/frappe-bench/apps/frappe/frappe/desk/form/meta.py", line 25, in get_meta
    meta.set_translations(frappe.local.lang)
  File "/home/akshay/frappe-bench/apps/frappe/frappe/desk/form/meta.py", line 159, in set_translations
    self.set("__messages", frappe.get_lang_dict("doctype", self.name))
  File "/home/akshay/frappe-bench/apps/frappe/frappe/__init__.py", line 62, in get_lang_dict
    return get_dict(fortype, name)
  File "/home/akshay/frappe-bench/apps/frappe/frappe/translate.py", line 99, in get_dict
    messages = get_messages_from_doctype(name)
  File "/home/akshay/frappe-bench/apps/frappe/frappe/translate.py", line 337, in get_messages_from_doctype
    messages.extend(get_messages_from_workflow(doctype=name))
  File "/home/akshay/frappe-bench/apps/frappe/frappe/translate.py", line 370, in get_messages_from_workflow
    'select distinct message from `tabWorkflow Document State` where parent=%s and message is not null',
KeyError: u'state'

should I delete this from the list ?

Yes delete it from the list.

Deleted the Workflow … Created it Again … Everything Started Working

But When I logged Out and logged In … it again started giving error

Seems to be working if we change this (at line 369):

	messages.extend([("Workflow: " + w['name'], states['message'])
		for state in states if is_translatable(state['state'])])

to:

	messages.extend([("Workflow: " + w['name'], state['message'])
		for state in states if is_translatable(state['message'])])

is this an acceptable solution?