Reverted back to previous upload method, but now using SimpleUploadedFile to upload staging files
This commit is contained in:
@@ -12,7 +12,7 @@ document_view = {'text':_('details'), 'view':'document_view', 'args':'object.id'
|
|||||||
document_delete = {'text':_('delete'), 'view':'document_delete', 'args':'object.id', 'famfam':'page_delete'}
|
document_delete = {'text':_('delete'), 'view':'document_delete', 'args':'object.id', 'famfam':'page_delete'}
|
||||||
document_edit = {'text':_('edit'), 'view':'document_edit', 'args':'object.id', 'famfam':'page_edit'}
|
document_edit = {'text':_('edit'), 'view':'document_edit', 'args':'object.id', 'famfam':'page_edit'}
|
||||||
|
|
||||||
document_create_from_staging = {'text':_('select staging'), 'view':'document_create_from_staging', 'args':{'file_id':'object.id', 'document_type_id': 'document_type_id'}, 'famfam':'page_add'}
|
document_create_from_staging = {'text':_('upload file'), 'view':'document_create_from_staging', 'args':{'file_id':'object.id', 'document_type_id': 'document_type_id'}, 'famfam':'page_add'}
|
||||||
|
|
||||||
|
|
||||||
register_links(Document, [document_view, document_edit, document_delete])
|
register_links(Document, [document_view, document_edit, document_delete])
|
||||||
@@ -24,6 +24,6 @@ register_links(StagingFile, [document_create_from_staging])
|
|||||||
|
|
||||||
register_menu([
|
register_menu([
|
||||||
{'text':_('documents'), 'view':'document_list', 'links':[
|
{'text':_('documents'), 'view':'document_list', 'links':[
|
||||||
document_list#, document_create
|
document_list
|
||||||
],'famfam':'page','position':4}])
|
],'famfam':'page','position':4}])
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
|
|
||||||
from models import MetadataType, DocumentType, Document, \
|
from models import MetadataType, DocumentType, Document, \
|
||||||
DocumentTypeMetadataType, DocumentMetadata, DocumentTypeFilename, \
|
DocumentTypeMetadataType, DocumentMetadata, DocumentTypeFilename#, \
|
||||||
DocumentFile
|
# DocumentFile
|
||||||
|
|
||||||
|
|
||||||
class MetadataTypeAdmin(admin.ModelAdmin):
|
class MetadataTypeAdmin(admin.ModelAdmin):
|
||||||
@@ -34,15 +34,16 @@ class DocumentMetadataInline(admin.StackedInline):
|
|||||||
allow_add = True
|
allow_add = True
|
||||||
|
|
||||||
|
|
||||||
class DocumentFileInline(admin.StackedInline):
|
#class DocumentFileInline(admin.StackedInline):
|
||||||
model = DocumentFile
|
# model = DocumentFile
|
||||||
extra = 1
|
# extra = 1
|
||||||
classes = ('collapse-open',)
|
# classes = ('collapse-open',)
|
||||||
allow_add = True
|
# allow_add = True
|
||||||
|
|
||||||
|
|
||||||
class DocumentAdmin(admin.ModelAdmin):
|
class DocumentAdmin(admin.ModelAdmin):
|
||||||
inlines = [DocumentFileInline, DocumentMetadataInline,]
|
#inlines = [DocumentFileInline]#, DocumentMetadataInline,]
|
||||||
|
inlines = [DocumentMetadataInline]
|
||||||
list_display = ('uuid',)
|
list_display = ('uuid',)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -9,14 +9,9 @@ from common.wizard import BoundFormWizard
|
|||||||
from common.utils import urlquote
|
from common.utils import urlquote
|
||||||
from common.forms import DetailForm
|
from common.forms import DetailForm
|
||||||
|
|
||||||
from models import Document, DocumentType, DocumentTypeMetadataType, DocumentFile
|
from models import Document, DocumentType, DocumentTypeMetadataType
|
||||||
|
|
||||||
from documents.conf.settings import AVAILABLE_FUNCTIONS
|
from documents.conf.settings import AVAILABLE_FUNCTIONS
|
||||||
|
|
||||||
|
|
||||||
class DocumentFileForm(forms.ModelForm):
|
|
||||||
class Meta:
|
|
||||||
model = DocumentFile
|
|
||||||
|
|
||||||
|
|
||||||
class DocumentForm(forms.ModelForm):
|
class DocumentForm(forms.ModelForm):
|
||||||
|
|||||||
@@ -24,12 +24,11 @@ if SLUGIFY_PATH == False:
|
|||||||
|
|
||||||
|
|
||||||
def get_filename_from_uuid(instance, filename, directory=STORAGE_DIRECTORY_NAME):
|
def get_filename_from_uuid(instance, filename, directory=STORAGE_DIRECTORY_NAME):
|
||||||
#populate_file_extension_and_mimetype(instance, filename)
|
populate_file_extension_and_mimetype(instance, filename)
|
||||||
stem, extension = os.path.splitext(filename)
|
stem, extension = os.path.splitext(filename)
|
||||||
return '%s/%s%s' % (directory, instance.uuid, extension)
|
return '%s/%s%s' % (directory, instance.uuid, extension)
|
||||||
|
|
||||||
def populate_file_extension_and_mimetype(instance):#, filename):
|
def populate_file_extension_and_mimetype(instance, filename):
|
||||||
filename = instance.file.name
|
|
||||||
# First populate the file extension and mimetype
|
# First populate the file extension and mimetype
|
||||||
instance.file_mimetype, encoding = mimetypes.guess_type(filename)
|
instance.file_mimetype, encoding = mimetypes.guess_type(filename)
|
||||||
if not instance.file_mimetype:
|
if not instance.file_mimetype:
|
||||||
@@ -46,19 +45,32 @@ class DocumentType(models.Model):
|
|||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
class DocumentFile(models.Model):
|
|
||||||
file = models.FileField(upload_to=get_filename_from_uuid)
|
class Document(models.Model):
|
||||||
|
""" Minimum fields for a document entry.
|
||||||
|
Inherit this model to customise document metadata, see BasicDocument for an example.
|
||||||
|
"""
|
||||||
|
document_type = models.ForeignKey(DocumentType, verbose_name=_(u'document type'))
|
||||||
|
file = models.FileField(upload_to=get_filename_from_uuid, blank=True, null=True)
|
||||||
|
uuid = models.CharField(max_length=36, default=UUID_FUNCTION(), blank=True, editable=False)
|
||||||
file_mimetype = models.CharField(max_length=50, default='', editable=False)
|
file_mimetype = models.CharField(max_length=50, default='', editable=False)
|
||||||
file_filename = models.CharField(max_length=64, default='', editable=False)
|
file_filename = models.CharField(max_length=64, default='', editable=False)
|
||||||
file_extension = models.CharField(max_length=10, default='', editable=False)
|
file_extension = models.CharField(max_length=10, default='', editable=False)
|
||||||
|
date_added = models.DateTimeField(verbose_name=_(u'added'), auto_now_add=True)
|
||||||
|
date_updated = models.DateTimeField(verbose_name=_(u'updated'), auto_now=True)
|
||||||
checksum = models.TextField(blank=True, null=True, verbose_name=_(u'checksum'), editable=False)
|
checksum = models.TextField(blank=True, null=True, verbose_name=_(u'checksum'), editable=False)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = _(u'document file')
|
verbose_name = _(u'document')
|
||||||
verbose_name_plural = _(u'documents files')
|
verbose_name_plural = _(u'documents')
|
||||||
|
ordering = ['-date_updated', '-date_added']
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return self.id
|
return self.uuid
|
||||||
|
|
||||||
|
@models.permalink
|
||||||
|
def get_absolute_url(self):
|
||||||
|
return ('document_view', [self.id])
|
||||||
|
|
||||||
def update_checksum(self, save=True):
|
def update_checksum(self, save=True):
|
||||||
self.checksum = unicode(CHECKSUM_FUNCTION(self.file.read()))
|
self.checksum = unicode(CHECKSUM_FUNCTION(self.file.read()))
|
||||||
@@ -67,12 +79,11 @@ class DocumentFile(models.Model):
|
|||||||
|
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
self.update_checksum(save=False)
|
self.update_checksum(save=False)
|
||||||
populate_file_extension_and_mimetype(self)
|
super(Document, self).save(*args, **kwargs)
|
||||||
super(DocumentFile, self).save(*args, **kwargs)
|
|
||||||
|
|
||||||
def delete(self, *args, **kwargs):
|
def delete(self, *args, **kwargs):
|
||||||
self.delete_fs_links()
|
self.delete_fs_links()
|
||||||
super(DocumentFile, self).delete(*args, **kwargs)
|
super(Document, self).delete(*args, **kwargs)
|
||||||
|
|
||||||
def calculate_fs_links(self):
|
def calculate_fs_links(self):
|
||||||
targets = []
|
targets = []
|
||||||
@@ -109,33 +120,6 @@ class DocumentFile(models.Model):
|
|||||||
else:
|
else:
|
||||||
raise OSError(ugettext(u'Unable to delete metadata indexing symbolic link: %s') % exc)
|
raise OSError(ugettext(u'Unable to delete metadata indexing symbolic link: %s') % exc)
|
||||||
|
|
||||||
|
|
||||||
class Document(models.Model):
|
|
||||||
""" Minimum fields for a document entry.
|
|
||||||
Inherit this model to customise document metadata, see BasicDocument for an example.
|
|
||||||
"""
|
|
||||||
document_type = models.ForeignKey(DocumentType, verbose_name=_(u'document type'))
|
|
||||||
#file = models.FileField(upload_to=get_filename_from_uuid, blank=True, null=True)
|
|
||||||
uuid = models.CharField(max_length=36, default=UUID_FUNCTION(), blank=True, editable=False)
|
|
||||||
#file_mimetype = models.CharField(max_length=50, default='', editable=False)
|
|
||||||
#file_filename = models.CharField(max_length=64, default='', editable=False)
|
|
||||||
#file_extension = models.CharField(max_length=10, default='', editable=False)
|
|
||||||
date_added = models.DateTimeField(verbose_name=_(u'added'), auto_now_add=True)
|
|
||||||
date_updated = models.DateTimeField(verbose_name=_(u'updated'), auto_now=True)
|
|
||||||
#checksum = models.TextField(blank=True, null=True, verbose_name=_(u'checksum'), editable=False)
|
|
||||||
document_file = models.ForeignKey(DocumentFile, blank=True, null=True, verbose_name=_('document file'))
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
verbose_name = _(u'document')
|
|
||||||
verbose_name_plural = _(u'documents')
|
|
||||||
ordering = ['-date_updated', '-date_added']
|
|
||||||
|
|
||||||
def __unicode__(self):
|
|
||||||
return self.uuid
|
|
||||||
|
|
||||||
@models.permalink
|
|
||||||
def get_absolute_url(self):
|
|
||||||
return ('document_view', [self.id])
|
|
||||||
|
|
||||||
available_functions_string = (_(u' Available functions: %s') % ','.join(['%s()' % name for name, function in AVAILABLE_FUNCTIONS.items()])) if AVAILABLE_FUNCTIONS else ''
|
available_functions_string = (_(u' Available functions: %s') % ','.join(['%s()' % name for name, function in AVAILABLE_FUNCTIONS.items()])) if AVAILABLE_FUNCTIONS else ''
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,10 @@
|
|||||||
import os
|
import os
|
||||||
import shutil
|
|
||||||
|
|
||||||
from django.core.exceptions import ObjectDoesNotExist
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core.files.storage import default_storage
|
from django.core.exceptions import ObjectDoesNotExist
|
||||||
|
from django.core.files.uploadedfile import InMemoryUploadedFile, SimpleUploadedFile
|
||||||
|
|
||||||
from documents.conf.settings import STAGING_DIRECTORY
|
from documents.conf.settings import STAGING_DIRECTORY
|
||||||
from documents.conf.settings import UUID_FUNCTION
|
|
||||||
from models import Document, get_filename_from_uuid
|
|
||||||
|
|
||||||
|
|
||||||
def get_all_files():
|
def get_all_files():
|
||||||
@@ -50,18 +47,15 @@ class StagingFile(object):
|
|||||||
return self._id
|
return self._id
|
||||||
else:
|
else:
|
||||||
raise AttributeError, name
|
raise AttributeError, name
|
||||||
|
|
||||||
|
def upload(self):
|
||||||
|
return SimpleUploadedFile(name=self.filename, content=open(self.filepath).read())
|
||||||
|
|
||||||
def upload(self, document_type):
|
#return InMemoryUploadedFile(
|
||||||
document = Document(document_type=document_type)
|
# file=open(self.filepath, 'r'),
|
||||||
document.save(save=False)
|
# field_name='',
|
||||||
print 'UUID', document.uuid
|
# name=self.filename,
|
||||||
tmp_filepath = os.path.join(settings.MEDIA_ROOT, UUID_FUNCTION())
|
# content_type='unknown',
|
||||||
#shutil.copy(self.filepath, tmp_filepath)
|
# size=os.path.getsize(self.filepath),
|
||||||
#document = Document(document_type=document_type,
|
# charset=None,
|
||||||
# file=tmp_filepath)
|
#)
|
||||||
#document.save()
|
|
||||||
#final_filepath = get_filename_from_uuid(document, filename=self.filename)
|
|
||||||
#document.save()
|
|
||||||
#print final_filepath
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,5 @@ urlpatterns = patterns('documents.views',
|
|||||||
url(r'^document/(?P<document_id>\d+)/$', 'document_view', (), 'document_view'),
|
url(r'^document/(?P<document_id>\d+)/$', 'document_view', (), 'document_view'),
|
||||||
url(r'^document/(?P<document_id>\d+)/delete/$', 'document_delete', (), 'document_delete'),
|
url(r'^document/(?P<document_id>\d+)/delete/$', 'document_delete', (), 'document_delete'),
|
||||||
url(r'^document/(?P<document_id>\d+)/edit/$', 'document_edit', (), 'document_edit'),
|
url(r'^document/(?P<document_id>\d+)/edit/$', 'document_edit', (), 'document_edit'),
|
||||||
|
url(r'^document/type/(?P<document_type_id>\d+)/upload/from/staging/(?P<file_id>\d+)/single/$', 'document_create_from_staging', {'multiple':True}, 'document_create_from_staging'),
|
||||||
url(r'^document/type/(?P<document_type_id>\d+)/upload/from/staging/(?P<file_id>\d+)/single/$', 'document_create_from_staging', {'multiple':False}, 'document_create_from_staging'),
|
|
||||||
#url(r'^document/create/from/staging/(?P<file_id>\d+)/$', '', (), 'document_create_from_staging'),
|
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -8,11 +8,9 @@ from django.core.urlresolvers import reverse
|
|||||||
from django.views.generic.create_update import create_object, delete_object, update_object
|
from django.views.generic.create_update import create_object, delete_object, update_object
|
||||||
from django.forms.formsets import formset_factory
|
from django.forms.formsets import formset_factory
|
||||||
|
|
||||||
|
|
||||||
from models import Document, DocumentMetadata, DocumentType, MetadataType
|
from models import Document, DocumentMetadata, DocumentType, MetadataType
|
||||||
from forms import DocumentTypeSelectForm, DocumentCreateWizard, \
|
from forms import DocumentTypeSelectForm, DocumentCreateWizard, \
|
||||||
MetadataForm, DocumentForm, DocumentForm_edit, DocumentForm_view, \
|
MetadataForm, DocumentForm, DocumentForm_edit, DocumentForm_view
|
||||||
DocumentFileForm
|
|
||||||
|
|
||||||
from staging import StagingFile
|
from staging import StagingFile
|
||||||
|
|
||||||
@@ -63,7 +61,7 @@ def _save_metadata_from_request(request, document):
|
|||||||
def upload_document_with_type(request, document_type_id, multiple=True):
|
def upload_document_with_type(request, document_type_id, multiple=True):
|
||||||
document_type = get_object_or_404(DocumentType, pk=document_type_id)
|
document_type = get_object_or_404(DocumentType, pk=document_type_id)
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
form = DocumentFileForm(request.POST, request.FILES)#, initial={'document_type':document_type})
|
form = DocumentForm(request.POST, request.FILES, initial={'document_type':document_type})
|
||||||
if form.is_valid():
|
if form.is_valid():
|
||||||
instance = form.save()
|
instance = form.save()
|
||||||
if 'new_filename' in form.cleaned_data:
|
if 'new_filename' in form.cleaned_data:
|
||||||
@@ -83,7 +81,7 @@ def upload_document_with_type(request, document_type_id, multiple=True):
|
|||||||
else:
|
else:
|
||||||
return HttpResponseRedirect(reverse('document_list'))
|
return HttpResponseRedirect(reverse('document_list'))
|
||||||
else:
|
else:
|
||||||
form = DocumentFileForm()#initial={'document_type':document_type})
|
form = DocumentForm(initial={'document_type':document_type})
|
||||||
|
|
||||||
filelist = StagingFile.get_all()
|
filelist = StagingFile.get_all()
|
||||||
|
|
||||||
@@ -173,14 +171,22 @@ def document_edit(request, document_id):
|
|||||||
}, context_instance=RequestContext(request))
|
}, context_instance=RequestContext(request))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def document_create_from_staging(request, file_id, document_type_id, multiple=True):
|
def document_create_from_staging(request, file_id, document_type_id, multiple=True):
|
||||||
document_type = get_object_or_404(DocumentType, pk=document_type_id)
|
document_type = get_object_or_404(DocumentType, pk=document_type_id)
|
||||||
staging_file = StagingFile.get(id=int(file_id))
|
staging_file = StagingFile.get(id=int(file_id))
|
||||||
staging_file.upload(document_type=document_type)
|
|
||||||
|
|
||||||
|
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()
|
||||||
|
except Exception, e:
|
||||||
|
messages.error(request, e)
|
||||||
|
|
||||||
if multiple:
|
if multiple:
|
||||||
return HttpResponseRedirect(request.get_full_path())
|
return HttpResponseRedirect(request.META['HTTP_REFERER'])
|
||||||
else:
|
else:
|
||||||
return HttpResponseRedirect(reverse('document_list'))
|
return HttpResponseRedirect(reverse('document_list'))
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user