Files
mayan-edms/mayan/apps/sources/apps.py

164 lines
5.5 KiB
Python

from __future__ import absolute_import, unicode_literals
from django.utils.translation import ugettext_lazy as _
from kombu import Exchange, Queue
from common import (
MayanAppConfig, MissingItem, menu_front_page, menu_object, menu_secondary,
menu_sidebar, menu_setup
)
from common.signals import post_initial_setup, post_upgrade
from converter.links import link_transformation_list
from documents.models import Document
from documents.signals import post_version_upload
from mayan.celery import app
from navigation import SourceColumn
from rest_api.classes import APIEndPoint
from .classes import StagingFile
from .handlers import (
copy_transformations_to_version, create_default_document_source,
initialize_periodic_tasks
)
from .links import (
link_document_create_multiple, link_document_create_siblings,
link_setup_sources, link_setup_source_create_imap_email,
link_setup_source_create_pop3_email,
link_setup_source_create_watch_folder, link_setup_source_create_webform,
link_setup_source_create_staging_folder, link_setup_source_delete,
link_setup_source_edit, link_setup_source_logs, link_staging_file_delete,
link_upload_version
)
from .models import (
POP3Email, IMAPEmail, Source, SourceLog, StagingFolderSource,
WatchFolderSource, WebFormSource
)
from .widgets import staging_file_thumbnail
class SourcesApp(MayanAppConfig):
name = 'sources'
test = True
verbose_name = _('Sources')
def ready(self):
super(SourcesApp, self).ready()
APIEndPoint(app=self, version_string='1')
MissingItem(
label=_('Create a document source'),
description=_(
'Document sources are the way in which new documents are '
'feed to Mayan EDMS, create at least a web form source to '
'be able to upload documents from a browser.'
),
condition=lambda: not Source.objects.exists(),
view='sources:setup_source_list'
)
SourceColumn(
source=StagingFile,
label=_('Created'),
func=lambda context: context['object'].get_date_time_created()
)
SourceColumn(
source=StagingFile,
label=_('Thumbnail'),
func=lambda context: staging_file_thumbnail(
context['object'],
gallery_name='sources:staging_list',
title=context['object'].filename, size='100'
)
)
SourceColumn(
source=SourceLog,
label=_('Date time'),
func=lambda context: context['object'].datetime
)
SourceColumn(
source=SourceLog,
label=_('Message'),
func=lambda context: context['object'].message
)
app.conf.CELERY_QUEUES.extend(
(
Queue(
'sources', Exchange('sources'), routing_key='sources'
),
Queue(
'sources_periodic', Exchange('sources_periodic'),
routing_key='sources_periodic', delivery_mode=1
),
)
)
app.conf.CELERY_ROUTES.update(
{
'sources.tasks.task_check_interval_source': {
'queue': 'sources_periodic'
},
'sources.tasks.task_source_handle_upload': {
'queue': 'sources'
},
'sources.tasks.task_upload_document': {
'queue': 'sources'
},
}
)
menu_front_page.bind_links(links=(link_document_create_multiple,))
menu_object.bind_links(
links=(link_document_create_siblings,), sources=(Document,)
)
menu_object.bind_links(
links=(
link_setup_source_edit, link_setup_source_delete,
link_transformation_list, link_setup_source_logs
), sources=(
POP3Email, IMAPEmail, StagingFolderSource, WatchFolderSource,
WebFormSource
)
)
menu_object.bind_links(
links=(link_staging_file_delete,), sources=(StagingFile,)
)
menu_secondary.bind_links(
links=(
link_setup_sources, link_setup_source_create_webform,
link_setup_source_create_staging_folder,
link_setup_source_create_pop3_email,
link_setup_source_create_imap_email,
link_setup_source_create_watch_folder
), sources=(
POP3Email, IMAPEmail, StagingFolderSource, WatchFolderSource,
WebFormSource, 'sources:setup_source_list',
'sources:setup_source_create'
)
)
menu_setup.bind_links(links=(link_setup_sources,))
menu_sidebar.bind_links(
links=(link_upload_version,),
sources=(
'documents:document_version_list', 'documents:upload_version',
'documents:document_version_revert'
)
)
post_upgrade.connect(
initialize_periodic_tasks,
dispatch_uid='initialize_periodic_tasks'
)
post_initial_setup.connect(
create_default_document_source,
dispatch_uid='create_default_document_source'
)
post_version_upload.connect(
copy_transformations_to_version,
dispatch_uid='copy_transformations_to_version'
)