{ "info": { "author": "Nils Rokita, Henning Prid\u00f6hl", "author_email": "0rokita@informatik.uni-hamburg.de", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Environment :: Web Environment", "Framework :: Django", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "A token bucket implementation for Django to implement rate limiting\non individual user actions, for example submitting a form.\n\nInstallation\n############\n\nInsatall:\n\n pip install django-token-bucket\n\nadd it to your installed apps:\n\n INSTALLED_APPS = [\n '...',\n 'django_token_bucket'\n ]\n\nrun migrations:\n\n ./manage.py migrate django_token_bucket\n\n\nExamples\n########\n\nexample for consuming a token on Form validation:\n\n INVITATION_MAX_TOKENS = 5\n INVITATION_FILL_RATE = 300 # a token each 300 seconds\n\n def clean(self):\n cleaned_data = super(InvitationForm, self).clean()\n bucket = TokenBucket.get(identifier='invitations_sent',\n user=self.user,\n max_tokens=INVITATION_MAX_TOKENS,\n fill_rate=INVITATION_FILL_RATE,\n whatfor='invitations')\n try:\n bucket.consume(1)\n except bucket.TokensExceeded as e:\n raise forms.ValidationError(str(e))\n return cleaned_data\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/fsinfuhh/django_token_bucket", "keywords": "", "license": "License :: OSI Approved :: MIT License", "maintainer": "Nils Rokita", "maintainer_email": "0rokita@informatik.uni-hamburg.de", "name": "django-token-bucket", "package_url": "https://pypi.org/project/django-token-bucket/", "platform": "", "project_url": "https://pypi.org/project/django-token-bucket/", "project_urls": { "Homepage": "https://github.com/fsinfuhh/django_token_bucket" }, "release_url": "https://pypi.org/project/django-token-bucket/0.1.dev2/", "requires_dist": [ "Django (>=1.11)" ], "requires_python": "", "summary": "Django Tocken Bucket support.", "version": "0.1.dev2" }, "last_serial": 4054203, "releases": { "0.1.dev1": [ { "comment_text": "", "digests": { "md5": "fd395432bca3d4a9dcec5d2ad4eabdc6", "sha256": "d99885fd0bcdaa427800dae785a676acc1298a4ab59d80cde0499af587948e5f" }, "downloads": -1, "filename": "django_token_bucket-0.1.dev1-py3-none-any.whl", "has_sig": true, "md5_digest": "fd395432bca3d4a9dcec5d2ad4eabdc6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 4864, "upload_time": "2018-07-11T14:35:18", "url": "https://files.pythonhosted.org/packages/ee/41/f48b0c17ef730f5450b78a4c8c8bd4ac8186cebb9176fbc60d94a5f36b9a/django_token_bucket-0.1.dev1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bd60e5dc945ca3ad296bfde94fa98113", "sha256": "b51104e9d3753a94e13e47fcdb8d02e80b1eb7f17d06ae808ffc1cf7ee1a78a9" }, "downloads": -1, "filename": "django_token_bucket-0.1.dev1.tar.gz", "has_sig": true, "md5_digest": "bd60e5dc945ca3ad296bfde94fa98113", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3576, "upload_time": "2018-07-11T14:35:20", "url": "https://files.pythonhosted.org/packages/39/75/9b51f304298dbcb4728e52bab622a9d0df87aaef20cf142d6279f259b455/django_token_bucket-0.1.dev1.tar.gz" } ], "0.1.dev2": [ { "comment_text": "", "digests": { "md5": "9e4eb64f33ac20c3449c448454b2c5a6", "sha256": "460f00747c9170ed799e97c51124da604b8a96a6c641c191111ba9bfe890bed1" }, "downloads": -1, "filename": "django_token_bucket-0.1.dev2-py3-none-any.whl", "has_sig": true, "md5_digest": "9e4eb64f33ac20c3449c448454b2c5a6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6475, "upload_time": "2018-07-12T12:58:30", "url": "https://files.pythonhosted.org/packages/23/95/270be14a438380d32693c6809141fa4c88f7fa91bb3af5ba6b04a84c12fd/django_token_bucket-0.1.dev2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f7f6bc17399fbd84bf3746c5e915785e", "sha256": "d79a043801e324cfc1bba4c3b98c8379a40d9522f070f8e5d01b19a95d38f7d3" }, "downloads": -1, "filename": "django_token_bucket-0.1.dev2.tar.gz", "has_sig": true, "md5_digest": "f7f6bc17399fbd84bf3746c5e915785e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3712, "upload_time": "2018-07-12T12:58:44", "url": "https://files.pythonhosted.org/packages/80/2e/c9315bf5c1106cd21ad31a7050d9cf8a9c2f3ed38f8b97c7b7663bddb9e9/django_token_bucket-0.1.dev2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "9e4eb64f33ac20c3449c448454b2c5a6", "sha256": "460f00747c9170ed799e97c51124da604b8a96a6c641c191111ba9bfe890bed1" }, "downloads": -1, "filename": "django_token_bucket-0.1.dev2-py3-none-any.whl", "has_sig": true, "md5_digest": "9e4eb64f33ac20c3449c448454b2c5a6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6475, "upload_time": "2018-07-12T12:58:30", "url": "https://files.pythonhosted.org/packages/23/95/270be14a438380d32693c6809141fa4c88f7fa91bb3af5ba6b04a84c12fd/django_token_bucket-0.1.dev2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f7f6bc17399fbd84bf3746c5e915785e", "sha256": "d79a043801e324cfc1bba4c3b98c8379a40d9522f070f8e5d01b19a95d38f7d3" }, "downloads": -1, "filename": "django_token_bucket-0.1.dev2.tar.gz", "has_sig": true, "md5_digest": "f7f6bc17399fbd84bf3746c5e915785e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3712, "upload_time": "2018-07-12T12:58:44", "url": "https://files.pythonhosted.org/packages/80/2e/c9315bf5c1106cd21ad31a7050d9cf8a9c2f3ed38f8b97c7b7663bddb9e9/django_token_bucket-0.1.dev2.tar.gz" } ] }