40 lines
1.2 KiB
Python
40 lines
1.2 KiB
Python
from __future__ import unicode_literals
|
|
|
|
import logging
|
|
|
|
from django.apps import apps
|
|
|
|
from mayan.apps.lock_manager.exceptions import LockError
|
|
from mayan.apps.lock_manager.runtime import locking_backend
|
|
from mayan.celery import app
|
|
|
|
from .literals import LOCK_EXPIRE
|
|
|
|
from .classes import FileMetadataDriver
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
@app.task(ignore_result=True)
|
|
def task_process_document_version(document_version_id):
|
|
DocumentVersion = apps.get_model(
|
|
app_label='documents', model_name='DocumentVersion'
|
|
)
|
|
|
|
document_version = DocumentVersion.objects.get(pk=document_version_id)
|
|
|
|
lock_id = 'task_process_document_version-%d' % document_version_id
|
|
try:
|
|
logger.debug('trying to acquire lock: %s', lock_id)
|
|
# Acquire lock to avoid processing the same document version more
|
|
# than once concurrently
|
|
lock = locking_backend.acquire_lock(name=lock_id, timeout=LOCK_EXPIRE)
|
|
logger.debug('acquired lock: %s', lock_id)
|
|
except LockError:
|
|
logger.debug('unable to obtain lock: %s' % lock_id)
|
|
else:
|
|
FileMetadataDriver.process_document_version(
|
|
document_version=document_version
|
|
)
|
|
lock.release()
|