From 6ceb71d0b3de9093b7b625c2c1b52dc882b5ba68 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 30 Jun 2015 17:35:35 -0400 Subject: [PATCH] Rename metadata parsers to metadata validators. Fix validators calling method, import and instance, instead previous key based lookup. --- mayan/apps/metadata/forms.py | 20 ++++++++------------ mayan/apps/metadata/settings.py | 4 ++-- mayan/apps/metadata/validators.py | 22 +++++++++++----------- 3 files changed, 21 insertions(+), 25 deletions(-) diff --git a/mayan/apps/metadata/forms.py b/mayan/apps/metadata/forms.py index 5025daece3..411eb96bba 100644 --- a/mayan/apps/metadata/forms.py +++ b/mayan/apps/metadata/forms.py @@ -3,6 +3,7 @@ from __future__ import unicode_literals from django import forms from django.core.exceptions import ValidationError from django.forms.formsets import formset_factory +from django.utils.module_loading import import_string from django.utils.translation import ugettext_lazy as _ from .models import MetadataType @@ -17,17 +18,13 @@ class MetadataForm(forms.Form): def clean_value(self): metadata_type = MetadataType.objects.get(pk=self.cleaned_data['id']) - try: - validation_function = setting_available_validators.value[metadata_type.validation] - except KeyError: - # User entered a validation function name, but was not found - # Return value entered as is - return self.cleaned_data['value'] - else: + if metadata_type.validation: + validator = import_string(metadata_type.validation)() + try: # If it is a parsing function we should get a value # If it is a validation function we get nothing on success - result = validation_function(self.cleaned_data['value']) + result = validator.validate(self.cleaned_data['value']) except Exception as exception: # If it is a validation function and an exception is raise # we wrap that into a new ValidationError exception @@ -47,10 +44,9 @@ class MetadataForm(forms.Form): # If it was a validation function and passed correctly we return # the original input value return result or self.cleaned_data['value'] - - # If a validation function was never specified we return the original - # value - return self.cleaned_data['value'] + else: + # If a validator was never specified we return the original value + return self.cleaned_data['value'] def __init__(self, *args, **kwargs): super(MetadataForm, self).__init__(*args, **kwargs) diff --git a/mayan/apps/metadata/settings.py b/mayan/apps/metadata/settings.py index 8273ce21ce..c03347a4e2 100644 --- a/mayan/apps/metadata/settings.py +++ b/mayan/apps/metadata/settings.py @@ -6,7 +6,7 @@ from django.utils.translation import ugettext_lazy as _ from smart_settings import Namespace -from .parsers import MetadataParser +from .validators import MetadataValidator default_available_functions = { 'current_date': now().date, @@ -17,6 +17,6 @@ default_available_models = { } namespace = Namespace(name='metadata', label=_('Metadata')) -setting_available_validators = namespace.add_setting(global_name='METADATA_AVAILABLE_VALIDATORS', default=MetadataParser.get_import_paths()) +setting_available_validators = namespace.add_setting(global_name='METADATA_AVAILABLE_VALIDATORS', default=MetadataValidator.get_import_paths()) setting_available_functions = namespace.add_setting(global_name='METADATA_AVAILABLE_FUNCTIONS', default=default_available_functions) setting_available_models = namespace.add_setting(global_name='METADATA_AVAILABLE_MODELS', default=default_available_models) diff --git a/mayan/apps/metadata/validators.py b/mayan/apps/metadata/validators.py index 4a0fd2383e..d2d7f08430 100644 --- a/mayan/apps/metadata/validators.py +++ b/mayan/apps/metadata/validators.py @@ -3,7 +3,7 @@ from __future__ import unicode_literals from dateutil.parser import parse -class MetadataParser(object): +class MetadataValidator(object): _registry = [] @classmethod @@ -20,27 +20,27 @@ class MetadataParser(object): @classmethod def get_import_paths(cls): - return [parser.get_import_path() for parser in cls.get_all()] + return [validator.get_import_path() for validator in cls.get_all()] def parse(self, input_data): raise NotImplementedError -class DateAndTimeParser(MetadataParser): - def parse(self, input_data): +class DateAndTimeValidator(MetadataValidator): + def validate(self, input_data): return parse(input_data).isoformat() -class DateParser(MetadataParser): - def parse(self, input_data): +class DateValidator(MetadataValidator): + def validate(self, input_data): return parse(input_data).date().isoformat() -class TimeParser(MetadataParser): - def parse(self, input_data): +class TimeValidator(MetadataValidator): + def validate(self, input_data): return parse(input_data).time().isoformat() -MetadataParser.register(DateAndTimeParser) -MetadataParser.register(DateParser) -MetadataParser.register(TimeParser) +MetadataValidator.register(DateAndTimeValidator) +MetadataValidator.register(DateValidator) +MetadataValidator.register(TimeValidator)