[ovirt-users] Python-SDK4: Managing accents?

nicolas at devels.es nicolas at devels.es
Tue Jun 13 12:43:09 UTC 2017


El 2017-06-13 13:30, Juan Hernández escribió:
> On 06/13/2017 01:58 PM, nicolas at devels.es wrote:
>> Currently all our scripts are python2-based, not sure if running them
>> with Python3 would need a major change, but currently we're happy with
>> Python2. I'm still not clear if this is a bug or an additional option
>> should be supplied in order to make this work.
>> 
>> Thanks.
>> 
> 
> It is a but. I think it was introduced recently. Please try to use
> version 4.1.3 and check if it works correctly. Open a bug reporting the
> results. We will probably need to do something like this to fix it:
> 
>   Fix parsing of multi-byte UTF-8 characters
>   https://gerrit.ovirt.org/78112
> 

Done [1].

Thanks!

   [1]: https://bugzilla.redhat.com/show_bug.cgi?id=1461060

>> El 2017-06-12 14:48, Fabrice Bacchella escribió:
>>> Did you try with python 3 ? UTF management changed a lot with this
>>> version, it might works better in your case.
>>> 
>>>> Le 12 juin 2017 à 12:33, nicolas at devels.es a écrit :
>>>> 
>>>> Hi,
>>>> 
>>>> We're running Python SDK (ovirt-engine-sdk-python) ver 4.1.4 and
>>>> we're having some issues getting values that contain accents. For
>>>> example, this snippet fails:
>>>> 
>>>>    import ovirtsdk4 as sdk
>>>>    import ovirtsdk4.types as types
>>>> 
>>>>    # Create the connection to the server:
>>>>    connection = sdk.Connection(
>>>>        url='https://fqdn/ovirt-engine/api',
>>>>        username='...',
>>>>        password='...',
>>>>        ca_file='...',
>>>>        debug=True,
>>>>    )
>>>> 
>>>>    users_service = connection.system_service().users_service()
>>>>    users = users_service.list()
>>>> 
>>>>    connection.close()
>>>> 
>>>> This snippet fails in the "users = users_service.list()" line,
>>>> because one of the records have a tilde (ó).
>>>> 
>>>> The trace is:
>>>> Traceback (most recent call last):
>>>>  File "lista_users", line 23, in <module>
>>>>    users = users_service.list()
>>>>  File
>>>> "/home/ovirt/prueba/ejemplo2/lib/python2.7/site-packages/ovirtsdk4/services.py",
>>>> line 22155, in list
>>>>    return self._internal_get(headers, query, wait)
>>>>  File
>>>> "/home/ovirt/prueba/ejemplo2/lib/python2.7/site-packages/ovirtsdk4/service.py",
>>>> line 202, in _internal_get
>>>>    return future.wait() if wait else future
>>>>  File
>>>> "/home/ovirt/prueba/ejemplo2/lib/python2.7/site-packages/ovirtsdk4/service.py",
>>>> line 53, in wait
>>>>    return self._code(response)
>>>>  File
>>>> "/home/ovirt/prueba/ejemplo2/lib/python2.7/site-packages/ovirtsdk4/service.py",
>>>> line 197, in callback
>>>>    return self._internal_read_body(response)
>>>>  File
>>>> "/home/ovirt/prueba/ejemplo2/lib/python2.7/site-packages/ovirtsdk4/service.py",
>>>> line 310, in _internal_read_body
>>>>    return reader.Reader.read(response.body)
>>>>  File
>>>> "/home/ovirt/prueba/ejemplo2/lib/python2.7/site-packages/ovirtsdk4/reader.py",
>>>> line 297, in read
>>>>    cursor = xml.XmlReader(io.BytesIO(source.encode('utf-8')))
>>>> UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position
>>>> 1899: ordinal not in range(128)
>>>> 
>>>> Opening the source code (ovirtsdk4/reader.py) file and seeking the
>>>> exact line that fails I can see:
>>>> 
>>>>        if isinstance(source, str):
>>>>            cursor = 
>>>> xml.XmlReader(io.BytesIO(source.encode('utf-8')))
>>>> 
>>>> If I add a line just after the 'if' being "cursor =
>>>> cursor.decode('utf-8')", it seems to work, but I guess the source
>>>> code should handle this kind of situations.
>>>> 
>>>> Is this a known issue? Should I open a BZ? Any workaround meanwhile?
>>>> 
>>>> Thanks.
>>>> _______________________________________________
>>>> Users mailing list
>>>> Users at ovirt.org
>>>> http://lists.ovirt.org/mailman/listinfo/users
>> _______________________________________________
>> Users mailing list
>> Users at ovirt.org
>> http://lists.ovirt.org/mailman/listinfo/users


More information about the Users mailing list