validate value counts in metadata + fix multiple values
authorJan Szejko <janek37@gmail.com>
Tue, 25 Apr 2017 14:16:15 +0000 (16:16 +0200)
committerJan Szejko <janek37@gmail.com>
Tue, 25 Apr 2017 14:16:15 +0000 (16:16 +0200)
apps/catalogue/models/document.py
apps/wiki/forms.py

index f190f5a..a1a0a3c 100755 (executable)
@@ -43,14 +43,16 @@ def metadata_from_text(text):
         if c is not None:
             metadata['cover_url'] = c.text
         for category in Category.objects.all():
-            c = m.find('{http://purl.org/dc/elements/1.1/}' + category.dc_tag)
-            if c is not None:
-                if category.multiple:
-                    if category.dc_tag not in metadata:
-                        metadata[category.dc_tag] = []
-                    metadata[category.dc_tag].append(c.text)
-                else:
-                    metadata[category.dc_tag] = c.text
+            for elem in m.findall('{http://purl.org/dc/elements/1.1/}' + category.dc_tag):
+                if elem.text is not None:
+                    if category.multiple:
+                        if category.dc_tag not in metadata:
+                            metadata[category.dc_tag] = []
+                        metadata[category.dc_tag].append(elem.text)
+                    else:
+                        if category.dc_tag in metadata:
+                            metadata['multiple_values'] = category.dc_tag
+                        metadata[category.dc_tag] = elem.text
     return metadata
 
 
index 3cf5d11..df6bf85 100644 (file)
@@ -84,8 +84,12 @@ class DocumentTextSaveForm(forms.Form):
                 raise ValidationError('Invalid cover image format, should be an image file (jpg, png, gif, svg). '
                                       'Change it in Metadata.')
         metadata = metadata_from_text(text)
+        if 'multiple_values' in metadata:
+            raise ValidationError('Category "%s" does not allow multiple values.' % metadata['multiple_values'])
         for category in Category.objects.all():
             values = metadata.get(category.dc_tag)
+            if values is None:
+                continue
             if not category.multiple:
                 values = [values]
             if not values: