]> git.parisson.com Git - telemeta.git/commitdiff
Add a regex based validator to Resource.code (fix #187)
authorGuillaume Pellerin <guillaume.pellerin@ircam.fr>
Fri, 4 Aug 2017 22:20:32 +0000 (00:20 +0200)
committerGuillaume Pellerin <guillaume.pellerin@ircam.fr>
Fri, 4 Aug 2017 22:20:32 +0000 (00:20 +0200)
app/settings.py
telemeta/models/resource.py
telemeta/templates/telemeta/inc/resource_list.html

index 227edca53f973314d42e6a953cc02ce5b1f60cd9..37eef63e09644b55b506eff5658a65ac74f368ec 100644 (file)
@@ -215,6 +215,7 @@ COLLECTION_PUBLISHED_CODE_REGEX = '[A-Za-z0-9._-]*'
 COLLECTION_UNPUBLISHED_CODE_REGEX = '[A-Za-z0-9._-]*'
 ITEM_PUBLISHED_CODE_REGEX = COLLECTION_PUBLISHED_CODE_REGEX + ''
 ITEM_UNPUBLISHED_CODE_REGEX = COLLECTION_UNPUBLISHED_CODE_REGEX + ''
+RESOURCE_CODE_REGEX = '[A-Za-z0-9._-]*'
 
 AUTH_PROFILE_MODULE = 'telemeta.userprofile'
 SESSION_EXPIRE_AT_BROWSER_CLOSE = False
index 07454b8a07502b4eea4f3d28c19b7093809bf734..195b78480b34af5cd69b1dc3104ac0efd43a272d 100644 (file)
@@ -27,6 +27,9 @@ from telemeta.models.core import *
 from telemeta.models.system import *
 
 
+resource_code_regex = getattr(settings, 'RESOURCE_CODE_REGEX', '[A-Za-z0-9._-]*')
+
+
 class MediaResource(ModelCore):
     "Base class of all media objects"
 
@@ -57,10 +60,16 @@ class MediaResource(ModelCore):
 class MediaBaseResource(MediaResource):
     "Describe a media base resource"
 
+    def is_valid_resource_code(value):
+        "Check if the resource code is well formed"
+        regex = '^' + resource_code_regex + '$'
+        if not re.match(regex, value):
+            raise ValidationError(u'%s is not a valid resource code' % value)
+
     title                 = CharField(_('title'), required=True)
     description           = CharField(_('description_old'))
     descriptions          = TextField(_('description'))
-    code                  = CharField(_('code'), unique=True, required=True)
+    code                  = CharField(_('code'), unique=True, required=True, validators=[is_valid_resource_code])
     public_access         = CharField(_('public access'), choices=PUBLIC_ACCESS_CHOICES, max_length=16, default="metadata")
 
     def __unicode__(self):
index d5c15200440c4c2a18647d154817f02a7bde3626..72a908e01af60fedfcc53d30910c1c0026fddb8d 100644 (file)
@@ -30,4 +30,3 @@
 {% else %}
     <p>{% trans "No resource" %}</p>
 {% endif %}
-