You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

93 lines
2.7 KiB

Metadata-Version: 2.1
Name: slowapi
Version: 0.1.7
Summary: A rate limiting extension for Starlette and Fastapi
Home-page: https://github.com/laurents/slowapi
License: MIT
Author: Laurent Savaete
Author-email: laurent@where.tf
Requires-Python: >=3.7,<4.0
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Provides-Extra: redis
Requires-Dist: limits (>=2.3,<3.0)
Project-URL: Documentation, https://slowapi.readthedocs.io/en/latest/
Project-URL: Repository, https://github.com/laurents/slowapi
Description-Content-Type: text/markdown
# SlowApi
A rate limiting library for Starlette and FastAPI adapted from [flask-limiter](http://github.com/alisaifee/flask-limiter).
Note: this is alpha quality code still, the API may change, and things may fall apart while you try it.
The documentation is on [read the docs](https://slowapi.readthedocs.io/en/latest/).
# Quick start
## Installation
`slowapi` is available from [pypi](https://pypi.org/project/slowapi/) so you can install it as usual:
```
$ pip install slowapi
```
# Features
Most feature are coming from FlaskLimiter and the underlying [limits](https://limits.readthedocs.io/).
Supported now:
- Single and multiple `limit` decorator on endpoint functions to apply limits
- redis, memcached and memory backends to track your limits (memory as a fallback)
- support for sync and async HTTP endpoints
- Support for shared limits across a set of routes
# Limitations and known issues
* The `request` argument must be explicitly passed to your endpoint, or `slowapi` won't be able to hook into it. In other words, write:
```python
@limiter.limit("5/minute")
async def myendpoint(request: Request)
pass
```
and not:
```python
@limiter.limit("5/minute")
async def myendpoint()
pass
```
* `websocket` endpoints are not supported yet.
# Developing and contributing
PRs are more than welcome! Please include tests for your changes :)
The package uses [poetry](https://python-poetry.org) to manage dependencies. To setup your dev env:
```bash
$ poetry install
```
To run the tests:
```bash
$ pytest
```
# Credits
Credits go to [flask-limiter](https://github.com/alisaifee/flask-limiter) of which SlowApi is a (still partial) adaptation to Starlette and FastAPI.
It's also important to mention that the actual rate limiting work is done by [limits](https://github.com/alisaifee/limits/), `slowapi` is just a wrapper around it.