{ "info": { "author": "yehonadav", "author_email": "yonadav.barilan@gmail.com", "bugtrack_url": null, "classifiers": [ "Programming Language :: Python :: 3.6" ], "description": "# Qaviton Handlers \n![logo](https://www.qaviton.com/wp-content/uploads/logo-svg.svg) \n[![version](https://img.shields.io/pypi/v/qaviton_handlers.svg)](https://pypi.python.org/pypi)\n[![license](https://img.shields.io/pypi/l/qaviton_handlers.svg)](https://pypi.python.org/pypi)\n[![open issues](https://img.shields.io/github/issues/qaviton/qaviton_handlers)](https://github/issues-raw/qaviton/qaviton_handlers)\n[![downloads](https://img.shields.io/pypi/dm/qaviton_handlers.svg)](https://pypi.python.org/pypi)\n![code size](https://img.shields.io/github/languages/code-size/qaviton/qaviton_handlers)\n------------------------- \n\nerror handling utilities \n\n## Installation \n```sh \npip install --upgrade qaviton_handlers \n``` \n\n### Requirements\n- Python 3.6+ \n\n## Features \n* retry decorator \u2713 \n* retry with context \u2713 \n* try functions \u2713 \n* catch errors \u2713 \n* simple Exception wrapper \u2713 \n\n## Usage \n\n```python\ndef retry(tries=3, delay=0, backoff=1, jitter=0, max_delay=None, exceptions=Exception, logger: Logger = log):\n \"\"\"Retry function decorator \\ try a context of actions until attempts run out\n :param exceptions: an exception or a tuple of exceptions to catch. default: Exception.\n :param tries: the maximum number of attempts: -1 (infinite).\n :param delay: initial delay between attempts. default: 0.\n :param max_delay: the maximum value of delay. default: None (no limit).\n :param backoff: multiplier applied to delay between attempts. default: 1 (no backoff).\n fixed if a number, random if a range tuple (min, max), functional if callable (function must receive **kwargs)\n :param jitter: extra seconds added to delay between attempts. default: 0.\n fixed if a number, random if a range tuple (min, max), functional if callable (function must receive **kwargs)\n :param logger: logger.warning(fmt, error, delay) will be called on failed attempts.\n default: retry.logging_logger. if None, logging is disabled.\"\"\"\n``` \n#### retry decorator\n```python\nfrom qaviton_handlers.try_decorator import retry\n\n@retry()\ndef foo():\n n = int('1'+input('select number:'))\n print(n)\n\nfoo()\n```\n\n#### retry with context\n```python\nfrom qaviton_handlers.try_context import retry\n\nwith retry() as trying:\n while trying:\n with trying:\n print(\"Attempt #%d of %d\" % (trying.attempt, trying.attempts))\n raise\n```\n\n#### using different try wrapper functions\n```python\nfrom qaviton_handlers.try_functions import try_to, try_or_none, multi_try, multi_try_no_break\n\ndef foo(a=0):\n print(float(a+input(\"select number:\")))\n\n# simply try\ntry_to(foo, 1)\ntry_to(foo, 2)\ntry_to(foo, 3)\n```\n```python\n# get the error\nerror = try_to(foo, 4)\nif error: print(error)\n\n# if error occurred\nif try_to(foo, 5):\n try_to(foo, 5)\n```\n```python\n# try with key arguments\nr = try_to(lambda a,b,c:a*b*c, 1,kwargs={'b':2,'c':3})\nprint(r)\n```\n```python\n# try to get a number\nnumber = try_or_none(lambda a:float(a+input(\"select number:\")), 6)\nif number: print(number)\n```\n```python\n# try many functions, return a list of results, or an error\n# if an error occurred, the multi try stops\nmulti_try(\n lambda: foo(10), \n lambda: foo(11), \n)\n\n# specify errors to ignore\nresponse = multi_try(\n lambda: foo(13),\n lambda: foo(14),\n exceptions=Exception,\n)\n\n# handle the error\nresponse = multi_try(\n lambda: foo(13),\n lambda: foo(14),\n)\nif isinstance(response, Exception):\n ...\n```\n```python\n# try many functions, return a list of results, some may be errors\n# if an error occurred, the multi try continues\nmulti_try_no_break(\n lambda: foo(8),\n lambda: foo(9),\n lambda: foo(0),\n)\n```\n\n#### ignore errors now so you can handle them later\n```python\nfrom qaviton_handlers.catch import Catch\nfrom qaviton_handlers.utils.error import Error\n\ncatch = Catch(store=True)\n\n# catch an error\ntry:\n 1 + '1'\nexcept Exception as e:\n catch(e)\n\n# a cleaner syntax\nwith catch:\n 1 + '1'\n 2 + '2'\n\n# ignore the error\nwith Catch():\n 5 * 'e'\n\nprint(f\"caught {catch.count} errors\")\nprint(f\"caught first {catch.first}\")\nprint(f\"caught last {catch.last}\")\n\n# make your own Catch\nclass MyCatch(Catch):\n def handler(self, e):\n self.stack.add(Error(e))\n if self.log:\n self.log.warning(f\"I caught {e}\")\n return self\n``` \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/qaviton/qaviton_handlers", "keywords": "", "license": "apache-2.0", "maintainer": "", "maintainer_email": "", "name": "qaviton-handlers", "package_url": "https://pypi.org/project/qaviton-handlers/", "platform": "", "project_url": "https://pypi.org/project/qaviton-handlers/", "project_urls": { "Homepage": "https://github.com/qaviton/qaviton_handlers" }, "release_url": "https://pypi.org/project/qaviton-handlers/2019.10.18.12.58.53.756274/", "requires_dist": null, "requires_python": "", "summary": "qaviton handlers", "version": "2019.10.18.12.58.53.756274" }, "last_serial": 5995541, "releases": { "2019.10.18.12.58.53.756274": [ { "comment_text": "", "digests": { "md5": "6fcd4d07af446a6d09c1c07b2dd2e330", "sha256": "48aaae253f3f143e5f768dc5dbbc54362bd892f631d26160f149512b5f252c1d" }, "downloads": -1, "filename": "qaviton_handlers-2019.10.18.12.58.53.756274-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6fcd4d07af446a6d09c1c07b2dd2e330", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12207, "upload_time": "2019-10-18T12:59:13", "url": "https://files.pythonhosted.org/packages/b0/20/b11722a9f63a8f9d45686a25ac8ec4968c1353305c30961008abbdc969eb/qaviton_handlers-2019.10.18.12.58.53.756274-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d720ab1c0091ce273e419eb57ace5792", "sha256": "6c59fd678bcb07fdae1bd9dfeb49e1cb5ff0effef9e6f87bf0cb94f9e1afcaae" }, "downloads": -1, "filename": "qaviton_handlers-2019.10.18.12.58.53.756274.tar.gz", "has_sig": false, "md5_digest": "d720ab1c0091ce273e419eb57ace5792", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5165, "upload_time": "2019-10-18T12:59:16", "url": "https://files.pythonhosted.org/packages/fd/e0/9e3c5255e21ac6e9ddc2d50fd112b144bd70aadd5b325a7be64b69cb8c1b/qaviton_handlers-2019.10.18.12.58.53.756274.tar.gz" } ], "2019.9.28.23.54.30.360247": [ { "comment_text": "", "digests": { "md5": "3406039927a8f8cb4aaa81c5c1465d4d", "sha256": "a21520de06f232b9b27d12bb4cb5e1c2670e037d22d7e9cb894c84741dcdfdb3" }, "downloads": -1, "filename": "qaviton_handlers-2019.9.28.23.54.30.360247-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3406039927a8f8cb4aaa81c5c1465d4d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11217, "upload_time": "2019-09-28T23:54:55", "url": "https://files.pythonhosted.org/packages/22/a5/8aa920a9b287efc6fc77a1de74ee7685cb40f7dc33c24b75ee9d7757c4ec/qaviton_handlers-2019.9.28.23.54.30.360247-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5f1dd6c115019e834f102843afd79a89", "sha256": "974c1247e3dee9fcc97519faad1933a1002b52dc45138ae72f7dbe626e4a5736" }, "downloads": -1, "filename": "qaviton_handlers-2019.9.28.23.54.30.360247.tar.gz", "has_sig": false, "md5_digest": "5f1dd6c115019e834f102843afd79a89", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4460, "upload_time": "2019-09-28T23:54:58", "url": "https://files.pythonhosted.org/packages/6a/5b/43814c330e63501442f3a66051967ff03638cfd66395fe22ed6168640609/qaviton_handlers-2019.9.28.23.54.30.360247.tar.gz" } ], "2019.9.29.6.22.10.839064": [ { "comment_text": "", "digests": { "md5": "c4a88cb697e54aff7d4d76c1017af868", "sha256": "0052cfaa25922d5d1bf4cc04c1136dd1b880e4dbf9c0401fe61aded34ff9faf9" }, "downloads": -1, "filename": "qaviton_handlers-2019.9.29.6.22.10.839064-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c4a88cb697e54aff7d4d76c1017af868", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11201, "upload_time": "2019-09-29T06:22:22", "url": "https://files.pythonhosted.org/packages/07/b1/ad4f237e5abf030944f672682557e7490034cad63494ea08838221df14e6/qaviton_handlers-2019.9.29.6.22.10.839064-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "acd7e146e544eee0667531468d49b94c", "sha256": "fbb0f6e9bf2a46a1ec980d1bf3dc62b0551c03eeb74ab6aeaa6b5e0280ca623b" }, "downloads": -1, "filename": "qaviton_handlers-2019.9.29.6.22.10.839064.tar.gz", "has_sig": false, "md5_digest": "acd7e146e544eee0667531468d49b94c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4472, "upload_time": "2019-09-29T06:22:24", "url": "https://files.pythonhosted.org/packages/31/63/89ea168ed51517152dd288d1d35fec279330cbb51921f643937467ad4d89/qaviton_handlers-2019.9.29.6.22.10.839064.tar.gz" } ], "2019.9.29.6.41.4.335461": [ { "comment_text": "", "digests": { "md5": "92142f2340d3138b92ff05e61b82d3a6", "sha256": "d08ad6ae24c17b87234336592e5576ef46f41df142c90c3f03cc146d47ab781d" }, "downloads": -1, "filename": "qaviton_handlers-2019.9.29.6.41.4.335461-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "92142f2340d3138b92ff05e61b82d3a6", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11358, "upload_time": "2019-09-29T06:41:15", "url": "https://files.pythonhosted.org/packages/aa/24/abdc389f2fef75c15a82cfdace8573551ac20bdd1a63075e43a0e5f8ab9e/qaviton_handlers-2019.9.29.6.41.4.335461-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ce3dd9ca38a3a7519eda5f766fa65dd5", "sha256": "01d0f2db7d7cb342e3003d24b712747cdb401f6e1d830baf9b6d45f507c99a4f" }, "downloads": -1, "filename": "qaviton_handlers-2019.9.29.6.41.4.335461.tar.gz", "has_sig": false, "md5_digest": "ce3dd9ca38a3a7519eda5f766fa65dd5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4573, "upload_time": "2019-09-29T06:41:18", "url": "https://files.pythonhosted.org/packages/4a/32/634583933febb55a741e4e0703f0d695227a0601afdfedb40d620a7192ad/qaviton_handlers-2019.9.29.6.41.4.335461.tar.gz" } ], "2019.9.29.7.46.16.681860": [ { "comment_text": "", "digests": { "md5": "03cfa7461ceed242468ad07b5b79b79f", "sha256": "69661fa9cfce5f9f9d8d87cf545dd5356f85de1361d05a1bd1a47c029146ef12" }, "downloads": -1, "filename": "qaviton_handlers-2019.9.29.7.46.16.681860-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "03cfa7461ceed242468ad07b5b79b79f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11751, "upload_time": "2019-09-29T07:46:29", "url": "https://files.pythonhosted.org/packages/db/b1/03b60171846f1f514f9e83cf4c126d32eb6b10ce7598e3b548139c1b0f7b/qaviton_handlers-2019.9.29.7.46.16.681860-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "069f45e751df6f11b4fc86328e5d6a29", "sha256": "c0c6fbce2b13022da452d28900c93bca1c5f57f224ab3a9b253b4235c1827cfa" }, "downloads": -1, "filename": "qaviton_handlers-2019.9.29.7.46.16.681860.tar.gz", "has_sig": false, "md5_digest": "069f45e751df6f11b4fc86328e5d6a29", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4946, "upload_time": "2019-09-29T07:46:31", "url": "https://files.pythonhosted.org/packages/a9/8b/ce723e612545e10d92ba07887e11d3a9e48926f81d18e0ae7ef8bcba6292/qaviton_handlers-2019.9.29.7.46.16.681860.tar.gz" } ], "2019.9.29.7.56.30.312631": [ { "comment_text": "", "digests": { "md5": "885dee619a809556a724ec549fb2dc36", "sha256": "80a8e5932caf57d09169c5d7bc508fd8ba5e4f1045df5d96288a35af1fd0d19f" }, "downloads": -1, "filename": "qaviton_handlers-2019.9.29.7.56.30.312631-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "885dee619a809556a724ec549fb2dc36", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12168, "upload_time": "2019-09-29T07:56:42", "url": "https://files.pythonhosted.org/packages/f3/ff/6aab968edcdb0cad84b784cbe30a95c1d6650aee11b8837bf4779573a4a6/qaviton_handlers-2019.9.29.7.56.30.312631-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9972f6043f5feb95d91880c484702cd3", "sha256": "4153ade6d4082030b86a482bd909a4d91d8e663c14af43f3a21d20539011b05f" }, "downloads": -1, "filename": "qaviton_handlers-2019.9.29.7.56.30.312631.tar.gz", "has_sig": false, "md5_digest": "9972f6043f5feb95d91880c484702cd3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5123, "upload_time": "2019-09-29T07:56:44", "url": "https://files.pythonhosted.org/packages/d8/d7/f935227de84c70ba48884bdf632346b1ddf0003e8a3e33cc902372fc5785/qaviton_handlers-2019.9.29.7.56.30.312631.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "6fcd4d07af446a6d09c1c07b2dd2e330", "sha256": "48aaae253f3f143e5f768dc5dbbc54362bd892f631d26160f149512b5f252c1d" }, "downloads": -1, "filename": "qaviton_handlers-2019.10.18.12.58.53.756274-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6fcd4d07af446a6d09c1c07b2dd2e330", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12207, "upload_time": "2019-10-18T12:59:13", "url": "https://files.pythonhosted.org/packages/b0/20/b11722a9f63a8f9d45686a25ac8ec4968c1353305c30961008abbdc969eb/qaviton_handlers-2019.10.18.12.58.53.756274-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d720ab1c0091ce273e419eb57ace5792", "sha256": "6c59fd678bcb07fdae1bd9dfeb49e1cb5ff0effef9e6f87bf0cb94f9e1afcaae" }, "downloads": -1, "filename": "qaviton_handlers-2019.10.18.12.58.53.756274.tar.gz", "has_sig": false, "md5_digest": "d720ab1c0091ce273e419eb57ace5792", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5165, "upload_time": "2019-10-18T12:59:16", "url": "https://files.pythonhosted.org/packages/fd/e0/9e3c5255e21ac6e9ddc2d50fd112b144bd70aadd5b325a7be64b69cb8c1b/qaviton_handlers-2019.10.18.12.58.53.756274.tar.gz" } ] }