{ "info": { "author": "Sergey Bunatyan", "author_email": "sergey.bunatian@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: Apache Software License", "Operating System :: POSIX :: Linux", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.5" ], "description": "Library to make code more robust\n[![Build Status](https://travis-ci.org/sbunatyan/retrylib.svg?branch=master)](https://travis-ci.org/sbunatyan/retrylib)\n\n# Retry decorator parameters\n\n\nretry(attempts_number, delay=0, step=0, max_delay=-1, retry_on=Exception, logger=None)\n\n* attempts_number: number of function calls (first call + retries). If attempts_number < 0 then retry infinitely\n* delay: delay before first retry\n* step: increment value of timeout on each retry\n* max_delay: maximum delay value (upper bound for delay)\n* retry_on: exception that should be handled or function that checks\n if retry should be executed (default: Exception)\n* logger: logger to write warnings\n\nreturns the result of decorated function\n\n\n\n# Retry on specific exception\n\n from retrylib import retry\n\n @retry(attempts_number=3, retry_on=(MyException,))\n def function():\n raise MyException()\n\n\n# Use custom function\n\n\n from retrylib import retry\n\n def is_my_exception(error):\n return isinstance(error, MyException)\n\n @retry(attempts_number=3, retry_on=is_my_exception)\n def function():\n raise MyException()\n\n\n# Retry on network errors\n\n\nYou can use following code to add retries for your custom network\nfunction:\n\n import requests\n from retrylib.network import retry\n\n @retry()\n def function():\n response = requests.get('http://localhost:5002')\n response.raise_for_status()\n return response\n\n function()\n\n\n# Logging\n\n\nGlobal logger: you can pass specific logger to decorator\n\n import logging\n import logging.config\n\n from retrylib.network import retry\n\n LOGGING = {\n 'version': 1,\n 'formatters': {\n 'precise': {\n 'datefmt': '%Y-%m-%d,%H:%M:%S',\n 'format': '%(levelname)-7s %(asctime)15s '\n '%(name)s:%(lineno)d %(message)s'\n }\n },\n 'handlers': {\n 'console': {\n 'class': 'logging.StreamHandler',\n 'formatter': 'precise',\n 'stream': 'ext://sys.stderr'\n },\n },\n 'root': {\n 'level': 'INFO',\n 'handlers': ['console']\n }\n }\n\n logging.config.dictConfig(LOGGING)\n\n LOGGER = logging.getLogger(__name__)\n\n @retry(logger=LOGGER)\n def function():\n response = requests.get('http://localhost:5002')\n response.raise_for_status()\n return response\n\n\nObject-specific logger: to use object-specific logger define method 'get_logger'\n\n from retrylib import retry\n\n class MyClass(object):\n def __init__(self):\n self._logger = logging.getLogger(__name__)\n\n def get_logger(self):\n return self._logger\n\n @retry()\n def my_method(self):\n ...\n raise Exception\n\n obj = MyClass()\n obj.my_method()\n # obj._logger will be used\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "https://github.com/sbunatyan/retrylib/tree/1.2.5", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/sbunatyan/retrylib", "keywords": "retry,retries", "license": "Apache License 2.0", "maintainer": "", "maintainer_email": "", "name": "retrylib", "package_url": "https://pypi.org/project/retrylib/", "platform": "", "project_url": "https://pypi.org/project/retrylib/", "project_urls": { "Download": "https://github.com/sbunatyan/retrylib/tree/1.2.5", "Homepage": "https://github.com/sbunatyan/retrylib" }, "release_url": "https://pypi.org/project/retrylib/1.2.5/", "requires_dist": [ "requests", "six" ], "requires_python": "", "summary": "Smart retry library", "version": "1.2.5" }, "last_serial": 4477220, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "9172d6b0be7159950d606e256218277f", "sha256": "3aa9e9a219d0408b60755d57f8ad3f64f6719ec95dde355443ade6d5aa2d5ae6" }, "downloads": -1, "filename": "retrylib-1.0.0.tar.gz", "has_sig": false, "md5_digest": "9172d6b0be7159950d606e256218277f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7432, "upload_time": "2016-10-02T22:07:34", "url": "https://files.pythonhosted.org/packages/8e/e8/d727a5276796fa0cfa0c49be619083265280821c91517bc93b9063246217/retrylib-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "2e5e7b57648ece607b6261491b795d81", "sha256": "d9ca719a710f4a865865f5505c240fd16cb4347d7ec7ea890017bd206522bf6f" }, "downloads": -1, "filename": "retrylib-1.0.1.tar.gz", "has_sig": false, "md5_digest": "2e5e7b57648ece607b6261491b795d81", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7419, "upload_time": "2016-11-17T10:28:27", "url": "https://files.pythonhosted.org/packages/a6/60/c798dce43a481e379974bc43bf1952f5efa0a287b6ca8328d02eea8d5985/retrylib-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "d587f5c3946b71599b1199e69f00f24d", "sha256": "ad24e2257b97b31de53a37951ae1d4589a906300f1d9e0684d2136de0d5b4c53" }, "downloads": -1, "filename": "retrylib-1.0.2.tar.gz", "has_sig": false, "md5_digest": "d587f5c3946b71599b1199e69f00f24d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7440, "upload_time": "2016-11-17T10:38:22", "url": "https://files.pythonhosted.org/packages/0d/e0/be0c549de1c37c6c0ac37dc8d4d8dd3a22be5bca8281f0ea8c3b5a285d04/retrylib-1.0.2.tar.gz" } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "23b931962db4346b031dca3d28bfc507", "sha256": "399b0f06e20778d366de6100a1e27bcb4b7bd8aad1494a83213b2ea494711be3" }, "downloads": -1, "filename": "retrylib-1.0.4.tar.gz", "has_sig": false, "md5_digest": "23b931962db4346b031dca3d28bfc507", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11103, "upload_time": "2016-11-23T14:48:59", "url": "https://files.pythonhosted.org/packages/2c/38/5447a4828911f6c74847e0353244cda538f4bc87099f9d95d259d844e3d4/retrylib-1.0.4.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "06224e47951d56c44a97d23031c52e32", "sha256": "a2f31527e505439761beda50544aed1df2ff1481c374d2dd811f6e5fa38c4898" }, "downloads": -1, "filename": "retrylib-1.1.0.tar.gz", "has_sig": false, "md5_digest": "06224e47951d56c44a97d23031c52e32", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11113, "upload_time": "2016-12-02T14:45:15", "url": "https://files.pythonhosted.org/packages/05/63/9185f6da08b305129efb456bdb4a8b0911b5e104f9a2683f091fbf62cf3d/retrylib-1.1.0.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "f8723e89f0a22216a24c4a82d2216e85", "sha256": "c7ac166fd0f32ce6dc3751f5bda7435b9d6e11c69cab7741c37808757457a1e2" }, "downloads": -1, "filename": "retrylib-1.2.0.tar.gz", "has_sig": false, "md5_digest": "f8723e89f0a22216a24c4a82d2216e85", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11217, "upload_time": "2016-12-27T14:36:12", "url": "https://files.pythonhosted.org/packages/39/de/61e4b307c3653eb9a0de25c7e745e60d53de4d7ec6c505cc75054f89a26d/retrylib-1.2.0.tar.gz" } ], "1.2.2": [ { "comment_text": "", "digests": { "md5": "908353c9e1899a40323e9c6965597f3b", "sha256": "8e8c238b0e268d62ec5ee6f0d43da304ad4fc3f30f3775ff2abcdd5a4aa2278d" }, "downloads": -1, "filename": "retrylib-1.2.2.tar.gz", "has_sig": false, "md5_digest": "908353c9e1899a40323e9c6965597f3b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11530, "upload_time": "2017-07-11T12:52:16", "url": "https://files.pythonhosted.org/packages/c7/bf/c42121b35b6fddedf963b03764f9ff81603f5ee21f5c280a63b101de7ccb/retrylib-1.2.2.tar.gz" } ], "1.2.3": [ { "comment_text": "", "digests": { "md5": "7e4b5fd72aa53c368a3e385d76e580f0", "sha256": "09ba1e9ecfa162f17237c1f73f74ae6e923c1efcc6e9cf92de3786d4008f9026" }, "downloads": -1, "filename": "retrylib-1.2.3.tar.gz", "has_sig": false, "md5_digest": "7e4b5fd72aa53c368a3e385d76e580f0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10864, "upload_time": "2017-12-28T22:41:36", "url": "https://files.pythonhosted.org/packages/1f/07/3bbf07a48aa8c5623607db038fd0732b8ac3650b87e3e720dfec9bbc71d4/retrylib-1.2.3.tar.gz" } ], "1.2.4": [ { "comment_text": "", "digests": { "md5": "97891f36a5d220275aa7d49d0c210b81", "sha256": "a677c979eb7c52f791a8fa80e7a7e028e493a0cb4cf67130cf8bcee979859489" }, "downloads": -1, "filename": "retrylib-1.2.4-py3-none-any.whl", "has_sig": false, "md5_digest": "97891f36a5d220275aa7d49d0c210b81", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10892, "upload_time": "2018-11-12T08:59:57", "url": "https://files.pythonhosted.org/packages/7f/02/f5592fa8b99ab884b21f7288c261f3fe37007b7c5134dc14da705b428df7/retrylib-1.2.4-py3-none-any.whl" } ], "1.2.5": [ { "comment_text": "", "digests": { "md5": "c1589b5637b64e1fbc44953ed4c03a97", "sha256": "75b836d813c433e43d14356d8cfe75b61109fb9a3e4c18b749a8cffebbceabb3" }, "downloads": -1, "filename": "retrylib-1.2.5-py3-none-any.whl", "has_sig": false, "md5_digest": "c1589b5637b64e1fbc44953ed4c03a97", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10893, "upload_time": "2018-11-12T12:24:54", "url": "https://files.pythonhosted.org/packages/b1/1a/9d9c45e079039b7ae906b0e50a5a8b226982525d1c7df26882f29e074b83/retrylib-1.2.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f5b648bd17a524489104c3f3c613c003", "sha256": "1dd86ad0ad329fe28df76bb84661c93add6c57945c34efa035b6a5dfbd8d64aa" }, "downloads": -1, "filename": "retrylib-1.2.5.tar.gz", "has_sig": false, "md5_digest": "f5b648bd17a524489104c3f3c613c003", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12355, "upload_time": "2018-11-12T12:24:56", "url": "https://files.pythonhosted.org/packages/96/b5/44ba22b77f19d32a34e2c7b5b5ee22d5f3ade2f474be8924b0b61055fa6f/retrylib-1.2.5.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c1589b5637b64e1fbc44953ed4c03a97", "sha256": "75b836d813c433e43d14356d8cfe75b61109fb9a3e4c18b749a8cffebbceabb3" }, "downloads": -1, "filename": "retrylib-1.2.5-py3-none-any.whl", "has_sig": false, "md5_digest": "c1589b5637b64e1fbc44953ed4c03a97", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10893, "upload_time": "2018-11-12T12:24:54", "url": "https://files.pythonhosted.org/packages/b1/1a/9d9c45e079039b7ae906b0e50a5a8b226982525d1c7df26882f29e074b83/retrylib-1.2.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f5b648bd17a524489104c3f3c613c003", "sha256": "1dd86ad0ad329fe28df76bb84661c93add6c57945c34efa035b6a5dfbd8d64aa" }, "downloads": -1, "filename": "retrylib-1.2.5.tar.gz", "has_sig": false, "md5_digest": "f5b648bd17a524489104c3f3c613c003", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12355, "upload_time": "2018-11-12T12:24:56", "url": "https://files.pythonhosted.org/packages/96/b5/44ba22b77f19d32a34e2c7b5b5ee22d5f3ade2f474be8924b0b61055fa6f/retrylib-1.2.5.tar.gz" } ] }