diff --git a/stateful/README.txt b/stateful/README.txt index 1de7213..f095470 100644 --- a/stateful/README.txt +++ b/stateful/README.txt @@ -17,7 +17,7 @@ behaviour directly. >>> demo = Demo() -The default states definition has the `started` state has its initial +The default states definition has the `started` state as its initial state. >>> demo.getState() @@ -34,21 +34,15 @@ We can now execute the `finish` Transition. More complex states definitions ------------------------------- - >>> registerStatesDefinition( - ... StatesDefinition('publishing', - ... State('private', 'private', ('show',)), - ... State('visible', 'visible', ('publish', 'hide',)), - ... State('published', 'published', ('retract',)), - ... Transition('show', 'show', 'visible'), - ... Transition('hide', 'hide', 'private'), - ... Transition('publish', 'publish', 'published'), - ... Transition('retract', 'retract', 'visible'), - ... initialState='visible')) +We'll use a predefined simple publishing workflow that. + + >>> from cybertools.stateful.publishing import simplePublishing + >>> registerStatesDefinition(simplePublishing) >>> demo = Demo() >>> demo.statesDefinition = 'publishing' >>> demo.getState() - 'visible' + 'draft' If we try to execute a transition that is not an outgoing transition of the current state we get an error. @@ -56,9 +50,9 @@ of the current state we get an error. >>> demo.doTransition('retract') Traceback (most recent call last): ... - ValueError: Transition 'retract' is not reachable from state 'visible'. + ValueError: Transition 'retract' is not reachable from state 'draft'. >>> demo.getState() - 'visible' + 'draft' Stateful Adapters diff --git a/stateful/publishing.py b/stateful/publishing.py new file mode 100644 index 0000000..60f5567 --- /dev/null +++ b/stateful/publishing.py @@ -0,0 +1,40 @@ +# +# Copyright (c) 2008 Helmut Merz helmutm@cy55.de +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +""" +Definition of a simple publishing workflow. + +$Id$ +""" + +from zope.interface import implements + +from cybertools.stateful.definition import registerStatesDefinition +from cybertools.stateful.definition import StatesDefinition +from cybertools.stateful.definition import State, Transition + + +simplePublishing = StatesDefinition('publishing', + State('private', 'private', ('show',)), + State('draft', 'draft', ('publish', 'hide',)), + State('published', 'published', ('retract',)), + Transition('show', 'show', 'draft'), + Transition('hide', 'hide', 'private'), + Transition('publish', 'publish', 'published'), + Transition('retract', 'retract', 'draft'), + initialState='draft')