provide separate notify() method for stateful objects to control notification by subclasses
git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@2563 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
parent
592058cfc5
commit
b9a0105604
2 changed files with 12 additions and 8 deletions
|
@ -28,7 +28,6 @@ state.
|
|||
We can now execute the `finish` Transition.
|
||||
|
||||
>>> demo.doTransition('finish')
|
||||
'finish'
|
||||
>>> demo.getState()
|
||||
'finished'
|
||||
|
||||
|
|
|
@ -53,14 +53,17 @@ class Stateful(object):
|
|||
|
||||
def doTransition(self, transition, historyInfo=None):
|
||||
sd = self.getStatesDefinition()
|
||||
previousState = self.getState()
|
||||
if isinstance(transition, basestring):
|
||||
sd.doTransitionFor(self, transition)
|
||||
return transition
|
||||
self.notify(transition, previousState)
|
||||
return
|
||||
available = [t.name for t in sd.getAvailableTransitionsFor(self)]
|
||||
for tr in transition:
|
||||
if tr in available:
|
||||
sd.doTransitionFor(self, tr)
|
||||
return tr
|
||||
self.notify(tr, previousState)
|
||||
return
|
||||
raise ValueError("None of the transitions '%s' is available for state '%s'."
|
||||
% (repr(transition), self.getState()))
|
||||
|
||||
|
@ -74,6 +77,10 @@ class Stateful(object):
|
|||
def getStatesDefinition(self):
|
||||
return statesDefinitions.get(self.statesDefinition, None)
|
||||
|
||||
def notify(self, transition, previousState):
|
||||
""" To be implemented by subclass.
|
||||
"""
|
||||
|
||||
|
||||
class StatefulAdapter(Stateful):
|
||||
""" An adapter for persistent objects to make them stateful.
|
||||
|
@ -98,11 +105,9 @@ class StatefulAdapter(Stateful):
|
|||
statesAttr[self.statesDefinition] = value
|
||||
state = property(getState, setState)
|
||||
|
||||
def doTransition(self, transition, historyInfo=None):
|
||||
previousState = self.getState()
|
||||
transition = super(StatefulAdapter, self).doTransition(transition, historyInfo)
|
||||
transition = self.getStatesDefinition().transitions[transition]
|
||||
notify(TransitionEvent(self.context, transition, previousState))
|
||||
def notify(self, transition, previousState):
|
||||
transObject = self.getStatesDefinition().transitions[transition]
|
||||
notify(TransitionEvent(self.context, transObject, previousState))
|
||||
|
||||
|
||||
class IndexInfo(object):
|
||||
|
|
Loading…
Add table
Reference in a new issue