From 8aa56dc11c57b69e403ab9eba22950b9f516c912 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Wed, 25 Jan 2012 21:51:35 -0400 Subject: [PATCH 1/5] Fix typo --- apps/sources/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/sources/views.py b/apps/sources/views.py index f116dfad64..6f574fe75f 100644 --- a/apps/sources/views.py +++ b/apps/sources/views.py @@ -206,7 +206,7 @@ def upload_interactive(request, source_type=None, source_id=None, document_pk=No expand = False else: if staging_folder.uncompress == SOURCE_UNCOMPRESS_CHOICE_ASK: - expand = form.cleaned_dataget('expand') + expand = form.cleaned_data.get('expand') else: if staging_folder.uncompress == SOURCE_UNCOMPRESS_CHOICE_Y: expand = True From 1d543cdd0adf751acf14908dcbaa64f572a6f67a Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Wed, 25 Jan 2012 22:35:55 -0400 Subject: [PATCH 2/5] Prevent database corruption on document saving error --- apps/sources/models.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/sources/models.py b/apps/sources/models.py index d7fb8f7161..77830f86a9 100644 --- a/apps/sources/models.py +++ b/apps/sources/models.py @@ -7,6 +7,7 @@ from django.utils.translation import ugettext_lazy as _ from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes import generic from django.core.exceptions import ValidationError +from django.db import transaction from converter.api import get_available_transformations_choices from converter.literals import DIMENSION_SEPARATOR @@ -70,6 +71,7 @@ class BaseModel(models.Model): file_object.close() + @transaction.commit_on_success def upload_single_file(self, file_object, filename=None, use_file_name=False, document_type=None, metadata_dict_list=None, user=None, document=None, new_version_data=None): if not document: document = Document() From 3d0865b93f8a92e007ad0d354f6b2506b5c0731e Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Wed, 25 Jan 2012 23:02:27 -0400 Subject: [PATCH 3/5] Fix uploading of compressed files --- apps/sources/models.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/apps/sources/models.py b/apps/sources/models.py index 77830f86a9..5f7cbeccd6 100644 --- a/apps/sources/models.py +++ b/apps/sources/models.py @@ -1,6 +1,7 @@ from __future__ import absolute_import from ast import literal_eval +import logging from django.db import models from django.utils.translation import ugettext_lazy as _ @@ -28,6 +29,8 @@ from .literals import (SOURCE_CHOICES, SOURCE_CHOICES_PLURAL, SOURCE_UNCOMPRESS_CHOICE_Y) from .compressed_file import CompressedFile, NotACompressedFile +logger = logging.getLogger(__name__) + class BaseModel(models.Model): title = models.CharField(max_length=64, verbose_name=_(u'title')) @@ -57,19 +60,26 @@ class BaseModel(models.Model): return SourceTransformation.transformations.get_for_object_as_list(self) def upload_file(self, file_object, filename=None, use_file_name=False, document_type=None, expand=False, metadata_dict_list=None, user=None, document=None, new_version_data=None): + is_compressed = None + if expand: try: cf = CompressedFile(file_object) for fp in cf.children(): - self.upload_single_file(fp, None, document_type, metadata_dict_list, user) + self.upload_single_file(file_object=fp, filename=None, document_type=document_type, metadata_dict_list=metadata_dict_list, user=user) fp.close() except NotACompressedFile: - self.upload_single_file(file_object, filename, document_type, metadata_dict_list, user) + is_compressed = False + logging.debug('Exception: NotACompressedFile') + self.upload_single_file(file_object=file_object, filename=filename, document_type=document_type, metadata_dict_list=metadata_dict_list, user=user) + else: + is_compressed = True else: self.upload_single_file(file_object, filename, use_file_name, document_type, metadata_dict_list, user, document, new_version_data) file_object.close() + return {'is_compressed': is_compressed} @transaction.commit_on_success def upload_single_file(self, file_object, filename=None, use_file_name=False, document_type=None, metadata_dict_list=None, user=None, document=None, new_version_data=None): From 7d1873588278edbf8855ee966bc48b76bbaebb57 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Wed, 25 Jan 2012 23:02:42 -0400 Subject: [PATCH 4/5] Improve feedback messages when uploading files --- apps/sources/views.py | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/apps/sources/views.py b/apps/sources/views.py index 6f574fe75f..900c3aba50 100644 --- a/apps/sources/views.py +++ b/apps/sources/views.py @@ -150,7 +150,7 @@ def upload_interactive(request, source_type=None, source_id=None, document_pk=No new_filename = get_form_filename(form) - web_form.upload_file(request.FILES['file'], + result = web_form.upload_file(request.FILES['file'], new_filename, use_file_name=form.cleaned_data.get('use_file_name', False), document_type=document_type, expand=expand, @@ -160,10 +160,18 @@ def upload_interactive(request, source_type=None, source_id=None, document_pk=No new_version_data=form.cleaned_data.get('new_version_data') ) if document: - messages.success(request, _(u'Document version uploaded successfully.')) + messages.success(request, _(u'New document version uploaded successfully.')) return HttpResponseRedirect(reverse('document_view_simple', args=[document.pk])) else: - messages.success(request, _(u'Document uploaded successfully.')) + if result['is_compressed'] == None: + messages.success(request, _(u'File uploaded successfully.')) + + if result['is_compressed'] == True: + messages.success(request, _(u'File uncompressed successfully and uploaded as individual files.')) + + if result['is_compressed'] == False: + messages.warning(request, _(u'File was not a compressed file, uploaded as it was.')) + return HttpResponseRedirect(request.get_full_path()) except Exception, e: if settings.DEBUG: @@ -215,7 +223,7 @@ def upload_interactive(request, source_type=None, source_id=None, document_pk=No new_filename = get_form_filename(form) - staging_folder.upload_file(staging_file.upload(), + result = staging_folder.upload_file(staging_file.upload(), new_filename, use_file_name=form.cleaned_data.get('use_file_name', False), document_type=document_type, expand=expand, @@ -227,7 +235,14 @@ def upload_interactive(request, source_type=None, source_id=None, document_pk=No if document: messages.success(request, _(u'Document version from staging file: %s, uploaded successfully.') % staging_file.filename) else: - messages.success(request, _(u'Staging file: %s, uploaded successfully.') % staging_file.filename) + if result['is_compressed'] == None: + messages.success(request, _(u'Staging file: %s, uploaded successfully.') % staging_file.filename) + + if result['is_compressed'] == True: + messages.success(request, _(u'Staging file: %s, uncompressed successfully and uploaded as individual files.') % staging_file.filename) + + if result['is_compressed'] == False: + messages.warning(request, _(u'Staging file: %s, was not compressed, uploaded as a single file.') % staging_file.filename) if staging_folder.delete_after_upload: transformations, errors = staging_folder.get_transformation_list() From c38d10ebf500d546ccc891d58af0782603805d43 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Wed, 25 Jan 2012 23:52:38 -0400 Subject: [PATCH 5/5] Proper redirection on document deletion --- apps/documents/views.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/documents/views.py b/apps/documents/views.py index af77a2f1aa..e6c10db735 100644 --- a/apps/documents/views.py +++ b/apps/documents/views.py @@ -186,9 +186,11 @@ def document_view(request, document_id, advanced=False): def document_delete(request, document_id=None, document_id_list=None): + post_action_redirect = None + if document_id: documents = [get_object_or_404(Document, pk=document_id)] - post_action_redirect = reverse('document_list') + post_action_redirect = reverse('document_list_recent') elif document_id_list: documents = [get_object_or_404(Document, pk=document_id) for document_id in document_id_list.split(',')] else: @@ -200,8 +202,6 @@ def document_delete(request, document_id=None, document_id_list=None): except PermissionDenied: documents = AccessEntry.objects.filter_objects_by_access(PERMISSION_DOCUMENT_DELETE, request.user, documents, exception_on_empty=True) - post_action_redirect = None - previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', '/'))) next = request.POST.get('next', request.GET.get('next', post_action_redirect if post_action_redirect else request.META.get('HTTP_REFERER', '/')))