{ "info": { "author": "kgriffs", "author_email": "", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Environment :: Web Environment", "Intended Audience :: Developers", "Intended Audience :: System Administrators", "License :: OSI Approved :: Apache Software License", "Natural Language :: English", "Operating System :: MacOS :: MacOS X", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Internet :: WWW/HTTP", "Topic :: Software Development :: Libraries" ], "description": "A Token Bucket Implementation for Python Web Apps |Build Status| |codecov.io|\n=============================================================================\n\nThe ``token-bucket`` package provides an implementation of the\n`token bucket algorithm `_\nsuitable for use in web applications for shaping or policing request\nrates. This implementation does not require the use of an independent\ntimer thread to manage the bucket state.\n\nCompared to other rate-limiting algorithms that use a simple counter,\nthe token bucket algorithm provides the following advantages:\n\n* The thundering herd problem is avoided since bucket capacity is\n replenished gradually, rather than being immediately refilled at the\n beginning of each epoch as is common with simple fixed window\n counters.\n* Burst duration can be explicitly controlled\n\nMoving window algorithms are resitant to bursting, but at the cost of\nadditional processing and memory overhead vs. the token bucket\nalgorithm which uses a simple, fast counter per key. The latter approach\ndoes allow for bursting, but only for a controlled duration.\n\n.. |Build Status| image:: https://travis-ci.org/falconry/token-bucket.svg\n :target: https://travis-ci.org/falconry/token-bucket\n.. |codecov.io| image:: https://codecov.io/gh/falconry/token-bucket/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/falconry/token-bucket", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/falconry/token-bucket", "keywords": "web http https cloud rate limiting token bucket throttling", "license": "Apache 2.0", "maintainer": "", "maintainer_email": "", "name": "token-bucket", "package_url": "https://pypi.org/project/token-bucket/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/token-bucket/", "project_urls": { "Homepage": "https://github.com/falconry/token-bucket" }, "release_url": "https://pypi.org/project/token-bucket/0.2.0/", "requires_dist": null, "requires_python": "", "summary": "Very fast implementation of the token bucket algorithm.", "version": "0.2.0" }, "last_serial": 2572984, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "83afa9e37d7364d73511f04ade3e31e0", "sha256": "c772654a90e07d0561bd3385e6e370a11330f014d8d18c44b2349cf113e042c6" }, "downloads": -1, "filename": "token_bucket-0.1.0-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "83afa9e37d7364d73511f04ade3e31e0", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10353, "upload_time": "2017-01-10T15:35:25", "url": "https://files.pythonhosted.org/packages/3f/cc/942ee9bbc422dabdae4092273a24bb4375124b0c3cc9259c33aeb839610f/token_bucket-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "add9e03bb26fa8f31a254e20ac2d3d40", "sha256": "c24fd6cf5c6f77b001c91ca1a5b4c82e3ed9e3a80ddab4f10f52efe3e467f732" }, "downloads": -1, "filename": "token_bucket-0.1.0.tar.gz", "has_sig": true, "md5_digest": "add9e03bb26fa8f31a254e20ac2d3d40", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6534, "upload_time": "2017-01-10T15:35:28", "url": "https://files.pythonhosted.org/packages/04/8a/afc91df7425533466c7a31fe0e83e4dc03c1f07a11c0bc7812cb7646255f/token_bucket-0.1.0.tar.gz" } ], "0.1.0.dev0": [ { "comment_text": "", "digests": { "md5": "daf80345361c2a21691e67d8231fd3a4", "sha256": "9eba11e7fd57e6c5a6a10cd0ad8416fd5d0408e18cc98fed8c0858059f8152d3" }, "downloads": -1, "filename": "token_bucket-0.1.0.dev0-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "daf80345361c2a21691e67d8231fd3a4", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10426, "upload_time": "2017-01-10T15:29:01", "url": "https://files.pythonhosted.org/packages/0a/3a/88375888f664842214f3bb0c75d54f61bb18ddd5c77e7f96b00e16ef903d/token_bucket-0.1.0.dev0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ad342b703f2fce14c61edd9eed5096b9", "sha256": "aef9d35e3b26d69c8e64e8a3027b8c71084ce8649380429af16342307381e574" }, "downloads": -1, "filename": "token_bucket-0.1.0.dev0.tar.gz", "has_sig": true, "md5_digest": "ad342b703f2fce14c61edd9eed5096b9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6546, "upload_time": "2017-01-10T15:29:03", "url": "https://files.pythonhosted.org/packages/91/a4/41982f0e8b8f6cc8a76dc2c72457e5f2c48758ca3cc78cca802c8c1b84e1/token_bucket-0.1.0.dev0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "55e1cd06f27211f23ea127f832579645", "sha256": "e25aec9cce401447f3588a70d5c45336d460d4fac90f20156bbda26f83fc1aae" }, "downloads": -1, "filename": "token_bucket-0.2.0-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "55e1cd06f27211f23ea127f832579645", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10394, "upload_time": "2017-01-13T21:55:07", "url": "https://files.pythonhosted.org/packages/ea/ae/31fe6fd239796bf60012f69b1ec3a090bedaf74ec23c8c23d94003144963/token_bucket-0.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "262d8639072296b53cd5be342396bb89", "sha256": "76305d9dbe875d3b033b5bf208cc2cf78c003129378108ab1bae919a42b108da" }, "downloads": -1, "filename": "token_bucket-0.2.0.tar.gz", "has_sig": true, "md5_digest": "262d8639072296b53cd5be342396bb89", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6554, "upload_time": "2017-01-13T21:55:09", "url": "https://files.pythonhosted.org/packages/74/fb/5c7681fce00acca5df34d63f1b4ee441df72157a92b24e4992f00e69e6c1/token_bucket-0.2.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "55e1cd06f27211f23ea127f832579645", "sha256": "e25aec9cce401447f3588a70d5c45336d460d4fac90f20156bbda26f83fc1aae" }, "downloads": -1, "filename": "token_bucket-0.2.0-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "55e1cd06f27211f23ea127f832579645", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10394, "upload_time": "2017-01-13T21:55:07", "url": "https://files.pythonhosted.org/packages/ea/ae/31fe6fd239796bf60012f69b1ec3a090bedaf74ec23c8c23d94003144963/token_bucket-0.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "262d8639072296b53cd5be342396bb89", "sha256": "76305d9dbe875d3b033b5bf208cc2cf78c003129378108ab1bae919a42b108da" }, "downloads": -1, "filename": "token_bucket-0.2.0.tar.gz", "has_sig": true, "md5_digest": "262d8639072296b53cd5be342396bb89", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6554, "upload_time": "2017-01-13T21:55:09", "url": "https://files.pythonhosted.org/packages/74/fb/5c7681fce00acca5df34d63f1b4ee441df72157a92b24e4992f00e69e6c1/token_bucket-0.2.0.tar.gz" } ] }