Added option to enable/disable staging file uploads, added better error reporting when creating staging files list
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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'])
|
||||
|
||||
22
settings.py
22
settings.py
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user