[ovs-dev] [PATCH 11/11] python: Deal with str and byte differences.

Russell Bryant russell at ovn.org
Tue Feb 2 22:04:19 UTC 2016


On 02/02/2016 04:34 PM, Russell Bryant wrote:
> On 02/02/2016 04:24 PM, Ben Pfaff wrote:
>> On Fri, Jan 22, 2016 at 09:32:33PM -0500, Russell Bryant wrote:
>>> Python 3 has separate types for strings and bytes.  Python 2 used the
>>> same type for both.  We need to convert strings to bytes before writing
>>> them out to a socket.  We also need to convert data read from the socket
>>> to a string.
>>>
>>> Signed-off-by: Russell Bryant <russell at ovn.org>
>>> ---
>>>  python/ovs/jsonrpc.py     | 10 ++++++++++
>>>  python/ovs/socket_util.py |  3 +++
>>>  python/ovs/stream.py      |  6 ++++++
>>>  3 files changed, 19 insertions(+)
>>>
>>> diff --git a/python/ovs/jsonrpc.py b/python/ovs/jsonrpc.py
>>> index efe0f6c..5177980 100644
>>> --- a/python/ovs/jsonrpc.py
>>> +++ b/python/ovs/jsonrpc.py
>>> @@ -264,6 +264,16 @@ class Connection(object):
>>>          while True:
>>>              if not self.input:
>>>                  error, data = self.stream.recv(4096)
>>> +                # Python 3 has separate types for strings and bytes.  We
>>> +                # received bytes from a socket.  We expect it to be string
>>> +                # data, so we convert it here as soon as possible.
>>> +                if (data and not error
>>> +                        and not isinstance(data, six.string_types)):
>>> +                    try:
>>> +                        data = data.decode('utf-8')
>>> +                    except UnicodeError:
>>> +                        # XXX Illegal byte sequence. Is there a better errno?
>>> +                        error = errno.EILSEQ
>>
>> Isn't EILSEQ perfect for this?
> 
> That was my best guess.  Thanks for ACKing the choice.  I'll remove the
> comment.  :-)
> 
>> Acked-by: Ben Pfaff <blp at ovn.org>
>>
> 
> 

Thanks for the reviews!  I pushed this series to master.

-- 
Russell Bryant



More information about the dev mailing list