# Withwait
A simple utility to ensure that sleep operations always complete, even if an
exception happens within the with statement.
## Usage
```py
from withwait import wait
# Start a 2 second wait timer
with wait(2):
# These operations happen while the timer is run
print("Started timer")
# Even if an error is raised, the timer will always be allowed to complete
# before the withwait block is closed
raise Exception("Yikes")
# The exception isn't actually caught so this code won't run
print("This never prints")
```
### Cancelling a timer
If you need to stop the timer during the operation, you can stop it using the
`cancel` method. Normal running will resume from the end of the `with`
statement.
```py
from withwait import wait
with wait(1) as timer:
# Stop the timer
timer.cancel()
# Code after this point in the with statement won't be run
# Program flow resumes normally after
print("Ok")
```
* Different timers can be cancelled separately - if you cancel one timer, all
other timers will run to completion.
### Aborting a timer
If you don't want to resume normal program flow after the `with` statement,
you can stop the timer using the `abort` method.
```py
from withwait import wait, WithwaitAbort
try:
with wait(1) as timer:
# Abort the timer
timer.abort()
# Code after this point in the with statement won't be run
# And code after the with statement won't be run either
print("Nope")
# We need to catch the exception ourselves
except WithwaitAbort:
print("Caught")
```
* Arguments can be provided to the `abort` method which will be
given as arguments to the exception
* Different timers can be aborted separately - if you cancel one timer, all
other timers will run to completion.
### Aborting all timers
If you want to cancel anything, you can call the `abort_all` method. You can
also raise a `WithwaitAbortAll` exception, which will have the same effect.
```py
from withwait import wait, WithwaitAbortAll
try:
with wait(1):
with wait(1):
with wait(1) as timer:
# Abort all timers
timer.abort_all()
except WithwaitAbortAll:
print("All timers stopped")
```
Raw data
{
"_id": null,
"home_page": "https://github.com/MiguelGuthridge/withwait",
"name": "withwait",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.9,<4.0",
"maintainer_email": "",
"keywords": "testing,with,sleep,time,wait,delay",
"author": "Miguel Guthridge",
"author_email": "hdsq@outlook.com.au",
"download_url": "https://files.pythonhosted.org/packages/30/79/536ae6787ebefd60181eb5d401ecedb2b8f2adbe264034b5f089429e5e1b/withwait-0.1.1.tar.gz",
"platform": null,
"description": "# Withwait\n\nA simple utility to ensure that sleep operations always complete, even if an\nexception happens within the with statement.\n\n## Usage\n\n```py\nfrom withwait import wait\n\n# Start a 2 second wait timer\nwith wait(2):\n # These operations happen while the timer is run\n print(\"Started timer\")\n # Even if an error is raised, the timer will always be allowed to complete\n # before the withwait block is closed\n raise Exception(\"Yikes\")\n\n# The exception isn't actually caught so this code won't run\nprint(\"This never prints\")\n```\n\n### Cancelling a timer\n\nIf you need to stop the timer during the operation, you can stop it using the\n`cancel` method. Normal running will resume from the end of the `with`\nstatement.\n\n```py\nfrom withwait import wait\n\nwith wait(1) as timer:\n # Stop the timer\n timer.cancel()\n # Code after this point in the with statement won't be run\n\n# Program flow resumes normally after\nprint(\"Ok\")\n```\n\n* Different timers can be cancelled separately - if you cancel one timer, all\n other timers will run to completion.\n\n### Aborting a timer\n\nIf you don't want to resume normal program flow after the `with` statement,\nyou can stop the timer using the `abort` method.\n\n```py\nfrom withwait import wait, WithwaitAbort\n\ntry:\n with wait(1) as timer:\n # Abort the timer\n timer.abort()\n # Code after this point in the with statement won't be run\n\n # And code after the with statement won't be run either\n print(\"Nope\")\n\n# We need to catch the exception ourselves\nexcept WithwaitAbort:\n print(\"Caught\")\n```\n\n* Arguments can be provided to the `abort` method which will be\n given as arguments to the exception\n* Different timers can be aborted separately - if you cancel one timer, all\n other timers will run to completion.\n\n### Aborting all timers\n\nIf you want to cancel anything, you can call the `abort_all` method. You can\nalso raise a `WithwaitAbortAll` exception, which will have the same effect.\n\n```py\nfrom withwait import wait, WithwaitAbortAll\n\ntry:\n with wait(1):\n with wait(1):\n with wait(1) as timer:\n # Abort all timers\n timer.abort_all()\nexcept WithwaitAbortAll:\n print(\"All timers stopped\")\n```\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "A simple utility to ensure that sleep operations always complete",
"version": "0.1.1",
"split_keywords": [
"testing",
"with",
"sleep",
"time",
"wait",
"delay"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "95708384722a7e65fa4603e0b9c8701e4c3941ccdae47a8fbfb945b6c951e0c9",
"md5": "d251a174dfafd440b803f8d84f0603c6",
"sha256": "39372a2b764e6736ab04ec38c61c2417cb280b54a8bfbb6fe50e281c37398f8c"
},
"downloads": -1,
"filename": "withwait-0.1.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "d251a174dfafd440b803f8d84f0603c6",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9,<4.0",
"size": 4786,
"upload_time": "2023-04-22T19:45:37",
"upload_time_iso_8601": "2023-04-22T19:45:37.248038Z",
"url": "https://files.pythonhosted.org/packages/95/70/8384722a7e65fa4603e0b9c8701e4c3941ccdae47a8fbfb945b6c951e0c9/withwait-0.1.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "3079536ae6787ebefd60181eb5d401ecedb2b8f2adbe264034b5f089429e5e1b",
"md5": "dad5f31aa64e6f67f01bf44b34e42ca0",
"sha256": "9737ae98d715f05e597a63e29bb17272edc7fee4ec496b4c97fba5721b29dc9f"
},
"downloads": -1,
"filename": "withwait-0.1.1.tar.gz",
"has_sig": false,
"md5_digest": "dad5f31aa64e6f67f01bf44b34e42ca0",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9,<4.0",
"size": 3915,
"upload_time": "2023-04-22T19:45:39",
"upload_time_iso_8601": "2023-04-22T19:45:39.208142Z",
"url": "https://files.pythonhosted.org/packages/30/79/536ae6787ebefd60181eb5d401ecedb2b8f2adbe264034b5f089429e5e1b/withwait-0.1.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-04-22 19:45:39",
"github": true,
"gitlab": false,
"bitbucket": false,
"github_user": "MiguelGuthridge",
"github_project": "withwait",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "withwait"
}