quart-rate-limiter


Namequart-rate-limiter JSON
Version 0.10.0 PyPI version JSON
download
home_pagehttps://github.com/pgjones/quart-rate-limiter/
SummaryA Quart extension to provide rate limiting support
upload_time2024-05-19 09:41:16
maintainerNone
docs_urlNone
authorpgjones
requires_python>=3.8
licenseMIT
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            Quart-Rate-Limiter
==================

|Build Status| |docs| |pypi| |python| |license|

Quart-Rate-Limiter is an extension for `Quart
<https://github.com/pgjones/quart>`_ to allow for rate limits to be
defined and enforced on a per route basis. The 429 error response
includes a `RFC7231
<https://tools.ietf.org/html/rfc7231#section-7.1.3>`_ compliant
``Retry-After`` header and the successful responses contain headers
compliant with the `RateLimit Header Fields for HTTP
<https://tools.ietf.org/html/draft-polli-ratelimit-headers-00>`_ RFC
draft.

Quickstart
----------

To add a rate limit first initialise the RateLimiting extension with
the application, and then rate limit the route,

.. code-block:: python

    app = Quart(__name__)
    rate_limiter = RateLimiter(app)

    @app.get('/')
    @rate_limit(1, timedelta(seconds=10))
    async def handler():
        ...

Simple examples
~~~~~~~~~~~~~~~

To limit a route to 1 request per second and a maximum of 20 per minute,

.. code-block:: python

    @app.route('/')
    @rate_limit(1, timedelta(seconds=1))
    @rate_limit(20, timedelta(minutes=1))
    async def handler():
        ...

Alternatively the ``limits`` argument can be used for multiple limits,

.. code-block:: python

    @app.route('/')
    @rate_limit(
        limits=[
            RateLimit(1, timedelta(seconds=1)),
            RateLimit(20, timedelta(minutes=1)),
        ],
    )
    async def handler():
        ...

To identify remote users based on their authentication ID, rather than
their IP,

.. code-block:: python

    async def key_function():
        return current_user.id

    RateLimiter(app, key_function=key_function)

The ``key_function`` is a coroutine function to allow session lookups
if appropriate.

Contributing
------------

Quart-Rate-Limiter is developed on `GitHub
<https://github.com/pgjones/quart-rate-limiter>`_. You are very welcome to
open `issues <https://github.com/pgjones/quart-rate-limiter/issues>`_ or
propose `merge requests
<https://github.com/pgjones/quart-rate-limiter/merge_requests>`_.

Testing
~~~~~~~

The best way to test Quart-Rate-Limiter is with Tox,

.. code-block:: console

    $ pip install tox
    $ tox

this will check the code style and run the tests.

Help
----

The Quart-Rate-Limiter `documentation
<https://quart-rate-limiter.readthedocs.io/en/latest/>`_ is the best
places to start, after that try searching `stack overflow
<https://stackoverflow.com/questions/tagged/quart>`_ or ask for help
`on gitter <https://gitter.im/python-quart/lobby>`_. If you still
can't find an answer please `open an issue
<https://github.com/pgjones/quart-rate-limiter/issues>`_.


.. |Build Status| image:: https://github.com/pgjones/quart-rate-limiter/actions/workflows/ci.yml/badge.svg
   :target: https://github.com/pgjones/quart-rate-limiter/commits/main

.. |docs| image:: https://readthedocs.org/projects/quart-rate-limiter/badge/?version=latest&style=flat
   :target: https://quart-rate-limiter.readthedocs.io/en/latest/

.. |pypi| image:: https://img.shields.io/pypi/v/quart-rate-limiter.svg
   :target: https://pypi.python.org/pypi/Quart-Rate-Limiter/

.. |python| image:: https://img.shields.io/pypi/pyversions/quart-rate-limiter.svg
   :target: https://pypi.python.org/pypi/Quart-Rate-Limiter/

