Bug 834389 - xml-rpc throws "cannot marshal None unless allow_none is enabled" error
xml-rpc throws "cannot marshal None unless allow_none is enabled" error
Status: CLOSED DUPLICATE of bug 670868
Product: Beaker
Classification: Community
Component: lab controller (Show other bugs)
Unspecified Unspecified
unspecified Severity unspecified (vote)
: ---
: ---
Assigned To: Steven Lawrance
Depends On:
  Show dependency treegraph
Reported: 2012-06-21 14:26 EDT by Gurhan Ozen
Modified: 2014-08-12 00:34 EDT (History)
5 users (show)

See Also:
Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of:
Last Closed: 2012-07-13 00:42:48 EDT
Type: Bug
Regression: ---
Mount Type: ---
Documentation: ---
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---

Attachments (Terms of Use)

  None (edit)
Description Gurhan Ozen 2012-06-21 14:26:45 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
    return u.close()
  File "/usr/lib64/python2.6/xmlrpclib.py", line 838, in close
    raise Fault(**self._stack[0])
xmlrpclib.Fault: <Fault 1: "<type 'exceptions.TypeError'>:cannot marshal None unless allow_none is enabled">

Version-Release number of selected component (if applicable):

How reproducible:

Steps to Reproduce:
1. see above
Actual results:

Expected results:

Additional info:
Comment 1 Steven Lawrance 2012-06-21 15:40:31 EDT
The task in question has a NULL priority, which Task.to_dict returns as None:

return dict(...
    priority = self.priority,

task_to_dict seems to work for tasks with a priority specified.
Comment 2 Gurhan Ozen 2012-06-22 11:05:24 EDT
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.
Comment 3 Steven Lawrance 2012-06-22 13:47:26 EDT
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.
Comment 4 Gurhan Ozen 2012-06-23 12:53:21 EDT
Thanks Steven!
Comment 8 Steven Lawrance 2012-07-12 14:38:45 EDT
On gerrit, but there is the question of why we can't just allow marshalling none:
Comment 9 Dan Callaghan 2012-07-13 00:42:48 EDT

*** This bug has been marked as a duplicate of bug 670868 ***

Note You need to log in before you can comment on or make changes to this bug.