Rename metadata parsers to metadata validators. Fix validators calling method, import and instance, instead previous key based lookup.
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user