Files
mayan-edms/apps/lock_manager/decorators.py
2012-08-05 22:40:19 -04:00

32 lines
953 B
Python

from __future__ import absolute_import
from functools import wraps
from . import logger
from . import Lock
from .exceptions import LockError
def simple_locking(lock_id, expiration=None):
"""
A decorator that wraps a function in a single lock getting algorithm
"""
def inner_decorator(function):
def wrapper(*args, **kwargs):
try:
# Trying to acquire lock
lock = Lock.acquire_lock(lock_id, expiration)
except LockError:
# Unable to acquire lock
pass
else:
# Lock acquired, proceed normally, release lock afterwards
logger.debug('acquired lock: %s' % lock_id)
result = function(*args, **kwargs)
lock.release()
return result
finally:
lock.release()
return wraps(function)(wrapper)
return inner_decorator