{ "info": { "author": "Stanislav Prokop", "author_email": "", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Software Development :: Libraries" ], "description": "safepy: safety belt for Python distributed services\n===================================================\n\n.. image:: https://img.shields.io/pypi/v/safepy.svg\n :target: https://pypi.python.org/pypi/safepy\n\n.. image:: https://img.shields.io/:license-Apache_2_License-blue.svg\n :target: https://github.com/prokopst/safepy/blob/master/LICENSE\n\n.. image:: https://img.shields.io/pypi/pyversions/safepy.svg\n :target: https://pypi.python.org/pypi/safepy\n\n.. image:: https://api.shippable.com/projects/587b8d9379509c10004a444b/badge?branch=master\n :target: https://app.shippable.com/projects/587b8d9379509c10004a444b\n\n.. image:: https://api.shippable.com/projects/587b8d9379509c10004a444b/coverageBadge?branch=master\n :target: https://app.shippable.com/projects/587b8d9379509c10004a444b\n\nSafepy (rhymes with safety) is a latency and fault tolerance library for Python 3.5 (or greater) inspired by `Hystrix `_, `Cloud Design Patterns `_, `AWS Architecture Blog `_ and many others.\n\nHow to use the library\n----------------------\n\nYou can either use the mechanisms as decorators:\n\n.. code-block:: python\n\n from safety import retry\n\n class ProfileService(object):\n @retry(attempts=3, base_delay=1)\n async def get_profile(self, username):\n ...\n\nOr to dynamically recreate protected methods:\n\n.. code-block:: python\n\n from safety import retry\n\n class ProfileService(object):\n def __init__(self):\n self.get_profile = retry(attempts=3, base_delay=1)(\n self.get_profile\n )\n\n async def get_profile(self, username):\n ...\n\nRetry\n-----\n\n.. code-block:: python\n\n from safepy import retry\n\n class ServiceA(object):\n @retry(attempts=3, base_delay=1)\n async def call():\n ...\n\nNotes\n^^^^^\n\n* The default ``retry`` is an alias for ``retry_with_jitter_backoff``, a retry mechanism which uses `jitter backoff `_. For exponential backoff use ``retry_with_exponential_backoff``.", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/prokopst/safepy", "keywords": "safety microservice microservices", "license": "Apache 2 License", "maintainer": "", "maintainer_email": "", "name": "safepy", "package_url": "https://pypi.org/project/safepy/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/safepy/", "project_urls": { "Homepage": "https://github.com/prokopst/safepy" }, "release_url": "https://pypi.org/project/safepy/0.1.0a0/", "requires_dist": null, "requires_python": "", "summary": "Safety belt for your Python distributed services.", "version": "0.1.0a0" }, "last_serial": 2607634, "releases": { "0.0.1a0": [ { "comment_text": "", "digests": { "md5": "b3fa66b5f226d5f3367a02dd64c507ba", "sha256": "c79658504706c6d1f9a81e2b60f305078687e482fc4edb67cb77d58140a04a0b" }, "downloads": -1, "filename": "safepy-0.0.1a0-py3-none-any.whl", "has_sig": true, "md5_digest": "b3fa66b5f226d5f3367a02dd64c507ba", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8857, "upload_time": "2017-01-24T14:12:47", "url": "https://files.pythonhosted.org/packages/05/cd/eb2f3dfe8cb0daa1e593e872a8d5753df9eaef2505f191c97058c2a01310/safepy-0.0.1a0-py3-none-any.whl" } ], "0.1.0a0": [ { "comment_text": "", "digests": { "md5": "d922076f7162fbbdbd77ef5fa935eb00", "sha256": "a43d045fec380b8cbe7924ffd7325de672b69d7e3b16c74c7804330b16871f19" }, "downloads": -1, "filename": "safepy-0.1.0a0-py3-none-any.whl", "has_sig": true, "md5_digest": "d922076f7162fbbdbd77ef5fa935eb00", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9889, "upload_time": "2017-01-30T21:14:23", "url": "https://files.pythonhosted.org/packages/5e/6f/35804cd7530eb8086d61254325781c6e83d5262d8e2f47a441afe1838805/safepy-0.1.0a0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1dbcf83f37f8dcb4002ca912b4ee8396", "sha256": "2d99abe0ec5a231f6e962ff7793f63f076c8c3d2d35b98b8a3270535b5a2b62e" }, "downloads": -1, "filename": "safepy-0.1.0a0.tar.gz", "has_sig": true, "md5_digest": "1dbcf83f37f8dcb4002ca912b4ee8396", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5888, "upload_time": "2017-01-30T21:14:41", "url": "https://files.pythonhosted.org/packages/43/e0/3a847f3982b5715a0ca42665cd4b1af357acf1ce8d3d8bab3e7a26952c93/safepy-0.1.0a0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "d922076f7162fbbdbd77ef5fa935eb00", "sha256": "a43d045fec380b8cbe7924ffd7325de672b69d7e3b16c74c7804330b16871f19" }, "downloads": -1, "filename": "safepy-0.1.0a0-py3-none-any.whl", "has_sig": true, "md5_digest": "d922076f7162fbbdbd77ef5fa935eb00", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9889, "upload_time": "2017-01-30T21:14:23", "url": "https://files.pythonhosted.org/packages/5e/6f/35804cd7530eb8086d61254325781c6e83d5262d8e2f47a441afe1838805/safepy-0.1.0a0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1dbcf83f37f8dcb4002ca912b4ee8396", "sha256": "2d99abe0ec5a231f6e962ff7793f63f076c8c3d2d35b98b8a3270535b5a2b62e" }, "downloads": -1, "filename": "safepy-0.1.0a0.tar.gz", "has_sig": true, "md5_digest": "1dbcf83f37f8dcb4002ca912b4ee8396", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5888, "upload_time": "2017-01-30T21:14:41", "url": "https://files.pythonhosted.org/packages/43/e0/3a847f3982b5715a0ca42665cd4b1af357acf1ce8d3d8bab3e7a26952c93/safepy-0.1.0a0.tar.gz" } ] }