diff --git a/apps/documents/staging.py b/apps/documents/staging.py index cdd753dbcb..1442de81b5 100644 --- a/apps/documents/staging.py +++ b/apps/documents/staging.py @@ -1,8 +1,11 @@ +import errno import os from django.conf import settings from django.core.exceptions import ObjectDoesNotExist from django.core.files.uploadedfile import InMemoryUploadedFile, SimpleUploadedFile +from django.utils.translation import ugettext + from documents.conf.settings import STAGING_DIRECTORY @@ -49,8 +52,12 @@ class StagingFile(object): raise AttributeError, name def upload(self): - return SimpleUploadedFile(name=self.filename, content=open(self.filepath).read()) - + try: + return SimpleUploadedFile(name=self.filename, content=open(self.filepath).read()) + except Exception, exc: + raise Exception(ugettext(u'Unable to upload staging file: %s') % exc) + + #return InMemoryUploadedFile( # file=open(self.filepath, 'r'), # field_name='', @@ -59,3 +66,12 @@ class StagingFile(object): # size=os.path.getsize(self.filepath), # charset=None, #) + + def delete(self): + try: + os.unlink(self.filepath) + except OSError, exc: + if exc.errno == errno.ENOENT: + pass + else: + raise OSError(ugettext(u'Unable to delete staging file: %s') % exc) diff --git a/apps/documents/views.py b/apps/documents/views.py index 78bf04049a..745cd37f68 100644 --- a/apps/documents/views.py +++ b/apps/documents/views.py @@ -14,6 +14,9 @@ from forms import DocumentTypeSelectForm, DocumentCreateWizard, \ from staging import StagingFile +from documents.conf.settings import DELETE_STAGING_FILE_AFTER_UPLOAD + + def document_list(request): return object_list( request, @@ -175,17 +178,27 @@ def document_create_from_staging(request, file_id, document_type_id, multiple=Tr document_type = get_object_or_404(DocumentType, pk=document_type_id) staging_file = StagingFile.get(id=int(file_id)) - document = Document(file=staging_file.upload(), document_type=document_type) - document.save() - - #TODO: need to grab url query string from HTTP_REFERER - _save_metadata_from_request(request, document) - messages.success(request, _(u'Staging file: %s, uploaded successfully.') % staging_file.filename) try: - document.create_fs_links() + document = Document(file=staging_file.upload(), document_type=document_type) + document.save() except Exception, e: messages.error(request, e) - + else: + #TODO: need to grab url query string from HTTP_REFERER + _save_metadata_from_request(request, document) + messages.success(request, _(u'Staging file: %s, uploaded successfully.') % staging_file.filename) + try: + document.create_fs_links() + except Exception, e: + messages.error(request, e) + + if DELETE_STAGING_FILE_AFTER_UPLOAD: + try: + staging_file.delete() + messages.success(request, _(u'Staging file: %s, deleted successfully.') % staging_file.filename) + except Exception, e: + messages.error(request, e) + if multiple: return HttpResponseRedirect(request.META['HTTP_REFERER']) else: