Update the staging folder file image API end point to work in the same way the document page image API works.
495 lines
18 KiB
Python
495 lines
18 KiB
Python
from __future__ import absolute_import, unicode_literals
|
|
|
|
from datetime import timedelta
|
|
|
|
from kombu import Exchange, Queue
|
|
|
|
from django.core.urlresolvers import reverse_lazy
|
|
from django.utils.translation import ugettext_lazy as _
|
|
|
|
from acls import ModelPermission
|
|
from acls.links import link_acl_list
|
|
from acls.permissions import permission_acl_edit, permission_acl_view
|
|
from common import (
|
|
MayanAppConfig, MissingItem, menu_facet, menu_main, menu_object,
|
|
menu_secondary, menu_setup, menu_sidebar, menu_multi_item, menu_tools
|
|
)
|
|
from common.classes import DashboardWidget, ModelAttribute
|
|
from common.signals import post_initial_setup
|
|
from common.widgets import two_state_template
|
|
from converter.links import link_transformation_list
|
|
from converter.permissions import (
|
|
permission_transformation_create,
|
|
permission_transformation_delete, permission_transformation_edit,
|
|
permission_transformation_view,
|
|
)
|
|
from events.links import link_events_for_object
|
|
from events.permissions import permission_events_view
|
|
from mayan.celery import app
|
|
from navigation import SourceColumn
|
|
from rest_api.classes import APIEndPoint
|
|
from statistics.classes import StatisticNamespace, CharJSLine
|
|
|
|
from .handlers import create_default_document_type
|
|
from .links import (
|
|
link_clear_image_cache, link_document_clear_transformations,
|
|
link_document_delete, link_document_document_type_edit,
|
|
link_document_multiple_document_type_edit, link_document_download,
|
|
link_document_edit, link_document_list, link_document_list_deleted,
|
|
link_document_list_recent, link_document_multiple_delete,
|
|
link_document_multiple_trash, link_document_multiple_clear_transformations,
|
|
link_document_multiple_download, link_document_multiple_restore,
|
|
link_document_multiple_update_page_count,
|
|
link_document_page_navigation_first, link_document_page_navigation_last,
|
|
link_document_page_navigation_next, link_document_page_navigation_previous,
|
|
link_document_page_return, link_document_page_rotate_left,
|
|
link_document_page_rotate_right, link_document_page_view,
|
|
link_document_page_view_reset, link_document_page_zoom_in,
|
|
link_document_page_zoom_out, link_document_pages, link_document_preview,
|
|
link_document_print, link_document_properties, link_document_restore,
|
|
link_document_trash, link_document_type_create, link_document_type_delete,
|
|
link_document_type_edit, link_document_type_filename_create,
|
|
link_document_type_filename_delete, link_document_type_filename_edit,
|
|
link_document_type_filename_list, link_document_type_list,
|
|
link_document_type_setup, link_document_update_page_count,
|
|
link_document_version_download, link_document_version_list,
|
|
link_document_version_revert, link_trash_can_empty
|
|
)
|
|
from .literals import (
|
|
CHECK_DELETE_PERIOD_INTERVAL, CHECK_TRASH_PERIOD_INTERVAL,
|
|
DELETE_STALE_STUBS_INTERVAL
|
|
)
|
|
from .menus import menu_documents
|
|
from .permissions import (
|
|
permission_document_create, permission_document_delete,
|
|
permission_document_download, permission_document_edit,
|
|
permission_document_new_version, permission_document_print,
|
|
permission_document_properties_edit, permission_document_restore,
|
|
permission_document_trash, permission_document_version_revert,
|
|
permission_document_view
|
|
)
|
|
# Just import to initialize the search models
|
|
from .search import document_search, document_page_search # NOQA
|
|
from .statistics import (
|
|
new_documents_per_month, new_document_pages_per_month,
|
|
new_document_pages_this_month, new_documents_this_month,
|
|
new_document_versions_per_month, total_document_per_month,
|
|
total_document_page_per_month, total_document_version_per_month
|
|
)
|
|
from .widgets import DocumentThumbnailWidget, DocumentPageThumbnailWidget
|
|
|
|
|
|
class DocumentsApp(MayanAppConfig):
|
|
name = 'documents'
|
|
test = True
|
|
verbose_name = _('Documents')
|
|
|
|
def ready(self):
|
|
super(DocumentsApp, self).ready()
|
|
from actstream import registry
|
|
|
|
APIEndPoint(app=self, version_string='1')
|
|
|
|
DeletedDocument = self.get_model('DeletedDocument')
|
|
Document = self.get_model('Document')
|
|
DocumentPage = self.get_model('DocumentPage')
|
|
DocumentPageResult = self.get_model('DocumentPageResult')
|
|
DocumentType = self.get_model('DocumentType')
|
|
DocumentTypeFilename = self.get_model('DocumentTypeFilename')
|
|
DocumentVersion = self.get_model('DocumentVersion')
|
|
|
|
DashboardWidget(
|
|
func=new_document_pages_this_month, icon='fa fa-calendar',
|
|
label=_('New pages this month'),
|
|
link=reverse_lazy(
|
|
'statistics:statistic_detail',
|
|
args=('new-document-pages-per-month',)
|
|
)
|
|
)
|
|
DashboardWidget(
|
|
func=new_documents_this_month, icon='fa fa-calendar',
|
|
label=_('New documents this month'),
|
|
link=reverse_lazy(
|
|
'statistics:statistic_detail',
|
|
args=('new-documents-per-month',)
|
|
)
|
|
)
|
|
|
|
DashboardWidget(
|
|
icon='fa fa-file', queryset=Document.objects.all(),
|
|
label=_('Total documents'),
|
|
link=reverse_lazy('documents:document_list')
|
|
)
|
|
|
|
DashboardWidget(
|
|
icon='fa fa-book', queryset=DocumentType.objects.all(),
|
|
label=_('Document types'),
|
|
link=reverse_lazy('documents:document_type_list')
|
|
)
|
|
|
|
DashboardWidget(
|
|
icon='fa fa-trash', queryset=DeletedDocument.objects.all(),
|
|
label=_('Documents in trash'),
|
|
link=reverse_lazy('documents:document_list_deleted')
|
|
)
|
|
|
|
MissingItem(
|
|
label=_('Create a document type'),
|
|
description=_(
|
|
'Every uploaded document must be assigned a document type, '
|
|
'it is the basic way Mayan EDMS categorizes documents.'
|
|
), condition=lambda: not DocumentType.objects.exists(),
|
|
view='documents:document_type_list'
|
|
)
|
|
|
|
ModelAttribute(
|
|
Document, label=_('Label'), name='label', type_name='field'
|
|
)
|
|
|
|
ModelAttribute(
|
|
Document,
|
|
description=_('The MIME type of any of the versions of a document'),
|
|
label=_('MIME type'), name='versions__mimetype', type_name='field'
|
|
)
|
|
|
|
ModelPermission.register(
|
|
model=Document, permissions=(
|
|
permission_acl_edit, permission_acl_view,
|
|
permission_document_delete, permission_document_download,
|
|
permission_document_edit, permission_document_new_version,
|
|
permission_document_print, permission_document_properties_edit,
|
|
permission_document_restore, permission_document_trash,
|
|
permission_document_version_revert, permission_document_view,
|
|
permission_events_view, permission_transformation_create,
|
|
permission_transformation_delete,
|
|
permission_transformation_edit, permission_transformation_view,
|
|
)
|
|
)
|
|
|
|
ModelPermission.register(
|
|
model=DocumentType, permissions=(permission_document_create,)
|
|
)
|
|
|
|
ModelPermission.register_proxy(
|
|
source=Document, model=DocumentType,
|
|
)
|
|
|
|
ModelPermission.register_inheritance(
|
|
model=Document, related='document_type',
|
|
)
|
|
|
|
ModelPermission.register_inheritance(
|
|
model=DocumentVersion, related='document',
|
|
)
|
|
|
|
ModelPermission.register_inheritance(
|
|
model=DocumentPage, related='document',
|
|
)
|
|
|
|
# Document and document page thumbnail widget
|
|
document_thumbnail_widget = DocumentThumbnailWidget()
|
|
document_page_thumbnail_widget = DocumentPageThumbnailWidget()
|
|
|
|
SourceColumn(
|
|
source=Document, label=_('Thumbnail'),
|
|
func=lambda context: document_thumbnail_widget.render(
|
|
instance=context['object']
|
|
)
|
|
)
|
|
SourceColumn(
|
|
source=Document, label=_('Type'), attribute='document_type'
|
|
)
|
|
|
|
SourceColumn(
|
|
source=DocumentPage, label=_('Thumbnail'),
|
|
func=lambda context: document_page_thumbnail_widget.render(
|
|
instance=context['object']
|
|
)
|
|
)
|
|
|
|
SourceColumn(
|
|
source=DocumentPageResult, label=_('Thumbnail'),
|
|
func=lambda context: document_page_thumbnail_widget.render(
|
|
instance=context['object']
|
|
)
|
|
)
|
|
|
|
SourceColumn(
|
|
source=DocumentPageResult, label=_('Type'),
|
|
attribute='document_version.document.document_type'
|
|
)
|
|
|
|
SourceColumn(
|
|
source=DocumentType, label=_('Documents'),
|
|
func=lambda context: context['object'].get_document_count(
|
|
user=context['request'].user
|
|
)
|
|
)
|
|
|
|
SourceColumn(
|
|
source=DocumentTypeFilename, label=_('Enabled'),
|
|
func=lambda context: two_state_template(context['object'].enabled)
|
|
)
|
|
|
|
SourceColumn(
|
|
source=DeletedDocument, label=_('Thumbnail'),
|
|
func=lambda context: document_thumbnail_widget.render(
|
|
instance=context['object']
|
|
)
|
|
)
|
|
|
|
SourceColumn(
|
|
source=DeletedDocument, label=_('Type'), attribute='document_type'
|
|
)
|
|
SourceColumn(
|
|
source=DeletedDocument, label=_('Date time trashed'),
|
|
attribute='deleted_date_time'
|
|
)
|
|
|
|
SourceColumn(
|
|
source=DocumentVersion, label=_('Time and date'),
|
|
attribute='timestamp'
|
|
)
|
|
SourceColumn(
|
|
source=DocumentVersion, label=_('MIME type'),
|
|
attribute='mimetype'
|
|
)
|
|
SourceColumn(
|
|
source=DocumentVersion, label=_('Encoding'),
|
|
attribute='encoding'
|
|
)
|
|
SourceColumn(
|
|
source=DocumentVersion, label=_('Comment'),
|
|
attribute='comment'
|
|
)
|
|
|
|
app.conf.CELERYBEAT_SCHEDULE.update(
|
|
{
|
|
'task_check_delete_periods': {
|
|
'task': 'documents.tasks.task_check_delete_periods',
|
|
'schedule': timedelta(
|
|
seconds=CHECK_DELETE_PERIOD_INTERVAL
|
|
),
|
|
},
|
|
'task_check_trash_periods': {
|
|
'task': 'documents.tasks.task_check_trash_periods',
|
|
'schedule': timedelta(seconds=CHECK_TRASH_PERIOD_INTERVAL),
|
|
},
|
|
'task_delete_stubs': {
|
|
'task': 'documents.tasks.task_delete_stubs',
|
|
'schedule': timedelta(seconds=DELETE_STALE_STUBS_INTERVAL),
|
|
},
|
|
}
|
|
)
|
|
|
|
app.conf.CELERY_QUEUES.extend(
|
|
(
|
|
Queue(
|
|
'converter', Exchange('converter'),
|
|
routing_key='converter', delivery_mode=1
|
|
),
|
|
Queue(
|
|
'documents_periodic', Exchange('documents_periodic'),
|
|
routing_key='documents_periodic', delivery_mode=1
|
|
),
|
|
Queue('uploads', Exchange('uploads'), routing_key='uploads'),
|
|
)
|
|
)
|
|
|
|
app.conf.CELERY_ROUTES.update(
|
|
{
|
|
'documents.tasks.task_check_delete_periods': {
|
|
'queue': 'documents_periodic'
|
|
},
|
|
'documents.tasks.task_check_trash_periods': {
|
|
'queue': 'documents_periodic'
|
|
},
|
|
'documents.tasks.task_delete_stubs': {
|
|
'queue': 'documents_periodic'
|
|
},
|
|
'documents.tasks.task_clear_image_cache': {
|
|
'queue': 'tools'
|
|
},
|
|
'documents.tasks.task_generate_document_page_image': {
|
|
'queue': 'converter'
|
|
},
|
|
'documents.tasks.task_update_page_count': {
|
|
'queue': 'uploads'
|
|
},
|
|
'documents.tasks.task_upload_new_version': {
|
|
'queue': 'uploads'
|
|
},
|
|
}
|
|
)
|
|
|
|
menu_documents.bind_links(
|
|
links=(
|
|
link_document_list_recent, link_document_list,
|
|
link_document_list_deleted
|
|
)
|
|
)
|
|
|
|
menu_main.bind_links(links=(menu_documents,), position=0)
|
|
|
|
menu_setup.bind_links(links=(link_document_type_setup,))
|
|
menu_tools.bind_links(links=(link_clear_image_cache,))
|
|
|
|
# Document type links
|
|
menu_object.bind_links(
|
|
links=(
|
|
link_document_type_edit, link_document_type_filename_list,
|
|
link_acl_list, link_document_type_delete
|
|
), sources=(DocumentType,)
|
|
)
|
|
menu_object.bind_links(
|
|
links=(
|
|
link_document_type_filename_edit,
|
|
link_document_type_filename_delete
|
|
), sources=(DocumentTypeFilename,)
|
|
)
|
|
menu_secondary.bind_links(
|
|
links=(link_document_type_list, link_document_type_create),
|
|
sources=(
|
|
DocumentType, 'documents:document_type_create',
|
|
'documents:document_type_list'
|
|
)
|
|
)
|
|
menu_sidebar.bind_links(
|
|
links=(link_document_type_filename_create,),
|
|
sources=(
|
|
DocumentTypeFilename, 'documents:document_type_filename_list',
|
|
'documents:document_type_filename_create'
|
|
)
|
|
)
|
|
menu_sidebar.bind_links(
|
|
links=(link_trash_can_empty,),
|
|
sources=(
|
|
'documents:document_list_deleted', 'documents:trash_can_empty'
|
|
)
|
|
)
|
|
|
|
# Document object links
|
|
menu_object.bind_links(
|
|
links=(
|
|
link_document_edit, link_document_document_type_edit,
|
|
link_document_print, link_document_trash,
|
|
link_document_download, link_document_clear_transformations,
|
|
link_document_update_page_count
|
|
), sources=(Document,)
|
|
)
|
|
menu_object.bind_links(
|
|
links=(link_document_restore, link_document_delete),
|
|
sources=(DeletedDocument,)
|
|
)
|
|
|
|
# Document facet links
|
|
menu_facet.bind_links(links=(link_acl_list,), sources=(Document,))
|
|
menu_facet.bind_links(
|
|
links=(link_document_preview,), sources=(Document,), position=0
|
|
)
|
|
menu_facet.bind_links(
|
|
links=(link_document_properties,), sources=(Document,), position=2
|
|
)
|
|
menu_facet.bind_links(
|
|
links=(link_events_for_object, link_document_version_list,),
|
|
sources=(Document,), position=2
|
|
)
|
|
menu_facet.bind_links(links=(link_document_pages,), sources=(Document,))
|
|
|
|
# Document actions
|
|
menu_object.bind_links(
|
|
links=(
|
|
link_document_version_revert, link_document_version_download
|
|
),
|
|
sources=(DocumentVersion,)
|
|
)
|
|
menu_multi_item.bind_links(
|
|
links=(
|
|
link_document_multiple_clear_transformations,
|
|
link_document_multiple_trash, link_document_multiple_download,
|
|
link_document_multiple_update_page_count,
|
|
link_document_multiple_document_type_edit
|
|
), sources=(Document,)
|
|
)
|
|
menu_multi_item.bind_links(
|
|
links=(
|
|
link_document_multiple_restore, link_document_multiple_delete
|
|
), sources=(DeletedDocument,)
|
|
)
|
|
|
|
# Document pages
|
|
menu_facet.bind_links(
|
|
links=(
|
|
link_document_page_rotate_left,
|
|
link_document_page_rotate_right, link_document_page_zoom_in,
|
|
link_document_page_zoom_out, link_document_page_view_reset
|
|
), sources=('documents:document_page_view',)
|
|
)
|
|
menu_facet.bind_links(
|
|
links=(link_document_page_return, link_document_page_view),
|
|
sources=(DocumentPage,)
|
|
)
|
|
menu_facet.bind_links(
|
|
links=(
|
|
link_document_page_navigation_first,
|
|
link_document_page_navigation_previous,
|
|
link_document_page_navigation_next,
|
|
link_document_page_navigation_last, link_transformation_list
|
|
), sources=(DocumentPage,)
|
|
)
|
|
menu_object.bind_links(
|
|
links=(link_transformation_list,), sources=(DocumentPage,)
|
|
)
|
|
|
|
namespace = StatisticNamespace(slug='documents', label=_('Documents'))
|
|
namespace.add_statistic(
|
|
slug='new-documents-per-month',
|
|
label=_('New documents per month'),
|
|
func=new_documents_per_month,
|
|
renderer=CharJSLine,
|
|
minute='0'
|
|
)
|
|
namespace.add_statistic(
|
|
slug='new-document-versions-per-month',
|
|
label=_('New document versions per month'),
|
|
func=new_document_versions_per_month,
|
|
renderer=CharJSLine,
|
|
minute='0'
|
|
)
|
|
namespace.add_statistic(
|
|
slug='new-document-pages-per-month',
|
|
label=_('New document pages per month'),
|
|
func=new_document_pages_per_month,
|
|
renderer=CharJSLine,
|
|
minute='0'
|
|
)
|
|
namespace.add_statistic(
|
|
slug='total-documents-at-each-month',
|
|
label=_('Total documents at each month'),
|
|
func=total_document_per_month,
|
|
renderer=CharJSLine,
|
|
minute='0'
|
|
)
|
|
namespace.add_statistic(
|
|
slug='total-document-versions-at-each-month',
|
|
label=_('Total document versions at each month'),
|
|
func=total_document_version_per_month,
|
|
renderer=CharJSLine,
|
|
minute='0'
|
|
)
|
|
namespace.add_statistic(
|
|
slug='total-document-pages-at-each-month',
|
|
label=_('Total document pages at each month'),
|
|
func=total_document_page_per_month,
|
|
renderer=CharJSLine,
|
|
minute='0'
|
|
)
|
|
|
|
post_initial_setup.connect(
|
|
create_default_document_type,
|
|
dispatch_uid='create_default_document_type'
|
|
)
|
|
|
|
registry.register(DeletedDocument)
|
|
registry.register(Document)
|