qemu-block
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-block] [PATCH 8/9] iotests: Modify imports for Python 3


From: Max Reitz
Subject: Re: [Qemu-block] [PATCH 8/9] iotests: Modify imports for Python 3
Date: Fri, 19 Oct 2018 11:25:19 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.0

On 16.10.18 02:12, Eduardo Habkost wrote:
> On Mon, Oct 15, 2018 at 08:05:02PM -0400, Cleber Rosa wrote:
>>
>>
>> On 10/15/18 5:17 PM, Eduardo Habkost wrote:
>>> On Mon, Oct 15, 2018 at 04:14:52PM +0200, Max Reitz wrote:
>>>> There are two imports that need to be modified when running the iotests
>>>> under Python 3: One is StringIO, which no longer exists; instead, the
>>>> StringIO class comes from the io module, so import it from there.  The
>>>> other is the ConfigParser, which has just been renamed to configparser.
>>>>
>>>> Signed-off-by: Max Reitz <address@hidden>
>>>> ---
>>>>  tests/qemu-iotests/iotests.py            | 8 ++++++--
>>>>  tests/qemu-iotests/nbd-fault-injector.py | 7 +++++--
>>>>  2 files changed, 11 insertions(+), 4 deletions(-)
>>>>
>>>> diff --git a/tests/qemu-iotests/iotests.py b/tests/qemu-iotests/iotests.py
>>>> index 7ca94e9278..a64ea90fb4 100644
>>>> --- a/tests/qemu-iotests/iotests.py
>>>> +++ b/tests/qemu-iotests/iotests.py
>>>> @@ -683,13 +683,17 @@ def main(supported_fmts=[], 
>>>> supported_oses=['linux'], supported_cache_modes=[],
>>>>  
>>>>      # We need to filter out the time taken from the output so that 
>>>> qemu-iotest
>>>>      # can reliably diff the results against master output.
>>>> -    import StringIO
>>>> +    if sys.version_info.major >= 3:
>>>> +        from io import StringIO
>>>> +    else:
>>>> +        from StringIO import StringIO
>>>
>>> Considering that io.StringIO exists on Python 2.7, a comment
>>> explaining why exactly it doesn't work would be nice.

Oh, it does exist?  I didn't know. O:-)

So I suppose it's because the test runner emits just normal strings,
which in 2.x are byte strings; but io's StringIO always expects Unicode
strings.  StringIO, OTOH, accepts both (and returns Unicode strings once
you put a Unicode string into it).

>> Another possibility, that I find self explanatory:
>>
>> import io
>>
>> if sys.version_info.major >= 3:
>>    output = io.StringIO()
>> else:
>>    output = io.BytesIO()
> 
> Looks nice and clean.
> 
> But I'm not sure all output sent to `output` when running with
> Python 2 will be byte strings.  What if `unittest.TextTestRunner`
> tries to write unicode strings to `output`?

Hm.  It doesn't look this way to me in practice.  And considering that
it only really prints a test summary, I don't think there are edge cases
where it behaves differently.

So I think using BytesIO() in 2.x is better.

Max

Attachment: signature.asc
Description: OpenPGP digital signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]