Skip to content

Tags: terrylica/python-statemachine

Tags

latest

Toggle latest's commit message
v3.0.0

2.6.0

Toggle 2.6.0's commit message
v2.6.0

v2.6.0

Toggle v2.6.0's commit message
chore: prepare release 2.6.0

- Bump version to 2.6.0 in pyproject.toml and __init__.py
- Add release notes (docs/releases/2.6.0.md)
- Add data migrations section to Django integration docs
- Update translations (extract, merge, translate 3 new messages)
- Add babel to dev dependencies

v2.5.0

Toggle v2.5.0's commit message
typo: Fix package email metadata

v2.4.0

Toggle v2.4.0's commit message
*November 5, 2024*

This release introduces powerful new features for the `StateMachine`
library: {ref}`Condition expressions` and explicit definition of
{ref}`Events`. These updates make it easier to define complex transition
conditions and enhance performance, especially in workflows with nested
or recursive event structures.

StateMachine 2.4.0 supports Python 3.7, 3.8, 3.9, 3.10, 3.11, 3.12, and
3.13.

This release introduces support for conditionals with Boolean algebra.
You can now use expressions like `or`, `and`, and `not` directly within
transition conditions, simplifying the definition of complex state
transitions. This allows for more flexible and readable condition setups
in your state machine configurations.

Example (with a spoiler of the next highlight):

```py
>>> from statemachine import StateMachine, State, Event

>>> class AnyConditionSM(StateMachine):
...     start = State(initial=True)
...     end = State(final=True)
...
...     submit = Event(
...         start.to(end, cond="used_money or used_credit"),
...         name="finish order",
...     )
...
...     used_money: bool = False
...     used_credit: bool = False

>>> sm = AnyConditionSM()
>>> sm.submit()
Traceback (most recent call last):
TransitionNotAllowed: Can't finish order when in Start.

>>> sm.used_credit = True
>>> sm.submit()
>>> sm.current_state.id
'end'

```

```{seealso}
See {ref}`Condition expressions` for more details or take a look at the
{ref}`sphx_glr_auto_examples_lor_machine.py` example.
```

Now you can explicit declare {ref}`Events` using the {ref}`event` class.
This allows custom naming, translations, and also helps your IDE to know
that events are callable.

```py
>>> from statemachine import StateMachine, State, Event

>>> class StartMachine(StateMachine):
...     created = State(initial=True)
...     started = State(final=True)
...
...     start = Event(created.to(started), name="Launch the machine")
...
>>> [e.id for e in StartMachine.events]
['start']
>>> [e.name for e in StartMachine.events]
['Launch the machine']
>>> StartMachine.start.name
'Launch the machine'

```

```{seealso}
See {ref}`Events` for more details.
```

We removed a note from the docs saying to avoid recursion loops. Since
the {ref}`StateMachine 2.0.0` release we've turned the RTC model enabled
by default, allowing nested events to occour as all events are put on an
internal queue before being executed.

```{seealso}
See {ref}`sphx_glr_auto_examples_recursive_event_machine.py` for an
example of an infinite loop state machine declaration using `after`
action callback to call the same event over and over again.

```

- Fixes
  [fgmacedo#484](fgmacedo#484)
issue where nested events inside loops could leak memory by incorrectly
  referencing previous `event_data` when queuing the next event. This
fix improves performance and stability in event-heavy workflows.

v2.3.6

Toggle v2.3.6's commit message
*September 11, 2024*

- Fixes
  [fgmacedo#474](fgmacedo#474)
install with extra was not working to install `pydot`.
- Fixes
  [fgmacedo#480](fgmacedo#480)
error when trying to trigger an event inside the initial callback.

v2.3.5

Toggle v2.3.5's commit message
*September 9, 2024*

Added Python 3.13 on the test matrix. StateMachine 2.3.5 supports Python
3.7, 3.8, 3.9, 3.10, 3.11, 3.12 and 3.13.

- Fixes
  [fgmacedo#469](fgmacedo#469)
compatibility with pydot 3.0.0+.
- Fixes
  [fgmacedo#473](fgmacedo#473)
property support for type checking.

v2.3.4

Toggle v2.3.4's commit message
*July 11, 2024*

- Fixes
  [fgmacedo#465](fgmacedo#465)
regression that caused exception when registering a listener with
unbounded callbacks.

v2.3.3

Toggle v2.3.3's commit message
*July 3, 2024*

- Fixes
  [fgmacedo#457](fgmacedo#457)
regression that caused backwards incomplatible changes when using Enums.
Thanks [@hperrey](https://github.com/hperrey)!

Deprecations that will be removed on the next major release:

- The `States.from_enum(..., use_enum_instance=True)` will be the
  default.

```{seealso}
See {ref}`States from Enum types` for more details.
```