Skip to main content

A Quart extension to provide rate limiting support

Project description

Build Status docs pypi python license

Quart-Rate-Limiter is an extension for Quart to allow for rate limits to be defined and enforced on a per route basis. The 429 error response includes a RFC7231 compliant Retry-After header and the successful responses contain headers compliant with the RateLimit Header Fields for HTTP RFC draft.

Quickstart

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

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,

@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,

@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,

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. You are very welcome to open issues or propose merge requests.

Testing

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

$ pip install tox
$ tox

this will check the code style and run the tests.

Help

The Quart-Rate-Limiter documentation is the best places to start, after that try searching stack overflow or ask for help on gitter. If you still can’t find an answer please open an issue.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

quart_rate_limiter-0.12.1.tar.gz (9.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

quart_rate_limiter-0.12.1-py3-none-any.whl (9.0 kB view details)

Uploaded Python 3

File details

Details for the file quart_rate_limiter-0.12.1.tar.gz.

File metadata

  • Download URL: quart_rate_limiter-0.12.1.tar.gz
  • Upload date:
  • Size: 9.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for quart_rate_limiter-0.12.1.tar.gz
Algorithm Hash digest
SHA256 9bd44b35372d0255ae716bff9aedeb041188cc3480a51a37e1f9e00b178941f3
MD5 6a650c5544aae8b8c90e1b0483b44076
BLAKE2b-256 dbc484c073f15612ad6971e95cd541e75534de0fdeab9e59d6ff968f17622a18

See more details on using hashes here.

Provenance

The following attestation bundles were made for quart_rate_limiter-0.12.1.tar.gz:

Publisher: publish.yml on pgjones/quart-rate-limiter

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file quart_rate_limiter-0.12.1-py3-none-any.whl.

File metadata

File hashes

Hashes for quart_rate_limiter-0.12.1-py3-none-any.whl
Algorithm Hash digest
SHA256 c910aa603b1eaaedb02d9475c9df1626e32b2bd936647228609d00269521f656
MD5 fd0ba69f8ee50562f27332150ab96dc9
BLAKE2b-256 17c2ed5b657287b9cf5b7ef59e243f5c95265a26f78bf3f96a06b3b44d30ea5d

See more details on using hashes here.

Provenance

The following attestation bundles were made for quart_rate_limiter-0.12.1-py3-none-any.whl:

Publisher: publish.yml on pgjones/quart-rate-limiter

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page