TypeError: six.StringIO(resp.content) must be str or None, not bytes

Bug #1610125 reported by Haifeng.Yan
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
oslo.vmware
Fix Released
Undecided
Haifeng.Yan

Bug Description

using the example from https://github.com/openstack/oslo.vmware/blob/master/doc/source/usage.rst

output:
# python vmware.py
/root/haven/env/lib/python3.4/site-packages/requests/packages/urllib3/connectionpool.py:821: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.org/en/latest/security.html
  InsecureRequestWarning)
Traceback (most recent call last):
  File "vmware.py", line 65, in <module>
    vmware = VirtualMachine('xxxxxxxxx', 'xxx', 'xxxxxxx')
  File "vmware.py", line 57, in __init__
    retries=0.1, interval=10)
  File "vmware.py", line 50, in __init__
    self.sess = get_session(host, username, password, retries, interval)
  File "vmware.py", line 19, in get_session
    interval,
  File "/root/haven/env/lib/python3.4/site-packages/oslo_vmware/api.py", line 184, in __init__
    self._create_session()
  File "/root/haven/env/lib/python3.4/site-packages/oslo_vmware/api.py", line 123, in func
    return evt.wait()
  File "/root/haven/env/lib/python3.4/site-packages/eventlet/event.py", line 121, in wait
    return hubs.get_hub().switch()
  File "/root/haven/env/lib/python3.4/site-packages/eventlet/hubs/hub.py", line 294, in switch
    return self.greenlet.switch()
  File "/root/haven/env/lib/python3.4/site-packages/oslo_vmware/common/loopingcall.py", line 124, in _inner
    idle = self.f(*self.args, **self.kw)
  File "/root/haven/env/lib/python3.4/site-packages/oslo_vmware/api.py", line 96, in _func
    result = f(*args, **kwargs)
  File "/root/haven/env/lib/python3.4/site-packages/oslo_concurrency/lockutils.py", line 271, in inner
    return f(*args, **kwargs)
  File "/root/haven/env/lib/python3.4/site-packages/oslo_vmware/api.py", line 231, in _create_session
    session_manager = self.vim.service_content.sessionManager
  File "/root/haven/env/lib/python3.4/site-packages/oslo_vmware/api.py", line 200, in vim
    pool_maxsize=self._pool_size)
  File "/root/haven/env/lib/python3.4/site-packages/oslo_vmware/vim.py", line 44, in __init__
    pool_maxsize)
  File "/root/haven/env/lib/python3.4/site-packages/oslo_vmware/service.py", line 201, in __init__
    cache=_CACHE)
  File "/root/haven/env/lib/python3.4/site-packages/suds/client.py", line 115, in __init__
    self.wsdl = reader.open(url)
  File "/root/haven/env/lib/python3.4/site-packages/suds/reader.py", line 150, in open
    d = self.fn(url, self.options)
  File "/root/haven/env/lib/python3.4/site-packages/suds/wsdl.py", line 136, in __init__
    d = reader.open(url)
  File "/root/haven/env/lib/python3.4/site-packages/suds/reader.py", line 74, in open
    d = self.download(url)
  File "/root/haven/env/lib/python3.4/site-packages/suds/reader.py", line 92, in download
    fp = self.options.transport.open(Request(url))
  File "/root/haven/env/lib/python3.4/site-packages/oslo_vmware/service.py", line 149, in open
    return six.StringIO(resp.content)
TypeError: initial_value must be str or None, not bytes

Revision history for this message
Haifeng.Yan (yanheven) wrote :

in py2, using requests, type(response.conten)=unicode, six.StringIO(resp.content) is fine.
but in py3, type(response.conten)=byte, six.StringIO(resp.content) will raise TypeError: initial_value must be str or None, not bytes.

suggest:
in py3, use six.BytesIO(resp.content) instead.

Haifeng.Yan (yanheven)
summary: - TypeError: initial_value must be str or None, not bytes
+ TypeError: six.StringIO(resp.content) must be str or None, not bytes
Haifeng.Yan (yanheven)
description: updated
Changed in oslo.vmware:
assignee: nobody → Haifeng.Yan (yanheven)
Revision history for this message
Haifeng.Yan (yanheven) wrote :
Download full text (3.3 KiB)

