Moved 3 functions from views.py to utils.py
This commit is contained in:
@@ -1,9 +1,14 @@
|
|||||||
import os
|
import os
|
||||||
import tempfile
|
import tempfile
|
||||||
|
from urllib import unquote_plus
|
||||||
|
|
||||||
|
from django.shortcuts import get_object_or_404
|
||||||
|
|
||||||
|
|
||||||
from documents import TEMPORARY_DIRECTORY
|
from documents import TEMPORARY_DIRECTORY
|
||||||
|
|
||||||
|
from models import DocumentMetadata, MetadataType
|
||||||
|
|
||||||
#http://stackoverflow.com/questions/123198/how-do-i-copy-a-file-in-python
|
#http://stackoverflow.com/questions/123198/how-do-i-copy-a-file-in-python
|
||||||
def copyfile(source, dest, buffer_size=1024*1024):
|
def copyfile(source, dest, buffer_size=1024*1024):
|
||||||
"""
|
"""
|
||||||
@@ -59,3 +64,39 @@ def from_descriptor_to_new_tempfile(input_descriptor, buffer_size=1024*1024):
|
|||||||
input_descriptor.close()
|
input_descriptor.close()
|
||||||
os.close(output_descriptor)
|
os.close(output_descriptor)
|
||||||
return tmp_filename
|
return tmp_filename
|
||||||
|
|
||||||
|
|
||||||
|
def decode_metadata_from_url(url_dict):
|
||||||
|
metadata_dict = {
|
||||||
|
'id':{},
|
||||||
|
'value':{}
|
||||||
|
}
|
||||||
|
metadata_list = []
|
||||||
|
#Match out of order metadata_type ids with metadata values from request
|
||||||
|
for key, value in url_dict.items():
|
||||||
|
if 'metadata' in key:
|
||||||
|
index, element = key[8:].split('_')
|
||||||
|
metadata_dict[element][index] = value
|
||||||
|
|
||||||
|
#Convert the nested dictionary into a list of id+values dictionaries
|
||||||
|
for order, id in metadata_dict['id'].items():
|
||||||
|
if order in metadata_dict['value'].keys():
|
||||||
|
metadata_list.append({'id':id, 'value':metadata_dict['value'][order]})
|
||||||
|
|
||||||
|
return metadata_list
|
||||||
|
|
||||||
|
|
||||||
|
def save_metadata_list(metadata_list, document):
|
||||||
|
for item in metadata_list:
|
||||||
|
save_metadata(item, document)
|
||||||
|
|
||||||
|
|
||||||
|
def save_metadata(metadata_dict, document):
|
||||||
|
#Use matched metadata now to create document metadata
|
||||||
|
document_metadata, created = DocumentMetadata.objects.get_or_create(
|
||||||
|
document=document,
|
||||||
|
metadata_type=get_object_or_404(MetadataType, pk=metadata_dict['id']),
|
||||||
|
)
|
||||||
|
#Handle 'plus sign as space' in the url
|
||||||
|
document_metadata.value=unquote_plus(metadata_dict['value'])
|
||||||
|
document_metadata.save()
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
from urllib import unquote_plus
|
|
||||||
|
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import ugettext as _
|
||||||
from django.http import HttpResponse, HttpResponseRedirect
|
from django.http import HttpResponse, HttpResponseRedirect
|
||||||
from django.shortcuts import render_to_response, get_object_or_404, redirect
|
from django.shortcuts import render_to_response, get_object_or_404, redirect
|
||||||
@@ -35,6 +33,8 @@ from documents.conf.settings import STAGING_FILES_PREVIEW_SIZE
|
|||||||
from documents.conf.settings import PREVIEW_SIZE
|
from documents.conf.settings import PREVIEW_SIZE
|
||||||
from documents.conf.settings import THUMBNAIL_SIZE
|
from documents.conf.settings import THUMBNAIL_SIZE
|
||||||
|
|
||||||
|
from utils import save_metadata, save_metadata_list, decode_metadata_from_url
|
||||||
|
|
||||||
def document_list(request):
|
def document_list(request):
|
||||||
return object_list(
|
return object_list(
|
||||||
request,
|
request,
|
||||||
@@ -75,42 +75,6 @@ def document_create_sibling(request, document_id, multiple=True):
|
|||||||
return HttpResponseRedirect('%s?%s' % (url, urlencode(urldata)))
|
return HttpResponseRedirect('%s?%s' % (url, urlencode(urldata)))
|
||||||
|
|
||||||
|
|
||||||
def _decode_metadata_from_url(url_dict):
|
|
||||||
metadata_dict = {
|
|
||||||
'id':{},
|
|
||||||
'value':{}
|
|
||||||
}
|
|
||||||
metadata_list = []
|
|
||||||
#Match out of order metadata_type ids with metadata values from request
|
|
||||||
for key, value in url_dict.items():
|
|
||||||
if 'metadata' in key:
|
|
||||||
index, element = key[8:].split('_')
|
|
||||||
metadata_dict[element][index] = value
|
|
||||||
|
|
||||||
#Convert the nested dictionary into a list of id+values dictionaries
|
|
||||||
for order, id in metadata_dict['id'].items():
|
|
||||||
if order in metadata_dict['value'].keys():
|
|
||||||
metadata_list.append({'id':id, 'value':metadata_dict['value'][order]})
|
|
||||||
|
|
||||||
return metadata_list
|
|
||||||
|
|
||||||
|
|
||||||
def _save_metadata_list(metadata_list, document):
|
|
||||||
for item in metadata_list:
|
|
||||||
_save_metadata(item, document)
|
|
||||||
|
|
||||||
|
|
||||||
def _save_metadata(metadata_dict, document):
|
|
||||||
#Use matched metadata now to create document metadata
|
|
||||||
document_metadata, created = DocumentMetadata.objects.get_or_create(
|
|
||||||
document=document,
|
|
||||||
metadata_type=get_object_or_404(MetadataType, pk=metadata_dict['id']),
|
|
||||||
)
|
|
||||||
#Handle 'plus sign as space' in the url
|
|
||||||
document_metadata.value=unquote_plus(metadata_dict['value'])
|
|
||||||
document_metadata.save()
|
|
||||||
|
|
||||||
|
|
||||||
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)
|
||||||
local_form = DocumentForm(prefix='local', initial={'document_type':document_type})
|
local_form = DocumentForm(prefix='local', initial={'document_type':document_type})
|
||||||
@@ -131,7 +95,7 @@ def upload_document_with_type(request, document_type_id, multiple=True):
|
|||||||
instance.file_filename = local_form.cleaned_data['document_type_available_filenames'].filename
|
instance.file_filename = local_form.cleaned_data['document_type_available_filenames'].filename
|
||||||
instance.save()
|
instance.save()
|
||||||
|
|
||||||
_save_metadata_list(_decode_metadata_from_url(request.GET), instance)
|
save_metadata_list(decode_metadata_from_url(request.GET), instance)
|
||||||
messages.success(request, _(u'Document uploaded successfully.'))
|
messages.success(request, _(u'Document uploaded successfully.'))
|
||||||
try:
|
try:
|
||||||
instance.create_fs_links()
|
instance.create_fs_links()
|
||||||
@@ -167,7 +131,7 @@ def upload_document_with_type(request, document_type_id, multiple=True):
|
|||||||
document.file_filename = staging_form.cleaned_data['document_type_available_filenames'].filename
|
document.file_filename = staging_form.cleaned_data['document_type_available_filenames'].filename
|
||||||
document.save()
|
document.save()
|
||||||
|
|
||||||
_save_metadata_list(_decode_metadata_from_url(request.GET), document)
|
save_metadata_list(decode_metadata_from_url(request.GET), document)
|
||||||
messages.success(request, _(u'Staging file: %s, uploaded successfully.') % staging_file.filename)
|
messages.success(request, _(u'Staging file: %s, uploaded successfully.') % staging_file.filename)
|
||||||
try:
|
try:
|
||||||
document.create_fs_links()
|
document.create_fs_links()
|
||||||
@@ -315,16 +279,16 @@ def document_edit(request, document_id):
|
|||||||
|
|
||||||
document.save()
|
document.save()
|
||||||
|
|
||||||
messages.success(request, _(u'Document:%s edited successfully.') % document)
|
messages.success(request, _(u'Document %s edited successfully.') % document)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
document.create_fs_links()
|
document.create_fs_links()
|
||||||
messages.success(request, _(u'Document filesystem links updated successfully.'))
|
messages.success(request, _(u'Document filesystem links updated successfully.'))
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
messages.error(request, e)
|
messages.error(request, e)
|
||||||
return HttpResponseRedirect(reverse('document_list'))
|
return HttpResponseRedirect(document.get_absolute_url())
|
||||||
|
|
||||||
return HttpResponseRedirect(reverse('document_list'))
|
return HttpResponseRedirect(document.get_absolute_url())
|
||||||
else:
|
else:
|
||||||
form = DocumentForm_edit(instance=document, initial={
|
form = DocumentForm_edit(instance=document, initial={
|
||||||
'new_filename':document.file_filename, 'document_type':document.document_type})
|
'new_filename':document.file_filename, 'document_type':document.document_type})
|
||||||
@@ -357,23 +321,23 @@ def document_edit_metadata(request, document_id):
|
|||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
formset = MetadataFormSet(request.POST)
|
formset = MetadataFormSet(request.POST)
|
||||||
if formset.is_valid():
|
if formset.is_valid():
|
||||||
_save_metadata_list(formset.cleaned_data, document)
|
save_metadata_list(formset.cleaned_data, document)
|
||||||
try:
|
try:
|
||||||
document.delete_fs_links()
|
document.delete_fs_links()
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
messages.error(request, e)
|
messages.error(request, e)
|
||||||
return HttpResponseRedirect(reverse('document_list'))
|
return HttpResponseRedirect(reverse('document_list'))
|
||||||
|
|
||||||
messages.success(request, _(u'Document metadata edited successfully.'))
|
messages.success(request, _(u'Metadata for document %s edited successfully.') % document)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
document.create_fs_links()
|
document.create_fs_links()
|
||||||
messages.success(request, _(u'Document filesystem links updated successfully.'))
|
messages.success(request, _(u'Document filesystem links updated successfully.'))
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
messages.error(request, e)
|
messages.error(request, e)
|
||||||
return HttpResponseRedirect(reverse('document_list'))
|
return HttpResponseRedirect(document.get_absolute_url())
|
||||||
|
|
||||||
return HttpResponseRedirect(reverse('document_list'))
|
return HttpResponseRedirect(document.get_absolute_url())
|
||||||
|
|
||||||
|
|
||||||
return render_to_response('generic_form.html', {
|
return render_to_response('generic_form.html', {
|
||||||
|
|||||||
Reference in New Issue
Block a user