Red Hat Bugzilla – Bug 834389
xml-rpc throws "cannot marshal None unless allow_none is enabled" error
Last modified: 2014-08-12 00:34:19 EDT
Description of problem:
Here is a code snappet to reproduce the issue:
>>> lab_controller = "lab-02.rhts.eng.bos.redhat.com"
>>> server = xmlrpclib.ServerProxy("http://"+lab_controller+":8000", allow_none=True)
>>> testinfo = server.task_to_dict("/kernel/filesystems/nfs/bz803431")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib64/python2.6/xmlrpclib.py", line 1199, in __call__
return self.__send(self.__name, args)
File "/usr/lib64/python2.6/xmlrpclib.py", line 1489, in __request
File "/usr/lib64/python2.6/xmlrpclib.py", line 1253, in request
return self._parse_response(h.getfile(), sock)
File "/usr/lib64/python2.6/xmlrpclib.py", line 1392, in _parse_response
File "/usr/lib64/python2.6/xmlrpclib.py", line 838, in close
xmlrpclib.Fault: <Fault 1: "<type 'exceptions.TypeError'>:cannot marshal None unless allow_none is enabled">
Version-Release number of selected component (if applicable):
Steps to Reproduce:
1. see above
The task in question has a NULL priority, which Task.to_dict returns as None:
priority = self.priority,
task_to_dict seems to work for tasks with a priority specified.
Ok, so what's the solution here? Can the call be modified in the lab controller to maybe return a null string or something instead of None?
That was just an example task, we should be able to get info from all tasks, so changing the tasks is not scalable.
I agree this shouldn't happen but it will need to be fixed on the server side (the lab controller just proxies the call).
It looks like there could be a couple other cases in the same block susceptible to similar errors.
On gerrit, but there is the question of why we can't just allow marshalling none:
*** This bug has been marked as a duplicate of bug 670868 ***