Added option to enable/disable staging file uploads, added better error reporting when creating staging files list

This commit is contained in:
Roberto Rosario
2011-02-06 20:01:55 -04:00
parent 0ee072f294
commit f38561099c
4 changed files with 76 additions and 49 deletions

View File

@@ -14,13 +14,19 @@ default_available_models = {
'User':User
}
# Definition
AVAILABLE_FUNCTIONS = getattr(settings, 'DOCUMENTS_METADATA_AVAILABLE_FUNCTIONS', default_available_functions)
STAGING_DIRECTORY = getattr(settings, 'DOCUMENTS_STAGING_DIRECTORY', u'/tmp/mayan/staging')
FILESERVING_PATH = getattr(settings, 'DOCUMENTS_FILESERVING_PATH', u'/tmp/mayan/documents')
DELETE_LOCAL_ORIGINAL = getattr(settings, 'DOCUMENTS_DELETE_LOCAL_ORIGINAL', False)
SLUGIFY_PATH = getattr(settings, 'DOCUMENTS_SLUGIFY_PATH', False)
CHECKSUM_FUNCTION = getattr(settings, 'DOCUMENTS_CHECKSUM_FUNCTION', lambda x: hashlib.sha256(x).hexdigest())
DELETE_STAGING_FILE_AFTER_UPLOAD = getattr(settings, 'DOCUMENTS_DELETE_STAGING_FILE_AFTER_UPLOAD', False)
UUID_FUNCTION = getattr(settings, 'DOCUMENTS_UUID_FUNTION', lambda:unicode(uuid.uuid4()))
STORAGE_DIRECTORY_NAME = getattr(settings, 'DOCUMENTS_STORAGE_DIRECTORY_NAME', 'documents')
AVAILABLE_MODELS = getattr(settings, 'DOCUMENTS_METADATA_AVAILABLE_MODELS', default_available_models)
# Upload
USE_STAGING_DIRECTORY = getattr(settings, 'DOCUMENTS_USE_STAGING_DIRECTORY', False)
STAGING_DIRECTORY = getattr(settings, 'DOCUMENTS_STAGING_DIRECTORY', u'/tmp/mayan/staging')
DELETE_STAGING_FILE_AFTER_UPLOAD = getattr(settings, 'DOCUMENTS_DELETE_STAGING_FILE_AFTER_UPLOAD', False)
DELETE_LOCAL_ORIGINAL = getattr(settings, 'DOCUMENTS_DELETE_LOCAL_ORIGINAL', False)
# Saving
CHECKSUM_FUNCTION = getattr(settings, 'DOCUMENTS_CHECKSUM_FUNCTION', lambda x: hashlib.sha256(x).hexdigest())
UUID_FUNCTION = getattr(settings, 'DOCUMENTS_UUID_FUNTION', lambda:unicode(uuid.uuid4()))
# Storage
STORAGE_DIRECTORY_NAME = getattr(settings, 'DOCUMENTS_STORAGE_DIRECTORY_NAME', 'documents')
# Serving
FILESERVING_PATH = getattr(settings, 'DOCUMENTS_FILESERVING_PATH', u'/tmp/mayan/documents')
SLUGIFY_PATH = getattr(settings, 'DOCUMENTS_SLUGIFY_PATH', False)

View File

@@ -11,7 +11,10 @@ from documents.conf.settings import STAGING_DIRECTORY
def get_all_files():
return sorted([os.path.normcase(f) for f in os.listdir(STAGING_DIRECTORY) if os.path.isfile(os.path.join(STAGING_DIRECTORY, f))])
try:
return sorted([os.path.normcase(f) for f in os.listdir(STAGING_DIRECTORY) if os.path.isfile(os.path.join(STAGING_DIRECTORY, f))])
except OSError, exc:
raise OSError(ugettext(u'Unable get list of staging files: %s') % exc)
class StagingFile(object):

View File

