Skip to main content

Minimal state machine

Project description

Minimal state machine

  • Free software: BSD license

Usage

import fsm

class MyModel(fsm.FiniteStateMachineMixin):
    """An example to test the state machine.

    Contains transitions to everywhere, nowhere and specific states.
    """

    state_machine = {
        'created': '__all__',
        'pending': ('running',),
        'running': ('success', 'failed'),
        'success': None,
        'failed': ('retry',),
        'retry': ('pending', 'retry'),
    }

    def __init__(self, state):
        """Initialize setting a state."""
        self.state = state

    def current_state(self):
        """Overriden."""
        return self.state

    def on_before_pending(self):
        print("I'm going to a pending state")
In [4]: m = MyModel(state='created')

In [5]: m.change_state('pending')
I'm going to a pending state
Out[5]: 'pending'

In [6]: m.change_state('failed')
---------------------------------------------------------------------------
InvalidTransition                         Traceback (most recent call last)
<ipython-input-6-71d2461eee74> in <module>()
----> 1 m.change_state('failed')

~/pyfsm/src/fsm/fsm.py in change_state(self, next_state, **kwargs)
    90             msg = "The transition from {0} to {1} is not valid".format(previous_state,
    91                                                                        next_state)
---> 92             raise InvalidTransition(msg)
    93
    94         name = 'pre_{0}'.format(next_state)

InvalidTransition: The transition from pending to failed is not valid

There are hooks that can be included before a state transition happens and after.

fsm will look for these functions

::

pre_<state_name> post_<state_name>

And will give them any extra argument given to change_state

E.g:

Running m.change_state('pending', name='john') will trigger pre_pending(name='john')

Installation

pip install fsmpy

Documentation

https://pyfsm.readthedocs.org/

Development

To run the all tests run:

tox

Note, to combine the coverage data from all the tox environments run:

Windows

set PYTEST_ADDOPTS=--cov-append
tox

Other

PYTEST_ADDOPTS=--cov-append tox

Changelog

0.1.3 (2017-15-09)

  • Updated docs

  • Corrections to code

  • ci updated

0.1.0 (2016-04-18)

  • First release on PyPI.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

fsmpy-1.0.0-py2.py3-none-any.whl (4.0 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file fsmpy-1.0.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for fsmpy-1.0.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 30c785525447babad328974ef6515e6be5d509e5e823219897622d0ebf595f4e
MD5 55b70def1b071ac8e9f2d14a05f6895f
BLAKE2b-256 6047739f487937afaa1450201e8f3caadb9c8e52bccbf4379f9c3ec69f412f6f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page