diff --git a/DEVELOPERS b/DEVELOPERS index 1ad64e876e..b20cf7d93c 100644 --- a/DEVELOPERS +++ b/DEVELOPERS @@ -3361,6 +3361,9 @@ F: package/rtl8822cs/ N: Victor Huesca F: support/testing/tests/core/test_root_password.py +N: Vincent Cruz +F: package/python-transitions/ + N: Vincent Jardin F: board/nvidia/bf3/ F: configs/nvidia_bf3_defconfig diff --git a/package/Config.in b/package/Config.in index bd2e06dc0b..d0f148699b 100644 --- a/package/Config.in +++ b/package/Config.in @@ -1463,6 +1463,7 @@ menu "External python modules" source "package/python-tqdm/Config.in" source "package/python-trafaret/Config.in" source "package/python-traitlets/Config.in" + source "package/python-transitions/Config.in" source "package/python-treq/Config.in" source "package/python-trio/Config.in" source "package/python-trio-websocket/Config.in" diff --git a/package/python-transitions/Config.in b/package/python-transitions/Config.in new file mode 100644 index 0000000000..4289b446f5 --- /dev/null +++ b/package/python-transitions/Config.in @@ -0,0 +1,7 @@ +config BR2_PACKAGE_PYTHON_TRANSITIONS + bool "python-transitions" + select BR2_PACKAGE_PYTHON_SIX # runtime + help + Lightweight finite state machine implementation in Python. + + https://github.com/pytransitions/transitions diff --git a/package/python-transitions/python-transitions.hash b/package/python-transitions/python-transitions.hash new file mode 100644 index 0000000000..9d0057c793 --- /dev/null +++ b/package/python-transitions/python-transitions.hash @@ -0,0 +1,4 @@ +# From https://pypi.org/pypi/transitions/0.9.3/json +sha256 881fb75bb1654ed55d86060bb067f2c716f8e155f57bb73fd444e53713aafec8 transitions-0.9.3.tar.gz +# Locally computed +sha256 fd7115fc5517d1d2d042a80a33d92033532236830a9c25866112299fe33c036b LICENSE diff --git a/package/python-transitions/python-transitions.mk b/package/python-transitions/python-transitions.mk new file mode 100644 index 0000000000..8189cebcbd --- /dev/null +++ b/package/python-transitions/python-transitions.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# python-transitions +# +################################################################################ + +PYTHON_TRANSITIONS_VERSION = 0.9.3 +PYTHON_TRANSITIONS_SOURCE = transitions-$(PYTHON_TRANSITIONS_VERSION).tar.gz +PYTHON_TRANSITIONS_SITE = https://files.pythonhosted.org/packages/source/t/transitions +PYTHON_TRANSITIONS_SETUP_TYPE = setuptools + +PYTHON_TRANSITIONS_LICENSE = MIT +PYTHON_TRANSITIONS_LICENSE_FILES = LICENSE + +$(eval $(python-package)) diff --git a/support/testing/tests/package/sample_python_transitions.py b/support/testing/tests/package/sample_python_transitions.py new file mode 100644 index 0000000000..ca33309998 --- /dev/null +++ b/support/testing/tests/package/sample_python_transitions.py @@ -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) diff --git a/support/testing/tests/package/test_python_transitions.py b/support/testing/tests/package/test_python_transitions.py new file mode 100644 index 0000000000..ae64284720 --- /dev/null +++ b/support/testing/tests/package/test_python_transitions.py @@ -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' + ])