{ "info": { "author": "Roboy", "author_email": "info@roboy.org", "bugtrack_url": null, "classifiers": [ "Operating System :: OS Independent", "Programming Language :: Python :: 3" ], "description": "[![Release](https://img.shields.io/github/release/Roboy/ravestate.svg)](https://github.com/roboy/ravestate)\n[![Build Status](https://travis-ci.org/Roboy/ravestate.svg?branch=master)](https://travis-ci.org/Roboy/ravestate)\n[![codecov](https://codecov.io/gh/Roboy/ravestate/branch/master/graph/badge.svg)](https://codecov.io/gh/Roboy/ravestate)\n\n## About\n\n```\n ____ __ __ _____ _____ \n / _ \\____ __ ______ ______/ /_____/ /___ /_ _\\ /_ _\\ \n / /_/ / __ \\/ / / / __ \\/ ___\\, / __ \\, / __ \\ 0> 0> <0 <0 \n/ ,\\ ,/ /_/ /\\ \\/ / /_/ /\\__, / / /_/ / / /_/ / \\__\u22bd__/ \\__\u22bd__/ \n\\/ \\/\\__/\\/ \\__/ ,___/\\____/\\/\\__/\\/\\/ ,___/ \u22c2 - Hey! \u22c2 \n \\____/ \\____/ Ol\u00e0! - \n```\n\nRavestate is a reactive library for real-time natural language dialog systems.\nIt combines elements from event-based and reactive programming into an API,\nwhere application states are defined as functions that are run when a certain\nboolean set of criteria (signals) in the current application context is satisfied.\nIt is the first reactive API to allow for boolean combinations of events.\nYou may find a short introductory video [here](http://www.youtube.com/watch?v=6GMmY-xvA_Y \"Introduction to Ravestate\").\n\n### Reactive Hello World\n\n```python\nimport ravestate as rs\n\n# We want to write some text output, so we\n# need the raw:out context property from ravestate_rawio.\nimport ravestate_rawio as rawio\n\n# Make sure that we use some i/o implementation,\n# so we can actually see stuff that is written to rawio:out.\nimport ravestate_conio\n\n# Ravestate applications should always be wrapped in a Module.\n# This allows easier scoping, and enables separation of concerns\n# beyond states.\nwith rs.Module(name=\"hi!\", depends=(rawio.mod,)):\n\n # Create an application state which reacts to the `:startup` signal,\n # and writes a string to raw:out. Note: State functions are\n # always run asynchronously!\n @rs.state(cond=rs.sig_startup, write=rawio.prop_out)\n def hello_world(context):\n context[rawio.prop_out] = \"Waddup waddup waddup!\"\n\n# Run context with console input/output and our 'hi!' module.\nrs.Context(\"hi!\").run()\n```\n\n### Raveboard\n\nRavestate has an [angular](https://angular.io)/[socket.io](https://socket.io)-based\ninteractive (beta) UI called __Raveboard__. It shows the events (spikes) that are\ncurrently relevant, as well as potential state activations that are referencing these spikes.\n\nWhen using `raveboard.UIContext` instead of `Context`, or `python3 -m raveboard` instead of\n`python3 -m ravestate`, a real-time visualization of all spikes/activations, as well as a chat window,\nwill be hosted on a configurable port. You can find dedicated docs [here](modules/raveboard/README.md).\n\nThe following GIF shows raveboard together with `ravestate_visionio`:\n\n![Raveboard](resources/docs/raveboard.gif)\n\n## Installation\n\n### Via PIP\n\nThe easiest way to install ravestate is through pip:\n\n``\npip install ravestate\n``\n\n__Note:__ Ravestate requires Python 3.6 or higher. It is tested\non Ubuntu 16.04 and 18.04, as well as macOS > High Sierra.\nIt is currently not tested on Windows.\n\nFor reliability, we recommend using an environment virtualization tool,\nlike [virtualenv](https://virtualenv.pypa.io/en/latest/)\nor [conda](https://conda.io/en/latest/).\n\n### Via Docker/Docker-compose\n\n#### Why Docker?\n\nRavestate offers a docker image that bundles runtime dependencies that are required\nfor advanced cognitive dialog systems/chatbots:\n\n* [\ud83d\udce6 Neo4j](neo4j.com): The Neo4j Graph DBMS is used by [Scientio](github.com/roboy/scientio) for long-term memory.\n* [\ud83d\udca1 Redis](redis.io): A Redis in-memory DB is used for fast short-term memory, e.g. to store/recall facial feature vectors.\n* [\ud83e\udd26 FaceOracle](github.com/roboy/face_oracle): A Roboy-developed server-client architecture used by `ravestate_visionio` for real-time face recognition.\n* [\ud83e\udd16 ROS Melodic](ros.org): Version 1 of the *Robot Operating System* for distributed real-time communication.\n This version of ROS requires a broker process (`roscore`), which is started automatically inside the container.\n* [\ud83e\udd16 ROS2 Dashing](index.ros.org/doc/ros2): Version 2 of the *Robot Operating System* for distributed real-time communication.\n* [\ud83e\udd17 HuggingFace Transformer Models](github.com/huggingface/transformers): Language models (ConvAI GPT/OpenAI GPT2)\n for neural-network-generated conversation.\n* [\ud83d\udc8c Roboy ROS Messages](github.com/roboy/roboy_communication): Message defs. that are required to interact with Roboy hardware.\n\nInstalling these dependencies by hand is time-consuming and error-prone, so using Docker\nto ship them makes everyone's lives easier!\n\n#### How to build?\n\nClone ravestate:\n\n```bash\ngit clone git@github.com:roboy/ravestate && cd ravestate\n```\n\nYou can build the ravestate container using the provided `Dockerfile`:\n\n```bash\ndocker build -t ravestate .\n```\n\n__Note: Building the container takes time and requires a good internet connection, since\nall of the dependencies are several Gigabytes in size.__\n\n#### How to run?\n\nUse one of the following docker-compose commands to run ravestate in Docker:\n\nPlatform | Command\n---------|---------------------\nLinux | `docker-compose up -d rs-linux`\nmacOS | `docker-compose up -d rs-macos`\nWindows | Not supported yet.\n\nThe container is now running and a shell inside the container can be opened with:\n\n```bash\ndocker exec -it rs bash\n```\n\nYou can now start ravestate or raveboard as described in the section [Running Hello World](#running-hello-world).\n\n```bash\npython3 -m ravestate [...]\n```\n\n#### Which services are exposed from the container?\n\nService | Port | Description\n---------|------|-------------------------------------\nNeo4j UI | 7474 | Neo4j UI for DB stored under `/db/neo4j`\nNeo4j Bolt Interface | 7687 | Communication with Neo4j DBMS\nRedis Database Dump | - | A dump of the Redis DB in the container can be found under `/db/redis`\nFaceOracle Client Interface | 8088 | Visualisation for the FaceOracle client.\nRaveboard | 42424 | Default port for raveboard, the ravestate debug UI.\n\n\n### For development\n\n#### Initial configuration and setup\n\nClone the repository and install dependencies:\n\n```bash\ncd ~\n\n# Create a virtual python environment to not pollute the global setup\npython3 -m virtualenv -p python3 python-ravestate\n\n# Source the virtual environment\n. python-ravestate/bin/activate\n\n# Clone the repo\ngit clone git@github.com:roboy/ravestate && cd ravestate\n\n# Install normal requirements\npip install -r requirements.txt\n\n# To run tests & build docs, install pytest, mocking, fixtures, pydoc, ...\npip install -r requirements-dev.txt\n\n# Link your local ravestate clone into your virtualenv\npip install -e .\n```\n\nLaunch the ravestate docker container as described above. It will serve you Neo4j,\nwhich is a backend for [Scientio](https://github.com/roboy/scientio), Roboy's\nlong-term memory system.\n\nIn the `config` folder, create a file called `keys.yml`. It should have the following content:\n\n```yaml\nmodule: telegramio\nconfig:\n telegram-token: # This is where your own telegram bot token\n # will go later\n```\n\nYou may now conduct your first conversation with ravestate:\n```bash\npython3 -m raveboard -f config/generic.yml -f config/keys.yml\n```\n\nOpen raveboard on `localhost:42424/ravestate/index.html?rs-sio-url=http%3A//localhost%3A42424`\nto conduct your first conversation with ravestate.\n\nAfter the conversation, check the Neo4j interface under `localhost:7474`. It should now contain some nodes!\n\n__Reminder: Whenever you use ravestate from the command line, source the virtual environment first!__\n\n#### Running your Telegram bot\n\nTo test your telegram bot with a custom bot token in your `keys.yml`,\njust run `telegram_test.yml` instead of `generic.yml`. This will load the `ravestate_telegramio` module.\n\n#### Setting up PyCharm\n\n1. Open your local ravestate clone as a project in pycharm.\n2. Under `Project Preferences > Python interpreter`, set your virtual environment.\n3. Mark the `modules` folder as sources root via the right-click context menu.\n4. Create a run config via the \"Edit configurations menu\":
\n \u2022 Create a new Python configuration.
\n \u2022 Set `raveboard` as the __module__ to execute
\n \u2022 Set the working directory to the git clone directory.
\n \u2022 Set parameters to `-f config/generic.yml -f config/keys.yml`.
\n5. You should now be able to run the generic ravestate config from PyCharm.\n\n## Running Hello World\n\nRavestate applications are defined by a configuration,\nwhich specifies the ravestate modules that should be loaded.\n\nTo run the basic hello world application, run ravestate\nwith a config file or command line arguments:\n\n### Running with command line spec\n\nYou can easily run a combination of ravestate modules in a shared context,\nby listing them as arguments to `python3 -m ravestate`:\n\n```bash\npython3 -m ravestate \\\n ravestate_wildtalk \\\n ravestate_conio \\\n ravestate_hibye \\\n ravestate_persqa\n```\nRun `python3 -m ravestate -h` to see more options!\n\n### Running with config file(s) \n\nYou may specify a series of config files to configure ravestate context,\nwhen specifying everything through the command line becomes too laborious:\n\n```yaml\n# In file hello_world.yml\nmodule: core\nconfig:\n import:\n - ravestate_wildtalk\n - ravestate_conio\n - ravestate_hibye\n - ravestate_persqa\n```\nThen, run `ravestate` with this config file:\n\n```bash\npython3 -m ravestate -f hello_world.yml\n```\n\n## Modules\n\nRavestate offers a landscape of fine-grained modules\nfor different aspects of dialog application tasks, which\nmay be seen in the following dependency diagram. Broadly,\nthe modules are categorized into Core (Blue), I/O (Yellow),\nExternal (Red) and Skills (Green):\n\n\n\n#### Core Modules\n\n | Module name | Description |\n |----------------------|-------------|\n | ravestate | Core ravestate library.\n | ravestate_rawio | Provides `raw_in`, `raw_out`, `pic_in` properties, which are served by the IO modules.\n | ravestate_ontology | Connects to [scientio](https://github.com/roboy/scientio) to serve a built-in ontology.\n | ravestate_interloc | Provides the `all_interlocutors` property, where present interlocutors are registered by the IO modules.\n | ravestate_idle | Provides `bored` and `impatient` signals, as specified [here](https://github.com/Roboy/ravestate/issues/12).\n | ravestate_verbaliser | Utilities for easy management of conversational text, documented [here](modules/ravestate_verbaliser/README.md).\n | ravestate_nlp | Spacy-based NLP properties and signals, documented [here](modules/ravestate_nlp/README.md).\n | ravestate_emotion | Generates signals for, and recognizes specific emotions (`sig_shy`, `sig_surprise`, `sig_happy`, `sig_affectionate`).\n | ravestate_ros1 | Provides specific `Ros1PubProperty`, `Ros1SubProperty` and `Ros1CallProperty` context properties, which greatly simplify working with ROS1 in ravestate. Documentation [here](modules/ravestate_ros1/README.md).\n | ravestate_ros2 | Provides specific `Ros2PubProperty`, `Ros2SubProperty` and `Ros2CallProperty` context properties, which greatly simplify working with ROS2 in ravestate.\n\n\n#### IO Modules\n\n | Module name | Description |\n |----------------------|-------------|\n | ravestate_conio | Simple command-line based IO for development purposes.\n | ravestate_telegramio | Single- or Multi-process Telegram server module, documented [here](modules/ravestate_telegramio/README.md). \n | ravestate_roboyio | [PyroBoy](https://github.com/roboy/pyroboy) -based STT/TTS with ROS2.\n | ravestate_visionio | See dedicated docs [here](modules/ravestate_visionio/README.md). Enables face-recognition based dialog interactions.\n\n\n#### Skill Modules\n\n | Module name | Description |\n |----------------------|-------------|\n | ravestate_wildtalk | See docs [here](modules/ravestate_wildtalk/README.md) - runs generative language models (GPT-2, ConvAi, ParlAi)!\n | ravestate_hibye | Simply voices __Hi!__ (or the likes thereof) when an interlocutor is added, and __Bye__ when one is removed.\n | ravestate_persqa | Conducts personalized smalltalk with interlocutors, interacts with Scientio to persist trivia.\n | ravestate_genqa | [DrQA](https://github.com/roboy/drqa) -based general question answering module.\n | ravestate_roboyqa | QA module which provides answers to questions about Roboy, such as __Who is your dad?__\n | ravestate_akinator __(*)__ | Enables dialog-based play of [Akinator!](modules/ravestate_akinator/README.md)\n | ravestate_sendpics __(*)__ | Uses face recognition to extract facial features and an assiciated Person with `pic_in` and ontology, which are then persisted in Redis and Scientio.\n | ravestate_fillers | Recognize when the dialog context is taking a long time to produce an answer, and voice a filler like __\"Uhm\"__ or __\"Let's see...\"__.\n\n**Note:** __(*)__ = deprecated.\n\n## Running tests\n\nIf you have built the ravestate docker image as described above,\nyou may run the test suite as follows:\n\n```bash\ndocker run -t -v $(pwd):/ravestate -w /ravestate ravestate ./run_tests.sh\n```\n\n## Building/maintaining the docs\n\nIf you have installed the dependencies from ``requirements-dev.txt``,\ngenerate the docs by running this command at project root:\n\n```bash\nexport PYTHONPATH=$PYTHONPATH:$(pwd)/modules\ngit rm -rf docs\nrm -rf _build docs\npydocmd build\nmkdir -p docs/resources/docs && cp resources/docs/*.png docs/resources/docs && cp resources/docs/*.gif docs/resources/docs\ngit add docs/*\n# For inspection: python3 -m http.server --directory docs\n```\n\nThe structure and content of the docs are defined in the file `pydocmd.yml`.\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/roboy/ravestate", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "ravestate", "package_url": "https://pypi.org/project/ravestate/", "platform": "", "project_url": "https://pypi.org/project/ravestate/", "project_urls": { "Homepage": "https://github.com/roboy/ravestate" }, "release_url": "https://pypi.org/project/ravestate/0.7.0.post1/", "requires_dist": [ "unidecode", "argparse", "pyyaml (>=5.1)", "python-telegram-bot", "pyyaml-include", "roboy-parlai (>=0.1.post3)", "spacy (==2.1.0)", "flask", "flask-socketio", "requests", "scientio (>=0.9.1rc2)", "redis", "face-recognition", "numpy", "pytorch-pretrained-bert", "pytorch-transformers", "python-socketio", "reggol (>=0.2.0)" ], "requires_python": ">=3.6", "summary": "Ravestate is a reactive library for real-time natural language dialog systems.", "version": "0.7.0.post1", "yanked": false, "yanked_reason": null }, "last_serial": 6006817, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "c3bfcca3db825404c3f7a2b12733827e", "sha256": "6be48ff2a3574b409eb71ede98a4eba5a30babbab3626493b62ddda509937494" }, "downloads": -1, "filename": "ravestate-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "c3bfcca3db825404c3f7a2b12733827e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 23746, "upload_time": "2018-11-24T21:53:10", "upload_time_iso_8601": "2018-11-24T21:53:10.909143Z", "url": "https://files.pythonhosted.org/packages/e0/2c/3b01ba7048f8d916b8369473592fedb776b0c6d7aa6e94d3054f4867e5c1/ravestate-0.1.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "4d57ebd81036cb38b2b8b2b889090940", "sha256": "5777c83542cf4d14c503f55d08a08a18ff9bfe0851fefbae905a8687c8e51ff8" }, "downloads": -1, "filename": "ravestate-0.1.0.tar.gz", "has_sig": false, "md5_digest": "4d57ebd81036cb38b2b8b2b889090940", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16373, "upload_time": "2018-11-24T21:53:12", "upload_time_iso_8601": "2018-11-24T21:53:12.910648Z", "url": "https://files.pythonhosted.org/packages/8a/27/49f360d020e52d866bcbb6543e53efa11f7731113a88a116d725a2fdc74e/ravestate-0.1.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.post1": [ { "comment_text": "", "digests": { "md5": "bef7d6fba1c217cba53ad2cd8e049940", "sha256": "73779e27daddf12b6cd0e5ac9e220d6ad71cb8e1260d5d03fae7979a1716d8a3" }, "downloads": -1, "filename": "ravestate-0.1.post1-py3-none-any.whl", "has_sig": false, "md5_digest": "bef7d6fba1c217cba53ad2cd8e049940", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 32474, "upload_time": "2018-11-25T00:00:58", "upload_time_iso_8601": "2018-11-25T00:00:58.563228Z", "url": "https://files.pythonhosted.org/packages/0b/1b/d2992c5afdd6b7576270e45175c538bb434dde8052a736a0d997357905fe/ravestate-0.1.post1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "99d9864092e27d13aff9f35d99a14946", "sha256": "36c6c81271ab7b02e3da53773ea018c5145b3edd3c87eae0de1d3684f9e568e8" }, "downloads": -1, "filename": "ravestate-0.1.post1.tar.gz", "has_sig": false, "md5_digest": "99d9864092e27d13aff9f35d99a14946", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 22379, "upload_time": "2018-11-25T00:01:00", "upload_time_iso_8601": "2018-11-25T00:01:00.150477Z", "url": "https://files.pythonhosted.org/packages/30/4d/222bbd6763457f86955c9630971fc1add5eefbb24e27b38bcb71a1d4346e/ravestate-0.1.post1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.post2": [ { "comment_text": "", "digests": { "md5": "6f596275d077fe241165dc6e9e222969", "sha256": "c20d23e39cd8da7de0a5fa2d9f0e312c9a64057bcbd7def4233a3fd7eb3a8465" }, "downloads": -1, "filename": "ravestate-0.1.post2-py3-none-any.whl", "has_sig": false, "md5_digest": "6f596275d077fe241165dc6e9e222969", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 32478, "upload_time": "2018-11-25T00:13:05", "upload_time_iso_8601": "2018-11-25T00:13:05.595145Z", "url": "https://files.pythonhosted.org/packages/e6/b9/d2b9ecbe5d09e06f25154aae321dfd25f264dc0f6b247c62555021e487fd/ravestate-0.1.post2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "f996812fc4026b1b1afe28ea6917389c", "sha256": "b65c1ceaf699e8de2c7ad1b06674fd4ba08a3dbc2aed143a266739c0ae838dff" }, "downloads": -1, "filename": "ravestate-0.1.post2.tar.gz", "has_sig": false, "md5_digest": "f996812fc4026b1b1afe28ea6917389c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 22364, "upload_time": "2018-11-25T00:13:07", "upload_time_iso_8601": "2018-11-25T00:13:07.140676Z", "url": "https://files.pythonhosted.org/packages/c7/63/4c95c39b82578b226734220eaba7ef5dfd615587411864dad3cef2750237/ravestate-0.1.post2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.post3": [ { "comment_text": "", "digests": { "md5": "8501a17e93b398ff1809f4b27abab80f", "sha256": "dbfed98707759b519e989185e817095c0f86bbcf2a38f7ca6faf204e842cca91" }, "downloads": -1, "filename": "ravestate-0.1.post3-py3-none-any.whl", "has_sig": false, "md5_digest": "8501a17e93b398ff1809f4b27abab80f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 32477, "upload_time": "2018-12-03T00:16:48", "upload_time_iso_8601": "2018-12-03T00:16:48.543013Z", "url": "https://files.pythonhosted.org/packages/c0/12/6cbb37bedc7b2bb97913a40233e3fddadac5c36181b8af3124f03dbe8a59/ravestate-0.1.post3-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "b864e06f6aa52cf3eb614b5bc1825274", "sha256": "6dff5f9880ad635a51617f438594373f91b99d0a6a6235e7cb380974d8dfb8fa" }, "downloads": -1, "filename": "ravestate-0.1.post3.tar.gz", "has_sig": false, "md5_digest": "b864e06f6aa52cf3eb614b5bc1825274", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 22367, "upload_time": "2018-12-03T00:16:50", "upload_time_iso_8601": "2018-12-03T00:16:50.168816Z", "url": "https://files.pythonhosted.org/packages/4d/9d/e2106ab4e0674ef50df462a8bcb9805a2cf8a43d62e386d5f2aa1c8c1881/ravestate-0.1.post3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "b197253631e5c795403278c6ea05984a", "sha256": "8034fa4516beaa224b8526f861f3b8c4981557e44930d6d8cf9675f19ef77314" }, "downloads": -1, "filename": "ravestate-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "b197253631e5c795403278c6ea05984a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 35328, "upload_time": "2018-12-03T00:24:26", "upload_time_iso_8601": "2018-12-03T00:24:26.430656Z", "url": "https://files.pythonhosted.org/packages/e6/a4/11a6e9438459e6d04a12f9d2f5ffad30f1461dc8724d5d5b0b445a98ff79/ravestate-0.2.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "cfd7c26ef763e2d61a1108e43e5dec3a", "sha256": "c2b8300a7da94ca398e786f9433f68fe6856390e68c1948d4e44ba2d9cb04e6a" }, "downloads": -1, "filename": "ravestate-0.2.0.tar.gz", "has_sig": false, "md5_digest": "cfd7c26ef763e2d61a1108e43e5dec3a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 24498, "upload_time": "2018-12-03T00:24:28", "upload_time_iso_8601": "2018-12-03T00:24:28.013710Z", "url": "https://files.pythonhosted.org/packages/07/02/fbc77dbcc453707c9e5e257caf15fdda71c3ee1efcb71ab96f3a6aa40656/ravestate-0.2.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "c3377ec7e6d24e84efc7cef929a80ed7", "sha256": "a1c17e73183ae07dc98570d24c1147e31c3e398fcb26d847071e6684dda4ed66" }, "downloads": -1, "filename": "ravestate-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "c3377ec7e6d24e84efc7cef929a80ed7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 70108, "upload_time": "2019-01-17T00:44:23", "upload_time_iso_8601": "2019-01-17T00:44:23.548674Z", "url": "https://files.pythonhosted.org/packages/a7/81/8ca1d1f5a840ea365e8f86faa9c3b4ae295707d72d3cafc2a2cf55ced718/ravestate-0.3.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "8417e7f47d079e7eff099be975ed0663", "sha256": "928dcb248629f442cbbdde249210c2e4cc3f5a881b76d2d69d0f58e14a98d62e" }, "downloads": -1, "filename": "ravestate-0.3.0.tar.gz", "has_sig": false, "md5_digest": "8417e7f47d079e7eff099be975ed0663", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 42982, "upload_time": "2019-01-17T00:44:25", "upload_time_iso_8601": "2019-01-17T00:44:25.698019Z", "url": "https://files.pythonhosted.org/packages/1e/15/412aac1b5e8573311dd36e43f47b0de521c0f568115efba0fbc4cc879491/ravestate-0.3.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.post0": [ { "comment_text": "", "digests": { "md5": "a5e98d0156a07a7a09b08cccca16b153", "sha256": "c2c382e7fe41728d31c8aae77a5c0a421b54ca5c5ae8022f6159422822841ff3" }, "downloads": -1, "filename": "ravestate-0.3.post0-py3-none-any.whl", "has_sig": false, "md5_digest": "a5e98d0156a07a7a09b08cccca16b153", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 70170, "upload_time": "2019-01-17T01:04:06", "upload_time_iso_8601": "2019-01-17T01:04:06.748725Z", "url": "https://files.pythonhosted.org/packages/27/6a/f775b5ce4424748214565acbb9cf4bc878acfdbb8b1f156f978d5f14f8d8/ravestate-0.3.post0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "e1e88406023356e3007b9af37e2ae566", "sha256": "d2559f1f6a5af0ea5c14772803cc1336f026c9317cd2b89ee83ab8af17dce826" }, "downloads": -1, "filename": "ravestate-0.3.post0.tar.gz", "has_sig": false, "md5_digest": "e1e88406023356e3007b9af37e2ae566", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 42819, "upload_time": "2019-01-17T01:04:08", "upload_time_iso_8601": "2019-01-17T01:04:08.492104Z", "url": "https://files.pythonhosted.org/packages/dd/ad/dcf0f3531fa5285ce7987ac9f2f277d8cb717dbf6a2361286bc7c0834deb/ravestate-0.3.post0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3rc0": [ { "comment_text": "", "digests": { "md5": "b6eb647f22bb19dc244ee014e3aa3d17", "sha256": "ae161a14aecba5113375c21eb837576f2de1152c217af7c90f5b501ae019b66b" }, "downloads": -1, "filename": "ravestate-0.3rc0-py3-none-any.whl", "has_sig": false, "md5_digest": "b6eb647f22bb19dc244ee014e3aa3d17", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 70109, "upload_time": "2019-01-17T00:40:47", "upload_time_iso_8601": "2019-01-17T00:40:47.625576Z", "url": "https://files.pythonhosted.org/packages/d3/ad/06f00780064aa80dc0d63d06fc58c438571dd3f34d8225120ad27cddc3da/ravestate-0.3rc0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "797917fc6b698dff127df021d014cdcf", "sha256": "6e47fb88ef7d4b9c742958c2a7b7d1f9e6050024d1a899cd7bec5de8945269fe" }, "downloads": -1, "filename": "ravestate-0.3rc0.tar.gz", "has_sig": false, "md5_digest": "797917fc6b698dff127df021d014cdcf", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 42953, "upload_time": "2019-01-17T00:40:49", "upload_time_iso_8601": "2019-01-17T00:40:49.819355Z", "url": "https://files.pythonhosted.org/packages/cd/75/4c4c876dad1ba215d2a79033b039c1aa71c194d10f4147594e48ce0ad031/ravestate-0.3rc0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "f23b1cb3d307410ad371d8127918fae5", "sha256": "7de3078679cc90df42bc09f94478201ea3f49e6fb49d16a837ff859f26374e0d" }, "downloads": -1, "filename": "ravestate-0.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "f23b1cb3d307410ad371d8127918fae5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 79159, "upload_time": "2019-01-29T14:01:10", "upload_time_iso_8601": "2019-01-29T14:01:10.815028Z", "url": "https://files.pythonhosted.org/packages/dd/4b/68c2c9a28a68b745fbafe48925cdc4357df5c16eb5f4890ddbedb3ef028f/ravestate-0.4.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "7a98693fd7163fe2780cf3317a05b89b", "sha256": "c2795cb46215ffda1f590e03b7c80e1d8591025265585daaf90fd73f8911b3ff" }, "downloads": -1, "filename": "ravestate-0.4.0.tar.gz", "has_sig": false, "md5_digest": "7a98693fd7163fe2780cf3317a05b89b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 48718, "upload_time": "2019-01-29T14:01:13", "upload_time_iso_8601": "2019-01-29T14:01:13.711331Z", "url": "https://files.pythonhosted.org/packages/83/83/f6973508dd4d413be9e2af787262905600d8210e293f5498dd4e80cdb891/ravestate-0.4.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.5.0rc0": [ { "comment_text": "", "digests": { "md5": "3d7a644f006e01f061eb6cfe79a460cb", "sha256": "bc168cf8b0fc0b3b155d8dfe774ea82b895b2a1df7cfb2d5e9db4198afb8bc4f" }, "downloads": -1, "filename": "ravestate-0.5.0rc0-py3-none-any.whl", "has_sig": false, "md5_digest": "3d7a644f006e01f061eb6cfe79a460cb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 90956, "upload_time": "2019-03-04T14:33:33", "upload_time_iso_8601": "2019-03-04T14:33:33.904560Z", "url": "https://files.pythonhosted.org/packages/d8/1b/a88c5194de5800ac4d92f72358664a1432f22ca7823f92b5d1f6df04e0ad/ravestate-0.5.0rc0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "0e35c460ef3d66d23c8d5732d49b4972", "sha256": "266a38e54941d76f911ced93a2213d9592034707f2d471fdff74236b52f4d6b4" }, "downloads": -1, "filename": "ravestate-0.5.0rc0.tar.gz", "has_sig": false, "md5_digest": "0e35c460ef3d66d23c8d5732d49b4972", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 60392, "upload_time": "2019-03-04T14:33:35", "upload_time_iso_8601": "2019-03-04T14:33:35.353340Z", "url": "https://files.pythonhosted.org/packages/3c/0f/9770b38a06c84987b391de5b539f609204bd1ea4f3ca1f1a7ff61e0d64e9/ravestate-0.5.0rc0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "19dafea16226452b894f9bec9e8a24d7", "sha256": "d7fbf5f28fa7835b636b7820654eaa9c2957c6f562103bbb927195a88bc34b0f" }, "downloads": -1, "filename": "ravestate-0.5.1-py3-none-any.whl", "has_sig": false, "md5_digest": "19dafea16226452b894f9bec9e8a24d7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 90924, "upload_time": "2019-03-22T10:18:23", "upload_time_iso_8601": "2019-03-22T10:18:23.098800Z", "url": "https://files.pythonhosted.org/packages/c2/b3/6f494b43dadf674aaff2d0386ebc20b4d69f8fa6cc3fcea8947074d8fa48/ravestate-0.5.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "aaebfcaec9f9eaeafaaffb733c050636", "sha256": "105dcd6c8e8752e3cda919706e1a1f2c82a591de6ec296bdc05d3dd0bae4bea8" }, "downloads": -1, "filename": "ravestate-0.5.1.tar.gz", "has_sig": false, "md5_digest": "aaebfcaec9f9eaeafaaffb733c050636", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 60322, "upload_time": "2019-03-22T10:19:24", "upload_time_iso_8601": "2019-03-22T10:19:24.835696Z", "url": "https://files.pythonhosted.org/packages/04/52/3711c42985e8be44cd422355cb05427eb0cd74670db791ab4696febc8d28/ravestate-0.5.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.5.1.post0": [ { "comment_text": "", "digests": { "md5": "609b740eb8ee0d0272319a28004f6ffb", "sha256": "501124fc55d80b67723ddb3047745cef9ad70988a9be02b20d022d35c18baf8a" }, "downloads": -1, "filename": "ravestate-0.5.1.post0-py3-none-any.whl", "has_sig": false, "md5_digest": "609b740eb8ee0d0272319a28004f6ffb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 90999, "upload_time": "2019-03-22T10:37:08", "upload_time_iso_8601": "2019-03-22T10:37:08.331176Z", "url": "https://files.pythonhosted.org/packages/fd/e7/2db3fd4402f5b51478d2c7850cdebed0fb43ee531290c5b42c58214ed518/ravestate-0.5.1.post0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "b1e0b2463b37f48c2dd8d0eee9d1769e", "sha256": "28f36d2ec87d68a52ff8ec63fff0e6994bc8c99b74f2040b086a09c8993d438a" }, "downloads": -1, "filename": "ravestate-0.5.1.post0.tar.gz", "has_sig": false, "md5_digest": "b1e0b2463b37f48c2dd8d0eee9d1769e", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 60363, "upload_time": "2019-03-22T10:37:10", "upload_time_iso_8601": "2019-03-22T10:37:10.068453Z", "url": "https://files.pythonhosted.org/packages/a3/e5/c59829f10f5b2d8e7944f5ea14337d2349befed72391feeadfb56c553e7d/ravestate-0.5.1.post0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "c25c41fcaeb900d903f2e1d9bf647bcb", "sha256": "53a712bdf5e8bef35c71d9d1da5787740d74d1b0ae68eb661446849a3dd9a198" }, "downloads": -1, "filename": "ravestate-0.6.0-py3-none-any.whl", "has_sig": false, "md5_digest": "c25c41fcaeb900d903f2e1d9bf647bcb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 108093, "upload_time": "2019-05-15T12:40:11", "upload_time_iso_8601": "2019-05-15T12:40:11.915062Z", "url": "https://files.pythonhosted.org/packages/64/ab/2ed6e6a88ebd5e4ff92bd1eb9b5cc61872d41f9e5ed594b411f66fb40f07/ravestate-0.6.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "4a7e9cf79d89329ae4143ff0484a2840", "sha256": "be94012e5cdc7ce51de8811bb55fa97521648af2bac636d4f052874e0b5e67af" }, "downloads": -1, "filename": "ravestate-0.6.0.tar.gz", "has_sig": false, "md5_digest": "4a7e9cf79d89329ae4143ff0484a2840", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 73574, "upload_time": "2019-05-15T12:40:16", "upload_time_iso_8601": "2019-05-15T12:40:16.500849Z", "url": "https://files.pythonhosted.org/packages/db/85/b3e3f374d48ef133af918b17aeeef76ca7bc94351a95f594450ae832db8a/ravestate-0.6.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.6.0rc0": [ { "comment_text": "", "digests": { "md5": "5f8627b5473d4f736f7df75301d80ab3", "sha256": "04f269420a46047836bfdb8195a144c79bc797d600a80cb4c2b1101afd0f2cc6" }, "downloads": -1, "filename": "ravestate-0.6.0rc0-py3-none-any.whl", "has_sig": false, "md5_digest": "5f8627b5473d4f736f7df75301d80ab3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 108106, "upload_time": "2019-05-15T11:40:25", "upload_time_iso_8601": "2019-05-15T11:40:25.684691Z", "url": "https://files.pythonhosted.org/packages/1a/70/39a506234233bfc22c12cfcd5e77730c90f3ada85bfe97cb70755e387121/ravestate-0.6.0rc0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "bc18fed267a66d0a75ead4de7021580b", "sha256": "1f815f7ffa20a1d0e8415a4475c477696ee37456972537704b5655596cd1457e" }, "downloads": -1, "filename": "ravestate-0.6.0rc0.tar.gz", "has_sig": false, "md5_digest": "bc18fed267a66d0a75ead4de7021580b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 73522, "upload_time": "2019-05-15T11:40:27", "upload_time_iso_8601": "2019-05-15T11:40:27.650571Z", "url": "https://files.pythonhosted.org/packages/eb/7e/281b744c2123a6c31153f0525af4820465f42b3fecd6ce782c64dcff9812/ravestate-0.6.0rc0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "7840ffc368ccc991e0bc3bd7dc33d4bb", "sha256": "4ba49cf0c4fadc41d019aca23a18fe722931b46b28866249bdcae5459b32312f" }, "downloads": -1, "filename": "ravestate-0.7.0-py3-none-any.whl", "has_sig": false, "md5_digest": "7840ffc368ccc991e0bc3bd7dc33d4bb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 131052, "upload_time": "2019-10-21T10:07:09", "upload_time_iso_8601": "2019-10-21T10:07:09.871351Z", "url": "https://files.pythonhosted.org/packages/b1/24/d036fd3525e39d69314c74c811200ca4e0aeeb37e2d07f05c3bc79f8463c/ravestate-0.7.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "a6d8df1ab5a837d7293ef6b5f6437db0", "sha256": "66327f2e5ff0f267e5a9f42b424c06d57d57fa74aa61d2e8a94496ddcb9612ed" }, "downloads": -1, "filename": "ravestate-0.7.0.tar.gz", "has_sig": false, "md5_digest": "a6d8df1ab5a837d7293ef6b5f6437db0", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 90610, "upload_time": "2019-10-21T10:07:12", "upload_time_iso_8601": "2019-10-21T10:07:12.160194Z", "url": "https://files.pythonhosted.org/packages/85/16/1722e7acfacdf02d807d79c6ba516d5e58b133244c61a7665b0658a27b1c/ravestate-0.7.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.7.0.post1": [ { "comment_text": "", "digests": { "md5": "3e8927dabc2b959b1146c641215e8ac4", "sha256": "456dd6ba9cda378a4b6ca94781709881e9685eee337dffe70c6465af7cb484b7" }, "downloads": -1, "filename": "ravestate-0.7.0.post1-py3-none-any.whl", "has_sig": false, "md5_digest": "3e8927dabc2b959b1146c641215e8ac4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 379057, "upload_time": "2019-10-21T11:16:55", "upload_time_iso_8601": "2019-10-21T11:16:55.860629Z", "url": "https://files.pythonhosted.org/packages/f8/b5/98d476bb2ff68943694d797bf13b9c8d66cd23e44de7e52db966ec7e4d04/ravestate-0.7.0.post1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "a1a2b8d8f3009b166802999452c0baaf", "sha256": "052dce8913a9eef3d7a255b4e9fe49d20f1c2932a901e2e0182cc27cdb7b6f1c" }, "downloads": -1, "filename": "ravestate-0.7.0.post1.tar.gz", "has_sig": false, "md5_digest": "a1a2b8d8f3009b166802999452c0baaf", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 90688, "upload_time": "2019-10-21T11:16:58", "upload_time_iso_8601": "2019-10-21T11:16:58.138511Z", "url": "https://files.pythonhosted.org/packages/80/fa/97ff1bd8cd6b004197ea7c87593fba3b1690ff88cc31109b9a2607157379/ravestate-0.7.0.post1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.7.0rc0": [ { "comment_text": "", "digests": { "md5": "d959b4b8af5ef4513bb8c8bf03a44330", "sha256": "36ed2cc645347c5e8a0220100f72af455ad2426c320f273b880bfc9cf9cd0260" }, "downloads": -1, "filename": "ravestate-0.7.0rc0-py3-none-any.whl", "has_sig": false, "md5_digest": "d959b4b8af5ef4513bb8c8bf03a44330", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 118495, "upload_time": "2019-09-25T13:19:50", "upload_time_iso_8601": "2019-09-25T13:19:50.435258Z", "url": "https://files.pythonhosted.org/packages/cf/95/9ec79c3a6164e7742eeb403c29d255acea79c04b9a9651186c538db1f791/ravestate-0.7.0rc0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "93e611514fc8723cd2c82bc50a4a87bc", "sha256": "d326f2fea60afff2e3b83fa0691dedcde6186a41bad9634ce4711e2d401e00f9" }, "downloads": -1, "filename": "ravestate-0.7.0rc0.tar.gz", "has_sig": false, "md5_digest": "93e611514fc8723cd2c82bc50a4a87bc", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 82287, "upload_time": "2019-09-25T13:19:52", "upload_time_iso_8601": "2019-09-25T13:19:52.614178Z", "url": "https://files.pythonhosted.org/packages/33/02/cbb102803ecfae3e35caaa8a25d96ecbe9c1bd701f4d457f00c42c35306f/ravestate-0.7.0rc0.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "3e8927dabc2b959b1146c641215e8ac4", "sha256": "456dd6ba9cda378a4b6ca94781709881e9685eee337dffe70c6465af7cb484b7" }, "downloads": -1, "filename": "ravestate-0.7.0.post1-py3-none-any.whl", "has_sig": false, "md5_digest": "3e8927dabc2b959b1146c641215e8ac4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 379057, "upload_time": "2019-10-21T11:16:55", "upload_time_iso_8601": "2019-10-21T11:16:55.860629Z", "url": "https://files.pythonhosted.org/packages/f8/b5/98d476bb2ff68943694d797bf13b9c8d66cd23e44de7e52db966ec7e4d04/ravestate-0.7.0.post1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "a1a2b8d8f3009b166802999452c0baaf", "sha256": "052dce8913a9eef3d7a255b4e9fe49d20f1c2932a901e2e0182cc27cdb7b6f1c" }, "downloads": -1, "filename": "ravestate-0.7.0.post1.tar.gz", "has_sig": false, "md5_digest": "a1a2b8d8f3009b166802999452c0baaf", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 90688, "upload_time": "2019-10-21T11:16:58", "upload_time_iso_8601": "2019-10-21T11:16:58.138511Z", "url": "https://files.pythonhosted.org/packages/80/fa/97ff1bd8cd6b004197ea7c87593fba3b1690ff88cc31109b9a2607157379/ravestate-0.7.0.post1.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }