-
-
Notifications
You must be signed in to change notification settings - Fork 94
Permalink
Choose a base ref
{{ refName }}
default
Choose a head ref
{{ refName }}
default
Checking mergeability…
Don’t worry, you can still create the pull request.
Comparing changes
Choose two branches to see what’s changed or to start a new pull request.
If you need to, you can also or
learn more about diff comparisons.
Open a pull request
Create a new pull request by comparing changes across two branches. If you need to, you can also .
Learn more about diff comparisons here.
base repository: fgmacedo/python-statemachine
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: main
Could not load branches
Nothing to show
Loading
Could not load tags
Nothing to show
{{ refName }}
default
Loading
...
head repository: fgmacedo/python-statemachine
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: develop
Could not load branches
Nothing to show
Loading
Could not load tags
Nothing to show
{{ refName }}
default
Loading
- 6 commits
- 14 files changed
- 5 contributors
Commits on Dec 3, 2024
-
Merge tag 'v2.5.0' into develop
*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 [#484](#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.
Configuration menu - View commit details
-
Copy full SHA for 68ba609 - Browse repository at this point
Copy the full SHA 68ba609View commit details -
Configuration menu - View commit details
-
Copy full SHA for 4449a9c - Browse repository at this point
Copy the full SHA 4449a9cView commit details
Commits on Jan 14, 2025
-
docs: mention pydot resolution settings (#514)
* docs: mention pydot resolution settings --------- Co-authored-by: Albert Latham <[email protected]>
Configuration menu - View commit details
-
Copy full SHA for 9954890 - Browse repository at this point
Copy the full SHA 9954890View commit details
Commits on Jan 26, 2025
-
Configuration menu - View commit details
-
Copy full SHA for bdb4fbd - Browse repository at this point
Copy the full SHA bdb4fbdView commit details -
Configuration menu - View commit details
-
Copy full SHA for ef351d5 - Browse repository at this point
Copy the full SHA ef351d5View commit details
Commits on Apr 14, 2025
-
Configuration menu - View commit details
-
Copy full SHA for b0367f0 - Browse repository at this point
Copy the full SHA b0367f0View commit details
Loading
This comparison is taking too long to generate.
Unfortunately it looks like we can’t render this comparison for you right now. It might be too big, or there might be something weird with your repository.
You can try running this command locally to see the comparison on your machine:
git diff main...develop