Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksey Lim <alsroot@sugarlabs.org>2012-03-04 09:48:18 (GMT)
committer Aleksey Lim <alsroot@sugarlabs.org>2012-03-04 09:48:18 (GMT)
commit62f367c8a4d05556bf36262833b8d01b1a3a4492 (patch)
treea7e1e74fe9d8dbd902bf698383c9681ec862ad40
parentc1f918be2f234a5e9bcb903bd3b8b19cb9753c70 (diff)
Allow list on enums in proprty values
-rw-r--r--active_document/metadata.py6
-rwxr-xr-xtests/units/metadata.py8
2 files changed, 11 insertions, 3 deletions
diff --git a/active_document/metadata.py b/active_document/metadata.py
index c1d2963..b7ad280 100644
--- a/active_document/metadata.py
+++ b/active_document/metadata.py
@@ -291,9 +291,9 @@ def _convert(typecast, value):
value = value.encode('utf-8')
else:
value = str(value)
- elif issubclass(type(typecast), collections.Iterable):
+ elif type(typecast) in (list, tuple):
if typecast and type(typecast[0]) is not type and \
- not issubclass(type(typecast[0]), collections.Iterable):
+ type(typecast[0]) not in (list, tuple):
# Enums
enforce(value in typecast,
_('Value "%s" is not in "%s" list'),
@@ -318,7 +318,7 @@ def _convert(typecast, value):
def _is_sloted_prop(typecast):
if typecast in [None, int, float, bool, str]:
return True
- if issubclass(type(typecast), collections.Iterable):
+ if type(typecast) in (list, tuple):
if not typecast or [i for i in typecast \
if type(i) in [None, int, float, bool, str]]:
return True
diff --git a/tests/units/metadata.py b/tests/units/metadata.py
index d6712d1..5da7b30 100755
--- a/tests/units/metadata.py
+++ b/tests/units/metadata.py
@@ -77,6 +77,14 @@ class MetadataTest(tests.Test):
self.assertEqual(('',), prop.convert(['']))
self.assertEqual((), prop.convert([]))
+ prop = metadata.Property('prop', typecast=[['A', 'B', 'C']])
+ self.assertEqual((), prop.convert(''))
+ self.assertRaises(RuntimeError, prop.convert, [''])
+ self.assertEqual((), prop.convert([]))
+ self.assertEqual(('A', 'B', 'C'), prop.convert(['A', 'B', 'C']))
+ self.assertRaises(RuntimeError, prop.convert, ['a'])
+ self.assertRaises(RuntimeError, prop.convert, ['A', 'x'])
+
def test_Property_serialise(self):
prop = metadata.Property('prop', typecast=int)
self.assertEqual(['0'], prop.serialise(0))