change File "/root/haven/env/lib/python3.4/site-packages/oslo_vmware/service.py", line 149, in open to folowing:

    return six.StringIO(resp.text)

will raise:

Traceback (most recent call last):
  File "vmware.py", line 149, in <module>
    vmware = VirtualMachine('192.85.168.132', 'toolchain', password)
  File "vmware.py", line 64, in __init__
    interval=interval)
  File "vmware.py", line 48, in __init__
    self.sess = get_session(host, username, password, retries, interval)
  File "vmware.py", line 19, in get_session
    interval,
  File "/root/haven/env/lib/python3.4/site-packages/oslo_vmware/api.py", line 184, in __init__
    self._create_session()
  File "/root/haven/env/lib/python3.4/site-packages/oslo_vmware/api.py", line 123, in func
    return evt.wait()
  File "/root/haven/env/lib/python3.4/site-packages/eventlet/event.py", line 121, in wait
    return hubs.get_hub().switch()
  File "/root/haven/env/lib/python3.4/site-packages/eventlet/hubs/hub.py", line 294, in switch
    return self.greenlet.switch()
  File "/root/haven/env/lib/python3.4/site-packages/oslo_vmware/common/loopingcall.py", line 124, in _inner
    idle = self.f(*self.args, **self.kw)
  File "/root/haven/env/lib/python3.4/site-packages/oslo_vmware/api.py", line 96, in _func
    result = f(*args, **kwargs)
  File "/root/haven/env/lib/python3.4/site-packages/oslo_concurrency/lockutils.py", line 271, in inner
    return f(*args, **kwargs)
  File "/root/haven/env/lib/python3.4/site-packages/oslo_vmware/api.py", line 231, in _create_session
    session_manager = self.vim.service_content.sessionManager
  File "/root/haven/env/lib/python3.4/site-packages/oslo_vmware/api.py", line 200, in vim
    pool_maxsize=self._pool_size)
  File "/root/haven/env/lib/python3.4/site-packages/oslo_vmware/vim.py", line 44, in __init__
    pool_maxsize)
  File "/root/haven/env/lib/python3.4/site-packages/oslo_vmware/service.py", line 204, in __init__
    cache=_CACHE)
  File "/root/haven/env/lib/python3.4/site-packages/suds/client.py", line 115, in __init__
    self.wsdl = reader.open(url)
  File "/root/haven/env/lib/python3.4/site-packages/suds/reader.py", line 150, in open
    d = self.fn(url, self.options)
  File "/root/haven/env/lib/python3.4/site-packages/suds/wsdl.py", line 136, in __init__
    d = reader.open(url)
  File "/root/haven/env/lib/python3.4/site-packages/suds/reader.py", line 74, in open
    d = self.download(url)
  File "/root/haven/env/lib/python3.4/site-packages/suds/reader.py", line 100, in download
    return sax.parse(string=content)
  File "/root/haven/env/lib/python3.4/site-packages/suds/sax/parser.py", line 132, in parse
    source.setByteStream(suds.BytesIO(string))
TypeError: 'str' does not support the buffer interface

as I dive into suds's source code, found this:
https://bitbucket.org/jurko/suds/src/94664ddd46a61d06862fa8fb6ba7b9e054214f57/suds/__init__.py?at=default&fileviewer=file-view-default#__init__.py-130

if sys.version_info < (3, 0):
    from cStringIO import StringIO as BytesIO
else:
    from io import BytesIO

py2 using StringIO as BytesIO, but py3 using real BytesIO, so when "return six.StringIO(resp.text)" in oslo_vmware/service.py will pass Str...

Read more...

Revision history for this message
Davanum Srinivas (DIMS) (dims-v) wrote : Fix included in openstack/oslo.vmware 2.14.0

This issue was fixed in the openstack/oslo.vmware 2.14.0 release.

Haifeng.Yan (yanheven)
Changed in oslo.vmware:
status: New → Fix Released
Revision history for this message
OpenStack Infra (hudson-openstack) wrote :

This issue was fixed in the openstack/oslo.vmware 2.14.0 release.

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.