{ "info": { "author": "Kristofer Borgstr\u00f6m", "author_email": "", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "# console-retry\n\nThis utility is designed to run any shell command and retry if no new line was written to \nstdout within a specified timeout. Especially useful in CI to retry flaky tests/scripts\n\nThe default timeout applies to lines written to stdout of the shell command. \n\nRetry is triggered when:\n* No new line was written to stdout after specified timeout\n\nRetry is not triggered when:\n* The command as a whole takes longer than specified timeout\n* The command returns a non-zero (error) return code\n\nTo be a good bash-citizen the return code is mirrors the return code of the subcommand or 1 if the command never \nfinished in the specified timeout.\n\n# Example use / tests\n\n```\nconsole-retry -t 10 \"echo abcd ; false\" # Immediate fail\nconsole-retry -r 1 \"sleep 70\" # Fail after default timeout = 60\nconsole-retry -s -r 1 -t 10 \"sleep 15\" # Should \"skip timeout and therefore succeed after 15s\"\nconsole-retry -t 10 \"echo abcd ; true\" # Immediate success\nconsole-retry -p -o abcd -t 10 \" sleep 5; echo abc ;sleep 20; false\" # Should Complete with error on second try\nconsole-retry -o abcd -t 10 \" sleep 5; echo abc ;sleep 20; false\" # Should fail after retrymax (no progressive)\nconsole-retry -o abc -t 10 \" sleep 5; echo abc ; false\" # Should retry max but never with ok\nconsole-retry -o abc -t 10 \">&2 echo abc ; false\" # stderr, should retry max\nconsole-retry -o nomatch -t 10 \">&2 echo abc ; false\" # stderr, should fail immediately\nconsole-retry -o abc -t 10 \"echo abc ; true\" # stderr, should succeed immediately\nconsole-retry -o nomatch -t 10 \">&2 echo abc ; sleep 2; echo def; true\" # Output should be: abc \\ndef\nconsole-retry -t 10 \">&2 echo abc ; sleep 10; echo def; sleep 10; true\" # Staggered output \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/NaturalCycles/console-retry", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "console-retry", "package_url": "https://pypi.org/project/console-retry/", "platform": "", "project_url": "https://pypi.org/project/console-retry/", "project_urls": { "Homepage": "https://github.com/NaturalCycles/console-retry" }, "release_url": "https://pypi.org/project/console-retry/1.0.4/", "requires_dist": null, "requires_python": ">=3.5", "summary": "This utility is designed to run any shell command and retry if no new line was written tostdout within a specified timeout", "version": "1.0.4" }, "last_serial": 5322499, "releases": { "1.0.1": [ { "comment_text": "", "digests": { "md5": "95696a52dd8f83ddcc5fa6e6a0703a39", "sha256": "4c516fc7da617fde407dd4ddbda89ca9ba8a6994ae3c61875e82b28d793bfe9b" }, "downloads": -1, "filename": "console_retry-1.0.1.tar.gz", "has_sig": false, "md5_digest": "95696a52dd8f83ddcc5fa6e6a0703a39", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3745, "upload_time": "2019-05-24T09:46:51", "url": "https://files.pythonhosted.org/packages/dc/51/865f19284ebaa6d8f9a588a183196fde92c42f401ca96cb44744d0900e36/console_retry-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "b3dd2198950c86a759d68990b6a5723d", "sha256": "55c7b9efd867225be878826cb2300cdb111112895af9d01ee6ad6c30609a14a6" }, "downloads": -1, "filename": "console_retry-1.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "b3dd2198950c86a759d68990b6a5723d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 5877, "upload_time": "2019-05-24T10:53:58", "url": "https://files.pythonhosted.org/packages/8f/77/e699ca4e7d9cb4402e4ae79ca63501998a74d96147a7998d9c9c0d031df9/console_retry-1.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "83773c8879d118a76eed094a77a7e2e2", "sha256": "6c30003a805531923cb54ad9e5818b73e6c211438cdbb193b6de5d479b50753e" }, "downloads": -1, "filename": "console_retry-1.0.2.tar.gz", "has_sig": false, "md5_digest": "83773c8879d118a76eed094a77a7e2e2", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 4223, "upload_time": "2019-05-24T10:53:59", "url": "https://files.pythonhosted.org/packages/1b/c3/38f5fbef64b65a5aa5ad6254eb3d9410ef8805a79631a1e0bce9e1193bdb/console_retry-1.0.2.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "2d853bb587fc99f7c2953c4857a48644", "sha256": "7239e0f8592f78a893540abce1ccc3664489a9097503951db28f2faad19ebe79" }, "downloads": -1, "filename": "console_retry-1.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "2d853bb587fc99f7c2953c4857a48644", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 5876, "upload_time": "2019-05-24T14:01:25", "url": "https://files.pythonhosted.org/packages/8f/f0/30725d57b8a32620b7e33ce048a588272d555b3924946a720ddf2bc75fd8/console_retry-1.0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4b1fa11dea0c7aa0fd2307067f852c17", "sha256": "7e540fe97494e412acdd9e30636ba891c7c8f35b05726ac34710c4d9653e9a19" }, "downloads": -1, "filename": "console_retry-1.0.3.tar.gz", "has_sig": false, "md5_digest": "4b1fa11dea0c7aa0fd2307067f852c17", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 4271, "upload_time": "2019-05-24T14:01:26", "url": "https://files.pythonhosted.org/packages/fa/d7/30f97e39cf3df8cba2a5a899acc227bdd7a91fed846ec6073644c17ae688/console_retry-1.0.3.tar.gz" } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "3c38a447206ebfc22a2b4ef5c7044e2b", "sha256": "c16e75e517aa6773dbc0e98b8aa642ec43044f865f68de129b5c8becf3aac787" }, "downloads": -1, "filename": "console_retry-1.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "3c38a447206ebfc22a2b4ef5c7044e2b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 5879, "upload_time": "2019-05-27T14:10:15", "url": "https://files.pythonhosted.org/packages/7e/1d/f441462a870ddcb69bd96733eed74891866f7718a68fac58f3aa0eb744aa/console_retry-1.0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b3cba07575b9344cf844aa041ea8a282", "sha256": "8f54b4dc9cee80149060a26856f3c93ed019cdc98d8499570bb65c8f66f18ac3" }, "downloads": -1, "filename": "console_retry-1.0.4.tar.gz", "has_sig": false, "md5_digest": "b3cba07575b9344cf844aa041ea8a282", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 4230, "upload_time": "2019-05-27T14:10:16", "url": "https://files.pythonhosted.org/packages/a9/21/b2628efb215e7d2aaf8ad1b63a36c26b8525a69dacff177748a7ce96280f/console_retry-1.0.4.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "3c38a447206ebfc22a2b4ef5c7044e2b", "sha256": "c16e75e517aa6773dbc0e98b8aa642ec43044f865f68de129b5c8becf3aac787" }, "downloads": -1, "filename": "console_retry-1.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "3c38a447206ebfc22a2b4ef5c7044e2b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 5879, "upload_time": "2019-05-27T14:10:15", "url": "https://files.pythonhosted.org/packages/7e/1d/f441462a870ddcb69bd96733eed74891866f7718a68fac58f3aa0eb744aa/console_retry-1.0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b3cba07575b9344cf844aa041ea8a282", "sha256": "8f54b4dc9cee80149060a26856f3c93ed019cdc98d8499570bb65c8f66f18ac3" }, "downloads": -1, "filename": "console_retry-1.0.4.tar.gz", "has_sig": false, "md5_digest": "b3cba07575b9344cf844aa041ea8a282", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 4230, "upload_time": "2019-05-27T14:10:16", "url": "https://files.pythonhosted.org/packages/a9/21/b2628efb215e7d2aaf8ad1b63a36c26b8525a69dacff177748a7ce96280f/console_retry-1.0.4.tar.gz" } ] }