{ "info": { "author": "Zen Chien", "author_email": "jixing.jian@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Text Processing :: Linguistic" ], "description": "This is a python library supporting statechart (in scxml format) originated by David Harel.\nFeatures like hierarchical states, parallel states, and history are ready for you to command.\nYou won't find another lib as easy and flexible to use as SCM.\n\nJust take a look and run scm_tutorial.py please.\nThe code is listed here:\n\n.. code:: python\n\n from scm import StateMachineManager\n\n client_scxml = \"\"\"\n \n \n \n \n \n \n \n \n \n \n \n \n \n \"\"\"\n\n class Life:\n def __init__(self):\n self.mach_ = StateMachineManager.instance().getMach('the life')\n self.mach_.set_do_exit_state_on_destroy(True)\n self.mach_.register_state_slot(\"appear\", self.onentry_appear, self.onexit_appear)\n self.mach_.register_state_slot(\"live\", self.onentry_live, self.onexit_live)\n self.mach_.register_state_slot(\"eat\", self.onentry_eat, self.onexit_eat)\n self.mach_.register_state_slot(\"move\", self.onentry_move, self.onexit_move)\n self.mach_.register_state_slot(\"dead\", self.onentry_dead, self.onexit_dead)\n self.mach_.register_action_slot('say_hello', self.say_hello)\n self.mach_.StartEngine()\n\n def test(self):\n self.mach_.enqueEvent(\"born\")\n #self.mach_.frame_move(0) # state change to 'live'\n StateMachineManager.instance().pumpMachEvents()\n self.mach_.enqueEvent(\"hp_zero\")\n #self.mach_.frame_move(0) # state change to 'dead'\n StateMachineManager.instance().pumpMachEvents()\n\n def onentry_appear(self):\n print(\"come to exist\")\n\n def onexit_appear(self):\n print(\"we are going to...\")\n\n def onentry_live(self):\n print(\"start living\")\n\n def onexit_live(self):\n print(\"no longer live\")\n\n def onentry_eat(self):\n print(\"start eating\")\n\n def onexit_eat(self):\n print(\"stop eating\")\n\n def onentry_move(self):\n print(\"start moving\")\n\n def onexit_move(self):\n print(\"stop moving\")\n\n def onentry_dead(self):\n print(\"end\")\n\n def onexit_dead(self):\n assert (0 and \"should not exit final state\");\n print(\"no, this won't get called.\")\n\n def say_hello(self):\n print(\"\\n*** Hello, World! ***\\n\")\n\n if __name__ == '__main__':\n StateMachineManager.instance().set_scxml(\"the life\", client_scxml)\n life = Life()\n life.test()\n StateMachineManager.instance().pumpMachEvents()\n\n\n\nThe output you should see\n\n::\n\n come to exist\n we are going to...\n\n *** Hello, World! ***\n\n start living\n start eating\n start moving\n stop eating\n stop moving\n no longer live\n end\n\nSimply\n\n1. you load the scxml from external file or from a string defined in your code.\n2. you connect these **onentry_** **onexit_**, etc. slots\n3. you start the engine, call the framemove in main loop.\n\nDone.\n\nIt's that easy!\n\nRead the tutorials at:\n\n- (English) http://zen747.blogspot.tw/2017/07/a-scm-framework-tutorial-statechart.html\n- (Traditional Chinese) http://zen747.blogspot.tw/2017/07/scm-framework.html\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/zen747/pyscm", "keywords": "statecharts,state-machine,scxml,david-harel", "license": "Apache License 2.0", "maintainer": "", "maintainer_email": "", "name": "py-scm", "package_url": "https://pypi.org/project/py-scm/", "platform": "", "project_url": "https://pypi.org/project/py-scm/", "project_urls": { "Homepage": "https://github.com/zen747/pyscm" }, "release_url": "https://pypi.org/project/py-scm/1.0.1/", "requires_dist": null, "requires_python": ">=3.6", "summary": "A python state machine framework based on statecharts (scxml)", "version": "1.0.1" }, "last_serial": 5260475, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "bebbcf837d06359b2cd79b0eea25daf0", "sha256": "1c2a3845d449eeee6b5d2a4ff0609104718b1689f15fb85a7f317d3fc205d0f8" }, "downloads": -1, "filename": "py_scm-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "bebbcf837d06359b2cd79b0eea25daf0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 14978, "upload_time": "2019-03-10T13:37:22", "url": "https://files.pythonhosted.org/packages/f9/f8/7f44d3345f43990f89ea49a7e954663d2836e963a66ac77f96a82f0c3c55/py_scm-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3615d75751580107aa0239d1deaf85a9", "sha256": "eebb464061a07a07c52342cb565b73d8a396af98a4d3cf200efd495decec5330" }, "downloads": -1, "filename": "py-scm-1.0.0.tar.gz", "has_sig": false, "md5_digest": "3615d75751580107aa0239d1deaf85a9", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 15238, "upload_time": "2019-03-10T13:37:24", "url": "https://files.pythonhosted.org/packages/2c/e0/a716aa41571d8efcde0441a0e5d85cc221dfa97b672bfced3a15354699de/py-scm-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "ec6a05857f1b42b58e4e7a67f54c6c65", "sha256": "92828379398efb336c3a855d36fe11052525ec28e04f2bbde458c3fbb5a97ac8" }, "downloads": -1, "filename": "py_scm-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "ec6a05857f1b42b58e4e7a67f54c6c65", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 15115, "upload_time": "2019-05-13T03:01:02", "url": "https://files.pythonhosted.org/packages/fc/4b/0ef80b30e699245613bb94c677bddd4b9189c13e5e442c0d97860769632a/py_scm-1.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8146096e229df14acd897f908c8c7893", "sha256": "1a088b354c82841d233f7a5dcadf0b91d4954f26c1409c1f0a357ca88376f7c2" }, "downloads": -1, "filename": "py-scm-1.0.1.tar.gz", "has_sig": false, "md5_digest": "8146096e229df14acd897f908c8c7893", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 15638, "upload_time": "2019-05-13T03:01:03", "url": "https://files.pythonhosted.org/packages/ea/88/644a9c880a110e40fb5bee4250bcc21d4df73fbb16967bf6c34419e13928/py-scm-1.0.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "ec6a05857f1b42b58e4e7a67f54c6c65", "sha256": "92828379398efb336c3a855d36fe11052525ec28e04f2bbde458c3fbb5a97ac8" }, "downloads": -1, "filename": "py_scm-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "ec6a05857f1b42b58e4e7a67f54c6c65", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 15115, "upload_time": "2019-05-13T03:01:02", "url": "https://files.pythonhosted.org/packages/fc/4b/0ef80b30e699245613bb94c677bddd4b9189c13e5e442c0d97860769632a/py_scm-1.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8146096e229df14acd897f908c8c7893", "sha256": "1a088b354c82841d233f7a5dcadf0b91d4954f26c1409c1f0a357ca88376f7c2" }, "downloads": -1, "filename": "py-scm-1.0.1.tar.gz", "has_sig": false, "md5_digest": "8146096e229df14acd897f908c8c7893", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 15638, "upload_time": "2019-05-13T03:01:03", "url": "https://files.pythonhosted.org/packages/ea/88/644a9c880a110e40fb5bee4250bcc21d4df73fbb16967bf6c34419e13928/py-scm-1.0.1.tar.gz" } ] }