Document file storage is can now be changed from the settings.py file, better configuration options names
This commit is contained in:
@@ -5,6 +5,7 @@ import uuid
|
||||
from django.conf import settings
|
||||
from django.contrib.auth.models import User
|
||||
|
||||
from documents.storage import DocumentStorage
|
||||
|
||||
default_available_functions = {
|
||||
'current_date':datetime.datetime.now().date,
|
||||
@@ -26,7 +27,9 @@ DELETE_LOCAL_ORIGINAL = getattr(settings, 'DOCUMENTS_DELETE_LOCAL_ORIGINAL', Fal
|
||||
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_BACKEND = getattr(settings, 'DOCUMENTS_STORAGE_BACKEND', DocumentStorage)
|
||||
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)
|
||||
FILESYSTEM_FILESERVING_ENABLE = getattr(settings, 'DOCUMENTS_FILESYSTEM_FILESERVING_ENABLE', True)
|
||||
FILESYSTEM_FILESERVING_PATH = getattr(settings, 'DOCUMENTS_FILESERVING_PATH', u'/tmp/mayan/documents')
|
||||
FILESYSTEM_SLUGIFY_PATHS = getattr(settings, 'DOCUMENTS_SLUGIFY_PATHS', False)
|
||||
|
||||
@@ -12,14 +12,17 @@ from django.utils.translation import ugettext
|
||||
from dynamic_search.api import register
|
||||
|
||||
from documents.conf.settings import AVAILABLE_FUNCTIONS
|
||||
from documents.conf.settings import FILESERVING_PATH
|
||||
from documents.conf.settings import SLUGIFY_PATH
|
||||
from documents.conf.settings import AVAILABLE_MODELS
|
||||
from documents.conf.settings import CHECKSUM_FUNCTION
|
||||
from documents.conf.settings import UUID_FUNCTION
|
||||
from documents.conf.settings import STORAGE_BACKEND
|
||||
from documents.conf.settings import STORAGE_DIRECTORY_NAME
|
||||
from documents.conf.settings import AVAILABLE_MODELS
|
||||
from documents.conf.settings import FILESYSTEM_FILESERVING_ENABLE
|
||||
from documents.conf.settings import FILESYSTEM_FILESERVING_PATH
|
||||
from documents.conf.settings import FILESYSTEM_SLUGIFY_PATHS
|
||||
|
||||
if SLUGIFY_PATH == False:
|
||||
|
||||
if FILESYSTEM_SLUGIFY_PATHS == False:
|
||||
#Do not slugify path or filenames and extensions
|
||||
slugify = lambda x:x
|
||||
|
||||
@@ -52,7 +55,7 @@ class Document(models.Model):
|
||||
Inherit this model to customise document metadata, see BasicDocument for an example.
|
||||
"""
|
||||
document_type = models.ForeignKey(DocumentType, verbose_name=_(u'document type'))
|
||||
file = models.FileField(upload_to=get_filename_from_uuid)
|
||||
file = models.FileField(upload_to=get_filename_from_uuid, storage=STORAGE_BACKEND())
|
||||
uuid = models.CharField(max_length=48, default=UUID_FUNCTION(), blank=True, editable=False)
|
||||
file_mimetype = models.CharField(max_length=64, default='', editable=False)
|
||||
file_filename = models.CharField(max_length=64, default='', editable=False)
|
||||
@@ -90,36 +93,38 @@ class Document(models.Model):
|
||||
targets = []
|
||||
for metadata in self.documentmetadata_set.all():
|
||||
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))
|
||||
target_directory = os.path.join(FILESYSTEM_FILESERVING_PATH, slugify(metadata.metadata_type.name), slugify(metadata.value))
|
||||
targets.append(os.path.join(target_directory, os.extsep.join([slugify(self.file_filename), slugify(self.file_extension)])))
|
||||
return targets
|
||||
|
||||
def create_fs_links(self):
|
||||
for target in self.calculate_fs_links():
|
||||
try:
|
||||
os.makedirs(os.path.dirname(target))
|
||||
except OSError, exc:
|
||||
if exc.errno == errno.EEXIST:
|
||||
pass
|
||||
else:
|
||||
raise OSError(ugettext(u'Unable to create metadata indexing directory: %s') % exc)
|
||||
try:
|
||||
os.symlink(os.path.abspath(self.file.path), target)
|
||||
except OSError, exc:
|
||||
if exc.errno == errno.EEXIST:
|
||||
pass
|
||||
else:
|
||||
raise OSError(ugettext(u'Unable to create metadata indexing symbolic link: %s') % exc)
|
||||
if FILESYSTEM_FILESERVING_ENABLE:
|
||||
for target in self.calculate_fs_links():
|
||||
try:
|
||||
os.makedirs(os.path.dirname(target))
|
||||
except OSError, exc:
|
||||
if exc.errno == errno.EEXIST:
|
||||
pass
|
||||
else:
|
||||
raise OSError(ugettext(u'Unable to create metadata indexing directory: %s') % exc)
|
||||
try:
|
||||
os.symlink(os.path.abspath(self.file.path), target)
|
||||
except OSError, exc:
|
||||
if exc.errno == errno.EEXIST:
|
||||
pass
|
||||
else:
|
||||
raise OSError(ugettext(u'Unable to create metadata indexing symbolic link: %s') % exc)
|
||||
|
||||
def delete_fs_links(self):
|
||||
for target in self.calculate_fs_links():
|
||||
try:
|
||||
os.unlink(target)
|
||||
except OSError, exc:
|
||||
if exc.errno == errno.ENOENT:
|
||||
pass
|
||||
else:
|
||||
raise OSError(ugettext(u'Unable to delete metadata indexing symbolic link: %s') % exc)
|
||||
if FILESYSTEM_FILESERVING_ENABLE:
|
||||
for target in self.calculate_fs_links():
|
||||
try:
|
||||
os.unlink(target)
|
||||
except OSError, exc:
|
||||
if exc.errno == errno.ENOENT:
|
||||
pass
|
||||
else:
|
||||
raise OSError(ugettext(u'Unable to delete metadata indexing symbolic link: %s') % exc)
|
||||
|
||||
|
||||
available_functions_string = (_(u' Available functions: %s') % ','.join(['%s()' % name for name, function in AVAILABLE_FUNCTIONS.items()])) if AVAILABLE_FUNCTIONS else ''
|
||||
|
||||
8
apps/documents/storage.py
Normal file
8
apps/documents/storage.py
Normal file
@@ -0,0 +1,8 @@
|
||||
from django.core.files.storage import FileSystemStorage
|
||||
|
||||
class DocumentStorage(FileSystemStorage):
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(DocumentStorage, self).__init__(*args, **kwargs)
|
||||
self.location='document_storage'
|
||||
self.base_url='document_storage'
|
||||
|
||||
@@ -178,8 +178,9 @@ LOGIN_EXEMPT_URLS = (
|
||||
# Storage
|
||||
#DOCUMENTS_STORAGE_DIRECTORY_NAME = 'documents'
|
||||
# Serving
|
||||
#DOCUMENTS_FILESERVING_PATH = u'/tmp/mayan/documents'
|
||||
#DOCUMENTS_SLUGIFY_PATH = False
|
||||
#DOCUMENTS_FILESYSTEM_FILESERVING_ENABLE = True
|
||||
#DOCUMENTS_FILESYSTEM_FILESERVING_PATH = u'/tmp/mayan/documents'
|
||||
#DOCUMENTS_FILESYSTEM_SLUGIFY_PATHS = False
|
||||
#======== End of configuration options =======
|
||||
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user