===============================
rush: A library for throttles
===============================
|build-status| |coverage-status| |docs|
This library is a small collection of algorithms that can be reused
when throttling user interactions with a resource (e.g., an API).
This library strives to allow any limiter and backing store to be used
together without needing to be worried about potential compatibility.
Installation
============
.. code::
pip install rush
.. code::
pipenv install rush
Features
========
- A basic periodic interval rate limiter - N accesses per period of time. An
example would be the GitHub API that limits authenticated users to 5,000
requests per hour.
- A leaky bucket rate limiter based off of the Generic Cell Ratelimiting
Algorithm (a.k.a, GCRA).
- A Redis storage backend for rate limit results so that users can have state
persisted across machines and application restarts.
- A in-memory dictionary storage backend for quick prototyping and testing.
- Type annotations built into the library, verified with mypy, and distributed
to users.
Quality
=======
- 100% test coverage
- Code auto-formatted by Black (CI will check if formatting wasn't run prior
to push)
- Commit messages following a uniform Kernel-like style
- Flake8, pylint, mypy, and bandit linting
- Complete type annotations
- Complete documentation linted by doclint and strictly compiled by Sphinx
Contributing
============
- All contributors are expected to read and follow our `Code of Conduct`_.
- To reduce the initial friction of submitting a pull request:
- Please run ``tox`` prior to submitting your pull request.
- After a commit, please run ``tox -e commitlint``.
- To make it easier to support you, please gather the following information
prior to filing an issue:
- How you installed ``rush`` and the versions of its dependencies (if
you're using the Redis store, please include ``rfc3986`` and ``redis``
version information).
- What stores and limiters are you using?
- An example that reproduces your problem
.. links
.. _Code of Conduct:
./CODE_OF_CONDUCT.txt
.. |build-status| image:: https://travis-ci.org/sigmavirus24/rush.svg?branch=master&style=flat
:target: https://travis-ci.org/sigmavirus24/rush
:alt: Build status
.. |coverage-status| image:: http://codecov.io/github/sigmavirus24/rush/coverage.svg?branch=master
:target: http://codecov.io/github/sigmavirus24/rush?branch=master
:alt: Test coverage
.. |docs| image:: https://readthedocs.org/projects/rush/badge/?version=latest&style=flat
:target: http://rush.readthedocs.io/
:alt: Documentation
.. vim:set tw=72
Raw data
{
"_id": null,
"home_page": "https://github.com/sigmavirus24/rush",
"name": "rush",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.6",
"maintainer_email": "",
"keywords": "throttles throttle algorithm gcra redis",
"author": "Ian Stapleton Cordasco",
"author_email": "graffatcolmingov@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/ae/f8/3be2826ee081aeaf47f61bce24d56e4dbf32cb841a2f2708554d4b471ed4/rush-2021.4.0.tar.gz",
"platform": "",
"description": "===============================\n rush: A library for throttles\n===============================\n\n|build-status| |coverage-status| |docs|\n\nThis library is a small collection of algorithms that can be reused\nwhen throttling user interactions with a resource (e.g., an API).\n\nThis library strives to allow any limiter and backing store to be used\ntogether without needing to be worried about potential compatibility.\n\n\nInstallation\n============\n\n.. code::\n\n pip install rush\n\n.. code::\n\n pipenv install rush\n\n\nFeatures\n========\n\n- A basic periodic interval rate limiter - N accesses per period of time. An\n example would be the GitHub API that limits authenticated users to 5,000\n requests per hour.\n\n- A leaky bucket rate limiter based off of the Generic Cell Ratelimiting\n Algorithm (a.k.a, GCRA).\n\n- A Redis storage backend for rate limit results so that users can have state\n persisted across machines and application restarts.\n\n- A in-memory dictionary storage backend for quick prototyping and testing.\n\n- Type annotations built into the library, verified with mypy, and distributed\n to users.\n\n\nQuality\n=======\n\n- 100% test coverage\n\n- Code auto-formatted by Black (CI will check if formatting wasn't run prior\n to push)\n\n- Commit messages following a uniform Kernel-like style\n\n- Flake8, pylint, mypy, and bandit linting\n\n- Complete type annotations\n\n- Complete documentation linted by doclint and strictly compiled by Sphinx\n\n\nContributing\n============\n\n- All contributors are expected to read and follow our `Code of Conduct`_.\n\n- To reduce the initial friction of submitting a pull request:\n\n - Please run ``tox`` prior to submitting your pull request.\n\n - After a commit, please run ``tox -e commitlint``.\n\n- To make it easier to support you, please gather the following information\n prior to filing an issue:\n\n - How you installed ``rush`` and the versions of its dependencies (if\n you're using the Redis store, please include ``rfc3986`` and ``redis``\n version information).\n\n - What stores and limiters are you using?\n\n - An example that reproduces your problem\n\n\n.. links\n\n.. _Code of Conduct:\n ./CODE_OF_CONDUCT.txt\n.. |build-status| image:: https://travis-ci.org/sigmavirus24/rush.svg?branch=master&style=flat\n :target: https://travis-ci.org/sigmavirus24/rush\n :alt: Build status\n.. |coverage-status| image:: http://codecov.io/github/sigmavirus24/rush/coverage.svg?branch=master\n :target: http://codecov.io/github/sigmavirus24/rush?branch=master\n :alt: Test coverage\n.. |docs| image:: https://readthedocs.org/projects/rush/badge/?version=latest&style=flat\n :target: http://rush.readthedocs.io/\n :alt: Documentation\n\n.. vim:set tw=72\n\n\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "A library for throttling algorithms",
"version": "2021.4.0",
"project_urls": {
"Homepage": "https://github.com/sigmavirus24/rush"
},
"split_keywords": [
"throttles",
"throttle",
"algorithm",
"gcra",
"redis"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "1f08f38d9f6a3c6d9b5ea2a79414c9a65a7dd7bbe97ee1554396ffe1811a0fad",
"md5": "87cb10fdc41bda4bd77437737441d3ed",
"sha256": "0f775f35a951b7874442c78eaa312bbd442be130dee9508f8d05b2f43dbd3acc"
},
"downloads": -1,
"filename": "rush-2021.4.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "87cb10fdc41bda4bd77437737441d3ed",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.6",
"size": 18556,
"upload_time": "2021-04-01T17:58:36",
"upload_time_iso_8601": "2021-04-01T17:58:36.628721Z",
"url": "https://files.pythonhosted.org/packages/1f/08/f38d9f6a3c6d9b5ea2a79414c9a65a7dd7bbe97ee1554396ffe1811a0fad/rush-2021.4.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "aef83be2826ee081aeaf47f61bce24d56e4dbf32cb841a2f2708554d4b471ed4",
"md5": "edaf657fd579fc57aaf890fb8ecd4485",
"sha256": "818624075f0313f64a4c38ba62bc4a6526ee31b463990c8aebf03a98f5aaf264"
},
"downloads": -1,
"filename": "rush-2021.4.0.tar.gz",
"has_sig": false,
"md5_digest": "edaf657fd579fc57aaf890fb8ecd4485",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.6",
"size": 15378,
"upload_time": "2021-04-01T17:58:37",
"upload_time_iso_8601": "2021-04-01T17:58:37.928345Z",
"url": "https://files.pythonhosted.org/packages/ae/f8/3be2826ee081aeaf47f61bce24d56e4dbf32cb841a2f2708554d4b471ed4/rush-2021.4.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2021-04-01 17:58:37",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "sigmavirus24",
"github_project": "rush",
"travis_ci": true,
"coveralls": true,
"github_actions": false,
"tox": true,
"lcname": "rush"
}