libcloud-notifications mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Connor Osborn (JIRA)" <j...@apache.org>
Subject [jira] [Comment Edited] (LIBCLOUD-306) XML response with utf-8 charset break thing with python 2
Date Sat, 17 Feb 2018 02:19:00 GMT

    [ https://issues.apache.org/jira/browse/LIBCLOUD-306?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16368072#comment-16368072
] 

Connor Osborn edited comment on LIBCLOUD-306 at 2/17/18 2:18 AM:
-----------------------------------------------------------------

Ran into this issue, and it got the better of my curiosity. The cause is that libcloud doesn't
have python 2 compatible \_\_repr\_\_ methods. In python 2 the {{repr}} builtin expects
a \_\_repr\_\_ method which returns an ascii string (or something coercible to an ascii string). 
It's required because {{repr}} will translate the result of {{X.repr}} to ascii.

In the case of [Node.__repr|https://github.com/apache/libcloud/blob/408caa9c95a197578baede0a5a1476e9201486e7/libcloud/compute/base.py#L260-L266]__, if
the node's name contains characters outside of ascii, then whenever {{repr(node)}} is called
the unicode string returned from {{repr}} will fail to be encoded as ascii.

It looks like in python 3 the opposite is true, {{repr}} should return unicode strings.

The builtin {{str}} has all the same caveats. 

This can also easily be replicated by stubbing out a simple class:
{code:java}
class Foo:
    def __repr__(self):
        return u'\xe0'

> repr(Foo())
> str(Foo())
{code}


was (Author: cdosborn):
Ran into this issue, and it got the better of my curiosity. The cause is that libcloud doesn't
have python 2 compatible \_\_repr\_\_ methods. In python 2 the {{repr}} builtin expects
a repr method which returns an ascii string (or something coercible to an ascii string). 
It's required because {{repr}} will translate the result of {{X.repr}} to ascii.

In the case of [Node.__repr|https://github.com/apache/libcloud/blob/408caa9c95a197578baede0a5a1476e9201486e7/libcloud/compute/base.py#L260-L266]__, if
the node's name contains characters outside of ascii, then whenever {{repr(node)}} is called
the unicode string returned from {{repr}} will fail to be encoded as ascii.

It looks like in python 3 the opposite is true, {{repr}} should return unicode strings.

The builtin {{str}} has all the same caveats. 

This can also easily be replicated by stubbing out a simple class:
{code:java}
class Foo:
    def __repr__(self):
        return u'\xe0'

> repr(Foo())
> str(Foo())
{code}

> XML response with utf-8 charset break thing with python 2
> ---------------------------------------------------------
>
>                 Key: LIBCLOUD-306
>                 URL: https://issues.apache.org/jira/browse/LIBCLOUD-306
>             Project: Libcloud
>          Issue Type: Bug
>         Environment: ubuntu 12.04, python 2.7, opennebula 3.8
>            Reporter: Guillaume ZITTA
>            Priority: Critical
>         Attachments: debug.log, test_utf.py, utf-8_python2.patch, utf-8_python2_xml.workaround.patch
>
>
> We have an opennebula with French accents in networks names.
> Listing networks leads to a crash because of these accents in the XML response of the
cloud.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Mime
View raw message