package/python-transitions: new package

Lightweight finite state machine implementation in Python.

https://github.com/pytransitions/transitions

Signed-off-by: Vincent Cruz <mooz@blockos.org>
[Julien:
 - remove directory for LICENSE in hash file
 - remove PKG-INFO entry in hash file
]
Signed-off-by: Julien Olivain <ju.o@free.fr>
This commit is contained in:
Vincent Cruz
2026-04-14 16:14:54 +02:00
committed by Julien Olivain
parent 374e31947a
commit f3d0050e3d
7 changed files with 93 additions and 0 deletions

View File

@@ -0,0 +1,34 @@
# test from https://github.com/pytransitions/transitions/blob/master/tests/test_nesting.py
from transitions.extensions import HierarchicalMachine as Machine
states = ['standing', 'walking', {'name': 'caffeinated', 'children': ['dithering', 'running']}]
transitions = [
['walk', 'standing', 'walking'],
['stop', 'walking', 'standing'],
['drink', 'caffeinated_dithering', '='],
['drink', 'caffeinated', 'caffeinated_dithering'],
['drink', '*', 'caffeinated'],
['walk', 'caffeinated', 'caffeinated_running'],
['relax', 'caffeinated', 'standing']
]
machine = Machine(states=states, transitions=transitions, initial='standing', ignore_invalid_triggers=True)
machine.walk() # Walking now
machine.stop() # let's stop for a moment
machine.drink() # coffee time
machine.state
print(machine.state)
machine.drink() # again!
print(machine.state)
machine.drink() # and again!
print(machine.state)
machine.walk() # we have to go faster
print(machine.state)
machine.stop() # can't stop moving!
machine.state
print(machine.state)
machine.relax() # leave nested state
machine.state # phew, what a ride
print(machine.state)

View File

@@ -0,0 +1,29 @@
import os
from tests.package.test_python import TestPythonPackageBase
class TestPythonTransitions(TestPythonPackageBase):
__test__ = True
config = TestPythonPackageBase.config + \
"""
BR2_PACKAGE_PYTHON3=y
BR2_PACKAGE_PYTHON_TRANSITIONS=y
"""
sample_scripts = ["tests/package/sample_python_transitions.py"]
def test_run(self):
self.login()
self.check_sample_scripts_exist()
cmd = self.interpreter + " " + os.path.basename(self.sample_scripts[0])
output, exit_code = self.emulator.run(cmd, timeout=15)
self.assertEqual(exit_code, 0)
self.assertEqual(output, [
'caffeinated',
'caffeinated_dithering',
'caffeinated_dithering',
'caffeinated_running',
'caffeinated_running',
'standing'
])