{ "info": { "author": "Alex DeLorenzo", "author_email": "", "bugtrack_url": null, "classifiers": [], "description": "# limiter\n\nRate-limiting thread-safe and asynchronous decorators and context managers that implement the token-bucket algorithm.\n\n - Thread-safe, with no need for a timer thread\n - Control burst requests\n - Control average request rate\n - Easy to use\n\n# Installation\n\n## Requirements\n\n - Python 3.7+\n\n## Installing from PyPI\n\n```bash\npip3 install limiter\n```\n\n# Usage\n\n```python3\nfrom asyncio import sleep\n\nfrom requests import get, Response\nfrom limiter import get_limiter, limit\n\n\nREFRESH_RATE = 2\nBURST_RATE = 3\n\n\nlimiter = get_limiter(rate=REFRESH_RATE, capacity=BURST_RATE)\n\n\n@limit(limiter)\ndef get_page(url: str) -> Response:\n return get(url)\n\n\n@limit(limiter, consume=2)\nasync def do_stuff():\n await sleep(0.1)\n\n\ndef do_stuff():\n # do stuff\n\n with limit(limiter, consume=1.5):\n # do expensive stuff\n pass\n\n\nasync def do_stuff():\n # do stuff\n\n async with limit(limiter):\n # do expensive stuff\n pass\n\n\n@limit(limiter, bucket=b'other stuff')\ndef do_other_stuff():\n pass\n```\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://alexdelorenzo.dev", "keywords": "rate-limit,rate,limit,token,bucket,token-bucket,token_bucket,tokenbucket,decorator,contextmanager,asynchronous,threadsafe,synchronous", "license": "AGPL-3.0", "maintainer": "", "maintainer_email": "", "name": "limiter", "package_url": "https://pypi.org/project/limiter/", "platform": "", "project_url": "https://pypi.org/project/limiter/", "project_urls": { "Homepage": "https://alexdelorenzo.dev" }, "release_url": "https://pypi.org/project/limiter/0.1.1/", "requires_dist": [ "token-bucket (==0.2.0)" ], "requires_python": "~=3.7", "summary": "Rate-limiting asynchronous and thread-safe decorators and context managers that implement the token-bucket algorithm.", "version": "0.1.1" }, "last_serial": 5690440, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "f4e1be62ffc001ea872135afe9f0ae99", "sha256": "a38b8858c7506bb3c4b6590f56b4d5549f5b1accf156eb6b9772f7fa9c98e75b" }, "downloads": -1, "filename": "limiter-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "f4e1be62ffc001ea872135afe9f0ae99", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": "~=3.7", "size": 3706, "upload_time": "2019-08-16T00:47:52", "url": "https://files.pythonhosted.org/packages/ac/4e/2490be078452d21a946fce5a5e45d07a5794fb8c9944fd5a3a6774c271d5/limiter-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9754671bcd39376a8a48925bcbf97aaa", "sha256": "1bc658e501cd43ee40a4f62f0670a0c94ecc7c3c0689aea7e119ef1cf4a6c4a9" }, "downloads": -1, "filename": "limiter-0.1.0.tar.gz", "has_sig": false, "md5_digest": "9754671bcd39376a8a48925bcbf97aaa", "packagetype": "sdist", "python_version": "source", "requires_python": "~=3.7", "size": 3494, "upload_time": "2019-08-16T00:47:54", "url": "https://files.pythonhosted.org/packages/d6/73/a0f5d97dec62819cb5e56d2de1d2ea0f67dc6cf46be157a33821953b48cd/limiter-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "47eb490cc58c13d4d21c3e28cdd8e2f9", "sha256": "53391dbe0dccec6efa61698f461b198cf818d69c4e5db9851d72424bfc4fa518" }, "downloads": -1, "filename": "limiter-0.1.1-py3.8.egg", "has_sig": false, "md5_digest": "47eb490cc58c13d4d21c3e28cdd8e2f9", "packagetype": "bdist_egg", "python_version": "3.8", "requires_python": "~=3.7", "size": 5296, "upload_time": "2019-08-17T03:24:25", "url": "https://files.pythonhosted.org/packages/a6/4a/ca8951770b4c406312d89ad86b435dea729475545105c1fbceb8aec7e52d/limiter-0.1.1-py3.8.egg" }, { "comment_text": "", "digests": { "md5": "10dacbbc8faf925521c0e61a19d85f71", "sha256": "4cf9d7c7c472f262b452af4b6351f7a4166a66d3d3655f1c744cc0625b3eae2d" }, "downloads": -1, "filename": "limiter-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "10dacbbc8faf925521c0e61a19d85f71", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": "~=3.7", "size": 3725, "upload_time": "2019-08-17T03:24:24", "url": "https://files.pythonhosted.org/packages/bb/71/7e65d2ac539272bf1f06f04f5802b280f31566ac044fa9fea6683c21a799/limiter-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2537d196e46ffaafbd6d9d7491380098", "sha256": "54bc4e23ab1c0b75b28b2608936a614022b08c4fbf4ff87fa45461ece29058be" }, "downloads": -1, "filename": "limiter-0.1.1.tar.gz", "has_sig": false, "md5_digest": "2537d196e46ffaafbd6d9d7491380098", "packagetype": "sdist", "python_version": "source", "requires_python": "~=3.7", "size": 3510, "upload_time": "2019-08-17T03:24:27", "url": "https://files.pythonhosted.org/packages/bf/31/d745003d378d968b6ae6a52791684220b4aa0e4ce20093660d8ca45da4e6/limiter-0.1.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "47eb490cc58c13d4d21c3e28cdd8e2f9", "sha256": "53391dbe0dccec6efa61698f461b198cf818d69c4e5db9851d72424bfc4fa518" }, "downloads": -1, "filename": "limiter-0.1.1-py3.8.egg", "has_sig": false, "md5_digest": "47eb490cc58c13d4d21c3e28cdd8e2f9", "packagetype": "bdist_egg", "python_version": "3.8", "requires_python": "~=3.7", "size": 5296, "upload_time": "2019-08-17T03:24:25", "url": "https://files.pythonhosted.org/packages/a6/4a/ca8951770b4c406312d89ad86b435dea729475545105c1fbceb8aec7e52d/limiter-0.1.1-py3.8.egg" }, { "comment_text": "", "digests": { "md5": "10dacbbc8faf925521c0e61a19d85f71", "sha256": "4cf9d7c7c472f262b452af4b6351f7a4166a66d3d3655f1c744cc0625b3eae2d" }, "downloads": -1, "filename": "limiter-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "10dacbbc8faf925521c0e61a19d85f71", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": "~=3.7", "size": 3725, "upload_time": "2019-08-17T03:24:24", "url": "https://files.pythonhosted.org/packages/bb/71/7e65d2ac539272bf1f06f04f5802b280f31566ac044fa9fea6683c21a799/limiter-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2537d196e46ffaafbd6d9d7491380098", "sha256": "54bc4e23ab1c0b75b28b2608936a614022b08c4fbf4ff87fa45461ece29058be" }, "downloads": -1, "filename": "limiter-0.1.1.tar.gz", "has_sig": false, "md5_digest": "2537d196e46ffaafbd6d9d7491380098", "packagetype": "sdist", "python_version": "source", "requires_python": "~=3.7", "size": 3510, "upload_time": "2019-08-17T03:24:27", "url": "https://files.pythonhosted.org/packages/bf/31/d745003d378d968b6ae6a52791684220b4aa0e4ce20093660d8ca45da4e6/limiter-0.1.1.tar.gz" } ] }