@@ -18,6 +18,7 @@ from forms import DocumentTypeSelectForm, DocumentCreateWizard, \
from staging import StagingFile
from documents.conf.settings import DELETE_STAGING_FILE_AFTER_UPLOAD
from documents.conf.settings import USE_STAGING_DIRECTORY
def document_list(request):
@@ -90,21 +91,31 @@ def upload_document_with_type(request, document_type_id, multiple=True):
else:
form = DocumentForm(initial={'document_type':document_type})
filelist = StagingFile.get_all()
return render_to_response('generic_form.html', {
context = {
'form':form,
'title':_(u'upload a local document'),
'document_type_id':document_type_id,
'subtemplates_dict':[
{
'name':'generic_list_subtemplate.html',
'title':_(u'files in staging'),
'object_list':filelist,
},
],
}, context_instance=RequestContext(request))
}
if USE_STAGING_DIRECTORY:
try:
filelist = StagingFile.get_all()
except Exception, e:
messages.error(request, e)
filelist = []
finally:
context.update({
'subtemplates_dict':[
{
'name':'generic_list_subtemplate.html',
'title':_(u'files in staging'),
'object_list':filelist,
},
],
})
return render_to_response('generic_form.html', context,
context_instance=RequestContext(request))
def document_view(request, document_id):
@@ -179,32 +190,33 @@ def document_edit(request, document_id):
def document_create_from_staging(request, file_id, document_type_id, multiple=True):
document_type = get_object_or_404(DocumentType, pk=document_type_id)
staging_file = StagingFile.get(id=int(file_id))
if USE_STAGING_DIRECTORY:
document_type = get_object_or_404(DocumentType, pk=document_type_id)
staging_file = StagingFile.get(id=int(file_id))
try:
document = Document(file=staging_file.upload(), document_type=document_type)
document.save()
except Exception, e:
messages.error(request, e)
else:
url = urlparse(request.META['HTTP_REFERER'])
#Take the url parameter defining the metadata values and turn
# then into a dictionary
params = dict([part.split('=') for part in url[4].split('&')])
_save_metadata(params, 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)
if DELETE_STAGING_FILE_AFTER_UPLOAD:
else:
url = urlparse(request.META['HTTP_REFERER'])
#Take the url parameter defining the metadata values and turn
# then into a dictionary
params = dict([part.split('=') for part in url[4].split('&')])
_save_metadata(params, document)
messages.success(request, _(u'Staging file: %s, uploaded successfully.') % staging_file.filename)
try:
staging_file.delete()
messages.success(request, _(u'Staging file: %s, deleted successfully.') % staging_file.filename)
document.create_fs_links()
except Exception, e:
messages.error(request, 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'])

View File

@@ -164,16 +164,22 @@ LOGIN_EXEMPT_URLS = (
#--------- Web theme app ---------------
#WEB_THEME = 'default'
#---------- Documents ------------------
# Definition
#DOCUMENTS_METADATA_AVAILABLE_FUNCTIONS = {}
#DOCUMENTS_STAGING_DIRECTORY = u'/tmp/mayan/staging'
#DOCUMENTS_FILESERVING_PATH = u'/tmp/mayan/documents'
#DOCUMENTS_DELETE_LOCAL_ORIGINAL = False
#DOCUMENTS_SLUGIFY_PATH = False
#DOCUMENTS_CHECKSUM_FUNCTION = lambda x: hashlib.sha256(x).hexdigest())
#DOCUMENTS_DELETE_STAGING_FILE_AFTER_UPLOAD = False
#DOCUMENTS_UUID_FUNTION = lambda:unicode(uuid.uuid4())
#DOCUMENTS_STORAGE_DIRECTORY_NAME = 'documents'
#DOCUMENTS_METADATA_AVAILABLE_MODELS = {}
# Upload
#DOCUMENTS_DELETE_LOCAL_ORIGINAL = False
#DOCUMENTS_USE_STAGING_DIRECTORY = False
#DOCUMENTS_STAGING_DIRECTORY = u'/tmp/mayan/staging'
#DOCUMENTS_DELETE_STAGING_FILE_AFTER_UPLOAD = False
# Saving
#DOCUMENTS_CHECKSUM_FUNCTION = lambda x: hashlib.sha256(x).hexdigest())
#DOCUMENTS_UUID_FUNCTION = lambda:unicode(uuid.uuid4())
# Storage
#DOCUMENTS_STORAGE_DIRECTORY_NAME = 'documents'
# Serving
#DOCUMENTS_FILESERVING_PATH = u'/tmp/mayan/documents'
#DOCUMENTS_SLUGIFY_PATH = False
#======== End of configuration options =======
try: