{ "info": { "author": "Szczepan Cie\u015blik", "author_email": "szczepan.cieslik@gmail.com", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Natural Language :: English", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6" ], "description": "===================\nSuper State Machine\n===================\n\n.. image:: https://badge.fury.io/py/super_state_machine.png\n :target: http://badge.fury.io/py/super_state_machine\n\n.. image:: https://travis-ci.org/beregond/super_state_machine.png?branch=master\n :target: https://travis-ci.org/beregond/super_state_machine\n\n.. image:: https://pypip.in/d/super_state_machine/badge.png\n :target: https://pypi.python.org/pypi/super_state_machine\n\n\nSuper State Machine gives you utilities to build finite state machines.\n\n* Free software: BSD license\n* Documentation: https://super_state_machine.readthedocs.org\n* Source: https://github.com/beregond/super_state_machine\n\nFeatures\n--------\n\n* Fully tested with Python 2.7, 3.3, 3.4 and PyPy.\n\n* Create finite state machines:\n\n .. code-block:: python\n\n >>> from enum import Enum\n\n >>> from super_state_machine import machines\n\n\n >>> class Task(machines.StateMachine):\n ...\n ... state = 'draft'\n ...\n ... class States(Enum):\n ...\n ... DRAFT = 'draft'\n ... SCHEDULED = 'scheduled'\n ... PROCESSING = 'processing'\n ... SENT = 'sent'\n ... FAILED = 'failed'\n\n >>> task = Task()\n >>> task.is_draft\n False\n >>> task.set_draft()\n >>> task.state\n 'draft'\n >>> task.state = 'scheduled'\n >>> task.is_scheduled\n True\n >>> task.state = 'process'\n >>> task.state\n 'processing'\n >>> task.state = 'wrong'\n *** ValueError: Unrecognized value ('wrong').\n\n* Define allowed transitions graph, define additional named transitions\n and checkers:\n\n .. code-block:: python\n\n >>> class Task(machines.StateMachine):\n ...\n ... class States(Enum):\n ...\n ... DRAFT = 'draft'\n ... SCHEDULED = 'scheduled'\n ... PROCESSING = 'processing'\n ... SENT = 'sent'\n ... FAILED = 'failed'\n ...\n ... class Meta:\n ...\n ... allow_empty = False\n ... initial_state = 'draft'\n ... transitions = {\n ... 'draft': ['scheduled', 'failed'],\n ... 'scheduled': ['failed'],\n ... 'processing': ['sent', 'failed']\n ... }\n ... named_transitions = [\n ... ('process', 'processing', ['scheduled']),\n ... ('fail', 'failed')\n ... ]\n ... named_checkers = [\n ... ('can_be_processed', 'processing'),\n ... ]\n\n >>> task = Task()\n >>> task.state\n 'draft'\n >>> task.process()\n *** TransitionError: Cannot transit from 'draft' to 'processing'.\n >>> task.set_scheduled()\n >>> task.can_be_processed\n True\n >>> task.process()\n >>> task.state\n 'processing'\n >>> task.fail()\n >>> task.state\n 'failed'\n\n Note, that third argument restricts from which states transition will be\n **added** to allowed (in case of ``process``, new allowed transition will be\n added, from 'scheduled' to 'processing'). No argument means all available\n states, ``None`` or empty list won't add anything beyond defined ones.\n\n* Use state machines as properties:\n\n.. code-block:: python\n\n >>> from enum import Enum\n\n >>> from super_state_machine import machines, extras\n\n\n >>> class Lock(machine.StateMachine):\n\n ... class States(Enum):\n ...\n ... OPEN = 'open'\n ... LOCKED = 'locked'\n ...\n ... class Meta:\n ...\n ... allow_empty = False\n ... initial_state = 'locked'\n ... named_transitions = [\n ... ('open', 'open'),\n ... ('lock', 'locked'),\n ... ]\n\n\n >>> class Safe(object):\n ...\n ... lock1 = extras.PropertyMachine(Lock)\n ... lock2 = extras.PropertyMachine(Lock)\n ... lock3 = extras.PropertyMachine(Lock)\n ...\n ... locks = ['lock1', 'lock2', 'lock3']\n ...\n ... def is_locked(self):\n ... locks = [getattr(self, lock).is_locked for lock in self.locks]\n ... return any(locks)\n ...\n ... def is_open(self):\n ... locks = [getattr(self, lock).is_open for lock in self.locks]\n ... return all(locks)\n\n >>> safe = Safe()\n >>> safe.lock1\n 'locked'\n >>> safe.is_open\n False\n >>> safe.lock1.open()\n >>> safe.lock1.is_open\n True\n >>> safe.lock1\n 'open'\n >>> safe.is_open\n False\n >>> safe.lock2.open()\n >>> safe.lock3 = 'open'\n >>> safe.is_open\n True\n\n\n\n\nHistory\n-------\n\n2.0.2 (2017-03-13)\n++++++++++++++++++\n\n* Fixed requirements for Python > 3.4.\n\n2.0.1 (2017-02-27)\n++++++++++++++++++\n\n* Remove enum34 for Python > 3.4.\n* Added support for Python 2.6.\n\n\n2.0 (2016-09-26)\n++++++++++++++++\n\n* Added force_set method.\n* Added field machine.\n* Added support for Python 3.5.\n\nBackward compatibility breaks:\n\n* Empty state is now disallowed.\n* Only full names are allowed, when using scalars, no shortcuts.\n* Removed support for unhashable types.\n\n1.0 (2014-09-04)\n----------------\n\n* Added all basic features.\n\n0.1.0 (2014-08-08)\n---------------------\n\n* First release on PyPI.\n* Added utilities to create simple state machine.\n\n\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/beregond/super_state_machine", "keywords": "super_state_machine", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "super_state_machine", "package_url": "https://pypi.org/project/super_state_machine/", "platform": "", "project_url": "https://pypi.org/project/super_state_machine/", "project_urls": { "Homepage": "https://github.com/beregond/super_state_machine" }, "release_url": "https://pypi.org/project/super_state_machine/2.0.2/", "requires_dist": [ "six", "enum34; extra == ':python_version < \"3.4\"'" ], "requires_python": "", "summary": "Super State Machine gives you utilities to build finite state machines.", "version": "2.0.2" }, "last_serial": 2702804, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "a06e66153860164654490f4e45d51689", "sha256": "65c327bdd88d7b038e9ce640baa25ea639c3cda16b505f78b27575af804ce391" }, "downloads": -1, "filename": "super_state_machine-0.1.0.tar.gz", "has_sig": false, "md5_digest": "a06e66153860164654490f4e45d51689", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12107, "upload_time": "2014-08-08T13:17:08", "url": "https://files.pythonhosted.org/packages/11/06/de18ace09e7fadfed4678f2cbd80066cf76ef96f1e3cbae875bd29b36c30/super_state_machine-0.1.0.tar.gz" } ], "1.0": [ { "comment_text": "", "digests": { "md5": "e16788224ccf08afd3a8571af701ef8e", "sha256": "759f37a6a783f336681a5b1ca210c6681b1fdc7f698200a7c180f1511bfca873" }, "downloads": -1, "filename": "super_state_machine-1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e16788224ccf08afd3a8571af701ef8e", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 9730, "upload_time": "2014-09-04T21:20:43", "url": "https://files.pythonhosted.org/packages/1c/57/0009e45887e1808ee480a93d90123e5a79ed7a373639f4181aa1d8b2221a/super_state_machine-1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "762d1009993897f8cf427df3a579c5fa", "sha256": "577c437287c2dee375ff65e323780b6dffc78f51a1b82821b68b1156d61bcd9e" }, "downloads": -1, "filename": "super_state_machine-1.0.tar.gz", "has_sig": false, "md5_digest": "762d1009993897f8cf427df3a579c5fa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24452, "upload_time": "2014-09-04T21:20:40", "url": "https://files.pythonhosted.org/packages/74/32/685640deeaacd2a8fd0b851b3db99c8e102f33b51d4eaa34149cca16926f/super_state_machine-1.0.tar.gz" } ], "2.0": [ { "comment_text": "", "digests": { "md5": "9c8d3afd1bafef0758b1f9e96aa1468c", "sha256": "e1f9ec5702e606cd9e6c8f1a1211d2c7782fa1a0a553433bb7c6ba9c49e5a9cf" }, "downloads": -1, "filename": "super_state_machine-2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9c8d3afd1bafef0758b1f9e96aa1468c", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 10276, "upload_time": "2016-09-26T06:13:42", "url": "https://files.pythonhosted.org/packages/7d/a3/927431c44f57cc9b0555983b939b6471fce4474c131797fbbacaf109cb5b/super_state_machine-2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5a0b34a58f073e9c823db53705e173a9", "sha256": "7f44ef7cfbcfa004fe7dd7d420b7d95ae1323c92ba89cace933f22959a51864c" }, "downloads": -1, "filename": "super_state_machine-2.0.tar.gz", "has_sig": false, "md5_digest": "5a0b34a58f073e9c823db53705e173a9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24504, "upload_time": "2016-09-26T06:13:39", "url": "https://files.pythonhosted.org/packages/88/73/616542d3efadb85b7325be58a00dc61465b476791cf9aecd67711c133679/super_state_machine-2.0.tar.gz" } ], "2.0.1": [ { "comment_text": "", "digests": { "md5": "3f77214e5ea91d64b5e6d829111f3243", "sha256": "742f7533fcad4f2679aa6bf8bf056a50cc5cf7d30776d094a145d6987b9246b6" }, "downloads": -1, "filename": "super_state_machine-2.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3f77214e5ea91d64b5e6d829111f3243", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10125, "upload_time": "2017-02-27T08:39:21", "url": "https://files.pythonhosted.org/packages/06/2c/1d90911f573e963baa01513d27a4a470ad3001707475d046464b9c325303/super_state_machine-2.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "deaffc04aa15ed5a149ab684c063f232", "sha256": "7b84e77990362f21343235e5f424dbbfb22e05084a6b9ff26ee1b6d9d03402f7" }, "downloads": -1, "filename": "super_state_machine-2.0.1.tar.gz", "has_sig": false, "md5_digest": "deaffc04aa15ed5a149ab684c063f232", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24281, "upload_time": "2017-02-27T08:39:22", "url": "https://files.pythonhosted.org/packages/ab/28/8c68d40026936c5eae788961dc43c32f04a29907c9fa7d97beb58bfb7879/super_state_machine-2.0.1.tar.gz" } ], "2.0.2": [ { "comment_text": "", "digests": { "md5": "f0e60be7403d98115646b818628fadbe", "sha256": "6f615d55970be4ab57f5121a15b60568145effa49e9316a2eaaf51b0b81f3456" }, "downloads": -1, "filename": "super_state_machine-2.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f0e60be7403d98115646b818628fadbe", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10275, "upload_time": "2017-03-13T15:35:15", "url": "https://files.pythonhosted.org/packages/5a/c0/0d5a60657096284b81b70f9a8e3a75de7e433f45b3c5ad17fbd312f15f59/super_state_machine-2.0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "296e32ba7c2ca34e4e4cf0e8715f3bc4", "sha256": "e038a4c573ab80f157bf726c3036367919704f62cd166eb46837143165035958" }, "downloads": -1, "filename": "super_state_machine-2.0.2.tar.gz", "has_sig": false, "md5_digest": "296e32ba7c2ca34e4e4cf0e8715f3bc4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24423, "upload_time": "2017-03-13T15:35:17", "url": "https://files.pythonhosted.org/packages/84/ee/2c55720ce1c35e00299e57e673945c5d6379f5fc1cbe9e7d0405ca11cc72/super_state_machine-2.0.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "f0e60be7403d98115646b818628fadbe", "sha256": "6f615d55970be4ab57f5121a15b60568145effa49e9316a2eaaf51b0b81f3456" }, "downloads": -1, "filename": "super_state_machine-2.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f0e60be7403d98115646b818628fadbe", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10275, "upload_time": "2017-03-13T15:35:15", "url": "https://files.pythonhosted.org/packages/5a/c0/0d5a60657096284b81b70f9a8e3a75de7e433f45b3c5ad17fbd312f15f59/super_state_machine-2.0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "296e32ba7c2ca34e4e4cf0e8715f3bc4", "sha256": "e038a4c573ab80f157bf726c3036367919704f62cd166eb46837143165035958" }, "downloads": -1, "filename": "super_state_machine-2.0.2.tar.gz", "has_sig": false, "md5_digest": "296e32ba7c2ca34e4e4cf0e8715f3bc4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24423, "upload_time": "2017-03-13T15:35:17", "url": "https://files.pythonhosted.org/packages/84/ee/2c55720ce1c35e00299e57e673945c5d6379f5fc1cbe9e7d0405ca11cc72/super_state_machine-2.0.2.tar.gz" } ] }