{ "info": { "author": "Santiago Fraire Willemoes", "author_email": "santiwilly@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "========\nOverview\n========\n\n.. start-badges\n\n.. list-table::\n :stub-columns: 1\n\n * - docs\n - |docs|\n * - tests\n - | |travis|\n | |codecov|\n * - package\n - |version| |wheel| |supported-versions| |supported-implementations|\n\n.. |docs| image:: https://readthedocs.org/projects/pyfsm/badge/?style=flat\n :target: https://readthedocs.org/projects/pyfsm\n :alt: Documentation Status\n\n.. |travis| image:: https://travis-ci.org/Woile/pyfsm.svg?branch=master\n :alt: Travis-CI Build Status\n :target: https://travis-ci.org/Woile/pyfsm\n\n.. |codecov| image:: https://codecov.io/github/Woile/pyfsm/coverage.svg?branch=master\n :alt: Coverage Status\n :target: https://codecov.io/github/Woile/pyfsm\n\n.. |version| image:: https://img.shields.io/pypi/v/fsmpy.svg?style=flat\n :alt: PyPI Package latest release\n :target: https://pypi.python.org/pypi/fsmpy\n\n.. |wheel| image:: https://img.shields.io/pypi/wheel/fsmpy.svg?style=flat\n :alt: PyPI Wheel\n :target: https://pypi.python.org/pypi/fsmpy\n\n.. |supported-versions| image:: https://img.shields.io/pypi/pyversions/fsmpy.svg?style=flat\n :alt: Supported versions\n :target: https://pypi.python.org/pypi/fsmpy\n\n.. |supported-implementations| image:: https://img.shields.io/pypi/implementation/fsmpy.svg?style=flat\n :alt: Supported implementations\n :target: https://pypi.python.org/pypi/fsmpy\n\n\n.. end-badges\n\nMinimal state machine\n\n* Free software: BSD license\n\n.. contents::\n :depth: 2\n\nUsage\n=====\n\n.. code-block:: python\n\n import fsm\n\n class MyTasks(fsm.FiniteStateMachineMixin):\n \"\"\"An example to test the state machine.\n\n Contains transitions to everywhere, nowhere and specific states.\n \"\"\"\n\n state_machine = {\n 'created': '__all__',\n 'pending': ('running',),\n 'running': ('success', 'failed'),\n 'success': None,\n 'failed': ('retry',),\n 'retry': ('pending', 'retry'),\n }\n\n def __init__(self, state):\n \"\"\"Initialize setting a state.\"\"\"\n self.state = state\n\n def on_before_pending(self):\n print(\"I'm going to a pending state\")\n\n::\n\n In [4]: m = MyTasks(state='created')\n\n In [5]: m.change_state('pending')\n I'm going to a pending state\n Out[5]: 'pending'\n\n In [6]: m.change_state('failed')\n ---------------------------------------------------------------------------\n InvalidTransition Traceback (most recent call last)\n in ()\n ----> 1 m.change_state('failed')\n\n ~/pyfsm/src/fsm/fsm.py in change_state(self, next_state, **kwargs)\n 90 msg = \"The transition from {0} to {1} is not valid\".format(previous_state,\n 91 next_state)\n ---> 92 raise InvalidTransition(msg)\n 93\n 94 name = 'pre_{0}'.format(next_state)\n\n InvalidTransition: The transition from pending to failed is not valid\n\n\nThere are hooks that can be included before a state transition happens and after.\n\nfsm will look for these functions\n\n::\n\n pre_\n post_\n\nAnd will give them any extra argument given to :code:`change_state`\n\nE.g:\n\nRunning :code:`m.change_state('pending', name='john')` will trigger :code:`pre_pending(name='john')`\n\n\nInstallation\n============\n\n::\n\n pip install fsmpy\n\n\nDjango integration\n==================\n\n.. code-block:: python\n\n import fsm\n from django.db import models\n\n\n class MyModel(models.Model, fsm.FiniteStateMachineMixin):\n \"\"\"An example to test the state machine.\n\n Contains transitions to everywhere, nowhere and specific states.\n \"\"\"\n\n CHOICES = (\n ('created', 'CREATED'),\n ('pending', 'PENDING'),\n ('running', 'RUNNING'),\n ('success', 'SUCCESS'),\n ('failed', 'FAILED'),\n ('retry', 'RETRY'),\n )\n\n state_machine = {\n 'created': '__all__',\n 'pending': ('running',),\n 'running': ('success', 'failed'),\n 'success': None,\n 'failed': ('retry',),\n 'retry': ('pending', 'retry'),\n }\n\n state = models.CharField(max_length=30, choices=CHOICES, default='created')\n\n def on_change_state(self, previous_state, next_state, **kwargs):\n self.save()\n\n\nDocumentation\n=============\n\nhttps://pyfsm.readthedocs.org/\n\nDevelopment\n===========\n\nTo run the tests run::\n\n tox\n\nNote, to combine the coverage data from all the tox environments run:\n\n.. list-table::\n :widths: 10 90\n :stub-columns: 1\n\n - - Windows\n - ::\n\n set PYTEST_ADDOPTS=--cov-append\n tox\n\n - - Other\n - ::\n\n PYTEST_ADDOPTS=--cov-append tox\n", "description_content_type": "text/x-rst", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/Woile/pyfsm", "keywords": "finite,state,machine,minimal", "license": "MIT", "maintainer": "Santiago Fraire Willemoes", "maintainer_email": "santiwilly@gmail.com", "name": "fsmpy", "package_url": "https://pypi.org/project/fsmpy/", "platform": "", "project_url": "https://pypi.org/project/fsmpy/", "project_urls": { "Homepage": "https://github.com/Woile/pyfsm" }, "release_url": "https://pypi.org/project/fsmpy/2.0.0/", "requires_dist": null, "requires_python": "", "summary": "Minimal state machine", "version": "2.0.0" }, "last_serial": 4208187, "releases": { "0.1.2": [ { "comment_text": "", "digests": { "md5": "d9de507341c35c447665adafaeecadff", "sha256": "726a4d768eda2e2bef50db3e9b6d6829d005eb1c75cf48c7554621f90c64f32c" }, "downloads": -1, "filename": "fsmpy-0.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d9de507341c35c447665adafaeecadff", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 4472, "upload_time": "2017-03-26T17:07:32", "url": "https://files.pythonhosted.org/packages/59/95/7fdba0fd4a059246238a3806b9b2daf3ca35b07ac6e7da09a4ce6be1b916/fsmpy-0.1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3a0eb694a6b765e693a82cd721499893", "sha256": "5820ffd0456ce9fcb9593151ae65b83e06b53bda62a29edd229a2fa83a90a378" }, "downloads": -1, "filename": "fsmpy-0.1.2.tar.gz", "has_sig": false, "md5_digest": "3a0eb694a6b765e693a82cd721499893", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11425, "upload_time": "2017-03-26T17:07:29", "url": "https://files.pythonhosted.org/packages/27/98/c10c9f1388c281a8c13336c0f1a867cfd91a62873b655e63ae90e0de3261/fsmpy-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "a465f51a352a22de473ba69f7913712a", "sha256": "1abeb886d4b6f0759ffd17b978ed32a2afb111c1a798d0fc058e572a1b6f24de" }, "downloads": -1, "filename": "fsmpy-0.1.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a465f51a352a22de473ba69f7913712a", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 4601, "upload_time": "2017-09-15T14:55:54", "url": "https://files.pythonhosted.org/packages/c9/ad/bf3facaa0035135418d7c9126e551a3d08103432f6ee195e5f5860f2cb51/fsmpy-0.1.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9eedf6f32110535ae9522b51929cad78", "sha256": "e6e26081fe46585afa9e74e80179d0f98fd6b03225f61e8f4a39ab213fcc6900" }, "downloads": -1, "filename": "fsmpy-0.1.3.tar.gz", "has_sig": false, "md5_digest": "9eedf6f32110535ae9522b51929cad78", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11721, "upload_time": "2017-09-15T14:55:51", "url": "https://files.pythonhosted.org/packages/43/e9/ce20c46b3d814a4d1555d688f17b22adf4b02b5014f58665094641b92394/fsmpy-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "9202b85423e8484cfa9612fde36ef065", "sha256": "6914cf238bf8c37c0d178901018dab6048b03e98e41a57b9a99ebb47dfb70864" }, "downloads": -1, "filename": "fsmpy-0.1.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9202b85423e8484cfa9612fde36ef065", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 4602, "upload_time": "2017-09-15T15:20:21", "url": "https://files.pythonhosted.org/packages/a1/0c/74cbf4468bed5949c58fe3fd457cbbd1bf6cc3768c3e5f9ce0c0ed651284/fsmpy-0.1.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "200a38a8db91e0939ff04370cb84fac0", "sha256": "cf454aa0218ca529232b77f792f2b4613a5910c3ebb998d5e95c117bc71f36d5" }, "downloads": -1, "filename": "fsmpy-0.1.4.tar.gz", "has_sig": false, "md5_digest": "200a38a8db91e0939ff04370cb84fac0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11864, "upload_time": "2017-09-15T15:20:19", "url": "https://files.pythonhosted.org/packages/98/f3/d9da42b7773e6b1f0e0ba8dc1f0110aa32ac7b38e1b8adf68832ed3c40e3/fsmpy-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "83124b6ee830a29245fdf5880ef57619", "sha256": "521872c4d13d99a0dd8a253e889df7a2f7ecc618545894fdad15a175f04940af" }, "downloads": -1, "filename": "fsmpy-0.1.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "83124b6ee830a29245fdf5880ef57619", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 4603, "upload_time": "2017-09-15T15:38:45", "url": "https://files.pythonhosted.org/packages/93/5a/a78a0a0f370474fef363ec4c812043c25a5644191647de6b578acae22d05/fsmpy-0.1.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f01d729d63d22ce66fa79fc4b85e11d5", "sha256": "c193f943042c110a2c1e842e9de180a3a072da1b729a3f915737b05839048cde" }, "downloads": -1, "filename": "fsmpy-0.1.5.tar.gz", "has_sig": false, "md5_digest": "f01d729d63d22ce66fa79fc4b85e11d5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11865, "upload_time": "2017-09-15T15:38:42", "url": "https://files.pythonhosted.org/packages/cc/49/42d9fc1900d004f93a1a8317610eb7099939c1ac31208648fc6e14f9c323/fsmpy-0.1.5.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "55b70def1b071ac8e9f2d14a05f6895f", "sha256": "30c785525447babad328974ef6515e6be5d509e5e823219897622d0ebf595f4e" }, "downloads": -1, "filename": "fsmpy-1.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "55b70def1b071ac8e9f2d14a05f6895f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 4042, "upload_time": "2018-07-03T17:32:53", "url": "https://files.pythonhosted.org/packages/60/47/739f487937afaa1450201e8f3caadb9c8e52bccbf4379f9c3ec69f412f6f/fsmpy-1.0.0-py2.py3-none-any.whl" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "efc6acae68e19f76b1b96b1f24e3ab3c", "sha256": "466ada233bfb7d01e9065b4060cfc577e74db61ca60ca7437f237d7feb85b26d" }, "downloads": -1, "filename": "fsmpy-1.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "efc6acae68e19f76b1b96b1f24e3ab3c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 4075, "upload_time": "2018-07-03T17:45:48", "url": "https://files.pythonhosted.org/packages/1d/cd/2ca7ad8ca358261e030b79428fe007f5070ad9de343e38bb968895a1e817/fsmpy-1.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d53dd135b8a97727dba541e67ab6be78", "sha256": "df4fbff7e52184ff9e35f76dfd1d06e0584b52f732c4c2020a4f0de3cf2476d3" }, "downloads": -1, "filename": "fsmpy-1.0.1.tar.gz", "has_sig": false, "md5_digest": "d53dd135b8a97727dba541e67ab6be78", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13460, "upload_time": "2018-07-03T17:45:49", "url": "https://files.pythonhosted.org/packages/ec/62/6ba9d265920bcfffbf23fa91800366e7acc7af8294a82b313ecbb440b084/fsmpy-1.0.1.tar.gz" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "cdba622913b907369d6da47995e6be2f", "sha256": "86efb4c5ac9ec1af20270ac9abb8408c2327222672119026c64e399a4a652608" }, "downloads": -1, "filename": "fsmpy-2.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "cdba622913b907369d6da47995e6be2f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 8969, "upload_time": "2018-08-26T12:24:04", "url": "https://files.pythonhosted.org/packages/ee/be/80c9e6db810fc3e9dc7ed0d78d4491ac456341f8111e2f6f3319c314448b/fsmpy-2.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "75c1f1f00b4825837c786ad5f0d6f1a5", "sha256": "3b23e2ffeb85a344e8650b0c7c7be04ff421defc81f30bb737cc17baeeeb4b3c" }, "downloads": -1, "filename": "fsmpy-2.0.0.tar.gz", "has_sig": false, "md5_digest": "75c1f1f00b4825837c786ad5f0d6f1a5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5216, "upload_time": "2018-08-26T12:24:05", "url": "https://files.pythonhosted.org/packages/81/81/a4f33a4865bf8689ccd272c455e97d718e57a4447db3fcd10cdc2ff2a5db/fsmpy-2.0.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "cdba622913b907369d6da47995e6be2f", "sha256": "86efb4c5ac9ec1af20270ac9abb8408c2327222672119026c64e399a4a652608" }, "downloads": -1, "filename": "fsmpy-2.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "cdba622913b907369d6da47995e6be2f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 8969, "upload_time": "2018-08-26T12:24:04", "url": "https://files.pythonhosted.org/packages/ee/be/80c9e6db810fc3e9dc7ed0d78d4491ac456341f8111e2f6f3319c314448b/fsmpy-2.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "75c1f1f00b4825837c786ad5f0d6f1a5", "sha256": "3b23e2ffeb85a344e8650b0c7c7be04ff421defc81f30bb737cc17baeeeb4b3c" }, "downloads": -1, "filename": "fsmpy-2.0.0.tar.gz", "has_sig": false, "md5_digest": "75c1f1f00b4825837c786ad5f0d6f1a5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5216, "upload_time": "2018-08-26T12:24:05", "url": "https://files.pythonhosted.org/packages/81/81/a4f33a4865bf8689ccd272c455e97d718e57a4447db3fcd10cdc2ff2a5db/fsmpy-2.0.0.tar.gz" } ] }