Metadata-Version: 2.0
Name: django-db-locking
Version: 2.0.3
Summary: Database locking
Home-page: https://github.com/vikingco/django-db-locking/
Author: VikingCo
Author-email: operations@unleashed.be
License: BSD
Platform: UNKNOWN
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.6
Classifier: Operating System :: OS Independent
Classifier: Environment :: Web Environment
Classifier: Framework :: Django
Requires-Dist: Django
Provides-Extra: celery
Requires-Dist: celery; extra == 'celery'

Django-locking
==============

.. image:: https://coveralls.io/repos/github/vikingco/django-db-locking/badge.svg?branch=master
    :target: https://coveralls.io/github/vikingco/django-db-locking?branch=master
.. image:: https://travis-ci.org/vikingco/django-db-locking.svg?branch=master
    :target: https://travis-ci.org/vikingco/django-db-locking

Usage
-----
The simplest use is by using it as a context manager:

::

    with NonBlockingLock.objects.acquire_lock(obj=model_obj):
        model_obj.do_something()

Or you can keep track of the lock yourself:

::

    try:
        lock = NonBlockingLock.objects.acquire_lock(obj=model_obj)
    except AlreadyLocked:
        return False

    model_obj.do_something()
    lock.release()

If you have no Django model, or you want to be able to specify the lock name
yourself, you can do that too::

    # this will raise AlreadyLocked, if it's locked
    lock = NonBlockingLock.objects.acquire_lock(lock_name='my_lock')
    do_something()
    lock.release()

Note that locks can expire automatically. There is a `LOCK_MAX_AGE` settings where you can specify a default lock release value for locks in your entire Django codebase. This value can be overridden per lock by setting the `max_age` parameter.

Test
-----
You can run the tests with
::

    tox

Releases
--------
v2.0.0:
  Merging of master and pre-django-1.8 branches
  Removes management command in favor of a celery task
v1.2.1:
  Fix problem in migration to UUIDField for PostGres
v1.2.0:
  Move id to UUIDField, add code quality checks and CI
v1.1.0:
  Rename model to NonBlockingLock and add additional features
v1.0.1:
  Corrected tests and code clean-up
v1.0.0:
  Intial release.


