Files
mayan-edms/mayan/apps/metadata/handlers.py
Roberto Rosario 36a51eeb73 Switch to full app paths
Instead of inserting the path of the apps into the Python app,
the apps are now referenced by their full import path.

This solves name clashes with external or native Python libraries.
Example: Mayan statistics app vs. Python new statistics library.

Every app reference is now prepended with 'mayan.apps'.

Existing config.yml files need to be updated manually.

Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
2019-04-05 02:02:57 -04:00

80 lines
2.6 KiB
Python

from __future__ import unicode_literals
from django.apps import apps
import logging
from mayan.apps.document_indexing.tasks import task_index_document
from .tasks import task_add_required_metadata_type, task_remove_metadata_type
logger = logging.getLogger(__name__)
def post_document_type_metadata_type_add(sender, instance, created, **kwargs):
logger.debug('instance: %s', instance)
if created and instance.required:
task_add_required_metadata_type.apply_async(
kwargs={
'document_type_id': instance.document_type.pk,
'metadata_type_id': instance.metadata_type.pk
}
)
def post_document_type_metadata_type_delete(sender, instance, **kwargs):
logger.debug('instance: %s', instance)
task_remove_metadata_type.apply_async(
kwargs={
'document_type_id': instance.document_type.pk,
'metadata_type_id': instance.metadata_type.pk
}
)
def post_document_type_change_metadata(sender, instance, **kwargs):
logger.debug('received post_document_type_change')
logger.debug('instance: %s', instance)
# Delete existing document metadata types not found in the new document
# type
# First get the existing metadata types not found in the new document
# type
unneeded_metadata = instance.metadata.exclude(
metadata_type__in=instance.document_type.metadata.values(
'metadata_type'
)
)
# Remove the document metadata whose types are not found in the new
# document type
for metadata in unneeded_metadata:
metadata.delete(enforce_required=False)
DocumentMetadata = apps.get_model(
app_label='metadata', model_name='DocumentMetadata'
)
# Add the metadata types of the new document type to the document
# excluding existing document metadata
# get_or_create is not used to avoid a possible triggering of indexes
# or workflow on document change by metadata save signal
new_document_type_metadata_types = instance.document_type.metadata.filter(
required=True
).exclude(metadata_type__in=instance.metadata.values('metadata_type'))
for document_type_metadata_type in new_document_type_metadata_types:
DocumentMetadata.objects.create(
document=instance,
metadata_type=document_type_metadata_type.metadata_type,
value=document_type_metadata_type.metadata_type.default
)
def handler_index_document(sender, **kwargs):
task_index_document.apply_async(
kwargs=dict(document_id=kwargs['instance'].document.pk)
)