{ "info": { "author": "Kontrol SAS", "author_email": "", "bugtrack_url": null, "classifiers": [ "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "[![Codacy Badge](https://api.codacy.com/project/badge/Grade/9c0df6535cb64f03921f3c9bb76c9fba)](https://app.codacy.com/app/jeremad/looper?utm_source=github.com&utm_medium=referral&utm_content=jeremad/looper&utm_campaign=Badge_Grade_Dashboard)\n[![License](https://img.shields.io/github/license/jeremad/looper.svg)](https://opensource.org/licenses/MIT)\n[![Build](https://img.shields.io/travis/jeremad/looper/master.svg)](https://travis-ci.org/jeremad/looper)\n[![codecov](https://codecov.io/gh/jeremad/looper/branch/master/graph/badge.svg)](https://codecov.io/gh/jeremad/looper)\n\n# Basic tool to run commands in loop\n\nThis tool was intended to help QA guy like me with flaky tests, buy either measuring the \"flakyness\" of the test, or run it until it fails to debug it.\n\n## Usage\n\nLet's say your test command is `run test`\n\n### Debug\n\nYou want to run a test until it fails to debug it, and you know it may take a while:\n`$ looper --max-tries 0 --stop-on-first-fail \"run test\"`\n\n`max-tries` to 0, means that there is no limit to the number of times a test can sucessfully run\n\n### Measure\n\nYou want to find the failing rate of a test of out 1000 runs:\n`$ looper --max-tries 1000 \"run test\"`\n\nAt the end you will have a sumary\n\n## Installation\n\n`pip install --user py-loop`\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/jeremad/looper", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "py-loop", "package_url": "https://pypi.org/project/py-loop/", "platform": "", "project_url": "https://pypi.org/project/py-loop/", "project_urls": { "Homepage": "https://github.com/jeremad/looper" }, "release_url": "https://pypi.org/project/py-loop/0.2.3/", "requires_dist": [ "cli-ui", "black ; extra == 'dev'", "codacy-coverage ; extra == 'dev'", "codecov ; extra == 'dev'", "flake8 ; extra == 'dev'", "mypy ; extra == 'dev'", "pytest ; extra == 'dev'", "pytest-cov ; extra == 'dev'" ], "requires_python": ">=3.6", "summary": "Run commands until it fails", "version": "0.2.3" }, "last_serial": 5912343, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "72dcbf0ece41bc513f9c7138e7a0bc40", "sha256": "02d9e44ea8284c47ed73256ee9dcca8ffb2b5c5e33908ddbf31824acfa4e732d" }, "downloads": -1, "filename": "py_loop-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "72dcbf0ece41bc513f9c7138e7a0bc40", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 4369, "upload_time": "2019-02-15T15:15:57", "url": "https://files.pythonhosted.org/packages/ae/47/e24e166b041b7c0a53d56df07a461e27690ace3023d97be794a7164f09f1/py_loop-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "22db5b4ed6cbb7d1e4f13200064ae879", "sha256": "1a858fabe7bc59d59e08280f8e023b2951c220c75aa636a48a9e4e2575a5e214" }, "downloads": -1, "filename": "py-loop-0.1.0.tar.gz", "has_sig": false, "md5_digest": "22db5b4ed6cbb7d1e4f13200064ae879", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2911, "upload_time": "2019-02-15T15:15:58", "url": "https://files.pythonhosted.org/packages/e5/20/309b1a5e5736812e0e665e3c600221e0b50153c41c79f07e32777ebc84e7/py-loop-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "1c84cb6de9d99909ed7e25fce3510450", "sha256": "31e5f48bc9fd37d83801a6b644e81e4e335c7a3630f6f058b8cb64665fd32eeb" }, "downloads": -1, "filename": "py_loop-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "1c84cb6de9d99909ed7e25fce3510450", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 4375, "upload_time": "2019-02-15T15:30:12", "url": "https://files.pythonhosted.org/packages/39/4b/34b2f843eb87eb0e80ec62da59a53da69945da276f84a19a1c5d1d6c10af/py_loop-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "895c3da4946746d60c9bc25ff05c8f34", "sha256": "ba881c562b7eb655af120cd43ba0bf174db7e43530883f6d5b6e5cec5bce984c" }, "downloads": -1, "filename": "py-loop-0.1.1.tar.gz", "has_sig": false, "md5_digest": "895c3da4946746d60c9bc25ff05c8f34", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 2886, "upload_time": "2019-02-15T15:30:13", "url": "https://files.pythonhosted.org/packages/7a/c0/544a8a64bf1c8cc2c9efae5e42a5b6be6d8279738502bde1e9a3d7ee6bd0/py-loop-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "089ee1bd49684b1bac6d97be59d33242", "sha256": "23ac440321bae2f7c8b8c978fef646f2dd1301d0ecce98f2c8690de0ca4194c0" }, "downloads": -1, "filename": "py_loop-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "089ee1bd49684b1bac6d97be59d33242", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 4470, "upload_time": "2019-02-15T15:56:08", "url": "https://files.pythonhosted.org/packages/48/b8/153392125f712ccf039b82e76d1a75be1c1dd00bd0b665cecf8aed208588/py_loop-0.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d18b8326ed26b96a65d5edc6d53c2fcf", "sha256": "25bf0e773dc72b2a90481c2b8e6c60729a25f20ae5dd61b8de74adc193e220b6" }, "downloads": -1, "filename": "py-loop-0.1.2.tar.gz", "has_sig": false, "md5_digest": "d18b8326ed26b96a65d5edc6d53c2fcf", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 2987, "upload_time": "2019-02-15T15:56:09", "url": "https://files.pythonhosted.org/packages/97/bc/0d20b7c681df27304f830070814f4954edfe7481a52c090f1c4bbea9572c/py-loop-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "c57b7133e5a4b9108eee2dd6bdbc62e6", "sha256": "d02efbf57f26bdf31d13cad618e46c7884d40c87b96aa05b9208c07726915869" }, "downloads": -1, "filename": "py_loop-0.1.3-py3-none-any.whl", "has_sig": false, "md5_digest": "c57b7133e5a4b9108eee2dd6bdbc62e6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 4471, "upload_time": "2019-02-21T16:19:31", "url": "https://files.pythonhosted.org/packages/34/91/696fb56c391e60c1fca37310e756f324cc42acfdcc4475aff3856cd50dfe/py_loop-0.1.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c93d9c451f83b551bd09b15ecbcb5c2e", "sha256": "c21c6f35d359542555ecb8f771cf63b86570063f85a03c5cc514bab855a6c481" }, "downloads": -1, "filename": "py-loop-0.1.3.tar.gz", "has_sig": false, "md5_digest": "c93d9c451f83b551bd09b15ecbcb5c2e", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 2990, "upload_time": "2019-02-21T16:19:33", "url": "https://files.pythonhosted.org/packages/93/09/ac9178fc3cc7f1396c0dcadd7dae74f56fc379f1b75699d71b1d8e65676f/py-loop-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "51751307968a5cfcc6784d3468793807", "sha256": "a56eaa1dd5d95c5648bec62ffa1dc0e651500c6b624610e6a3e9a6d7d252f979" }, "downloads": -1, "filename": "py_loop-0.1.4-py3-none-any.whl", "has_sig": false, "md5_digest": "51751307968a5cfcc6784d3468793807", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 4488, "upload_time": "2019-02-21T17:31:22", "url": "https://files.pythonhosted.org/packages/1f/c2/e6729c076fa4ef653678b210c0bb38e9fd3ef2d23398377c367e61fac920/py_loop-0.1.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "65c89a7c073006259b8b7c457adf01fa", "sha256": "b18d7316327758728aa4e4d623a27406168f21732d4c9add6cb16f10aad596d5" }, "downloads": -1, "filename": "py-loop-0.1.4.tar.gz", "has_sig": false, "md5_digest": "65c89a7c073006259b8b7c457adf01fa", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 3006, "upload_time": "2019-02-21T17:31:25", "url": "https://files.pythonhosted.org/packages/c9/b2/12c6f7abe18d323ec35f7c963a490adc877d526830c40e0d2a857710b6a8/py-loop-0.1.4.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "ecf25e59c25abe57c24569924de5d029", "sha256": "8ce8f550d0dca775c2d2ddaeef034fccd69ae99e686d8f6a6bc890253686bbb9" }, "downloads": -1, "filename": "py_loop-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "ecf25e59c25abe57c24569924de5d029", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 4902, "upload_time": "2019-10-01T13:05:08", "url": "https://files.pythonhosted.org/packages/34/de/39282756665745cc410eba15c540819c8d35b0201971dc4a868dd57fe30c/py_loop-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f54f5ac9d39e23d60147111954cc14f4", "sha256": "57a53d35d20685653fe8af4646627c77a30075d60eb3ef3f03c8687269a4dcbd" }, "downloads": -1, "filename": "py-loop-0.2.0.tar.gz", "has_sig": false, "md5_digest": "f54f5ac9d39e23d60147111954cc14f4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 3358, "upload_time": "2019-10-01T13:05:11", "url": "https://files.pythonhosted.org/packages/b7/9c/a9e5fdbea3e3f7588ea8c1dc2f59691b8963430badc2787fc2fb2bd9f681/py-loop-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "01b9852263453d88188fadb5bbf7fbe9", "sha256": "48d65089e97951b7a75445155019f0bda64b220d8926a07086fef69d17005fb3" }, "downloads": -1, "filename": "py_loop-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "01b9852263453d88188fadb5bbf7fbe9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 4919, "upload_time": "2019-10-01T13:13:47", "url": "https://files.pythonhosted.org/packages/33/e4/4b4c4e008b3b4d706ddeb2eaa27a212cda9694ae3d2d7d027bccb4e71af1/py_loop-0.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "df0ad4a6d93f4a636519e9fe1b66b280", "sha256": "8a5d6190b811a581cb4411305dcb63338e67c37f6be7e1ad03f470bf45547466" }, "downloads": -1, "filename": "py-loop-0.2.1.tar.gz", "has_sig": false, "md5_digest": "df0ad4a6d93f4a636519e9fe1b66b280", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 3378, "upload_time": "2019-10-01T13:13:48", "url": "https://files.pythonhosted.org/packages/fe/a3/1a2a66fb99a64791e8f2b2dcc73b371f4e9ec7cccf4293449d91c1be35df/py-loop-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "492896592a7e2b71012bf88ea658809b", "sha256": "7ad6a1e60bb7e1b30d17600b176e8c40da0c1ea7e4f484b53f08e6ca735194f4" }, "downloads": -1, "filename": "py_loop-0.2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "492896592a7e2b71012bf88ea658809b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 4932, "upload_time": "2019-10-01T13:21:08", "url": "https://files.pythonhosted.org/packages/01/b9/6e9ecd98d08b4a66657eac3af949dde6199ce961540dd558b0eb1571a6db/py_loop-0.2.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "765db073d39750b8c6e4745dce698010", "sha256": "6d8adcfa314f7633096fd5dc35a996fff1aae4ee93f804132583a4558cbc447d" }, "downloads": -1, "filename": "py-loop-0.2.2.tar.gz", "has_sig": false, "md5_digest": "765db073d39750b8c6e4745dce698010", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 3393, "upload_time": "2019-10-01T13:21:10", "url": "https://files.pythonhosted.org/packages/6d/0c/2a39b2c6518bbef6b9519631d98cb40015e040f09cbace8ae8188e8c00aa/py-loop-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "aaa0176b6bf38099e48d4e83d19b2652", "sha256": "0ad7ae7c02bb6909d757ff727ed6479d079615767d79fba25d5e9897b1f10779" }, "downloads": -1, "filename": "py_loop-0.2.3-py3-none-any.whl", "has_sig": false, "md5_digest": "aaa0176b6bf38099e48d4e83d19b2652", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 4945, "upload_time": "2019-10-01T13:37:30", "url": "https://files.pythonhosted.org/packages/70/13/2041175782f9b1f2d7b050fe734aaf286340ae2c9b4f98b1e49e836e020f/py_loop-0.2.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4443a5b1f1e1d75ea63e7f2e6bf602ae", "sha256": "6f800c13607d4306ada69f72a840a9a7fa387d51b501248ec9f9452f56c2ad5d" }, "downloads": -1, "filename": "py-loop-0.2.3.tar.gz", "has_sig": false, "md5_digest": "4443a5b1f1e1d75ea63e7f2e6bf602ae", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 3398, "upload_time": "2019-10-01T13:37:31", "url": "https://files.pythonhosted.org/packages/60/62/9aed5e88f198574038f097b45d646a36a956e6260c1f25ac7ea8e8f2cd8a/py-loop-0.2.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "aaa0176b6bf38099e48d4e83d19b2652", "sha256": "0ad7ae7c02bb6909d757ff727ed6479d079615767d79fba25d5e9897b1f10779" }, "downloads": -1, "filename": "py_loop-0.2.3-py3-none-any.whl", "has_sig": false, "md5_digest": "aaa0176b6bf38099e48d4e83d19b2652", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 4945, "upload_time": "2019-10-01T13:37:30", "url": "https://files.pythonhosted.org/packages/70/13/2041175782f9b1f2d7b050fe734aaf286340ae2c9b4f98b1e49e836e020f/py_loop-0.2.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4443a5b1f1e1d75ea63e7f2e6bf602ae", "sha256": "6f800c13607d4306ada69f72a840a9a7fa387d51b501248ec9f9452f56c2ad5d" }, "downloads": -1, "filename": "py-loop-0.2.3.tar.gz", "has_sig": false, "md5_digest": "4443a5b1f1e1d75ea63e7f2e6bf602ae", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 3398, "upload_time": "2019-10-01T13:37:31", "url": "https://files.pythonhosted.org/packages/60/62/9aed5e88f198574038f097b45d646a36a956e6260c1f25ac7ea8e8f2cd8a/py-loop-0.2.3.tar.gz" } ] }