Action methods are now separated into alert/revoke/reset/report. Several plugins have been modified to use this new approach, which looks easier than the older one. The older way will still work, but looks relatively more painful.
I think I've also fixed the mutability issue. Now the new update() (which calls the individual action methods) makes a shallow copy of the data payload. The action methods can then modify the payload, though preferably not any mutable objects in the payload (e.g., a dict or list), and return the payload for forwarding downstream. Without this fix, a payload modification will be seen by subsequently-executed plugins, the order of which is not guaranteed.
Action methods are now separated into alert/revoke/reset/report. Several plugins have been modified to use this new approach, which looks easier than the older one. The older way will still work, but looks relatively more painful.
I think I've also fixed the mutability issue. Now the new update() (which calls the individual action methods) makes a shallow copy of the data payload. The action methods can then modify the payload, though preferably not any mutable objects in the payload (e.g., a dict or list), and return the payload for forwarding downstream. Without this fix, a payload modification will be seen by subsequently-executed plugins, the order of which is not guaranteed.
This pull request requires the changes from #16.