PyTest plugin using xmlrpclib fails with IOError: "unsupported XML-RPC protocol" on Mac OS X

Eric picture Eric · Jun 14, 2012 · Viewed 7.9k times · Source

When running py.test using a plugin that loads xmlrpclib the test run fails with:

INTERNALERROR> Traceback (most recent call last):
INTERNALERROR> File "/Library/Python/2.7/site-packages/pytest-2.2.4-py2.7.egg/_pytest/main.py", line 70, in wrap_session
INTERNALERROR> config.pluginmanager.do_configure(config)
INTERNALERROR> File "/Library/Python/2.7/site-packages/pytest-2.2.4-py2.7.egg/_pytest/core.py", line 267, in do_configure
INTERNALERROR> config.hook.pytest_configure(config=self._config)
INTERNALERROR> File "/Library/Python/2.7/site-packages/pytest-2.2.4-py2.7.egg/_pytest/core.py",line 421, in call
INTERNALERROR> return self._docall(methods, kwargs)
INTERNALERROR> File "/Library/Python/2.7/site-packages/pytest-2.2.4-py2.7.egg/_pytest/core.py",line 432, in _docall INTERNALERROR> res = mc.execute()
INTERNALERROR> File "/Library/Python/2.7/site-packages/pytest-2.2.4-py2.7.egg/_pytest/core.py",line 350, in execute
INTERNALERROR> res = method(**kwargs)
INTERNALERROR> File "/Library/Python/2.7/site-packages/pytest_marker_bugzilla-0.01-py2.7.egg/pytest_marker_bugzilla.py",line 94, in pytest_configure
INTERNALERROR> bz = bugzilla.Bugzilla(url=url)
INTERNALERROR> File "build/bdist.macosx-10.7-intel/egg/bugzilla/init.py", line 75, in init
INTERNALERROR> c = getBugzillaClassForURL(kwargs['url'])
INTERNALERROR> File "build/bdist.macosx-10.7-intel/egg/bugzilla/init.py", line 26, in getBugzillaClassForURL
INTERNALERROR> s = xmlrpclib.ServerProxy(url)
INTERNALERROR> File "build/bdist.macosx-10.7-intel/egg/xmlrpclib.py", line 1215, in init
INTERNALERROR> raise IOError, "unsupported XML-RPC protocol"
INTERNALERROR> > > IOError: unsupported XML-RPC protocol

I have verified that xmlrpclib will work with a simple test program, this program removes py.test from the picture.

#!/usr/bin/env python

import xmlrpclib
import bugzilla
import sys
for i in sys.path:
    print i

url = 'https://bugzilla.redhat.com/xmlrpc.cgi'
u = ' '
p = ' '

try:
    proxy = xmlrpclib.ServerProxy(url)
except(), e:
    print e
b = bugzilla.Bugzilla(url=url)
b.login(u,p)
bug = b.getbugsimple('12345')
print bug

The program above when executed returns as expected. I am at a loss for what is going on here. I have even added print sys.path to both py.test and the test program above and found that the paths are identical with the exception of the execute directory, /Users/esammons for the test.py and /usr/local/bin for py.test.

To further rule out issues I copied /usr/local/bin/py.test and /usr/local/bin/py.test-2.7 to my project root, same error occurred.

Thanks!

Answer

Eric picture Eric · Jun 19, 2012

The issue was caused by the formatting of my values in my cfg file. I'm using ConfigParser to parse my config file; the cfg file has the following format.

[DEFAULT]
key = value
key2 = value
key3 = value

The issue was caused by my wrapping the value in quotes ('value'). Specifically:

WRONG

bugzilla_url = 'https://bugzilla.example.com/xmlrpc.cgi'

RIGHT

bugzilla_url = https://bugzilla.example.com/xmlrpc.cgi