Transitions Versions Save

A lightweight, object-oriented finite state machine implementation in Python with many extensions

0.8.3

3 years ago

Release 0.8.3 is a minor release and contains several bugfixes mostly related to HierarchicalStateMachine:

  • Feature #473: Assign is_<model_attribute>_<state_name> instead of is_<state_name> when model_attribute != "state" to enable multiple versions of such convenience functions. A warning will be raised when is_<state_name> is used. (thanks @artofhuman)
  • Similarly, auto transitions (to_<state_name>) will be assigned as to_<model_attribute>_<state_name>. to_<state_name> will work as before but raise a warning until version 0.9.0.
  • Bugfix: allow_substates did not consider enum states
  • Feature: Nested enums can now be passed in a dict as children with initial parameter
  • Bugfix #449: get_triggers/get_transitions did not return nested triggers correctly (thanks @alexandretanem)
  • Feature #452: Improve handling of label attributes in custom diagram states and TransitionGraphSupport (thanks @badiku)
  • Bugfix #456: Prevent parents from overriding (falsy) results of their children's events (thanks @alexandretanem)
  • Bugfix #458: Entering the same state caused key errors when transition was defined on a parent (thanks @matlom)
  • Bugfix #459: Do not remove current timeout runner in AsyncTimeout to prevent accidental overrides (thanks @rgov)
  • Rewording of State.enter/exit debug message emitted when callbacks have been processed.
  • Bugfix #370: Fix order of before_state_change/before and after/after_state_change in AsyncMachine (thanks @tzoiker and @vishes-shell)
  • Bugfix #470: Graph.get_graph() did not consider enum states when show_roi=True (thank @termim)

0.8.2

3 years ago

Release 0.8.2 is a minor release and contains several bugfixes and improvements:

  • Bugfix #438: Improved testing without any optional graphviz package
  • Bugfix: _check_event_result failed when model was in parallel state
  • Bugfix #440: Only allow explicit dest=None in Machine.add_transition (not just falsy) for internal transitions (thanks @Pathfinder216)
  • Bugfix #419: Fix state creation of nested enums (thanks @thedrow)
  • Bugfix #428: HierarchicalGraphMachine did not find/apply styling for parallel states (thanks @xiaohuihui1024)
  • Bugfix: Model.trigger now considers the machine's and current state's ignore_invalid_triggers attribute and can be called with non-existing events (thanks @potens1)
  • Bugfix: Child states may not have been exited when the executed transition had been defined on a parent (thanks @thedrow)
  • Feature #429: Introduced transitions.extensions.asyncio.AsyncTimeout as a state decorator to avoid threads used in transitions.extensions.state.Timeout (thanks @potens1)
  • Feature #444: transitions can now be tested online at mybinder.org
  • PR #418: Use sets instead of lists to cache already covered transitions in nested state machines (thanks @thedrow)
  • PR #422: Improve handling of unresolved attributes for easier inheritance (thanks @thedrow)
  • PR #445: Refactored AsyncMachine to enable trio/anyio override

0.8.1

4 years ago

Release 0.8.1 is a minor release of HSM improvements and bugfixes in the diagram and async extension

  • Feature: Introduced experimental HierarchicalAsync(Graph)Machine
  • Feature #405: Support for nested Enums in HierarchicalMachine (thanks @thedrow)
  • Bugfix #400: Fix style initialization when initial state is an Enum (thanks @kbinpgh)
  • Bugfix #403: AsyncMachine.dispatch now returns a boolean as expected (thanks @thedrow)
  • Bugfix #413: Improve diagram output for HierarchicalMachine (thanks @xiaohuihui1024)
  • Increased coverage (thanks @thedrow)
  • Introduced xdist for parallel testing with pytest (thanks @thedrow)

0.8.0

4 years ago

Release 0.8.0 is a major release and introduces asyncio support for Python 3.7+, parallel state support and some bugfixes

  • Feature: HierarchicalMachine has been rewritten to support parallel states. Please have a look at the ReadMe.md to check what has changed.
    • The previous version can be found in transitions.extensions.nesting_legacy for now
  • Feature: Introduced AsyncMachine (see discussion #259); note that async HSMs are not yet supported
  • Feature #390: String callbacks can now point to properties and attributes (thanks @jsenecal)
  • Bugfix: Auto transitions are added multiple times when add_states is called more than once
  • Bugfix: Convert state._name from Enum into strings in MarkupMachine when necessary
  • Bugfix #392: Allow Machine.add_ordered_transitions to be called without the initial state (thanks @mkaranki and @facundofc)
  • GraphMachine now attempts to fall back to graphviz when importing pygraphviz fails
  • Not implemented/tested so far (contributions are welcome!):
    • Proper Graphviz support of parallel states
    • AsyncHierachicalMachine

0.7.2

4 years ago

Release 0.7.2 is a minor release and contains bugfixes and and a new feature:

  • Bugfix #386: Fix transitions for enums with str behavior (thanks @artofhuman)
  • Bugfix #378: Don't mask away KeyError when executing a transition (thanks @facundofc)
  • Feature #387: Add support for dynamic model state attribute (thanks @v1k45)

0.7.1

4 years ago

Release 0.7.1 is a minor release and contains several documentation improvements and a new feature:

  • Feature #334: Added Enum (Python 3.4+: enum Python 2.7: enum34) support (thanks @artofhuman and @justinttl)
  • Replaced test framework nosetests with pytest (thanks @artofhuman)
  • Extended add_ordered_transitions documentation in Readme.md
  • Collected code snippets from earlier discussions in examples/Frequently asked questions.ipynb
  • Improved stripping of long_description in setup.py (thanks @artofhuman)

0.7.0

4 years ago

Release 0.7.0 is a major release with fundamental changes to the diagram extension. It also introduces an intermediate MarkupMachine which can be used to transfer and (re-)initialize machine configurations.

  • Feature #263: MarkupMachine can be used to retrieve a Machine's dictionary representation
    • GraphMachine uses this representation for Graphs now and does not rely on Machine attributes any longer
  • Feature: The default value of State.ignore_invalid_triggers changed to None. If it is not explicitly set, the Machine's value is used instead.
  • Feature #325: transitions now supports pygraphviz and graphviz for the creation of diagrams. Currently, GraphMachine will check for pygraphviz first and fall back to graphviz. To use graphviz directly pass use_pygraphiv=False to the constructor of GraphMachine
  • Diagram style has been overhauled. Have a look at GraphMachine's attributes machine_attributes and style_attributes to adjust it to your needs.
  • Feature #305: Timeouts and other features are now marked in the graphs
  • Bugfix #343: get_graph was not assigned to models added during machine runtime

0.6.9

5 years ago

0.6.8

6 years ago

0.6.7

6 years ago