from __future__ import unicode_literals from dateutil.parser import parse from django.core.exceptions import ValidationError from .parsers import MetadataParser class MetadataValidator(MetadataParser): _registry = [] def validate(self, input_data): try: self.execute(input_data) except Exception as exception: raise ValidationError(exception) class DateAndTimeValidator(MetadataValidator): def execute(self, input_data): return parse(input_data).isoformat() class DateValidator(MetadataValidator): def execute(self, input_data): return parse(input_data).date().isoformat() class TimeValidator(MetadataValidator): def execute(self, input_data): return parse(input_data).time().isoformat() MetadataValidator.register(parser=DateAndTimeValidator) MetadataValidator.register(parser=DateValidator) MetadataValidator.register(parser=TimeValidator)