Edgewall Software
Modify

Opened 14 years ago

Closed 14 years ago

#9381 closed defect (fixed)

[PATCH] Workflow: "KeyError: oldstates" could be reported more gracefully

Reported by: Steven R. Loomis <srl@…> Owned by: Remy Blank
Priority: normal Milestone: 0.12.2
Component: ticket system Version: 0.12dev
Severity: normal Keywords: workflow, bitesized, patch
Cc: Thijs Triemstra Branch:
Release Notes:
API Changes:
Internal Changes:

Description

This is total user error, but if a workflow item doesn't have any states:

[ticket-workflow]
#accept = new,reviewing -> assigned    <<<<< OOPS!
accept.operations = set_owner_to_self
accept.permissions = TICKET_MODIFY

… it blows up. Suggestion: trap/detect the following error with "transition 'accept' does not have any old/new states defined."

Traceback (most recent call last):
  File "/home/srl/src/trac/trac/web/main.py", line 512, in _dispatch_request
    dispatcher.dispatch(req)
  File "/home/srl/src/trac/trac/web/main.py", line 198, in dispatch
    chosen_handler)
  File "/home/srl/src/trac/trac/web/main.py", line 345, in _pre_process_request
    chosen_handler = filter_.pre_process_request(req, chosen_handler)
  File "/home/srl/ws/cldr-stuff/trac/IcuCodeToolsPlugin/icucodetools/review.py", line 46, in pre_process_request
    if 'ICUREVIEW_VIEW' not in req.perm:
  File "/home/srl/src/trac/trac/perm.py", line 552, in has_permission
    return self._has_permission(action, resource)
  File "/home/srl/src/trac/trac/perm.py", line 566, in _has_permission
    check_permission(action, perm.username, resource, perm)
  File "/home/srl/src/trac/trac/perm.py", line 453, in check_permission
    perm)
  File "/home/srl/src/trac/trac/perm.py", line 286, in check_permission
    get_user_permissions(username)
  File "/home/srl/src/trac/trac/perm.py", line 358, in get_user_permissions
    for requestor in self.requestors:
  File "/home/srl/src/trac/trac/core.py", line 70, in extensions
    return filter(None, [component.compmgr[cls] for cls in extensions])
  File "/home/srl/src/trac/trac/core.py", line 205, in __getitem__
    component = cls(self)
  File "/home/srl/src/trac/trac/core.py", line 111, in maybe_init
    init(self)
  File "/home/srl/src/trac/trac/ticket/api.py", line 218, in __init__
    [c.__class__.__name__ for c in self.action_controllers])
  File "/home/srl/src/trac/trac/config.py", line 652, in __get__
    for impl in self.xtnpt.extensions(instance):
  File "/home/srl/src/trac/trac/core.py", line 70, in extensions
    return filter(None, [component.compmgr[cls] for cls in extensions])
  File "/home/srl/src/trac/trac/core.py", line 205, in __getitem__
    component = cls(self)
  File "/home/srl/src/trac/trac/core.py", line 111, in maybe_init
    init(self)
  File "/home/srl/src/trac/trac/ticket/default_workflow.py", line 109, in __init__
    self.actions = get_workflow_config(self.config)
  File "/home/srl/src/trac/trac/ticket/default_workflow.py", line 85, in get_workflow_config
    actions = parse_workflow_config(raw_actions)
  File "/home/srl/src/trac/trac/ticket/default_workflow.py", line 77, in parse_workflow_config
    attributes['oldstates'].split(',')]
KeyError: 'oldstates'

Attachments (1)

workflow-9381.patch (963 bytes ) - added by Thijs Triemstra 14 years ago.
against 0.12-stable r10371

Download all attachments as: .zip

Change History (6)

comment:1 by Remy Blank, 14 years ago

Keywords: workflow bitesized added; wofkflow removed
Milestone: unscheduled

Good idea, and should even be relatively simple to implement.

comment:2 by Thijs Triemstra, 14 years ago

Cc: Thijs Triemstra added

by Thijs Triemstra, 14 years ago

Attachment: workflow-9381.patch added

against 0.12-stable r10371

comment:3 by Thijs Triemstra, 14 years ago

Keywords: patch added
Milestone: unscheduled0.12.2
Summary: Workflow: "KeyError: oldstates" could be reported more gracefully[PATCH] Workflow: "KeyError: oldstates" could be reported more gracefully
Type: enhancementdefect

attached patch prints out an error instead, visible in the web ui to the user:

Transition 'accept' in ticket workflow does not have any states defined.

comment:4 by Remy Blank, 14 years ago

Owner: set to Remy Blank

Thanks for the patch, I'll apply it.

comment:5 by Remy Blank, 14 years ago

Resolution: fixed
Status: newclosed

I ended up fixing this differently in [10376]. Personally, I dislike applications that stop working when I do a small typo in a configuration file. Instead, we now log warnings for invalid workflow actions when parsing the workflow, and just ignore those actions.

We could also display a warning for TRAC_ADMIN on every page (and I actually had a patch that did just that), but we should rather think about a more general way to display configuration errors to the administrator.

Modify Ticket

Change Properties
Set your email in Preferences
Action
as closed The owner will remain Remy Blank.
The resolution will be deleted. Next status will be 'reopened'.
to The owner will be changed from Remy Blank to the specified user.

Add Comment


E-mail address and name can be saved in the Preferences .
 
Note: See TracTickets for help on using tickets.