diff options
| -rw-r--r-- | lesana/collection.py | 15 | ||||
| -rw-r--r-- | tests/data/complex/items/28b15099c84b41ab892133cd64876a32.yaml | 3 | ||||
| -rw-r--r-- | tests/data/complex/items/73097121f1874a6ea2f927db7dc4f11e.yaml | 1 | ||||
| -rw-r--r-- | tests/data/complex/items/d4f361b0e3e541508eaf82c04451797f.yaml | 4 | ||||
| -rw-r--r-- | tests/data/wrong/items/b9a832309c984ada9f267471660c1313.yaml | 1 | ||||
| -rw-r--r-- | tests/data/wrong/settings.yaml | 7 | ||||
| -rw-r--r-- | tests/test_collection.py | 8 | 
7 files changed, 28 insertions, 11 deletions
| diff --git a/lesana/collection.py b/lesana/collection.py index d198ef0..4bec594 100644 --- a/lesana/collection.py +++ b/lesana/collection.py @@ -86,10 +86,10 @@ class Entry(object):          valid = True          for field in self.collection.settings['fields']:              value = self.data.get(field['name'], None) -            if not value: -                # empty fields are always fine -                continue              t = field['type'] +            if t != 'list' and not value: +                # empty fields are always fine except for lists +                continue              if t == 'integer':                  try:                      int(value) @@ -123,6 +123,15 @@ class Entry(object):                              value                              ),                          }) +            elif t == 'list': +                if not hasattr(value, '__iter__'): +                    valid = False +                    errors.append({ +                        'field': field['name'], +                        'error': 'Invalid value for list field: {}'.format( +                            value +                            ), +                        })          return valid, errors      def render(self, template, searchpath='.'): diff --git a/tests/data/complex/items/28b15099c84b41ab892133cd64876a32.yaml b/tests/data/complex/items/28b15099c84b41ab892133cd64876a32.yaml index 58b84bb..54db12f 100644 --- a/tests/data/complex/items/28b15099c84b41ab892133cd64876a32.yaml +++ b/tests/data/complex/items/28b15099c84b41ab892133cd64876a32.yaml @@ -3,4 +3,5 @@ description: |    .  position: 'somewhere'  something: '' -tags: +tags: [] +keywords: [] diff --git a/tests/data/complex/items/73097121f1874a6ea2f927db7dc4f11e.yaml b/tests/data/complex/items/73097121f1874a6ea2f927db7dc4f11e.yaml index b6787b0..f38a56a 100644 --- a/tests/data/complex/items/73097121f1874a6ea2f927db7dc4f11e.yaml +++ b/tests/data/complex/items/73097121f1874a6ea2f927db7dc4f11e.yaml @@ -9,3 +9,4 @@ tags:      - this      - that  exists: true +keywords: [] diff --git a/tests/data/complex/items/d4f361b0e3e541508eaf82c04451797f.yaml b/tests/data/complex/items/d4f361b0e3e541508eaf82c04451797f.yaml index 2331e69..d2be3f3 100644 --- a/tests/data/complex/items/d4f361b0e3e541508eaf82c04451797f.yaml +++ b/tests/data/complex/items/d4f361b0e3e541508eaf82c04451797f.yaml @@ -3,5 +3,5 @@ description: |      This entry has no tags and no keywords  position: ''  something: -tags: -keywords: +tags: [] +keywords: [] diff --git a/tests/data/wrong/items/b9a832309c984ada9f267471660c1313.yaml b/tests/data/wrong/items/b9a832309c984ada9f267471660c1313.yaml index b36cc4e..1fa0c74 100644 --- a/tests/data/wrong/items/b9a832309c984ada9f267471660c1313.yaml +++ b/tests/data/wrong/items/b9a832309c984ada9f267471660c1313.yaml @@ -5,3 +5,4 @@ position: 'somewhere'  number: 'four'  float: 'half and a bit'  price: 'cheap' +things: diff --git a/tests/data/wrong/settings.yaml b/tests/data/wrong/settings.yaml index 243ab62..83a542b 100644 --- a/tests/data/wrong/settings.yaml +++ b/tests/data/wrong/settings.yaml @@ -1,5 +1,6 @@  name: "Lesana collection with certain errors"  lang: 'somethingish' +entry_label: '{{ short_id }}: {{ name }} - {{ things | join("; ") }}'  fields:      - name: name        type: string @@ -8,7 +9,7 @@ fields:        type: text      - name: position        type: string -      index: facet +      index: field      - name: number        type: integer        help: "Enter an integer here" @@ -18,3 +19,7 @@ fields:      - name: price        type: decimal        help: 'prices are never float!' +    - name: things +      type: list +      list: string +      index: field diff --git a/tests/test_collection.py b/tests/test_collection.py index 798e561..e97e912 100644 --- a/tests/test_collection.py +++ b/tests/test_collection.py @@ -54,8 +54,8 @@ class testCollection(unittest.TestCase):          self.assertIsNotNone(self.collection.settings)          self.assertIsNotNone(self.collection.stemmer)          # Fields with no "index" entry are not indexed -        self.assertEqual(len(self.collection.settings['fields']), 6) -        self.assertEqual(len(self.collection.indexed_fields), 1) +        self.assertEqual(len(self.collection.settings['fields']), 7) +        self.assertEqual(len(self.collection.indexed_fields), 3)      def test_load_safe(self):          self.collection = lesana.Collection('tests/data/simple') @@ -326,9 +326,9 @@ class testCollectionWithErrors(unittest.TestCase):              self.collection.settings['name'],              "Lesana collection with certain errors"              ) -        self.assertEqual(len(self.collection.settings['fields']), 6) +        self.assertEqual(len(self.collection.settings['fields']), 7)          self.assertIsNotNone(self.collection.stemmer) -        self.assertEqual(len(self.collection.indexed_fields), 1) +        self.assertEqual(len(self.collection.indexed_fields), 3)      def test_index(self):          loaded = self.collection.update_cache() | 
