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

Reply via email to