| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- """
- transitions.extensions.factory
- ------------------------------
- This module contains the definitions of classes which combine the functionality of transitions'
- extension modules. These classes can be accessed by names as well as through a static convenience
- factory object.
- """
- from ..core import Machine
- from .nesting import HierarchicalMachine, NestedTransition, NestedEvent
- from .locking import LockedMachine
- from .diagrams import GraphMachine, TransitionGraphSupport
- from .markup import MarkupMachine
- try:
- from transitions.extensions.asyncio import AsyncMachine, AsyncTransition
- from transitions.extensions.asyncio import HierarchicalAsyncMachine, NestedAsyncTransition
- except (ImportError, SyntaxError):
- class AsyncMachine: # Mocks for Python version 3.6 and earlier
- pass
- class AsyncTransition:
- pass
- class HierarchicalAsyncMachine:
- pass
- class NestedAsyncTransition:
- pass
- class MachineFactory(object):
- """
- Convenience factory for machine class retrieval.
- """
- # get one of the predefined classes which fulfill the criteria
- @staticmethod
- def get_predefined(graph=False, nested=False, locked=False, asyncio=False):
- """ A function to retrieve machine classes by required functionality.
- Args:
- graph (bool): Whether the returned class should contain graph support.
- nested: Whether the returned machine class should support nested states.
- locked: Whether the returned class should facilitate locks for threadsafety.
- Returns (class): A machine class with the specified features.
- """
- try:
- return _CLASS_MAP[(graph, nested, locked, asyncio)]
- except KeyError:
- raise ValueError("Feature combination not (yet) supported")
- class NestedGraphTransition(TransitionGraphSupport, NestedTransition):
- """
- A transition type to be used with (subclasses of) `HierarchicalGraphMachine` and
- `LockedHierarchicalGraphMachine`.
- """
- pass
- class HierarchicalMarkupMachine(MarkupMachine, HierarchicalMachine):
- pass
- class HierarchicalGraphMachine(GraphMachine, HierarchicalMarkupMachine):
- """
- A hierarchical state machine with graph support.
- """
- transition_cls = NestedGraphTransition
- class LockedHierarchicalMachine(LockedMachine, HierarchicalMachine):
- """
- A threadsafe hierarchical machine.
- """
- event_cls = NestedEvent
- class LockedGraphMachine(GraphMachine, LockedMachine):
- """
- A threadsafe machine with graph support.
- """
- pass
- class LockedHierarchicalGraphMachine(GraphMachine, LockedMachine, HierarchicalMarkupMachine):
- """
- A threadsafe hierarchical machine with graph support.
- """
- transition_cls = NestedGraphTransition
- event_cls = NestedEvent
- class AsyncGraphMachine(GraphMachine, AsyncMachine):
- transition_cls = AsyncTransition
- class HierarchicalAsyncGraphMachine(GraphMachine, HierarchicalAsyncMachine):
- transition_cls = NestedAsyncTransition
- # 4d tuple (graph, nested, locked, async)
- _CLASS_MAP = {
- (False, False, False, False): Machine,
- (False, False, True, False): LockedMachine,
- (False, True, False, False): HierarchicalMachine,
- (False, True, True, False): LockedHierarchicalMachine,
- (True, False, False, False): GraphMachine,
- (True, False, True, False): LockedGraphMachine,
- (True, True, False, False): HierarchicalGraphMachine,
- (True, True, True, False): LockedHierarchicalGraphMachine,
- (False, False, False, True): AsyncMachine,
- (True, False, False, True): AsyncGraphMachine,
- (False, True, False, True): HierarchicalAsyncMachine,
- (True, True, False, True): HierarchicalAsyncGraphMachine
- }
|