# aiolimiter
[![Azure Pipelines status for master branch][azure_badge]][azure_status]
[![codecov.io status for master branch][codecov_badge]][codecov_status]
[![Latest PyPI package version][pypi_badge]][aiolimiter_release]
[![Latest Read The Docs][rtd_badge]][aiolimiter_docs]
[azure_badge]: https://dev.azure.com/mjpieters/aiolimiter/_apis/build/status/CI?branchName=master
[azure_status]: https://dev.azure.com/mjpieters/aiolimiter/_build/latest?definitionId=4&branchName=master "Azure Pipelines status for master branch"
[codecov_badge]: https://codecov.io/gh/mjpieters/aiolimiter/branch/master/graph/badge.svg
[codecov_status]: https://codecov.io/gh/mjpieters/aiolimiter "codecov.io status for master branch"
[pypi_badge]: https://badge.fury.io/py/aiolimiter.svg
[aiolimiter_release]: https://pypi.org/project/aiolimiter "Latest PyPI package version"
[rtd_badge]: https://readthedocs.org/projects/aiolimiter/badge/?version=latest
[aiolimiter_docs]: https://aiolimiter.readthedocs.io/en/latest/?badge=latest "Latest Read The Docs"
## Introduction
An efficient implementation of a rate limiter for asyncio.
This project implements the [Leaky bucket algorithm][], giving you precise control over the rate a code section can be entered:
```python
from aiolimiter import AsyncLimiter
# allow for 100 concurrent entries within a 30 second window
rate_limit = AsyncLimiter(100, 30)
async def some_coroutine():
async with rate_limit:
# this section is *at most* going to entered 100 times
# in a 30 second period.
await do_something()
```
It was first developed [as an answer on Stack Overflow][so45502319].
## Documentation
https://aiolimiter.readthedocs.io
## Installation
```sh
$ pip install aiolimiter
```
The library requires Python 3.6 or newer.
## Requirements
- Python >= 3.6
## License
`aiolimiter` is offered under the [MIT license](./LICENSE.txt).
## Source code
The project is hosted on [GitHub][].
Please file an issue in the [bug tracker][] if you have found a bug
or have some suggestions to improve the library.
## Developer setup
This project uses [poetry][] to manage dependencies, testing and releases. Make sure you have installed that tool, then run the following command to get set up:
```sh
poetry install -E docs && poetry run doit devsetup
```
Apart from using `poetry run doit devsetup`, you can either use `poetry shell` to enter a shell environment with a virtualenv set up for you, or use `poetry run ...` to run commands within the virtualenv.
Tests are run with `pytest` and `tox`. Releases are made with `poetry build` and `poetry publish`. Code quality is maintained with `flake8`, `black` and `mypy`, and `pre-commit` runs quick checks to maintain the standards set.
A series of `doit` tasks are defined; run `poetry run doit list` (or `doit list` with `poetry shell` activated) to list them. The default action is to run a full linting, testing and building run. It is recommended you run this before creating a pull request.
[leaky bucket algorithm]: https://en.wikipedia.org/wiki/Leaky_bucket
[so45502319]: https://stackoverflow.com/a/45502319/100297
[github]: https://github.com/mjpieters/aiolimiter
[bug tracker]: https://github.com/mjpieters/aiolimiter/issues
[poetry]: https://poetry.eustace.io/
Raw data
{
"_id": null,
"home_page": "https://github.com/mjpieters/aiolimiter",
"name": "aiolimiter",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.6.1,<4.0.0",
"maintainer_email": "",
"keywords": "asyncio,rate-limiting,leaky-bucket",
"author": "Martijn Pieters",
"author_email": "mj@zopatista.com",
"download_url": "https://files.pythonhosted.org/packages/33/c9/854de19ff2b2a83111e892ef3028504a927f1aa19347de3f62abf38c2c99/aiolimiter-1.0.0.tar.gz",
"platform": "",
"description": "# aiolimiter\n\n[![Azure Pipelines status for master branch][azure_badge]][azure_status]\n[![codecov.io status for master branch][codecov_badge]][codecov_status]\n[![Latest PyPI package version][pypi_badge]][aiolimiter_release]\n[![Latest Read The Docs][rtd_badge]][aiolimiter_docs]\n\n[azure_badge]: https://dev.azure.com/mjpieters/aiolimiter/_apis/build/status/CI?branchName=master\n[azure_status]: https://dev.azure.com/mjpieters/aiolimiter/_build/latest?definitionId=4&branchName=master \"Azure Pipelines status for master branch\"\n[codecov_badge]: https://codecov.io/gh/mjpieters/aiolimiter/branch/master/graph/badge.svg\n[codecov_status]: https://codecov.io/gh/mjpieters/aiolimiter \"codecov.io status for master branch\"\n[pypi_badge]: https://badge.fury.io/py/aiolimiter.svg\n[aiolimiter_release]: https://pypi.org/project/aiolimiter \"Latest PyPI package version\"\n[rtd_badge]: https://readthedocs.org/projects/aiolimiter/badge/?version=latest\n[aiolimiter_docs]: https://aiolimiter.readthedocs.io/en/latest/?badge=latest \"Latest Read The Docs\"\n\n## Introduction\n\nAn efficient implementation of a rate limiter for asyncio.\n\nThis project implements the [Leaky bucket algorithm][], giving you precise control over the rate a code section can be entered:\n\n```python\nfrom aiolimiter import AsyncLimiter\n\n# allow for 100 concurrent entries within a 30 second window\nrate_limit = AsyncLimiter(100, 30)\n\n\nasync def some_coroutine():\n async with rate_limit:\n # this section is *at most* going to entered 100 times\n # in a 30 second period.\n await do_something()\n```\n\nIt was first developed [as an answer on Stack Overflow][so45502319].\n\n## Documentation\n\nhttps://aiolimiter.readthedocs.io\n\n## Installation\n\n```sh\n$ pip install aiolimiter\n```\n\nThe library requires Python 3.6 or newer.\n\n## Requirements\n\n- Python >= 3.6\n\n## License\n\n`aiolimiter` is offered under the [MIT license](./LICENSE.txt).\n\n## Source code\n\nThe project is hosted on [GitHub][].\n\nPlease file an issue in the [bug tracker][] if you have found a bug\nor have some suggestions to improve the library.\n\n## Developer setup\n\nThis project uses [poetry][] to manage dependencies, testing and releases. Make sure you have installed that tool, then run the following command to get set up:\n\n```sh\npoetry install -E docs && poetry run doit devsetup\n```\n\nApart from using `poetry run doit devsetup`, you can either use `poetry shell` to enter a shell environment with a virtualenv set up for you, or use `poetry run ...` to run commands within the virtualenv.\n\nTests are run with `pytest` and `tox`. Releases are made with `poetry build` and `poetry publish`. Code quality is maintained with `flake8`, `black` and `mypy`, and `pre-commit` runs quick checks to maintain the standards set.\n\nA series of `doit` tasks are defined; run `poetry run doit list` (or `doit list` with `poetry shell` activated) to list them. The default action is to run a full linting, testing and building run. It is recommended you run this before creating a pull request.\n\n[leaky bucket algorithm]: https://en.wikipedia.org/wiki/Leaky_bucket\n[so45502319]: https://stackoverflow.com/a/45502319/100297\n[github]: https://github.com/mjpieters/aiolimiter\n[bug tracker]: https://github.com/mjpieters/aiolimiter/issues\n[poetry]: https://poetry.eustace.io/\n\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "asyncio rate limiter, a leaky bucket implementation",
"version": "1.0.0",
"split_keywords": [
"asyncio",
"rate-limiting",
"leaky-bucket"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "8904163b1c5241f709c3a2e6f6881691e0896cb46fd29c4d311c4a84d89a9468",
"md5": "d0fc773dfee53eb84c496ff3393209cd",
"sha256": "f1c5ba2a2861cd4a126c1294f5282208383e67d5b128a4f32def0c702cae8039"
},
"downloads": -1,
"filename": "aiolimiter-1.0.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "d0fc773dfee53eb84c496ff3393209cd",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.6.1,<4.0.0",
"size": 7194,
"upload_time": "2021-10-15T20:58:46",
"upload_time_iso_8601": "2021-10-15T20:58:46.023768Z",
"url": "https://files.pythonhosted.org/packages/89/04/163b1c5241f709c3a2e6f6881691e0896cb46fd29c4d311c4a84d89a9468/aiolimiter-1.0.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "33c9854de19ff2b2a83111e892ef3028504a927f1aa19347de3f62abf38c2c99",
"md5": "f5aa09f62ff8cd557eba06037219fc11",
"sha256": "9d40767e4476048145dfa9f61948445168d6e63cf42c95785a20b9aaff2e4564"
},
"downloads": -1,
"filename": "aiolimiter-1.0.0.tar.gz",
"has_sig": false,
"md5_digest": "f5aa09f62ff8cd557eba06037219fc11",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.6.1,<4.0.0",
"size": 6812,
"upload_time": "2021-10-15T20:58:47",
"upload_time_iso_8601": "2021-10-15T20:58:47.490224Z",
"url": "https://files.pythonhosted.org/packages/33/c9/854de19ff2b2a83111e892ef3028504a927f1aa19347de3f62abf38c2c99/aiolimiter-1.0.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2021-10-15 20:58:47",
"github": true,
"gitlab": false,
"bitbucket": false,
"github_user": "mjpieters",
"github_project": "aiolimiter",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"tox": true,
"lcname": "aiolimiter"
}