A locking system for Django apps simply using the database.
Privex's Django Database Lock Manager
+===================================================+ | © 2019 Privex Inc. | | https://www.privex.io | +===================================================+ | | | Django Database Lock Manager | | License: X11/MIT | | | | Core Developer(s): | | | | (+) Chris (@someguy123) [Privex] | | | +===================================================+ Django Database Lock Manager - Easy to use lock system using your Django app's database Copyright (c) 2019 Privex Inc. ( https://www.privex.io )
Install with pip
We recommend at least Python 3.6 - we cannot guarantee compatibility with older versions.
pip3 install django-lockmgr
lockmgr to your
INSTALLED_APPS = [ 'django.contrib.admin.apps.SimpleAdminConfig', 'django.contrib.auth', 'django.contrib.contenttypes', # ... 'lockmgr' ]
Run the migrations
./manage.py migrate lockmgr
LockMgr in your code like so:
from lockmgr.lockmgr import LockMgr, Locked try: with LockMgr('mylock') as lck: print('The lock "mylock" is now locked.') lck.lock('otherlock') print('The lock "otherlock" should also be locked.') print('The locks "mylock" and "otherlock" should now both be cleared.') except Locked as e: print('Error! mylock is already locked: ', type(e), str(e))
If you want to wait for the lock to be released, rather than immediately excepting:
from lockmgr.lockmgr import LockMgr, Locked try: # expires=60 means the lock will expire after 60 seconds if you don't renew it. # wait=90 (must be in 5 second intervals) means: if the key is locked, retry every 5 seconds, if 90 seconds have # passed and it's still locked, then give up and raise Locked. with LockMgr('somelock', expires=60, wait=90) as lck: print('The lock "somelock" is now locked.') print('The lock "somelock" should now be cleared.') except Locked as e: print('Error! After retrying for 90 seconds, "somelock" is still locked: ', type(e), str(e))
To run the unit tests, clone the project and make a
.env file containing details for a database:
DB_BACKEND=mysql DB_NAME=lockmgr DB_USER=someuser DB_PASS=mypassword
Install all required dependencies:
pip3 install -r requirements.txt -U
Now run the tests (--verbose for more detailed testing output):
./manage.py test --verbose
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Hashes for django_lockmgr-2.0.0-py3-none-any.whl