Added metadata symlink creation

This commit is contained in:
Roberto Rosario
2011-02-04 01:02:14 -04:00
parent 34493262fd
commit 6d361cf420
3 changed files with 35 additions and 5 deletions

View File

@@ -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')

View File

@@ -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):

View File

@@ -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))