Initial commit of new document upload workflow which allows for document promises to be returned after POST request, gh-issue #194. Add new signal when a document is uploaded and finally ready, gh-issue #193 and gh-issue #213.

This commit is contained in:
Roberto Rosario
2015-07-05 03:33:27 -04:00
parent 8f30932b6f
commit 8cc05bbefb
14 changed files with 204 additions and 110 deletions
+5 -1
View File
@@ -10,11 +10,14 @@ from common.signals import post_initial_setup
from common.utils import encapsulate
from converter.links import link_transformation_list
from documents.models import Document
from documents.signals import post_version_upload
from navigation import SourceColumn
from rest_api.classes import APIEndPoint
from .classes import StagingFile
from .handlers import create_default_document_source
from .handlers import (
copy_transformations_to_version, create_default_document_source
)
from .links import (
link_document_create_multiple, link_document_create_siblings,
link_setup_sources, link_setup_source_create_imap_email,
@@ -50,3 +53,4 @@ class SourcesApp(MayanAppConfig):
menu_sidebar.bind_links(links=[link_upload_version], sources=['documents:document_version_list', 'documents:upload_version', 'documents:document_version_revert'])
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')
+8
View File
@@ -2,9 +2,17 @@ from __future__ import unicode_literals
from django.utils.translation import ugettext_lazy as _
from converter.models import Transformation
from .literals import SOURCE_UNCOMPRESS_CHOICE_ASK
from .models import WebFormSource
def create_default_document_source(sender, **kwargs):
WebFormSource.objects.create(title=_('Default'), uncompress=SOURCE_UNCOMPRESS_CHOICE_ASK)
def copy_transformations_to_version(sender, **kwargs):
instance = kwargs['instance']
Transformation.objects.copy(source=instance.document, targets=instance.pages.all())
+27 -13
View File
@@ -15,6 +15,7 @@ from django.utils.translation import ugettext_lazy as _
from model_utils.managers import InheritanceManager
from common.compressed_files import CompressedFile, NotACompressedFile
from converter.literals import DIMENSION_SEPARATOR
from converter.models import Transformation
from djcelery.models import PeriodicTask, IntervalSchedule
@@ -50,22 +51,35 @@ class Source(models.Model):
def fullname(self):
return ' '.join([self.class_fullname(), '"%s"' % self.title])
def upload_document(self, file_object, label, description=None, document_type=None, expand=False, language=None, metadata_dict_list=None, user=None):
new_versions = Document.objects.new_document(
description=description,
document_type=document_type or self.document_type,
expand=expand,
file_object=file_object,
label=label,
language=language,
user=user
def _upload_document(self, document_type, file_object, label, language, user, description=None, metadata_dict_list=None):
document = document_type.new_document(
file_object=file_object, label=label, description=description,
language=language, _user=user
)
for new_version in new_versions:
Transformation.objects.copy(source=Source.objects.get_subclass(pk=self.pk), targets=new_version.pages.all())
Transformation.objects.get_for_model(document).delete()
Transformation.objects.copy(source=Source.objects.get_subclass(pk=self.pk), targets=Document.objects.filter(pk=document.pk))
if metadata_dict_list:
save_metadata_list(metadata_dict_list, new_version.document, create=True)
if metadata_dict_list:
save_metadata_list(metadata_dict_list, document, create=True)
# TODO: Rename this method to 'handle_upload' or similar
def upload_document(self, file_object, label, description=None, document_type=None, expand=False, language=None, metadata_dict_list=None, user=None):
if not document_type:
document_type = self.document_type
if expand:
try:
compressed_file = CompressedFile(file_object)
for compressed_file_child in compressed_file.children():
self._upload_document(document_type=document_type, file_object=compressed_file_child, description=description, label=unicode(compressed_file_child), language=language or setting_language.value, metadata_dict_list=metadata_dict_list, user=user)
compressed_file_child.close()
except NotACompressedFile:
logging.debug('Exception: NotACompressedFile')
self._upload_document(document_type=document_type, file_object=file_object, description=description, label=label, language=language or setting_language.value, metadata_dict_list=metadata_dict_list, user=user)
else:
self._upload_document(document_type=document_type, file_object=file_object, description=description, label=label, language=language or setting_language.value, metadata_dict_list=metadata_dict_list, user=user)
def get_upload_file_object(self, form_data):
pass