.. |license| image:: https://img.shields.io/badge/license-MIT-blue.svg
   :target: https://github.com/pgjones/quart-rate-limiter/blob/main/LICENSE


            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/pgjones/quart-rate-limiter/",
    "name": "quart-rate-limiter",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": null,
    "author": "pgjones",
    "author_email": "philip.graham.jones@googlemail.com",
    "download_url": "https://files.pythonhosted.org/packages/81/d9/c6e98db7fdf9ff31ecd8da889a58ece0d214cb12ee1b41751b751b3201e2/quart_rate_limiter-0.10.0.tar.gz",
    "platform": null,
    "description": "Quart-Rate-Limiter\n==================\n\n|Build Status| |docs| |pypi| |python| |license|\n\nQuart-Rate-Limiter is an extension for `Quart\n<https://github.com/pgjones/quart>`_ to allow for rate limits to be\ndefined and enforced on a per route basis. The 429 error response\nincludes a `RFC7231\n<https://tools.ietf.org/html/rfc7231#section-7.1.3>`_ compliant\n``Retry-After`` header and the successful responses contain headers\ncompliant with the `RateLimit Header Fields for HTTP\n<https://tools.ietf.org/html/draft-polli-ratelimit-headers-00>`_ RFC\ndraft.\n\nQuickstart\n----------\n\nTo add a rate limit first initialise the RateLimiting extension with\nthe application, and then rate limit the route,\n\n.. code-block:: python\n\n    app = Quart(__name__)\n    rate_limiter = RateLimiter(app)\n\n    @app.get('/')\n    @rate_limit(1, timedelta(seconds=10))\n    async def handler():\n        ...\n\nSimple examples\n~~~~~~~~~~~~~~~\n\nTo limit a route to 1 request per second and a maximum of 20 per minute,\n\n.. code-block:: python\n\n    @app.route('/')\n    @rate_limit(1, timedelta(seconds=1))\n    @rate_limit(20, timedelta(minutes=1))\n    async def handler():\n        ...\n\nAlternatively the ``limits`` argument can be used for multiple limits,\n\n.. code-block:: python\n\n    @app.route('/')\n    @rate_limit(\n        limits=[\n            RateLimit(1, timedelta(seconds=1)),\n            RateLimit(20, timedelta(minutes=1)),\n        ],\n    )\n    async def handler():\n        ...\n\nTo identify remote users based on their authentication ID, rather than\ntheir IP,\n\n.. code-block:: python\n\n    async def key_function():\n        return current_user.id\n\n    RateLimiter(app, key_function=key_function)\n\nThe ``key_function`` is a coroutine function to allow session lookups\nif appropriate.\n\nContributing\n------------\n\nQuart-Rate-Limiter is developed on `GitHub\n<https://github.com/pgjones/quart-rate-limiter>`_. You are very welcome to\nopen `issues <https://github.com/pgjones/quart-rate-limiter/issues>`_ or\npropose `merge requests\n<https://github.com/pgjones/quart-rate-limiter/merge_requests>`_.\n\nTesting\n~~~~~~~\n\nThe best way to test Quart-Rate-Limiter is with Tox,\n\n.. code-block:: console\n\n    $ pip install tox\n    $ tox\n\nthis will check the code style and run the tests.\n\nHelp\n----\n\nThe Quart-Rate-Limiter `documentation\n<https://quart-rate-limiter.readthedocs.io/en/latest/>`_ is the best\nplaces to start, after that try searching `stack overflow\n<https://stackoverflow.com/questions/tagged/quart>`_ or ask for help\n`on gitter <https://gitter.im/python-quart/lobby>`_. If you still\ncan't find an answer please `open an issue\n<https://github.com/pgjones/quart-rate-limiter/issues>`_.\n\n\n.. |Build Status| image:: https://github.com/pgjones/quart-rate-limiter/actions/workflows/ci.yml/badge.svg\n   :target: https://github.com/pgjones/quart-rate-limiter/commits/main\n\n.. |docs| image:: https://readthedocs.org/projects/quart-rate-limiter/badge/?version=latest&style=flat\n   :target: https://quart-rate-limiter.readthedocs.io/en/latest/\n\n.. |pypi| image:: https://img.shields.io/pypi/v/quart-rate-limiter.svg\n   :target: https://pypi.python.org/pypi/Quart-Rate-Limiter/\n\n.. |python| image:: https://img.shields.io/pypi/pyversions/quart-rate-limiter.svg\n   :target: https://pypi.python.org/pypi/Quart-Rate-Limiter/\n\n.. |license| image:: https://img.shields.io/badge/license-MIT-blue.svg\n   :target: https://github.com/pgjones/quart-rate-limiter/blob/main/LICENSE\n\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "A Quart extension to provide rate limiting support",
    "version": "0.10.0",
    "project_urls": {
        "Homepage": "https://github.com/pgjones/quart-rate-limiter/",
        "Repository": "https://github.com/pgjones/quart-rate-limiter/"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "f141310850a9e1940f8c014602647d929985eb88a09f15fffabef021f81a06b1",
                "md5": "10a11719e5ac045e8ef38303db76a1cc",
                "sha256": "dcc9b429b856550744dd014f6f02f6d9e6b01b39b1a2092bec2fc4bbd408f902"
            },
            "downloads": -1,
            "filename": "quart_rate_limiter-0.10.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "10a11719e5ac045e8ef38303db76a1cc",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 7966,
            "upload_time": "2024-05-19T09:41:14",
            "upload_time_iso_8601": "2024-05-19T09:41:14.895211Z",
            "url": "https://files.pythonhosted.org/packages/f1/41/310850a9e1940f8c014602647d929985eb88a09f15fffabef021f81a06b1/quart_rate_limiter-0.10.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "81d9c6e98db7fdf9ff31ecd8da889a58ece0d214cb12ee1b41751b751b3201e2",
                "md5": "efb5c7258515b5c7c9fede701e202b82",
                "sha256": "87e538e50b4a0e8c3fc2d72e0c7bd4f0de193f041d70e9deb18128730e9a3e5b"
            },
            "downloads": -1,
            "filename": "quart_rate_limiter-0.10.0.tar.gz",
            "has_sig": false,
            "md5_digest": "efb5c7258515b5c7c9fede701e202b82",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 7112,
            "upload_time": "2024-05-19T09:41:16",
            "upload_time_iso_8601": "2024-05-19T09:41:16.450995Z",
            "url": "https://files.pythonhosted.org/packages/81/d9/c6e98db7fdf9ff31ecd8da889a58ece0d214cb12ee1b41751b751b3201e2/quart_rate_limiter-0.10.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-05-19 09:41:16",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "pgjones",
    "github_project": "quart-rate-limiter",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "tox": true,
    "lcname": "quart-rate-limiter"
}
        
Elapsed time: 1.48430s