def do_POST(self): """ Access point from HTTP handler """ def onParent(pid, fromchild, tochild): self._server._registerChild(pid, fromchild) tochild.write('done\n') tochild.flush() def onChild(pid, fromparent, toparent): try: response = self._server._marshaled_dispatch(data) self._sendResponse(response) line = fromparent.readline() toparent.write('done\n') toparent.flush() except: journal.debug('pathos').log(util.print_exc_info()) os._exit(0) try: data = self.rfile.read(int(self.headers['content-length'])) params, method = xmlrpclib.loads(data) if method == 'run': return util.spawn2(onParent, onChild) else: response = self._server._marshaled_dispatch(data) self._sendResponse(response) return except: self._error.log(util.print_exc_info()) self.send_response(500) self.end_headers() return
def onChild(pid, fromparent, toparent): try: response = self._server._marshaled_dispatch(data) self._sendResponse(response) line = fromparent.readline() toparent.write('done\n') toparent.flush() except: journal.debug('pathos').log(util.print_exc_info()) os._exit(0)
def _marshaled_dispatch(self, data, dispatch_method=None): """override SimpleXMLRPCDispatcher._marshaled_dispatch() fault string""" import xmlrpclib from xmlrpclib import Fault params, method = xmlrpclib.loads(data) # generate response try: if dispatch_method is not None: response = dispatch_method(method, params) else: response = self._dispatch(method, params) # wrap response in a singleton tuple response = (response, ) response = xmlrpclib.dumps(response, methodresponse=1) except Fault, fault: fault.faultString = util.print_exc_info() response = xmlrpclib.dumps(fault)
def _marshaled_dispatch(self, data, dispatch_method = None): """override SimpleXMLRPCDispatcher._marshaled_dispatch() fault string""" import xmlrpclib from xmlrpclib import Fault params, method = xmlrpclib.loads(data) # generate response try: if dispatch_method is not None: response = dispatch_method(method, params) else: response = self._dispatch(method, params) # wrap response in a singleton tuple response = (response,) response = xmlrpclib.dumps(response, methodresponse=1) except Fault, fault: fault.faultString = util.print_exc_info() response = xmlrpclib.dumps(fault)
# generate response try: if dispatch_method is not None: response = dispatch_method(method, params) else: response = self._dispatch(method, params) # wrap response in a singleton tuple response = (response, ) response = xmlrpclib.dumps(response, methodresponse=1) except Fault, fault: fault.faultString = util.print_exc_info() response = xmlrpclib.dumps(fault) except: # report exception back to server response = xmlrpclib.dumps( xmlrpclib.Fault(1, "\n%s" % util.print_exc_info())) return response def _registerChild(self, pid, fromchild): """register a child process so it can be retrieved on select events""" self._activeProcesses[fromchild] = pid self._selector.notifyOnReadReady(fromchild, self._handleMessageFromChild) def _unRegisterChild(self, fd): """remove a child process from active process register""" del self._activeProcesses[fd]
# generate response try: if dispatch_method is not None: response = dispatch_method(method, params) else: response = self._dispatch(method, params) # wrap response in a singleton tuple response = (response,) response = xmlrpclib.dumps(response, methodresponse=1) except Fault, fault: fault.faultString = util.print_exc_info() response = xmlrpclib.dumps(fault) except: # report exception back to server response = xmlrpclib.dumps( xmlrpclib.Fault(1, "\n%s" % util.print_exc_info()) ) return response def _registerChild(self, pid, fromchild): """register a child process so it can be retrieved on select events""" self._activeProcesses[fromchild] = pid self._selector.notifyOnReadReady(fromchild, self._handleMessageFromChild) def _unRegisterChild(self, fd): """remove a child process from active process register"""