Metadata-Version: 2.0
Name: django-db-locking
Version: 2.0.0
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: Operating System :: OS Independent
Classifier: Environment :: Web Environment
Classifier: Framework :: Django

Django-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()

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

    tox

Wishlist
--------
- Add lock time-out (try to aquire a lock for up to a given TIME_OUT), like
  `lockfile's <http://packages.python.org/lockfile/>`_ `FileLock.aquire
  <http://packages.python.org/lockfile/lockfile.html#lockfile.FileLock.acquire>`_
- Global locks (for instance on a whole Model not just an object)

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.


