From 858592fc5b7129405fd7bb2fcfdb39b0c65f5255 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sun, 6 Feb 2011 03:51:10 -0400 Subject: [PATCH] Implemented lookups in metadata --- apps/documents/conf/settings.py | 7 +++++++ apps/documents/forms.py | 10 ++++++++++ apps/documents/models.py | 5 ++++- settings.py | 1 + 4 files changed, 22 insertions(+), 1 deletion(-) diff --git a/apps/documents/conf/settings.py b/apps/documents/conf/settings.py index 420c41b3ba..bf4848d494 100644 --- a/apps/documents/conf/settings.py +++ b/apps/documents/conf/settings.py @@ -3,11 +3,17 @@ import hashlib import uuid from django.conf import settings +from django.contrib.auth.models import User + default_available_functions = { 'current_date':datetime.datetime.now().date, } +default_available_models = { + 'User':User +} + 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') @@ -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) 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) diff --git a/apps/documents/forms.py b/apps/documents/forms.py index a4eda9d5c7..63642ab5ad 100644 --- a/apps/documents/forms.py +++ b/apps/documents/forms.py @@ -12,6 +12,7 @@ from common.forms import DetailForm from models import Document, DocumentType, DocumentTypeMetadataType from documents.conf.settings import AVAILABLE_FUNCTIONS +from documents.conf.settings import AVAILABLE_MODELS class DocumentForm(forms.ModelForm): @@ -67,6 +68,15 @@ class MetadataForm(forms.Form): except Exception, 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) name = forms.CharField(label=_(u'Name'), required=False, widget=forms.TextInput(attrs={'readonly':'readonly'})) diff --git a/apps/documents/models.py b/apps/documents/models.py index b8ce3a114a..81c0b0a506 100644 --- a/apps/documents/models.py +++ b/apps/documents/models.py @@ -17,6 +17,7 @@ from documents.conf.settings import SLUGIFY_PATH from documents.conf.settings import CHECKSUM_FUNCTION from documents.conf.settings import UUID_FUNCTION from documents.conf.settings import STORAGE_DIRECTORY_NAME +from documents.conf.settings import AVAILABLE_MODELS if SLUGIFY_PATH == False: #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_models_string = (_(u' Available models: %s') % ','.join([name for name, model in AVAILABLE_MODELS.items()])) if AVAILABLE_MODELS else '' class MetadataType(models.Model): name = models.CharField(max_length=32, verbose_name=_(u'name')) 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) - 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. def __unicode__(self): diff --git a/settings.py b/settings.py index a53c7ca944..a8ac1cf7ef 100644 --- a/settings.py +++ b/settings.py @@ -173,6 +173,7 @@ LOGIN_EXEMPT_URLS = ( #DOCUMENTS_DELETE_STAGING_FILE_AFTER_UPLOAD = False #DOCUMENTS_UUID_FUNTION = lambda:unicode(uuid.uuid4()) #DOCUMENTS_STORAGE_DIRECTORY_NAME = 'documents' +#DOCUMENTS_METADATA_AVAILABLE_MODELS = {} #======== End of configuration options ======= try: