On 26/02/2019 04:42, Nir Soffer wrote: > On Mon, Feb 25, 2019 at 10:36 PM Eduardo Habkost <ehabk...@redhat.com > <mailto:ehabk...@redhat.com>> wrote: > > On Fri, Feb 22, 2019 at 02:26:13PM +0300, Andrey Shinkevich wrote: > > The data type for bytes in Python3 differs from the one in Python2. > > Those cases should be managed separately. > > > > v1: > > In the first version, the TypeError in Python3 was handled as the > > exception. > > Discussed in the e-mail thread with the Message ID: > > > <1550519997-253534-1-git-send-email-andrey.shinkev...@virtuozzo.com > > <mailto:1550519997-253534-1-git-send-email-andrey.shinkev...@virtuozzo.com>> > > > > Signed-off-by: Andrey Shinkevich <andrey.shinkev...@virtuozzo.com > <mailto:andrey.shinkev...@virtuozzo.com>> > > Reported-by: Kevin Wolf <kw...@redhat.com <mailto:kw...@redhat.com>> > > --- > > tests/qemu-iotests/242 | 8 ++++++-- > > 1 file changed, 6 insertions(+), 2 deletions(-) > > > > diff --git a/tests/qemu-iotests/242 b/tests/qemu-iotests/242 > > index 16c65ed..446fbf8 100755 > > --- a/tests/qemu-iotests/242 > > +++ b/tests/qemu-iotests/242 > > @@ -20,6 +20,7 @@ > > > > import iotests > > import json > > +import sys > > from iotests import qemu_img_create, qemu_io, qemu_img_pipe, \ > > file_path, img_info_log, log, filter_qemu_io > > > > @@ -65,9 +66,12 @@ def toggle_flag(offset): > > with open(disk, "r+b") as f: > > f.seek(offset, 0) > > c = f.read(1) > > - toggled = chr(ord(c) ^ bitmap_flag_unknown) > > + toggled = ord(c) ^ bitmap_flag_unknown > > f.seek(-1, 1) > > - f.write(toggled) > > + if sys.version_info.major >= 3: > > + f.write(bytes([toggled])) > > + else: > > + f.write(chr(toggled)) > > Pretending we are dealing with text strings and using str/ord is > a python2-specific quirk. I think it would be nice to get rid of > it. > > Python 2 has bytearray(), which behaves more similarly to the > bytes type from Python 3. If we use it, we can make the code > more python3-like: > > diff --git a/tests/qemu-iotests/242 b/tests/qemu-iotests/242 > index 16c65edcd7..7794fd4a70 100755 > --- a/tests/qemu-iotests/242 > +++ b/tests/qemu-iotests/242 > @@ -64,10 +64,12 @@ def write_to_disk(offset, size): > def toggle_flag(offset): > with open(disk, "r+b") as f: > f.seek(offset, 0) > - c = f.read(1) > - toggled = chr(ord(c) ^ bitmap_flag_unknown) > + # The casts to bytearray() below are only necessary > + # for Python 2 compatibility > + c = bytearray(f.read(1))[0] > > > This is simpler and makes the intent of the code more clear: > > flag, = struct.unpack("B", f.read(1)) > > + toggled = c ^ bitmap_flag_unknown > f.seek(-1, 1) > - f.write(toggled) > + f.write(bytearray([toggled])) > > > For consistency, we can use struct.pack here: > > f.write(struct.pack("B", toggled)) > > Nir >
Thank you all. I am OK with this approach. Will wait for Eric's response. > > > qemu_img_create('-f', iotests.imgfmt, disk, '1M') > > -- > Eduardo > -- With the best regards, Andrey Shinkevich