diff --git a/apps/documents/conf/settings.py b/apps/documents/conf/settings.py index bf4848d494..f30ea5ba53 100644 --- a/apps/documents/conf/settings.py +++ b/apps/documents/conf/settings.py @@ -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) diff --git a/apps/documents/staging.py b/apps/documents/staging.py index 1442de81b5..812606e85f 100644 --- a/apps/documents/staging.py +++ b/apps/documents/staging.py @@ -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): diff --git a/apps/documents/views.py b/apps/documents/views.py index 948b92744b..a385db95ba 100644 --- a/apps/documents/views.py +++ b/apps/documents/views.py @@ -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']) diff --git a/settings.py b/settings.py index a8ac1cf7ef..2b8d85c7e9 100644 --- a/settings.py +++ b/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: