{ "info": { "author": "Xavier-Lam", "author_email": "Lam.Xavier@hotmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Environment :: Web Environment", "Framework :: Django :: 1.11", "Framework :: Django :: 2.0", "Framework :: Django :: 2.1", "Framework :: Django :: 2.2", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: MacOS", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX", "Operating System :: POSIX :: Linux", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: Implementation :: CPython", "Topic :: Internet :: WWW/HTTP", "Topic :: Internet :: WWW/HTTP :: Dynamic Content", "Topic :: Software Development :: Libraries", "Topic :: Software Development :: Libraries :: Application Frameworks", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Utilities" ], "description": "# django-cache-lock\n\n[![PyPI](https://img.shields.io/pypi/v/django-cache-lock.svg)](https://pypi.org/project/django-cache-lock)\n[![Build Status](https://travis-ci.org/Xavier-Lam/django-cache-lock.svg?branch=master)](https://travis-ci.org/Xavier-Lam/django-cache-lock)\n\nA simple lock extension for django's cache to prevent concurrent editing.\n\n## Installation\nInstall django-cache-lock by using pip\n\n pip install django-cache-lock\n\n## Quick Start\nYou can work with django-cache-lock by using with-statement or decorator.\n\n from django_lock import lock\n\n with lock(\"global\"):\n pass\n\n @lock(\"global\")\n def foo():\n pass\n\nA shortcut to lock model instance\n\n from django.db import models\n from django_lock import model_lock\n\n class Foo(models.Model):\n bar = models.CharField(max_length=8)\n\n @lock_model\n def lock_pk(self):\n pass\n\n @lock_model(\"bar\", blocking=False)\n def lock_bar(self):\n pass\n\n## Configurations\n| key | default | desc |\n| --- | --- | --- |\n| DJANGOLOCK_PREFIX | \"lock:\" | lock's key prefix stored in cache |\n| DJANGOLOCK_SLEEP | 0.1 | default interval time to acquire a lock if a lock is holded by others |\n| DJANGOLOCK_RELEASEONDEL | True | release lock when `__del__` is called if True |\n\n## Advanced usage\nFor more usages, please read the [code](django_lock.py).\n\n## Supported backends\n* django.core.cache.backends.db\n* django.core.cache.backends.file\n* django.core.cache.backends.locmem\n* django.core.cache.backends.memcached\n* [django-redis](https://github.com/niwinz/django-redis)\n* [django-redis-cache](https://github.com/sebleier/django-redis-cache)\n\n## ATTENTIONS\n### locmem backend\n* DO NO USE locmem backend in a product environment.\n\n### memcached backend\n* Memcached does not support milliseconds expire time, and its' expire time is not very exact. So memcached lock's timeout time is not as exact as other backends.\n\n### redis backend\n* We didn't test distributed redis lock.\n\n## TODOS:\n* use memcached's cas to release lock\n* reacquire and extend lock\n* database backend cache support\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://github.com/Xavier-Lam/django-cache-lock", "keywords": "django,cache,lock", "license": "", "maintainer": "", "maintainer_email": "", "name": "django-cache-lock", "package_url": "https://pypi.org/project/django-cache-lock/", "platform": "", "project_url": "https://pypi.org/project/django-cache-lock/", "project_urls": { "Homepage": "https://github.com/Xavier-Lam/django-cache-lock" }, "release_url": "https://pypi.org/project/django-cache-lock/0.2.1/", "requires_dist": [ "Django (>=1.11)", "six (>=1.0.0)" ], "requires_python": "", "summary": "A simple lock extension for django's cache.", "version": "0.2.1" }, "last_serial": 5376865, "releases": { "0.1.1": [ { "comment_text": "", "digests": { "md5": "26efb033f00f8954b1523b9d044abbdf", "sha256": "d58d54b7ef32abd50541da4ff88fb68ebc4917e3550d6765d6b0236c34f01e95" }, "downloads": -1, "filename": "django_cache_lock-0.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "26efb033f00f8954b1523b9d044abbdf", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6020, "upload_time": "2019-04-25T14:08:02", "url": "https://files.pythonhosted.org/packages/39/c3/56f8f8bb5999d73313fa614c971d20f9cc4843af8fea72221f5d2722810d/django_cache_lock-0.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7dffba75acc7b9d132e7423a3f3eba29", "sha256": "5086979d6c68247660d7e08d4b8a5644363b81482b0394770cf8d293197b7078" }, "downloads": -1, "filename": "django-cache-lock-0.1.1.tar.gz", "has_sig": false, "md5_digest": "7dffba75acc7b9d132e7423a3f3eba29", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6144, "upload_time": "2019-04-25T14:08:08", "url": "https://files.pythonhosted.org/packages/da/46/b2aadf864e4321ca8d2d7345a39e7dbe77dc7c1ce5885be3a36c8f003998/django-cache-lock-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "7d1cbe58032a9716831df5e575753eb6", "sha256": "c16a0b4826496bbcc9cc3c13ec895d44198988e100af46034c286a1003d1ab83" }, "downloads": -1, "filename": "django_cache_lock-0.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7d1cbe58032a9716831df5e575753eb6", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6091, "upload_time": "2019-04-27T08:50:55", "url": "https://files.pythonhosted.org/packages/66/b0/3b4521b70eb9c3905e1d333af146a1ea36f2798ed2a2747f3e72171d29bd/django_cache_lock-0.1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bfde4277d1f94fcf7d629b88a641db3a", "sha256": "16dddec217294529244b9688e57a8b9bcbd3d6b77a3f4e6fc9b76fec33a36b7c" }, "downloads": -1, "filename": "django-cache-lock-0.1.2.tar.gz", "has_sig": false, "md5_digest": "bfde4277d1f94fcf7d629b88a641db3a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6219, "upload_time": "2019-04-27T08:50:57", "url": "https://files.pythonhosted.org/packages/2a/5a/465ff7a807bb037fe765d4f786920cf0de7ca8e54bf8985251114a6ba2b8/django-cache-lock-0.1.2.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "39e08c493a3bbd37ba40a37abd8c76d2", "sha256": "32a1dabf9622409c2c75f70e4b83e12c2b71ac9df449a82c1fa34cab156d5e28" }, "downloads": -1, "filename": "django_cache_lock-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "39e08c493a3bbd37ba40a37abd8c76d2", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6555, "upload_time": "2019-04-29T16:03:00", "url": "https://files.pythonhosted.org/packages/6e/78/134e54b685067d7bf71342144c79f9878c4c9a7988ee9323826937268e01/django_cache_lock-0.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fe2e6756ec31ebdffc8518ea66c4ca05", "sha256": "5dab9a5d6a53889c771437f6d28da1815bc8cd3afb87d22e3773427e7f49fc0d" }, "downloads": -1, "filename": "django-cache-lock-0.2.0.tar.gz", "has_sig": false, "md5_digest": "fe2e6756ec31ebdffc8518ea66c4ca05", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6649, "upload_time": "2019-04-29T16:03:05", "url": "https://files.pythonhosted.org/packages/28/e1/e43c0bba8ddd2efdab65fafa0c0a78382818e44a446622678e8c3c17fadf/django-cache-lock-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "e79c78848b82ad7123eb29096f778796", "sha256": "71c5ec2f825b08b66bc7396a89b6258c88b9b00bbcc2c1173d403a606d0773e8" }, "downloads": -1, "filename": "django_cache_lock-0.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e79c78848b82ad7123eb29096f778796", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6596, "upload_time": "2019-06-09T05:41:09", "url": "https://files.pythonhosted.org/packages/b7/e4/baa986fb268430d313d4f780c906ebfe2a6eaac30236955edb993833445d/django_cache_lock-0.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c31eb95b6cb4d275d01864e227350a33", "sha256": "95fb27da7e582c1e84fd072f55694ee8a8f8e3e36b531b60b2c755f19bf0deae" }, "downloads": -1, "filename": "django-cache-lock-0.2.1.tar.gz", "has_sig": false, "md5_digest": "c31eb95b6cb4d275d01864e227350a33", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6754, "upload_time": "2019-06-09T05:41:11", "url": "https://files.pythonhosted.org/packages/ef/82/2e9028da43213ee1f0cd44ac39f68965bce7fb99e4f67f3df9ee8ec7890b/django-cache-lock-0.2.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "e79c78848b82ad7123eb29096f778796", "sha256": "71c5ec2f825b08b66bc7396a89b6258c88b9b00bbcc2c1173d403a606d0773e8" }, "downloads": -1, "filename": "django_cache_lock-0.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e79c78848b82ad7123eb29096f778796", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6596, "upload_time": "2019-06-09T05:41:09", "url": "https://files.pythonhosted.org/packages/b7/e4/baa986fb268430d313d4f780c906ebfe2a6eaac30236955edb993833445d/django_cache_lock-0.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c31eb95b6cb4d275d01864e227350a33", "sha256": "95fb27da7e582c1e84fd072f55694ee8a8f8e3e36b531b60b2c755f19bf0deae" }, "downloads": -1, "filename": "django-cache-lock-0.2.1.tar.gz", "has_sig": false, "md5_digest": "c31eb95b6cb4d275d01864e227350a33", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6754, "upload_time": "2019-06-09T05:41:11", "url": "https://files.pythonhosted.org/packages/ef/82/2e9028da43213ee1f0cd44ac39f68965bce7fb99e4f67f3df9ee8ec7890b/django-cache-lock-0.2.1.tar.gz" } ] }