{ "info": { "author": "Rotem Yaari", "author_email": "vmalloc@gmail.com", "bugtrack_url": null, "classifiers": [], "description": "Overview\n--------\n*waiting* is a small library for waiting for stuff to happen. It basically waits for a function to return **True**, in various modes.\n\n*Waiting* is compatible with `flux `_ for simulated timelines.\n\nUsage\n-----\n\nThe most basic usage is when you have a function you want to wait for::\n\n >>> predicate = lambda : True\n\nWaiting forever is very simple::\n\n >>> from waiting import wait, TimeoutExpired\n >>> wait(predicate)\n True\n\nIf your predicate returns a value, it will be returned as the result of wait()::\n\n >>> result = object()\n >>> wait(lambda: result) is result\n True\n\nA *timeout* parameter can also be specified::\n\n >>> wait(predicate, timeout_seconds=10.5)\n True\n\nWhen a timeout expires without the predicate being fullfilled, an exception is thrown::\n\n\n >>> try:\n ... wait(lambda : False, timeout_seconds=0)\n ... except TimeoutExpired:\n ... # expired!\n ... pass\n ... else:\n ... assert False\n\n\nSleeping polls the predicate at a certain interval (by default 1 second). The interval can be changed with the *sleep_seconds* argument::\n\n >>> wait(predicate, sleep_seconds=20)\n True\n\nWhen waiting for multiple predicates, *waiting* provides two simple facilities to help aggregate them: **ANY** and **ALL**. They resemble Python's built-in *any()* and *all()*, except that they don't call a predicate once it has been satisfied (this is useful when the predicates are inefficient and take time to complete)::\n\n >>> from waiting import wait, ANY, ALL\n >>> wait(ANY([predicate, predicate]))\n True\n >>> wait(ALL([predicate, predicate]))\n True\n\nTimeoutExpired exceptions, by default, don't tell you much about what didn't happen that you were expecting. To fix that, use the *waiting_for* argument::\n\n >>> try:\n ... wait(lambda : False, timeout_seconds=0, waiting_for=\"something that will never happen\") #doctest: +ELLIPSIS\n ... except TimeoutExpired as e:\n ... print(e)\n Timeout of 0 seconds expired waiting for something that will never happen\n\nExponential backoff is supported for the sleep interval::\n\n >>> from waiting import wait\n >>> wait(predicate, sleep_seconds=(1, 100)) # sleep 1, 2, 4, 8, 16, 32, 64, 100, 100, ....\n True\n >>> wait(predicate, sleep_seconds=(1, 100, 3)) # sleep 1, 3, 9, 27, 81, 100, 100, 100 ....\n True\n >>> wait(predicate, sleep_seconds=(1, None)) # sleep 1, 2, 4, 6, .... (infinity)\n True\n >>> wait(predicate, sleep_seconds=(1, None, 4)) # sleep 1, 4, 16, 64, ... (infinity)\n True\n\nIf your predicate might raise certain exceptions you wish to ignore, you may use ``expected_exceptions`` to ignore them::\n\n >>> from waiting import wait\n >>> wait(predicate, expected_exceptions=ValueError)\n True\n >>> wait(predicate, expected_exceptions=(ValueError, AttributeError))\n True\n\nIf you'd like to maintain updates while waiting for a predicate to complete, you may use ``on_poll`` to pass a function to perform some behavior after every sleep. By default, this is a no-op.\n\n >>> import logging\n >>> from waiting import wait\n >>> try:\n ... wait(lambda: False, timeout_seconds=5, # Timeout after 5 seconds\n ... on_poll=lambda: logging.warn(\"Waiting...\")) # Log \"Waiting...\" six times.\n ... except TimeoutExpired:\n ... pass\n ... else:\n ... assert False\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "", "keywords": "", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "waiting", "package_url": "https://pypi.org/project/waiting/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/waiting/", "project_urls": null, "release_url": "https://pypi.org/project/waiting/1.4.1/", "requires_dist": null, "requires_python": "", "summary": "Utility for waiting for stuff to happen", "version": "1.4.1" }, "last_serial": 2608515, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "01fa8df67fd18cb8166eb45d23acecd1", "sha256": "eefcaa3fa793b07d2ba9848b87a29b8794f220d95c065501fd6e1ae6443634e4" }, "downloads": -1, "filename": "waiting-0.0.1-py2.6.egg", "has_sig": false, "md5_digest": "01fa8df67fd18cb8166eb45d23acecd1", "packagetype": "bdist_egg", "python_version": "2.6", "requires_python": null, "size": 3879, "upload_time": "2011-08-02T09:19:41", "url": "https://files.pythonhosted.org/packages/aa/e2/8013063d8950a65095694c23df871c1f7649a487584fb2aa976786f5ffd9/waiting-0.0.1-py2.6.egg" }, { "comment_text": "", "digests": { "md5": "7214064a041cd674a7504502cbd1b074", "sha256": "a9a9d1f6c096142cd0beb4bbb78a943d60e32181dffa097a06faab19dde78779" }, "downloads": -1, "filename": "waiting-0.0.1-py2.7.egg", "has_sig": false, "md5_digest": "7214064a041cd674a7504502cbd1b074", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 3877, "upload_time": "2011-08-02T09:19:37", "url": "https://files.pythonhosted.org/packages/0a/b5/0032a4f24c6e6e35a3ef4ff1f4d648066847c4af33e58fa2608e423863ae/waiting-0.0.1-py2.7.egg" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "4e6580e702cfcf06ea9226a6b40a7548", "sha256": "3abdf9cc5c3501c7a3f82c93ae3abdfcfb76845e25c9769ea184838f9ac26746" }, "downloads": -1, "filename": "waiting-0.0.2-py2.6.egg", "has_sig": false, "md5_digest": "4e6580e702cfcf06ea9226a6b40a7548", "packagetype": "bdist_egg", "python_version": "2.6", "requires_python": null, "size": 3900, "upload_time": "2011-08-02T09:56:00", "url": "https://files.pythonhosted.org/packages/54/16/3a44c1f5d7db1ca7e3015e84b4db6b6ceecd62e35ed422d3f18b307e963c/waiting-0.0.2-py2.6.egg" }, { "comment_text": "", "digests": { "md5": "98f6a62af108ea6656740712c095517c", "sha256": "2c328fc91eea5407b9e42ac33f0fa196d148756159fc18deecd9bcf5737779b8" }, "downloads": -1, "filename": "waiting-0.0.2-py2.7.egg", "has_sig": false, "md5_digest": "98f6a62af108ea6656740712c095517c", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 3896, "upload_time": "2011-08-02T09:55:58", "url": "https://files.pythonhosted.org/packages/e6/e7/8604bcf8b6827cd0fc1b32812171b3d1dc5e3abcac563328b0d8590776e3/waiting-0.0.2-py2.7.egg" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "188674d8830c0b20e609e1cb16901dff", "sha256": "ab3b7bcad617aa27af6f05c18f382fde1783395385358f41aa99368f7b157872" }, "downloads": -1, "filename": "waiting-0.0.3.tar.gz", "has_sig": false, "md5_digest": "188674d8830c0b20e609e1cb16901dff", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1456, "upload_time": "2011-08-24T14:19:18", "url": "https://files.pythonhosted.org/packages/e9/05/fcbbcacf97808931418d19a24706d7e6067a3647661830c0390730fd1ad5/waiting-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "de8c92afa9eddf95944c077916eaf6d1", "sha256": "f79c852cfb43e4f490209995743357281647d947497dc499fb0c783a9168ec17" }, "downloads": -1, "filename": "waiting-0.0.4.tar.gz", "has_sig": false, "md5_digest": "de8c92afa9eddf95944c077916eaf6d1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1589, "upload_time": "2011-10-25T14:50:44", "url": "https://files.pythonhosted.org/packages/5b/05/19348167f6c7a27fe536fccd0a67fe8f9c9fbe01f12d44b449b3b677bcd7/waiting-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "66384082fcc88a83a6ae4b986dde0189", "sha256": "a81fbcf00c29cf922021fd7e8eb97741747f009c52210198622f5d78e0bcb094" }, "downloads": -1, "filename": "waiting-0.0.5.tar.gz", "has_sig": false, "md5_digest": "66384082fcc88a83a6ae4b986dde0189", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1588, "upload_time": "2011-11-17T19:17:39", "url": "https://files.pythonhosted.org/packages/19/81/168802ff90cb82584c0ce88c80133df1832e0b45a1075311a4fe8baca54a/waiting-0.0.5.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "14be9cbdb89c64f07d9c91311fde9e4a", "sha256": "847010c4341298db45e3173d7950139613f69fd2d61b265cfb653cdac0f1acc5" }, "downloads": -1, "filename": "waiting-0.0.6.tar.gz", "has_sig": false, "md5_digest": "14be9cbdb89c64f07d9c91311fde9e4a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1839, "upload_time": "2012-03-07T14:38:48", "url": "https://files.pythonhosted.org/packages/e3/73/774fe6f7d25ff98fab01dc7c79e6164e0fca5147a2968aa8b3aa06f8da22/waiting-0.0.6.tar.gz" } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "e5d70b1bbc1faf87b2476f09ca91d3bb", "sha256": "d0edee99c6bf72466de5643cf86e836d660e6ae4ea90fefa1e16af20360a7bd9" }, "downloads": -1, "filename": "waiting-0.0.7.tar.gz", "has_sig": false, "md5_digest": "e5d70b1bbc1faf87b2476f09ca91d3bb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2033, "upload_time": "2012-09-27T15:13:04", "url": "https://files.pythonhosted.org/packages/6f/0b/66058fbe063d3558fb7593b829ed37edd2bef69f6029a0b7bad333d40fa4/waiting-0.0.7.tar.gz" } ], "0.0.8": [ { "comment_text": "", "digests": { "md5": "29bec4facb0104d9ee1512a49a81295d", "sha256": "cb37f0a1fa9182efc798cb85b83b4ac94620c9fc13f8db41b30a1384ad08bb74" }, "downloads": -1, "filename": "waiting-0.0.8.tar.gz", "has_sig": false, "md5_digest": "29bec4facb0104d9ee1512a49a81295d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2099, "upload_time": "2012-11-13T14:13:02", "url": "https://files.pythonhosted.org/packages/ef/58/66b2f0d6676f0e390592f6d62ba512494ba436672e58dce4d34533cc905c/waiting-0.0.8.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "5e925afaf2b8940780defba31a7a845a", "sha256": "de8333227a14a6f8e2a824c92912306a7386d24402a72636646684321c0db5d7" }, "downloads": -1, "filename": "waiting-1.0.0.tar.gz", "has_sig": false, "md5_digest": "5e925afaf2b8940780defba31a7a845a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7284, "upload_time": "2013-08-01T07:16:56", "url": "https://files.pythonhosted.org/packages/52/94/6524dbf76d05ea30d520dc3314053680d8d019acd11d05e562e5ed4505f2/waiting-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "2056cfc77a415f68f39c10b2e345c49f", "sha256": "0d9242c280dfcde502460350a16e272dcb3120d58fa087d3ca627d75f4c375f3" }, "downloads": -1, "filename": "waiting-1.0.1.tar.gz", "has_sig": false, "md5_digest": "2056cfc77a415f68f39c10b2e345c49f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7286, "upload_time": "2013-08-15T10:50:56", "url": "https://files.pythonhosted.org/packages/9b/d8/55aea6581dd2b84250140b1e40dc66d2f2104d766a88726004709eb2356e/waiting-1.0.1.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "03eaa6f3236b923a317d89e6579cd156", "sha256": "e3da12c8b8f78f622f8642ad7fd053305984d3fd7d6a54ab1b40674b4c98e909" }, "downloads": -1, "filename": "waiting-1.2.0.tar.gz", "has_sig": false, "md5_digest": "03eaa6f3236b923a317d89e6579cd156", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7726, "upload_time": "2014-12-22T14:11:41", "url": "https://files.pythonhosted.org/packages/3e/8c/b463c28176692051a81881b79b1f952ffe2ad8c1868485741f353ab96abd/waiting-1.2.0.tar.gz" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "f72a0d44347525bb6d688c14244e3451", "sha256": "2b40d6baa7bfdbf84a8ab3753c4f058a3930ec96a4c908bac36b61367e8f1ae6" }, "downloads": -1, "filename": "waiting-1.2.1.tar.gz", "has_sig": false, "md5_digest": "f72a0d44347525bb6d688c14244e3451", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7853, "upload_time": "2015-02-04T20:06:10", "url": "https://files.pythonhosted.org/packages/a4/19/8673e5edafa47e74fe9b3688dd7d2d57b4d8ede62e8263b3ed9ca9cbfbb9/waiting-1.2.1.tar.gz" } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "767aafa5bf252696114c707b39fd9ac5", "sha256": "a1c51b23e8176b3fb23e8f4e9da84b1de4e3166fbe229c7b0597b984399e3cb6" }, "downloads": -1, "filename": "waiting-1.3.0.tar.gz", "has_sig": false, "md5_digest": "767aafa5bf252696114c707b39fd9ac5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9001, "upload_time": "2015-04-12T08:28:30", "url": "https://files.pythonhosted.org/packages/44/cc/80051f180f74f0de0f17614d48da84b3b55a55d3126d1c84a74d6a771ca2/waiting-1.3.0.tar.gz" } ], "1.4.0": [ { "comment_text": "", "digests": { "md5": "26cd5406e8d3f4f1c5fdbdee11cb6c84", "sha256": "4c7d427d10b1534df303292880d1b0cca1251d49d17bb632ec4f8346fc058894" }, "downloads": -1, "filename": "waiting-1.4.0.tar.gz", "has_sig": false, "md5_digest": "26cd5406e8d3f4f1c5fdbdee11cb6c84", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6744, "upload_time": "2016-11-17T13:14:26", "url": "https://files.pythonhosted.org/packages/f5/52/28ab02986d5ed64135ade1999cd6b4cc170cb1643a9042eacd5d20adf557/waiting-1.4.0.tar.gz" } ], "1.4.1": [ { "comment_text": "", "digests": { "md5": "1e4797e6625f0d940ea6d5be9804b3fe", "sha256": "b641ef3a2382e101d3c4e66494da6fc52b82c325dd04ae341e051b0eec6f30cd" }, "downloads": -1, "filename": "waiting-1.4.1.tar.gz", "has_sig": false, "md5_digest": "1e4797e6625f0d940ea6d5be9804b3fe", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7140, "upload_time": "2017-01-31T07:27:43", "url": "https://files.pythonhosted.org/packages/0b/db/51392c77d22acef400d8e9e245aaed94919e937f7edbc508865351f3e973/waiting-1.4.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "1e4797e6625f0d940ea6d5be9804b3fe", "sha256": "b641ef3a2382e101d3c4e66494da6fc52b82c325dd04ae341e051b0eec6f30cd" }, "downloads": -1, "filename": "waiting-1.4.1.tar.gz", "has_sig": false, "md5_digest": "1e4797e6625f0d940ea6d5be9804b3fe", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7140, "upload_time": "2017-01-31T07:27:43", "url": "https://files.pythonhosted.org/packages/0b/db/51392c77d22acef400d8e9e245aaed94919e937f7edbc508865351f3e973/waiting-1.4.1.tar.gz" } ] }