From 6c447c4d663d0badddd84976033504c855325ce5 Mon Sep 17 00:00:00 2001 From: Paul McGuire Date: Mon, 15 Apr 2019 18:53:05 -0500 Subject: Refactor generated State code to use overridden transition methods instead of overriding getattr; add generation of state-managing mixin class to delegate to _state instance variable, and reworked demos to use mixin instead of replicating state code --- examples/statemachine/documentSignoffDemo.py | 21 +++------------------ 1 file changed, 3 insertions(+), 18 deletions(-) (limited to 'examples/statemachine/documentSignoffDemo.py') diff --git a/examples/statemachine/documentSignoffDemo.py b/examples/statemachine/documentSignoffDemo.py index 58aa208..0cbfc1f 100644 --- a/examples/statemachine/documentSignoffDemo.py +++ b/examples/statemachine/documentSignoffDemo.py @@ -7,26 +7,11 @@ import statemachine import documentsignoffstate +print('\n'.join(t.__name__ for t in documentsignoffstate.DocumentRevisionState.transitions())) -class Document: +class Document(documentsignoffstate.DocumentRevisionStateMixin): def __init__(self): - # start light in Red state - self._state = documentsignoffstate.New() - - @property - def state(self): - return self._state - - # get behavior/properties from current state - def __getattr__(self, attrname): - attr = getattr(self._state, attrname) - if isinstance(getattr(documentsignoffstate, attrname, None), - documentsignoffstate.DocumentRevisionStateTransition): - return lambda : setattr(self, '_state', attr()) - return attr - - def __str__(self): - return "{0}: {1}".format(self.__class__.__name__, self._state) + self.initialize_state(documentsignoffstate.New()) def run_demo(): -- cgit v1.2.1