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 verbose=self.__verbose 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): Current How reproducible: Everytime. Steps to Reproduce: 1. see above 2. 3. Actual results: Expected results: Additional info:
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.
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.
Thanks Steven!
On gerrit, but there is the question of why we can't just allow marshalling none: http://gerrit.beaker-project.org/#/c/1203/
*** This bug has been marked as a duplicate of bug 670868 ***