Metadata-Version: 2.1
Name: django-cache-lock
Version: 0.1.2
Summary: A simple lock extension for django's cache.
Home-page: https://github.com/Xavier-Lam/django-cache-lock
Author: Xavier-Lam
Author-email: Lam.Xavier@hotmail.com
License: UNKNOWN
Keywords: django,cache,lock
Platform: UNKNOWN
Classifier: Development Status :: 2 - Pre-Alpha
Classifier: Environment :: Web Environment
Classifier: Framework :: Django :: 1.11
Classifier: Framework :: Django :: 2.0
Classifier: Framework :: Django :: 2.1
Classifier: Framework :: Django :: 2.2
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: MacOS
Classifier: Operating System :: Microsoft :: Windows
Classifier: Operating System :: POSIX
Classifier: Operating System :: POSIX :: Linux
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Topic :: Internet :: WWW/HTTP
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
Classifier: Topic :: Software Development :: Libraries
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: Utilities
Description-Content-Type: text/markdown
Requires-Dist: Django (>=1.11)
Requires-Dist: six (>=1.0.0)

# django-cache-lock

[![PyPI](https://img.shields.io/pypi/v/django-cache-lock.svg)](https://pypi.org/project/django-cache-lock)
[![Build Status](https://travis-ci.org/Xavier-Lam/django-cache-lock.svg?branch=master)](https://travis-ci.org/Xavier-Lam/django-cache-lock)

A simple lock extension for django's cache.

## Installation
Install django-cache-lock by using pip

    pip install django-cache-lock

## Quick Start
You can work with django-cache-lock by using with-statement or decorator.

    from django_lock import lock

    with lock("global"):
        pass

    @lock("global")
    def foo():
        pass

A shortcut to lock model instance

    from django.db import models
    from django_lock import model_lock

    class Foo(models.Model):
        bar = models.CharField(max_length=8)

        @lock_model
        def lock_pk(self):
            pass

        @lock_model("bar", blocking=False)
        def lock_bar(self):
            pass

## Configurations
| key | default | desc |
| --- | --- | --- |
| DJANGOLOCK_PREFIX | "lock:" | lock's key prefix stored in cache |
| DJANGOLOCK_SLEEP | 0.1 | default interval time to acquire a lock if a lock is holded by others |
| DJANGOLOCK_RELEASEONDEL | True | release lock when `__del__` is called if True |

## Advanced usage
For more usages, please read the [code](django_lock.py).

## ATTENTIONS
### memcached backend
* 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.

## TODOS:
* use lua script and memcached's cas to release lock
* reacquire and extend lock
* database backend cache support

