{ "info": { "author": "Zenaton", "author_email": "yann@zenaton.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "Intended Audience :: System Administrators", "License :: OSI Approved :: Apache Software License", "Programming Language :: Python :: 3.5", "Topic :: Software Development :: Libraries" ], "description": "

\n \n \n
\n Easy Asynchronous Jobs Manager for Developers
\n \n Explore the docs \u00bb \n
\n Website \n \u00b7\n Examples in Python \n \u00b7\n Tutorial in Python \n

\n\n\n# Zenaton library for Python\n\n[Zenaton](https://zenaton.com) helps developers to easily run, monitor and orchestrate background jobs on your workers without managing a queuing system. In addition to this, a monitoring dashboard shows you in real-time tasks executions and helps you to handle errors.\n\nThe Zenaton library for Python lets you code and launch tasks using Zenaton platform, as well as write workflows as code. You can sign up for an account on [Zenaton](https://zenaton.com) and go through the [tutorial in python](https://app.zenaton.com/tutorial/python).\n\n## Requirements\n\nThis package has been tested with Python 3.5.\n\n## Python Documentation\n\nYou can find all details on [Zenaton's website](https://zenaton.com/documentation/python/getting-started).\n\n
\n Table of contents\n\n\n\n\n- [Zenaton library for Python](#zenaton-library-for-python)\n - [Requirements](#requirements)\n - [Python Documentation](#python-documentation)\n - [Getting started](#getting-started)\n - [Installation](#installation)\n - [Install the Zenaton Agent](#install-the-zenaton-agent)\n - [Install the library](#install-the-library)\n - [Framework integration](#framework-integration)\n - [Quick start](#quick-start)\n - [Client Initialization](#client-initialization)\n - [Executing a background job](#executing-a-background-job)\n - [Orchestrating background jobs](#orchestrating-background-jobs)\n - [Using workflows](#using-workflows)\n - [Getting help](#getting-help)\n - [Theorical Examples](#theorical-examples)\n - [Real-life Examples](#real-life-examples)\n - [Contributing](#contributing)\n - [License](#license)\n - [Code of Conduct](#code-of-conduct)\n\n\n\n
\n\n## Getting started\n\n### Installation\n\n#### Install the Zenaton Agent\n\nTo install the Zenaton agent, run the following command:\n\n```sh\ncurl https://install.zenaton.com/ | sh\n```\n\nThen, you need your agent to listen to your application.\nTo do this, you need your **Application ID** and **API Token**.\nYou can find both on [your Zenaton account](https://app.zenaton.com/api).\n\n```sh\nzenaton listen --app_id=YourApplicationId --api_token=YourApiToken --app_env=YourApplicationEnv --boot=boot.py\n```\n\n#### Install the library\n\nTo add the latest version of the library to your project, run the following command:\n\n```python\npip install zenaton\n```\n\n#### Framework integration\n\nIf you are using **Django**, please refer to our dedicated documentation to get started:\n\n- [Getting started with Django](https://zenaton.com/documentation/python/agents#django)\n\n\n### Quick start\n\n#### Client Initialization\n\nTo start, you need to initialize the client. To do this, you need your **Application ID** and **API Token**.\nYou can find both on [your Zenaton account](https://app.zenaton.com/api).\n\nThen, initialize your Zenaton client:\n\n```python\n\nfrom zenaton.client import Client\n\nClient(your_app_id, your_api_token, your_app_env)\n```\n\n#### Executing a background job\n\nA background job in Zenaton is a class implementing the `Zenaton.abstracts.task.Task` interface.\n\nLet's start by implementing a first task printing something, and returning a value:\n\n```python\nimport random\n\nfrom zenaton.abstracts.task import Task\nfrom zenaton.traits.zenatonable import Zenatonable\n\nclass HelloWorldTask(Task, Zenatonable):\n\n def handle(self):\n print('Hello World\\n')\n return random.randint (0, 1)\n```\n\nNow, when you want to run this task as a background job, you need to do the following:\n\n```python\nHelloWorldTask().dispatch()\n```\n\nThat's all you need to get started. With this, you can run many background jobs.\nHowever, the real power of Zenaton is to be able to orchestrate these jobs. The next section will introduce you to job orchestration.\n\n### Orchestrating background jobs\n\nJob orchestration is what allows you to write complex business workflows in a simple way.\nYou can execute jobs sequentially, in parallel, conditionally based on the result of a previous job,\nand you can even use loops to repeat some tasks.\n\nWe wrote about some use-cases of job orchestration, you can take a look at [these articles](https://medium.com/zenaton/tagged/python)\nto see how people use job orchestration.\n\n#### Using workflows\n\nA workflow in Zenaton is a class implementing the `Zenaton.abstracts.workflow.Workflow` interface.\n\nWe will implement a very simple workflow:\n\nFirst, it will execute the `HelloWorld` task.\nThe result of the first task will be used to make a condition using an `if` statement.\nWhen the returned value will be greater than `0`, we will execute a second task named `FinalTask`.\nOtherwise, we won't do anything else.\n\nOne important thing to remember is that your workflow implementation **must** be idempotent.\nYou can read more about that in our [documentation](https://zenaton.com/documentation/python/workflow-basics/#implementation).\n\nThe implementation looks like this:\n\n```python\nfrom tasks.hello_world_task import HelloWorldTask\nfrom tasks.final_task import FinalTask\n\nfrom zenaton.abstracts.workflow import Workflow\nfrom zenaton.traits.zenatonable import Zenatonable\n\nclass MyFirstWorkflow(Workflow, Zenatonable):\n\n def handle(self):\n\n n = HelloWorldTask().execute()\n\n if n > 0:\n FinalTask().execute()\n```\n\nNow that your workflow is implemented, you can execute it by calling the `dispatch` method:\n\n```python\nMyFirstWorkflow().dispatch()\n```\n\nIf you really want to run this example, you will need to implement the `FinalTask` task.\n\nThere are many more features usable in workflows in order to get the orchestration done right. You can learn more\nin our [documentation](https://zenaton.com/documentation/python/workflow-basics/#implementation).\n\n## Getting help\n\n**Need help**? Feel free to contact us by chat on\u00a0[Zenaton](https://zenaton.com/).\n\n**Found a bug?**\u00a0You can open a\u00a0[GitHub issue](https://github.com/zenaton/zenaton-python/issues).\n\n### Theorical Examples\n\n[Python examples repo](https://github.com/zenaton/examples-python)\n\n### Real-life Examples\n\n__Triggering An Email After 3 Days of Cold Weather__ ([Medium Article](https://medium.com/zenaton/triggering-an-email-after-3-days-of-cold-weather-f7bed6f2df16), [Source Code](https://github.com/zenaton/articles-python/tree/master/triggering-an-email-after-3-days-of-cold-weather))\n\n## Contributing\n\nBug reports and pull requests are welcome on GitHub [here](https://github.com/zenaton/zenaton-Python). This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.\n\n### Testing\n\nTo test your changes before sending a pull request, first install the tests requirements:\n\n```sh\npip install '.[test]'\n```\n\nThen run PyTest:\n\n```sh\npytest\n```\n\n## License\n\nThe package is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).\n\n## Code of Conduct\n\nEveryone interacting in the zenaton-Python project\u2019s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/zenaton/zenaton-Python/blob/master/CODE_OF_CONDUCT.md).\n\n# Changelog\n\n## [0.4.2] - 2019-10-03\n\n### Added\n\n- Added `custom_id` argument for workflow schedule.\n- Dispatch of tasks and workflows are now done using the API instead of a local agent.\n- Pause, Resume and Kill workflows are now done using the API instead of a local agent.\n- Send event to workflow is now done using the API instead of a local agent.\n- Find workflow is now done using the API instead of a local agent.\n\n## [0.4.1] - 2019-09-25\n\n### Added\n\n- Added a `intent_id` property when dispatching workflows and tasks, sending events to workflows, and\n pausing/resuming/killing workflows.\n- Execution context for tasks and workflows\n- Optional `on_error_retry_delay` method handling task failures and specifying\n how many seconds to wait before retrying.\n\n## [0.4.0] - 2019-08-26\n\n### Added\n\n- Added a `intent_id` property when dispatching workflows and tasks, sending events to workflows, and\n pausing/resuming/killing workflows.\n\n- Added scheduling: `schedule(cron)`\n\n## [0.3.4] - 2019-07-01\n\n### Added\n\n- Run tests in a continuous integration flow.\n- No need for credentials when this lib is running in a Zenaton agent except if dispatching a\n sub-job.\n\n## [0.3.3] - 2019-06-25\n\n## Fixed\n\n- Fix a typo in client.py that prevents correct executions of versions\n\n## [0.3.2] - 2019-06-21\n\n## Fixed\n\n- Calling `day_of_month` on a wait task now waits for to wait for the next day having the requested day number, even if that means waiting for next month. (i.e calling Wait().day_of_month(31) on February, 2nd will wait for March, 31st)\n- Fixed Wait task behavior in some edge cases\n- Encodes HTTP params before sending request\n\n### Added\n\n- Added `event_data` property when sending event.\n\n## [0.3.1] - 2019-04-26\n\n## Fixed\n\n- Fixed `MANIFEST.in` file not included files required by `setup.py`.\n\n## [0.3.0] - 2019-03-25\n\n### Added\n\n- Calling `dispatch` on tasks now allows to process tasks asynchronously\n\n### Fixed\n\nFixed Wait task behavior in some edge cases\nEncodes HTTP params before sending request\n\n## [0.2.5] - 2018/10/17\n\nObject Serialization (including circular structures)\n\n## [0.2.4] - 2018/09/26\n\nEnhanced WithDuration & WithTimestamp classes\n\n## [0.2.3] - 2018/09/21\n\nMinor enhancements (including the workflow find() method)\n\n## [0.2.2] - 2018/09/19\n\nNew version scheme management\n\n## [0.2.1] - 2018/09/17\n\nReorganized modules\n\n## [0.2.0] - 2018/09/14\n\nFull rewriting of the package\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://zenaton.com/", "keywords": "workflow engine,workflows,orchestration,event-driven architecture,queuing systems,orchestration engine,background jobs,hosted queues,queues,jobs,asynchronous tasks", "license": "Apache License, Version 2.0", "maintainer": "", "maintainer_email": "", "name": "zenaton", "package_url": "https://pypi.org/project/zenaton/", "platform": "", "project_url": "https://pypi.org/project/zenaton/", "project_urls": { "Homepage": "https://zenaton.com/" }, "release_url": "https://pypi.org/project/zenaton/0.4.2/", "requires_dist": [ "requests", "pytz", "freezegun ; extra == 'test'", "pytest ; extra == 'test'", "pytest-mock ; extra == 'test'", "python-dotenv ; extra == 'test'" ], "requires_python": ">=3", "summary": "Zenaton client library", "version": "0.4.2" }, "last_serial": 5923487, "releases": { "0.1.1": [ { "comment_text": "", "digests": { "md5": "eff17c0ae798f72ade95183ab97aa945", "sha256": "8d8c27a0909be7ab9490b6f5250ff36541cc1865a0f282dba268631ecf3ebc24" }, "downloads": -1, "filename": "zenaton-0.1.1.tar.gz", "has_sig": false, "md5_digest": "eff17c0ae798f72ade95183ab97aa945", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*", "size": 26296, "upload_time": "2017-09-08T20:21:54", "url": "https://files.pythonhosted.org/packages/c8/ef/e0bfe04e3941acf97d025a5b1d4511214b7fa8d18e3cbf2809d4e0751a29/zenaton-0.1.1.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "3d526d4d542096e544bf693305e9b4b0", "sha256": "5a10bbc6e82b46d17d7f3e6794b30a7bc64384085b2b1fb11bf18a3100e47a4e" }, "downloads": -1, "filename": "zenaton-0.1.3.tar.gz", "has_sig": false, "md5_digest": "3d526d4d542096e544bf693305e9b4b0", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*", "size": 24005, "upload_time": "2017-10-02T16:36:57", "url": "https://files.pythonhosted.org/packages/68/8c/633ac3ae65850ecf883c03a32f800149843b13c357788061e4a0ac037009/zenaton-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "b1cac575e1768746275eb339caf26ca9", "sha256": "9e8011a090429fe4529aac8b0c767f5ae96cda25a0ad7f8f673485e86dc05cdb" }, "downloads": -1, "filename": "zenaton-0.1.4.tar.gz", "has_sig": false, "md5_digest": "b1cac575e1768746275eb339caf26ca9", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*", "size": 24056, "upload_time": "2017-10-03T17:48:22", "url": "https://files.pythonhosted.org/packages/29/ba/1ffacd9911856cb1b2108f37172ef3a6198b107d985bedc1a6914fbfba8c/zenaton-0.1.4.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "fa98d1bc839ff3ed81fa00e70ebe2fec", "sha256": "3f246e195ca863b580b9a5312bb80bd0832f958fd34a7c335350a2a084e12091" }, "downloads": -1, "filename": "zenaton-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "fa98d1bc839ff3ed81fa00e70ebe2fec", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 15803, "upload_time": "2018-09-14T16:13:53", "url": "https://files.pythonhosted.org/packages/48/fe/7f482e3d35eb59778e0b8fb2034897c55b3943a8fe59dc5e7146e9a8582b/zenaton-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e259d4be5b902407c1773c689643114c", "sha256": "8962755cf4678eb09cb5dbd4657249b0f0d14c1b10d79e2ef58da46033655b3d" }, "downloads": -1, "filename": "zenaton-0.2.0.tar.gz", "has_sig": false, "md5_digest": "e259d4be5b902407c1773c689643114c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 11327, "upload_time": "2018-09-14T16:13:55", "url": "https://files.pythonhosted.org/packages/25/59/e8c005b02511b9aba279d246c367df3dbe5168f0bd4a49b2b69fe8b030d7/zenaton-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "da6203d0187acaec3599926bb8ffbbb9", "sha256": "d11c64056337e2796c0163f3237824f24d852b87a8b8afd3afdb37be1c61c0e2" }, "downloads": -1, "filename": "zenaton-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "da6203d0187acaec3599926bb8ffbbb9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 15736, "upload_time": "2018-09-17T11:03:01", "url": "https://files.pythonhosted.org/packages/8e/b7/534c9c992f2da02e9717f44d5d29b54e319480e1bfc8c0d0336f82579fa3/zenaton-0.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5d7d5b9f29697585ed5c7aa42984ac2b", "sha256": "ee25ce35f995ac10c3ad00e9cab0d704ca5028339b5560d2478e554bebcb43f7" }, "downloads": -1, "filename": "zenaton-0.2.1.tar.gz", "has_sig": false, "md5_digest": "5d7d5b9f29697585ed5c7aa42984ac2b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 12877, "upload_time": "2018-09-17T11:03:03", "url": "https://files.pythonhosted.org/packages/26/64/a27955557adce5b867d509c1d93bbdb7dc74b9a0d61f92d057bcea95321f/zenaton-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "cfc3796c353b39f6fccfdb477e3345a8", "sha256": "e9f80886067e48c631346be134a530588d67a9c39b36e46558e297a2941abae4" }, "downloads": -1, "filename": "zenaton-0.2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "cfc3796c353b39f6fccfdb477e3345a8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 15792, "upload_time": "2018-09-20T08:40:03", "url": "https://files.pythonhosted.org/packages/64/7d/405eddf85fd401bd51e7c773be4a79d72fe91f8fe0bdec7da7b669370c2f/zenaton-0.2.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3474b92d661179f44964f74c69c2a993", "sha256": "cd5cd73f1856b5509ba8c2d0f440062baa9ceeee69c8c6134173471baea23246" }, "downloads": -1, "filename": "zenaton-0.2.2.tar.gz", "has_sig": false, "md5_digest": "3474b92d661179f44964f74c69c2a993", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 12922, "upload_time": "2018-09-20T08:40:05", "url": "https://files.pythonhosted.org/packages/02/d0/8ef2cfe5721796fabfdddb9c3aacc8b30501e81b61b6a02565c07aa499df/zenaton-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "a6c160509ab0d3350ecde5282f2b4cfc", "sha256": "556627ffa6f33e13846509c559bd0537054de3b7aa61bbb244b33d45df38d6a0" }, "downloads": -1, "filename": "zenaton-0.2.3-py3-none-any.whl", "has_sig": false, "md5_digest": "a6c160509ab0d3350ecde5282f2b4cfc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 22594, "upload_time": "2018-09-21T17:16:35", "url": "https://files.pythonhosted.org/packages/0a/64/58a000df1f487b74a5fb60608a13ce28b9c247647c179185957a65e06675/zenaton-0.2.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a35ba4c0fd289ad4c1eaa910ed29e2b1", "sha256": "23092a64047ec12a7b43c9605d15ed1c108540aa8b8fbfc065a0acc0c75e69e1" }, "downloads": -1, "filename": "zenaton-0.2.3.tar.gz", "has_sig": false, "md5_digest": "a35ba4c0fd289ad4c1eaa910ed29e2b1", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 15311, "upload_time": "2018-09-21T17:16:36", "url": "https://files.pythonhosted.org/packages/f3/ea/2d8497aafb244d54d82a43fcbceecdc7d62409495b717308e45772482ced/zenaton-0.2.3.tar.gz" } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "9261fdb0a6c771533543f5e1fb66a7c8", "sha256": "f7995ca55ca74fa2aa902efcee908d5391b74f8681e304f76b68ec007a33dc03" }, "downloads": -1, "filename": "zenaton-0.2.4-py3-none-any.whl", "has_sig": false, "md5_digest": "9261fdb0a6c771533543f5e1fb66a7c8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 24876, "upload_time": "2018-09-26T14:53:46", "url": "https://files.pythonhosted.org/packages/a7/53/45a6b34552b725069b88e8eeebad5d00f8890c08afcd12dc2db4188cd385/zenaton-0.2.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b93be5954ec7917a7f8e7d3e22b56bed", "sha256": "f3e9972eecb7657e8ec045b2046377c76325330ff8357346a8c1c4efc1a1208a" }, "downloads": -1, "filename": "zenaton-0.2.4.tar.gz", "has_sig": false, "md5_digest": "b93be5954ec7917a7f8e7d3e22b56bed", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 17099, "upload_time": "2018-09-26T14:53:47", "url": "https://files.pythonhosted.org/packages/0d/cd/deafade2b03ce3cf9b427daf91d87a9ca636da14f2b5d7855934a4dfcb06/zenaton-0.2.4.tar.gz" } ], "0.2.5": [ { "comment_text": "", "digests": { "md5": "4bcae41a942a112e21b21732f8f46dc1", "sha256": "9462bce65e74a929b0472c5b9e3037c216513691df5e65c86422e3f9a3073760" }, "downloads": -1, "filename": "zenaton-0.2.5-py3-none-any.whl", "has_sig": false, "md5_digest": "4bcae41a942a112e21b21732f8f46dc1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 29557, "upload_time": "2018-10-25T17:12:39", "url": "https://files.pythonhosted.org/packages/aa/46/e8e61d162208dd4e26eb09c7e1185d13400d067e60080801d56bef388765/zenaton-0.2.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6ee87ef62c8f97ca5602ed4fb09fa0e7", "sha256": "9845d73be030bc39a8675dcdc68053c96192d18efc83cb3fa2acc8d05f9ac99b" }, "downloads": -1, "filename": "zenaton-0.2.5.tar.gz", "has_sig": false, "md5_digest": "6ee87ef62c8f97ca5602ed4fb09fa0e7", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 20097, "upload_time": "2018-10-25T17:12:41", "url": "https://files.pythonhosted.org/packages/f6/bd/655779fb620e8ff47cdd624eb86773e978fc924112640a59c0baccfc0f0a/zenaton-0.2.5.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "eecd1e3e862d6cf2757c827240246721", "sha256": "2471983147b9bbf9ce63bcf522ef30757236058c25180f7a8c19ff8db457aa08" }, "downloads": -1, "filename": "zenaton-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "eecd1e3e862d6cf2757c827240246721", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 30577, "upload_time": "2019-03-25T15:53:08", "url": "https://files.pythonhosted.org/packages/4f/61/142b3c8e6174dfcb7b281985558e9ea60e1767bfe44d89a1723a12ec55ba/zenaton-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9f714095ee83cc6be45c30312a56e1a3", "sha256": "bcb854f0863bbcc31e63a51f3bdfa8117b65e066f3510d3cf6a186118fd94386" }, "downloads": -1, "filename": "zenaton-0.3.0.tar.gz", "has_sig": false, "md5_digest": "9f714095ee83cc6be45c30312a56e1a3", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 20867, "upload_time": "2019-03-25T15:53:09", "url": "https://files.pythonhosted.org/packages/cb/e8/0ce8261c956189babd4dc5687ab054181592f4587cff2848544cd929e448/zenaton-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "4c2ed1bd0184822fff4163f9c93ef0b2", "sha256": "2f50913d82fc10217d8875b676af051cbfb8a1c297bfa53c8ce9d1a4002940d1" }, "downloads": -1, "filename": "zenaton-0.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "4c2ed1bd0184822fff4163f9c93ef0b2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 30625, "upload_time": "2019-04-26T16:08:41", "url": "https://files.pythonhosted.org/packages/22/98/86f6cfa62e9a42652419eef4915663c56d4b3dc00c22e361dec96cc0022c/zenaton-0.3.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "af64956382bbb8957088cb855fc8d641", "sha256": "8042c7032883761aac9592643899e4237fb6821d98fe4bff5f7ad70294a55b39" }, "downloads": -1, "filename": "zenaton-0.3.1.tar.gz", "has_sig": false, "md5_digest": "af64956382bbb8957088cb855fc8d641", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 21171, "upload_time": "2019-04-26T16:08:46", "url": "https://files.pythonhosted.org/packages/73/0c/b8cf1673335b301b2c0f5b402b9d16f4b9adbdfd7b86b845628c5b7f82f9/zenaton-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "8793e4165851ba20d250f49d8bcaa615", "sha256": "9e48f0cbe6b896744e53e931748200b2c0f7d4f9d6b7cce3e094a1462bdc79d1" }, "downloads": -1, "filename": "zenaton-0.3.2-py3-none-any.whl", "has_sig": false, "md5_digest": "8793e4165851ba20d250f49d8bcaa615", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 32494, "upload_time": "2019-06-21T14:48:47", "url": "https://files.pythonhosted.org/packages/31/57/ddafad28efc3cfafd43cc25d192d0aec2c665d136af7fcb2761bebf7e5d5/zenaton-0.3.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2aafeff30f589adc5dd0d09ae8edc3f4", "sha256": "1732fea356add82f8157ed67fd1be0618f99bc369dc9723bda0a636e9d1d5034" }, "downloads": -1, "filename": "zenaton-0.3.2.tar.gz", "has_sig": false, "md5_digest": "2aafeff30f589adc5dd0d09ae8edc3f4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 25059, "upload_time": "2019-06-21T14:48:49", "url": "https://files.pythonhosted.org/packages/26/28/3652fa98c2c96daedeca5292d3ee379eb8e83f030a58dc5a584acd58b286/zenaton-0.3.2.tar.gz" } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "e2d62c093551d1e2513e94eab3000b42", "sha256": "ccab4dd09e7fbc7c8f4d1bd7f08b53cbf17b193ca9d9ed18b39b88295ad856c8" }, "downloads": -1, "filename": "zenaton-0.3.3-py3-none-any.whl", "has_sig": false, "md5_digest": "e2d62c093551d1e2513e94eab3000b42", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 32537, "upload_time": "2019-06-25T14:18:35", "url": "https://files.pythonhosted.org/packages/9c/c4/61288654a0b608d29aa84b7c978f5fcea91f0b0d155b0c008af0510608ee/zenaton-0.3.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4a398215dcc654339583ae40dc6e72f2", "sha256": "a145a4107da6ee3738887cb84959e6d11a956b0f01b708c65dc163b9abb98574" }, "downloads": -1, "filename": "zenaton-0.3.3.tar.gz", "has_sig": false, "md5_digest": "4a398215dcc654339583ae40dc6e72f2", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 25157, "upload_time": "2019-06-25T14:18:37", "url": "https://files.pythonhosted.org/packages/7c/af/3fd89d20c3ded8c88d692e805c657bda21c5fbd1d655d4ee971f23067e14/zenaton-0.3.3.tar.gz" } ], "0.3.4": [ { "comment_text": "", "digests": { "md5": "354dff505029dd378141e329d9f932bb", "sha256": "8d05f7b57072af8c2fa18c73f0b7d644e30cb004d09eb135961e5674ad2a5715" }, "downloads": -1, "filename": "zenaton-0.3.4-py3-none-any.whl", "has_sig": false, "md5_digest": "354dff505029dd378141e329d9f932bb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 33785, "upload_time": "2019-07-01T15:49:59", "url": "https://files.pythonhosted.org/packages/ff/e6/4afe6d571e8baeb7771a6680cafcd1dec3cf15d7663850ed45168c1babc6/zenaton-0.3.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4dd4ca2e698ab010aeb5d12324f3f338", "sha256": "f752cb635aa781e476cb238bd5f48e23ce3c81c76526ba4ae4854ac04b656c2a" }, "downloads": -1, "filename": "zenaton-0.3.4.tar.gz", "has_sig": false, "md5_digest": "4dd4ca2e698ab010aeb5d12324f3f338", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 26658, "upload_time": "2019-07-01T15:50:01", "url": "https://files.pythonhosted.org/packages/34/2a/b8d100834fe3c3bfe0f13546962767b26254cb9ce4a36ff6c3c0b83806d0/zenaton-0.3.4.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "12fea42dd3f8c926085938ccef59ebef", "sha256": "f3f9574063f45f2ef973d1d7484d87521b9a0e2982b626647ba5ed4d0b746a22" }, "downloads": -1, "filename": "zenaton-0.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "12fea42dd3f8c926085938ccef59ebef", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 35420, "upload_time": "2019-08-26T14:41:25", "url": "https://files.pythonhosted.org/packages/a8/30/9756340aa8aad8accecf2dfafd5671d1b43d7df8ac7c9ea60a8f1f5e587e/zenaton-0.4.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6c1ecc88a5ec42625497de8604cb8214", "sha256": "8da3fc931bc9a7c98c8c6d3ace2ad084f66d660c92ae25b4746deb1e423cb61b" }, "downloads": -1, "filename": "zenaton-0.4.0.tar.gz", "has_sig": false, "md5_digest": "6c1ecc88a5ec42625497de8604cb8214", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 27619, "upload_time": "2019-08-26T14:41:27", "url": "https://files.pythonhosted.org/packages/47/b9/92bfadd1410735aeb0e97e15886825442469fa89109b8c5e216119737be4/zenaton-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "d2c33d23ebf081bea5bdbddf825a8f80", "sha256": "d22612a4cbf05f0bb1c8df50d5b0db0beb6ef3401811c931c6f7ff396f0ce172" }, "downloads": -1, "filename": "zenaton-0.4.1-py3-none-any.whl", "has_sig": false, "md5_digest": "d2c33d23ebf081bea5bdbddf825a8f80", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 37328, "upload_time": "2019-09-05T13:19:01", "url": "https://files.pythonhosted.org/packages/94/c9/a6f91d34812acffb16295a459fa8ec698fe168de36c48349e3322ca00203/zenaton-0.4.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a2662d152954c9997dd45f2ba0759f8b", "sha256": "ada2df57f180f61b44bdfbbd1d673f8d14161ca732832b8eb3bc0c86a43b0995" }, "downloads": -1, "filename": "zenaton-0.4.1.tar.gz", "has_sig": false, "md5_digest": "a2662d152954c9997dd45f2ba0759f8b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 28688, "upload_time": "2019-09-05T13:19:03", "url": "https://files.pythonhosted.org/packages/36/5d/cb423728ef72e8d9b1e5006853386289cd7f4a786073545ffadae70f06a4/zenaton-0.4.1.tar.gz" } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "b7f18f5efaa66c32be51f933c3714911", "sha256": "459231eacf9ac8d29dee9f05f1fda68f290b39b02220b6d329786c2829d1a21a" }, "downloads": -1, "filename": "zenaton-0.4.2-py3-none-any.whl", "has_sig": false, "md5_digest": "b7f18f5efaa66c32be51f933c3714911", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 37508, "upload_time": "2019-10-03T13:36:15", "url": "https://files.pythonhosted.org/packages/7f/e0/1d3a8dfac0ef057d085280be7cd7bc796b58ce30f984da755d0c1cef93e6/zenaton-0.4.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cf85a63038410307bd47c8c4ff47fd59", "sha256": "a4a470053c4275d8c5ad8b71c939bc7faf9c8065f435aaf68e7f1376ffe22cd5" }, "downloads": -1, "filename": "zenaton-0.4.2.tar.gz", "has_sig": false, "md5_digest": "cf85a63038410307bd47c8c4ff47fd59", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 29014, "upload_time": "2019-10-03T13:36:18", "url": "https://files.pythonhosted.org/packages/28/62/f160c973d4b71cb2452ffd9c0a5b92f13751d639cefb671e0e8851fa59ef/zenaton-0.4.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "b7f18f5efaa66c32be51f933c3714911", "sha256": "459231eacf9ac8d29dee9f05f1fda68f290b39b02220b6d329786c2829d1a21a" }, "downloads": -1, "filename": "zenaton-0.4.2-py3-none-any.whl", "has_sig": false, "md5_digest": "b7f18f5efaa66c32be51f933c3714911", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 37508, "upload_time": "2019-10-03T13:36:15", "url": "https://files.pythonhosted.org/packages/7f/e0/1d3a8dfac0ef057d085280be7cd7bc796b58ce30f984da755d0c1cef93e6/zenaton-0.4.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cf85a63038410307bd47c8c4ff47fd59", "sha256": "a4a470053c4275d8c5ad8b71c939bc7faf9c8065f435aaf68e7f1376ffe22cd5" }, "downloads": -1, "filename": "zenaton-0.4.2.tar.gz", "has_sig": false, "md5_digest": "cf85a63038410307bd47c8c4ff47fd59", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 29014, "upload_time": "2019-10-03T13:36:18", "url": "https://files.pythonhosted.org/packages/28/62/f160c973d4b71cb2452ffd9c0a5b92f13751d639cefb671e0e8851fa59ef/zenaton-0.4.2.tar.gz" } ] }