[Tarantool-patches] [PATCH 3/4] test: make convert to hex compatible with Python 3.x

Leonid Vasiliev lvasiliev at tarantool.org
Thu Dec 17 21:26:08 MSK 2020


Hi!

On 16.12.2020 17:04, Sergey Bronnikov wrote:
> Hello,
> 
> 
> On 15.12.2020 14:55, Leonid Vasiliev wrote:
>> Hi! Thank you for the patch.
>>
>> On 11.12.2020 11:42, Sergey Bronnikov via Tarantool-patches wrote:
>>> From: Sergey Bronnikov <sergeyb at tarantool.org>
>>>
>>> Part of #5538
>>> ---
>>>   test/box-py/iproto.test.py | 6 +++++-
>>>   1 file changed, 5 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/test/box-py/iproto.test.py b/test/box-py/iproto.test.py
>>> index 25ead43c4..72400923c 100644
>>> --- a/test/box-py/iproto.test.py
>>> +++ b/test/box-py/iproto.test.pyHi
>>> @@ -191,7 +191,11 @@ for test in TESTS:
>>>       print("STR", size)
>>>       print("--")
>>>       for fmt in it:
>>> -        print("0x" + fmt.encode("hex"), "=>", end=" ")
>>> +        try:
>>> +            # Python 3
>>> +            print("0x" + "hex".encode("utf-8").hex(), "=>", end=" ")
>>
>> Maybe fmt.encode("utf-8").hex()?
> 
> I would be glad to use it in Python 3, but fmt module was removed there.

Sorry, but I don't understand which module "fmt" you mean. I don't see
any `import fmt...` here. AFAIU `fmt` in this context is a string from
one of the tuples from the list `TESTS`.

So, I copy this hunk:
```
from __future__ import print_function

TESTS = [
     (1,     "\xa1", "\xd9\x01", "\xda\x00\x01", "\xdb\x00\x00\x00\x01"),
     (31,    "\xbf", "\xd9\x1f", "\xda\x00\x1f", "\xdb\x00\x00\x00\x1f"),
     (32,    "\xd9\x20", "\xda\x00\x20", "\xdb\x00\x00\x00\x20"),
     (255,   "\xd9\xff", "\xda\x00\xff", "\xdb\x00\x00\x00\xff"),
     (256,   "\xda\x01\x00", "\xdb\x00\x00\x01\x00"),
     (65535, "\xda\xff\xff", "\xdb\x00\x00\xff\xff"),
     (65536, "\xdb\x00\x01\x00\x00"),
]

for test in TESTS:
     it = iter(test)
     size = next(it)
     print("STR", size)
     print("--")
     for fmt in it:
         try:
             # Python 3
             print("0x" + "hex".encode("utf-8").hex(), "=>", end=" ")
         except AttributeError:
             print("0x" + fmt.encode("hex"), "=>", end=" ")
         print()
     print()
```

and run it on python2 and python3.
Results doesn't look identically.

Python2:
```
┌─[leonid at vasya-L460]─[~/work/mail/tarantool/tmp]
└──╼ python2 test.py
STR 1
--
0xa1 =>
0xd901 =>
0xda0001 =>
0xdb00000001 =>

STR 31
--
0xbf =>
0xd91f =>
0xda001f =>
0xdb0000001f =>

STR 32
--
0xd920 =>
0xda0020 =>
0xdb00000020 =>

STR 255
--
0xd9ff =>
0xda00ff =>
0xdb000000ff =>

STR 256
--
0xda0100 =>
0xdb00000100 =>

STR 65535
--
0xdaffff =>
0xdb0000ffff =>

STR 65536
--
0xdb00010000 =>

```

Python3:
```
┌─[leonid at vasya-L460]─[~/work/mail/tarantool/tmp]
└──╼ python3 test.py
STR 1
--
0x686578 =>
0x686578 =>
0x686578 =>
0x686578 =>

STR 31
--
0x686578 =>
0x686578 =>
0x686578 =>
0x686578 =>

STR 32
--
0x686578 =>
0x686578 =>
0x686578 =>

STR 255
--
0x686578 =>
0x686578 =>
0x686578 =>

STR 256
--
0x686578 =>
0x686578 =>

STR 65535
--
0x686578 =>
0x686578 =>

STR 65536
--
0x686578 =>

```

Am I doing something wrong or a bug in the patch?

> 
> 
>> Please, add a comment that describing the difference between python2 and
>> python3 in this print.
>>
> Added comment to a commit message and force-pushed.
>>> +        except AttributeError:
>>> +            print("0x" + fmt.encode("hex"), "=>", end=" ")
>>>           field = "*" * size
>>>           c._send_request(RawInsert(c, space_id, "\x91" + fmt + field))
>>>           tuple = space.select(field)[0]
>>>


More information about the Tarantool-patches mailing list