Metadata-Version: 2.1
Name: freiner
Version: 3.0.0
Summary: "Rate limiting utilities"
Home-page: https://github.com/djmattyg007/freiner
Author: Matthew Gamble
Author-email: git@matthewgamble.net
License: MIT
Project-URL: Documentation, https://freiner.readthedocs.io/
Project-URL: Source, https://github.com/djmattyg007/freiner
Project-URL: Issues, https://github.com/djmattyg007/freiner/issues
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Requires-Python: >=3.7
License-File: LICENSE.txt
Requires-Dist: typing-extensions (<4.0.0,>=3.10.0.0)
Provides-Extra: build
Requires-Dist: build ; extra == 'build'
Requires-Dist: twine ; extra == 'build'
Provides-Extra: dev
Requires-Dist: wheel ; extra == 'dev'
Requires-Dist: invoke ; extra == 'dev'
Requires-Dist: sphinx (<5.0.0,>=4.1.2) ; extra == 'dev'
Requires-Dist: sphinx-rtd-theme (==0.5.2) ; extra == 'dev'
Requires-Dist: readthedocs-sphinx-search (==0.1.0) ; extra == 'dev'
Requires-Dist: pymemcache ; extra == 'dev'
Requires-Dist: redis ; extra == 'dev'
Requires-Dist: redis-py-cluster ; extra == 'dev'
Requires-Dist: bandit ; extra == 'dev'
Requires-Dist: black ; extra == 'dev'
Requires-Dist: check-manifest ; extra == 'dev'
Requires-Dist: darglint ; extra == 'dev'
Requires-Dist: flake8 ; extra == 'dev'
Requires-Dist: flake8-annotations-complexity ; extra == 'dev'
Requires-Dist: flake8-black ; extra == 'dev'
Requires-Dist: flake8-breakpoint ; extra == 'dev'
Requires-Dist: flake8-bugbear ; extra == 'dev'
Requires-Dist: flake8-builtins ; extra == 'dev'
Requires-Dist: flake8-comprehensions ; extra == 'dev'
Requires-Dist: flake8-eradicate ; extra == 'dev'
Requires-Dist: flake8-expression-complexity ; extra == 'dev'
Requires-Dist: flake8-isort ; extra == 'dev'
Requires-Dist: flake8-pytest-style ; extra == 'dev'
Requires-Dist: flake8-requirements ; extra == 'dev'
Requires-Dist: isort ; extra == 'dev'
Requires-Dist: pep8-naming ; extra == 'dev'
Requires-Dist: mypy ; extra == 'dev'
Requires-Dist: types-freezegun ; extra == 'dev'
Requires-Dist: types-redis ; extra == 'dev'
Requires-Dist: coverage[toml] ; extra == 'dev'
Requires-Dist: freezegun ; extra == 'dev'
Requires-Dist: pytest ; extra == 'dev'
Requires-Dist: pytest-cov ; extra == 'dev'
Provides-Extra: docs
Requires-Dist: sphinx (<5.0.0,>=4.1.2) ; extra == 'docs'
Requires-Dist: sphinx-rtd-theme (==0.5.2) ; extra == 'docs'
Requires-Dist: readthedocs-sphinx-search (==0.1.0) ; extra == 'docs'
Requires-Dist: pymemcache ; extra == 'docs'
Requires-Dist: redis ; extra == 'docs'
Requires-Dist: redis-py-cluster ; extra == 'docs'
Provides-Extra: lint
Requires-Dist: bandit ; extra == 'lint'
Requires-Dist: black ; extra == 'lint'
Requires-Dist: check-manifest ; extra == 'lint'
Requires-Dist: darglint ; extra == 'lint'
Requires-Dist: flake8 ; extra == 'lint'
Requires-Dist: flake8-annotations-complexity ; extra == 'lint'
Requires-Dist: flake8-black ; extra == 'lint'
Requires-Dist: flake8-breakpoint ; extra == 'lint'
Requires-Dist: flake8-bugbear ; extra == 'lint'
Requires-Dist: flake8-builtins ; extra == 'lint'
Requires-Dist: flake8-comprehensions ; extra == 'lint'
Requires-Dist: flake8-eradicate ; extra == 'lint'
Requires-Dist: flake8-expression-complexity ; extra == 'lint'
Requires-Dist: flake8-isort ; extra == 'lint'
Requires-Dist: flake8-pytest-style ; extra == 'lint'
Requires-Dist: flake8-requirements ; extra == 'lint'
Requires-Dist: isort ; extra == 'lint'
Requires-Dist: pep8-naming ; extra == 'lint'
Provides-Extra: test
Requires-Dist: coverage[toml] ; extra == 'test'
Requires-Dist: freezegun ; extra == 'test'
Requires-Dist: pymemcache ; extra == 'test'
Requires-Dist: pytest ; extra == 'test'
Requires-Dist: pytest-cov ; extra == 'test'
Requires-Dist: redis ; extra == 'test'
Provides-Extra: typecheck
Requires-Dist: mypy ; extra == 'typecheck'
Requires-Dist: types-freezegun ; extra == 'typecheck'
Requires-Dist: types-redis ; extra == 'typecheck'

.. |ci| image:: https://github.com/djmattyg007/freiner/workflows/CI/badge.svg?branch=master
   :target: https://github.com/djmattyg007/freiner/actions?query=branch%3Amaster+workflow%3ACI
.. |codecov| image:: https://codecov.io/gh/djmattyg007/freiner/branch/master/graph/badge.svg
   :target: https://codecov.io/gh/djmattyg007/freiner
.. |pypi| image:: https://img.shields.io/pypi/v/freiner.svg
   :target: https://pypi.python.org/pypi/freiner
.. |license| image:: https://img.shields.io/pypi/l/freiner.svg
   :target: https://pypi.python.org/pypi/freiner

*******
Freiner
*******
|ci| |codecov| |pypi| |license|

*Freiner* provides utilities to implement rate limiting using various strategies and storage
backends such as Redis & Memcached.

The French word "freiner" means "to slow down", which is what you'll need to do if you are
rate-limited :)

Currently this project supports Python 3.7, 3.8 and 3.9.

History
-------

Freiner is a fork of a project named `limits <https://github.com/alisaifee/limits>`_. I forked it
to add type hints, and to resolve several outstanding problems at the time.

Links
-----

* `Documentation <http://limits.readthedocs.org>`_
* `Changelog <http://limits.readthedocs.org/en/stable/changelog.html>`_


