From 6d361cf420fe77599c2bbc1f9c4e17925db7f3ca Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Fri, 4 Feb 2011 01:02:14 -0400 Subject: [PATCH] Added metadata symlink creation --- apps/documents/conf/settings.py | 2 ++ apps/documents/models.py | 34 ++++++++++++++++++++++++++++++--- apps/documents/views.py | 4 ++-- 3 files changed, 35 insertions(+), 5 deletions(-) diff --git a/apps/documents/conf/settings.py b/apps/documents/conf/settings.py index 8bba9e0284..3a1894cda6 100644 --- a/apps/documents/conf/settings.py +++ b/apps/documents/conf/settings.py @@ -7,3 +7,5 @@ default_available_functions = { } AVAILABLE_FUNCTIONS = getattr(settings, 'DOCUMENTS_METADATA_AVAILABLE_FUNCTIONS', default_available_functions) +STAGING_DIRECTORY = getattr(settings, 'DOCUMENTS_STAGIN_DIRECTORY', '/tmp') +FILESERVING_PATH = getattr(settings, 'DOCUMENTS_FILESERVING_PATH', '/tmp') diff --git a/apps/documents/models.py b/apps/documents/models.py index e182662072..0689847df6 100644 --- a/apps/documents/models.py +++ b/apps/documents/models.py @@ -1,14 +1,18 @@ +import errno import os import uuid import mimetypes from datetime import datetime +from django.conf import settings from django.db import models +from django.template.defaultfilters import slugify from django.utils.translation import ugettext_lazy as _ from dynamic_search.api import register from documents.conf.settings import AVAILABLE_FUNCTIONS +from documents.conf.settings import FILESERVING_PATH def get_filename_from_uuid(instance, filename, directory='documents'): @@ -48,11 +52,36 @@ class Document(models.Model): def __unicode__(self): return self.uuid - + @models.permalink def get_absolute_url(self): return ('document_view', [self.id]) + def create_fs_links(self): + for metadata in self.documentmetadata_set.all(): + print metadata.metadata_type.name + + if metadata.metadata_type.documenttypemetadatatype_set.all()[0].create_directory_link: + target_directory = os.path.join(FILESERVING_PATH, slugify(metadata.metadata_type.name), slugify(metadata.value)) + try: + os.makedirs(target_directory) + + except OSError as exc: + if exc.errno == errno.EEXIST: + pass + else: + raise 'Unable to create metadata indexing directory.' + + target_filepath = os.path.join(target_directory, os.extsep.join([slugify(self.file_filename), slugify(self.file_extension)])) + try: + os.symlink(os.path.abspath(self.file.path), target_filepath) + except OSError as exc: + if exc.errno == errno.EEXIST: + pass + else: + raise 'Unable to create metadata indexing directory.' + + available_functions_string = (_(u' Available functions: %s') % ','.join(['%s()' % name for name, function in AVAILABLE_FUNCTIONS.items()])) if AVAILABLE_FUNCTIONS else '' class MetadataType(models.Model): @@ -73,9 +102,8 @@ class MetadataType(models.Model): class DocumentTypeMetadataType(models.Model): document_type = models.ForeignKey(DocumentType, verbose_name=_(u'document type')) metadata_type = models.ForeignKey(MetadataType, verbose_name=_(u'metadata type')) - #create_directory = nmode + create_directory_link = models.BooleanField(verbose_name=_(u'create directory link')) #override default - #create index dir? -bool #required? -bool def __unicode__(self): diff --git a/apps/documents/views.py b/apps/documents/views.py index d884595e13..973fb20cd2 100644 --- a/apps/documents/views.py +++ b/apps/documents/views.py @@ -56,6 +56,7 @@ def upload_document_with_type(request, document_type_id, multiple=True): document_metadata.save() messages.success(request, _(u'Document uploaded successfully.')) + instance.create_fs_links() if multiple: return HttpResponseRedirect(request.get_full_path()) else: @@ -89,5 +90,4 @@ def document_view(request, document_id): 'hide_link':True, }, ], - }, context_instance=RequestContext(request)) - + }, context_instance=RequestContext(request))