On 10.05.2016 21:11, Stefan Fuhrmann wrote: > On 10.05.2016 16:34, Branko Čibej wrote: >> On 10.05.2016 16:29, stef...@apache.org wrote: >>> Author: stefan2 >>> Date: Tue May 10 14:29:56 2016 >>> New Revision: 1743195 >>> >>> URL: http://svn.apache.org/viewvc?rev=1743195&view=rev >>> Log: >>> Follow-up to r1743183: Unbreak FSFS svnadmin tests. >>> >>> * subversion/tests/cmdline/svntest/main.py >>> (ensure_list): Converting strings and bytes to lists is a special >>> case. >>> Before that, each "element" in them would become a >>> separate >>> list element. >>> >>> Modified: >>> subversion/trunk/subversion/tests/cmdline/svntest/main.py >>> >>> Modified: subversion/trunk/subversion/tests/cmdline/svntest/main.py >>> URL: >>> http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/svntest/main.py?rev=1743195&r1=1743194&r2=1743195&view=diff >>> ============================================================================== >>> >>> --- subversion/trunk/subversion/tests/cmdline/svntest/main.py >>> (original) >>> +++ subversion/trunk/subversion/tests/cmdline/svntest/main.py Tue >>> May 10 14:29:56 2016 >>> @@ -379,6 +379,8 @@ def ensure_list(item): >>> "If ITEM is not already a list, convert it to a list." >>> if isinstance(item, list): >>> return item >>> + elif isinstance(item, bytes) or isinstance(item, str): >>> + return [ item ] >>> else: >>> return list(item) >> >> I think this is overkill and possibly wrong (and may have been wrong >> before, too); the code should probably just be: >> >> if isinstance(item, list): >> return item >> else: >> return [item] >> >> >> There's no reason to have a third option, unless you also want to >> convert tuples to lists — but in that case I'd prefer to have an >> explicit check for 'isinstance(item, tuple)' instead of explicit checks >> for strings and byte sequences. > The list construction is there to convert from iterators > (e.g. map, filter) to "proper" lists in Python 3. The strings > special case is mainly carried over from various local > incarnations of that logic.
Ah ... I don't think this is limited to Python 3, 2.7 has generators, too. So ack. > Is there a base class for iterators which is also known > to Python 2 (doesn't need to be used there) ? No, iterators and generators don't have a common class hierarchy. In this the way the code looks now is pretty much the best one can do. You could mess about with something like this: try: return list(iter(item)) except TypeError: return [item] but that will happily consume all strings one byte/char at a time, so you'd still need an extra condition around it. -- Brane