Implemented lookups in metadata
This commit is contained in:
@@ -3,11 +3,17 @@ import hashlib
|
|||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
from django.contrib.auth.models import User
|
||||||
|
|
||||||
|
|
||||||
default_available_functions = {
|
default_available_functions = {
|
||||||
'current_date':datetime.datetime.now().date,
|
'current_date':datetime.datetime.now().date,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
default_available_models = {
|
||||||
|
'User':User
|
||||||
|
}
|
||||||
|
|
||||||
AVAILABLE_FUNCTIONS = getattr(settings, 'DOCUMENTS_METADATA_AVAILABLE_FUNCTIONS', default_available_functions)
|
AVAILABLE_FUNCTIONS = getattr(settings, 'DOCUMENTS_METADATA_AVAILABLE_FUNCTIONS', default_available_functions)
|
||||||
STAGING_DIRECTORY = getattr(settings, 'DOCUMENTS_STAGING_DIRECTORY', u'/tmp/mayan/staging')
|
STAGING_DIRECTORY = getattr(settings, 'DOCUMENTS_STAGING_DIRECTORY', u'/tmp/mayan/staging')
|
||||||
FILESERVING_PATH = getattr(settings, 'DOCUMENTS_FILESERVING_PATH', u'/tmp/mayan/documents')
|
FILESERVING_PATH = getattr(settings, 'DOCUMENTS_FILESERVING_PATH', u'/tmp/mayan/documents')
|
||||||
@@ -17,3 +23,4 @@ CHECKSUM_FUNCTION = getattr(settings, 'DOCUMENTS_CHECKSUM_FUNCTION', lambda x: h
|
|||||||
DELETE_STAGING_FILE_AFTER_UPLOAD = getattr(settings, 'DOCUMENTS_DELETE_STAGING_FILE_AFTER_UPLOAD', False)
|
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()))
|
UUID_FUNCTION = getattr(settings, 'DOCUMENTS_UUID_FUNTION', lambda:unicode(uuid.uuid4()))
|
||||||
STORAGE_DIRECTORY_NAME = getattr(settings, 'DOCUMENTS_STORAGE_DIRECTORY_NAME', 'documents')
|
STORAGE_DIRECTORY_NAME = getattr(settings, 'DOCUMENTS_STORAGE_DIRECTORY_NAME', 'documents')
|
||||||
|
AVAILABLE_MODELS = getattr(settings, 'DOCUMENTS_METADATA_AVAILABLE_MODELS', default_available_models)
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ from common.forms import DetailForm
|
|||||||
from models import Document, DocumentType, DocumentTypeMetadataType
|
from models import Document, DocumentType, DocumentTypeMetadataType
|
||||||
|
|
||||||
from documents.conf.settings import AVAILABLE_FUNCTIONS
|
from documents.conf.settings import AVAILABLE_FUNCTIONS
|
||||||
|
from documents.conf.settings import AVAILABLE_MODELS
|
||||||
|
|
||||||
|
|
||||||
class DocumentForm(forms.ModelForm):
|
class DocumentForm(forms.ModelForm):
|
||||||
@@ -67,6 +68,15 @@ class MetadataForm(forms.Form):
|
|||||||
except Exception, err:
|
except Exception, err:
|
||||||
self.fields['value'].initial = err
|
self.fields['value'].initial = err
|
||||||
|
|
||||||
|
if self.metadata_type.lookup:
|
||||||
|
try:
|
||||||
|
choices = eval(self.metadata_type.lookup, AVAILABLE_MODELS)
|
||||||
|
self.fields['value'] = forms.ChoiceField(label=self.fields['value'].label)
|
||||||
|
self.fields['value'].choices = zip(choices, choices)
|
||||||
|
except Exception, err:
|
||||||
|
self.fields['value'].initial = err
|
||||||
|
self.fields['value'].widget=forms.TextInput(attrs={'readonly':'readonly'})
|
||||||
|
|
||||||
id = forms.CharField(label=_(u'id'), widget=forms.HiddenInput)
|
id = forms.CharField(label=_(u'id'), widget=forms.HiddenInput)
|
||||||
name = forms.CharField(label=_(u'Name'),
|
name = forms.CharField(label=_(u'Name'),
|
||||||
required=False, widget=forms.TextInput(attrs={'readonly':'readonly'}))
|
required=False, widget=forms.TextInput(attrs={'readonly':'readonly'}))
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ from documents.conf.settings import SLUGIFY_PATH
|
|||||||
from documents.conf.settings import CHECKSUM_FUNCTION
|
from documents.conf.settings import CHECKSUM_FUNCTION
|
||||||
from documents.conf.settings import UUID_FUNCTION
|
from documents.conf.settings import UUID_FUNCTION
|
||||||
from documents.conf.settings import STORAGE_DIRECTORY_NAME
|
from documents.conf.settings import STORAGE_DIRECTORY_NAME
|
||||||
|
from documents.conf.settings import AVAILABLE_MODELS
|
||||||
|
|
||||||
if SLUGIFY_PATH == False:
|
if SLUGIFY_PATH == False:
|
||||||
#Do not slugify path or filenames and extensions
|
#Do not slugify path or filenames and extensions
|
||||||
@@ -122,12 +123,14 @@ class Document(models.Model):
|
|||||||
|
|
||||||
|
|
||||||
available_functions_string = (_(u' Available functions: %s') % ','.join(['%s()' % name for name, function in AVAILABLE_FUNCTIONS.items()])) if AVAILABLE_FUNCTIONS else ''
|
available_functions_string = (_(u' Available functions: %s') % ','.join(['%s()' % name for name, function in AVAILABLE_FUNCTIONS.items()])) if AVAILABLE_FUNCTIONS else ''
|
||||||
|
available_models_string = (_(u' Available models: %s') % ','.join([name for name, model in AVAILABLE_MODELS.items()])) if AVAILABLE_MODELS else ''
|
||||||
|
|
||||||
class MetadataType(models.Model):
|
class MetadataType(models.Model):
|
||||||
name = models.CharField(max_length=32, verbose_name=_(u'name'))
|
name = models.CharField(max_length=32, verbose_name=_(u'name'))
|
||||||
default = models.CharField(max_length=64, blank=True, null=True,
|
default = models.CharField(max_length=64, blank=True, null=True,
|
||||||
verbose_name=_(u'default'), help_text=_(u'Enter a string to be evaluated.%s') % available_functions_string)
|
verbose_name=_(u'default'), help_text=_(u'Enter a string to be evaluated.%s') % available_functions_string)
|
||||||
lookup = models.CharField(max_length=64, blank=True, null=True, verbose_name=_(u'lookup'))
|
lookup = models.CharField(max_length=64, blank=True, null=True,
|
||||||
|
verbose_name=_(u'lookup'), help_text=_(u'Enter a string to be evaluated. Example: [user.get_full_name() for user in User.objects.all()].%s') % available_models_string)
|
||||||
#datatype = models.
|
#datatype = models.
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
|
|||||||
@@ -173,6 +173,7 @@ LOGIN_EXEMPT_URLS = (
|
|||||||
#DOCUMENTS_DELETE_STAGING_FILE_AFTER_UPLOAD = False
|
#DOCUMENTS_DELETE_STAGING_FILE_AFTER_UPLOAD = False
|
||||||
#DOCUMENTS_UUID_FUNTION = lambda:unicode(uuid.uuid4())
|
#DOCUMENTS_UUID_FUNTION = lambda:unicode(uuid.uuid4())
|
||||||
#DOCUMENTS_STORAGE_DIRECTORY_NAME = 'documents'
|
#DOCUMENTS_STORAGE_DIRECTORY_NAME = 'documents'
|
||||||
|
#DOCUMENTS_METADATA_AVAILABLE_MODELS = {}
|
||||||
#======== End of configuration options =======
|
#======== End of configuration options =======
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|||||||
Reference in New Issue
Block a user