205 lines
7.2 KiB
Python
205 lines
7.2 KiB
Python
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 mayan.apps.acls.classes import ModelPermission
|
|
from mayan.apps.common.apps import MayanAppConfig
|
|
from mayan.apps.common.classes import ModelAttribute, ModelField
|
|
from mayan.apps.common.menus import (
|
|
menu_facet, menu_list_facet, menu_multi_item, menu_object, menu_secondary,
|
|
menu_tools
|
|
)
|
|
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.classes import ModelEventType
|
|
from mayan.apps.navigation.classes import SourceColumn
|
|
|
|
from .classes import FileMetadataHelper
|
|
from .dependencies import * # NOQA
|
|
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_multiple_submit,
|
|
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_tests = 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='file_metadata_value_of', value=FileMetadataHelper.constructor
|
|
)
|
|
Document.add_to_class(
|
|
name='get_file_metadata',
|
|
value=method_get_document_file_metadata
|
|
)
|
|
Document.add_to_class(
|
|
name='submit_for_file_metadata_processing',
|
|
value=method_document_submit
|
|
)
|
|
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='file_metadata_value_of',
|
|
description=_(
|
|
'Return the value of a specific 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,
|
|
permission_file_metadata_view
|
|
)
|
|
)
|
|
ModelPermission.register_inheritance(
|
|
model=DocumentTypeSettings, related='document_type',
|
|
)
|
|
ModelPermission.register_inheritance(
|
|
model=DocumentVersionDriverEntry, related='document_version',
|
|
)
|
|
|
|
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
|
|
)
|
|
|
|
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_list_facet.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_multiple_submit,), sources=(Document,)
|
|
)
|
|
menu_secondary.bind_links(
|
|
links=(link_document_submit,), sources=(
|
|
'file_metadata:document_driver_list',
|
|
'file_metadata:document_version_driver_file_metadata_list'
|
|
)
|
|
)
|
|
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
|
|
)
|