from __future__ import unicode_literals from django.apps import apps from django.db.models.signals import post_save from django.utils.translation import ugettext_lazy as _ from kombu import Exchange, Queue from mayan.apps.acls import ModelPermission from mayan.apps.common import ( MayanAppConfig, menu_facet, menu_multi_item, menu_object, menu_tools ) from mayan.apps.common.classes import ModelAttribute, ModelField from mayan.apps.document_indexing.handlers import handler_index_document from mayan.apps.documents.search import document_page_search, document_search from mayan.apps.documents.signals import post_version_upload from mayan.apps.events import ModelEventType from mayan.apps.navigation import SourceColumn from mayan.celery import app from .drivers import * # NOQA from .events import ( event_file_metadata_document_version_finish, event_file_metadata_document_version_submit ) from .handlers import ( handler_initialize_new_document_type_settings, handler_process_document_version ) from .links import ( link_document_driver_list, link_document_file_metadata_list, link_document_submit, link_document_submit_multiple, link_document_type_file_metadata_settings, link_document_type_submit ) from .methods import ( method_document_submit, method_document_version_submit, method_get_document_file_metadata, method_get_document_version_file_metadata ) from .permissions import ( permission_document_type_file_metadata_setup, permission_file_metadata_submit, permission_file_metadata_view ) from .signals import post_document_version_file_metadata_processing class FileMetadataApp(MayanAppConfig): app_namespace = 'file_metadata' app_url = 'file_metadata' has_test = True name = 'mayan.apps.file_metadata' verbose_name = _('File metadata') def ready(self): super(FileMetadataApp, self).ready() FileMetadataEntry = self.get_model(model_name='FileMetadataEntry') DocumentVersionDriverEntry = self.get_model( model_name='DocumentVersionDriverEntry' ) Document = apps.get_model( app_label='documents', model_name='Document' ) DocumentTypeSettings = self.get_model( model_name='DocumentTypeSettings' ) DocumentType = apps.get_model( app_label='documents', model_name='DocumentType' ) DocumentVersion = apps.get_model( app_label='documents', model_name='DocumentVersion' ) Document.add_to_class( name='submit_for_file_metadata_processing', value=method_document_submit ) Document.add_to_class( name='get_file_metadata', value=method_get_document_file_metadata ) DocumentVersion.add_to_class( name='get_file_metadata', value=method_get_document_version_file_metadata ) DocumentVersion.add_to_class( name='submit_for_file_metadata_processing', value=method_document_version_submit ) ModelAttribute(model=Document, name='get_file_metadata') ModelEventType.register( model=Document, event_types=( event_file_metadata_document_version_finish, event_file_metadata_document_version_submit ) ) ModelField( label=_('File metadata key'), model=Document, name='versions__file_metadata_drivers__entries__key', ) ModelField( label=_('File metadata key'), model=Document, name='versions__file_metadata_drivers__entries__value', ) ModelPermission.register( model=Document, permissions=( permission_file_metadata_submit, permission_file_metadata_view, ) ) ModelPermission.register( model=DocumentType, permissions=( permission_document_type_file_metadata_setup, permission_file_metadata_submit ) ) ModelPermission.register_inheritance( model=DocumentTypeSettings, related='document_type', ) SourceColumn(attribute='key', source=FileMetadataEntry) SourceColumn(attribute='value', source=FileMetadataEntry) SourceColumn( attribute='driver', source=DocumentVersionDriverEntry ) SourceColumn( attribute='driver__internal_name', source=DocumentVersionDriverEntry ) SourceColumn( attribute='get_attribute_count', source=DocumentVersionDriverEntry ) app.conf.task_queues.append( Queue( 'file_metadata', Exchange('file_metadata'), routing_key='file_metadata' ), ) app.conf.task_routes.update( { 'mayan.apps.file_metadata.tasks.task_process_document_version': { 'queue': 'file_metadata' }, } ) document_search.add_model_field( field='versions__file_metadata_drivers__entries__key', label=_('File metadata key') ) document_search.add_model_field( field='versions__file_metadata_drivers__entries__value', label=_('File metadata value') ) document_page_search.add_model_field( field='document_version__file_metadata_drivers__entries__key', label=_('File metadata key') ) document_page_search.add_model_field( field='document_version__file_metadata_drivers__entries__value', label=_('File metadata value') ) menu_facet.bind_links( links=(link_document_driver_list,), sources=(Document,) ) menu_object.bind_links( links=(link_document_submit,), sources=(Document,) ) menu_object.bind_links( links=(link_document_type_file_metadata_settings,), sources=(DocumentType,) ) menu_object.bind_links( links=(link_document_file_metadata_list,), sources=(DocumentVersionDriverEntry,) ) menu_multi_item.bind_links( links=(link_document_submit_multiple,), sources=(Document,) ) menu_tools.bind_links( links=(link_document_type_submit,), ) post_save.connect( dispatch_uid='file_metadata_handler_initialize_new_document_type_settings', receiver=handler_initialize_new_document_type_settings, sender=DocumentType ) post_version_upload.connect( dispatch_uid='file_metadata_handler_process_document_version', receiver=handler_process_document_version, sender=DocumentVersion ) post_document_version_file_metadata_processing.connect( dispatch_uid='file_metadata_handler_index_document', receiver=handler_index_document, sender=DocumentVersion )