changeset 5467:630a00b20394

strings have an __iter__ method on Python 3, but we don't want to consider them iterable
author Christof Meerwald <cmeerw@cmeerw.org>
date Sat, 28 Jul 2018 20:41:06 +0100
parents 09966de4d3f6
children 0cde8a595893
files roundup/backends/back_anydbm.py roundup/backends/rdbms_common.py
diffstat 2 files changed, 4 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/roundup/backends/back_anydbm.py	Sat Jul 28 20:34:31 2018 +0100
+++ b/roundup/backends/back_anydbm.py	Sat Jul 28 20:41:06 2018 +0100
@@ -957,7 +957,7 @@
             elif isinstance(prop, hyperdb.Multilink):
                 if value is None:
                     value = []
-                if not hasattr(value, '__iter__'):
+                if not hasattr(value, '__iter__') or type(value) == type(''):
                     raise TypeError('new property "%s" not an iterable of ids'%key)
 
                 # clean up and validate the list of links
@@ -1265,7 +1265,7 @@
             elif isinstance(prop, hyperdb.Multilink):
                 if value is None:
                     value = []
-                if not hasattr(value, '__iter__'):
+                if not hasattr(value, '__iter__') or type(value) == type(''):
                     raise TypeError('new property "%s" not an iterable of'
                         ' ids'%propname)
                 link_class = self.properties[propname].classname
--- a/roundup/backends/rdbms_common.py	Sat Jul 28 20:34:31 2018 +0100
+++ b/roundup/backends/rdbms_common.py	Sat Jul 28 20:41:06 2018 +0100
@@ -1614,7 +1614,7 @@
             elif isinstance(prop, Multilink):
                 if value is None:
                     value = []
-                if not hasattr(value, '__iter__'):
+                if not hasattr(value, '__iter__') or type(value) == type(''):
                     raise TypeError('new property "%s" not an iterable of ids'%key) 
                 # clean up and validate the list of links
                 link_class = self.properties[key].classname
@@ -1874,7 +1874,7 @@
             elif isinstance(prop, Multilink):
                 if value is None:
                     value = []
-                if not hasattr(value, '__iter__'):
+                if not hasattr(value, '__iter__') or type(value) == type(''):
                     raise TypeError('new property "%s" not an iterable of'
                         ' ids'%propname)
                 link_class = self.properties[propname].classname

Roundup Issue Tracker: http://roundup-tracker.org/