Added JSON validator to Attributes.
authorJoseph Spiros <joseph.spiros@ithinksw.com>
Wed, 8 Sep 2010 17:26:15 +0000 (13:26 -0400)
committerJoseph Spiros <joseph.spiros@ithinksw.com>
Wed, 8 Sep 2010 17:26:15 +0000 (13:26 -0400)
models/base.py
validators.py

index 27c45dc..33c994c 100644 (file)
@@ -6,6 +6,7 @@ from django.core.exceptions import ObjectDoesNotExist
 from philo.exceptions import AncestorDoesNotExist
 from philo.utils import ContentTypeRegistryLimiter
 from philo.signals import entity_class_prepared
+from philo.validators import json_validator
 from UserDict import DictMixin
 
 
@@ -36,7 +37,7 @@ class Attribute(models.Model):
        entity_object_id = models.PositiveIntegerField(verbose_name='Entity ID')
        entity = generic.GenericForeignKey('entity_content_type', 'entity_object_id')
        key = models.CharField(max_length=255)
-       json_value = models.TextField(verbose_name='Value (JSON)', help_text='This value must be valid JSON.')
+       json_value = models.TextField(verbose_name='Value (JSON)', help_text='This value must be valid JSON.', validators=[json_validator])
        
        def get_value(self):
                return json.loads(self.json_value)
index 637dba8..e4c32d0 100644 (file)
@@ -1,5 +1,7 @@
 from django.utils.translation import ugettext_lazy as _
 from django.core.validators import RegexValidator
+from django.core.exceptions import ValidationError
+from django.utils import simplejson as json
 import re
 
 
@@ -28,3 +30,10 @@ class URLLinkValidator(RegexValidator):
                r'|)' # also allow internal links
                r'(?:/?|[/?#]?\S+)$', re.IGNORECASE)
        message = _(u'Enter a valid absolute or relative redirect target')
+
+
+def json_validator(value):
+       try:
+               json.loads(value)
+       except:
+               raise ValidationError(u'\'%s\' is not valid JSON' % value)
\ No newline at end of file