Comment 2 for bug 1610125

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

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 StringIO to suds.BytesIO(string), will raise like above.

So, in order to make it work with suds, in oslo_vmware/service.py, we have to use six.BytesIO(resp.content) instead in py3.