source file: /Library/Python/2.3/site-packages/CherryPy-3.0.1-py2.3.egg/cherrypy/lib/xmlrpc.py
file stats: 25 lines, 8 executed: 32.0% covered
1. import sys 2. import xmlrpclib 3. 4. import cherrypy 5. 6. 7. def process_body(): 8. """Return (params, method) from request body.""" 9. try: 10. return xmlrpclib.loads(cherrypy.request.body.read()) 11. except Exception: 12. return ('ERROR PARAMS', ), 'ERRORMETHOD' 13. 14. 15. def patched_path(path): 16. """Return 'path', doctored for RPC.""" 17. if not path.endswith('/'): 18. path += '/' 19. if path.startswith('/RPC2/'): 20. # strip the first /rpc2 21. path = path[5:] 22. return path 23. 24. 25. def _set_response(body): 26. # The XML-RPC spec (http://www.xmlrpc.com/spec) says: 27. # "Unless there's a lower-level error, always return 200 OK." 28. # Since Python's xmlrpclib interprets a non-200 response 29. # as a "Protocol Error", we'll just return 200 every time. 30. response = cherrypy.response 31. response.status = '200 OK' 32. response.body = body 33. response.headers['Content-Type'] = 'text/xml' 34. response.headers['Content-Length'] = len(body) 35. 36. 37. def respond(body, encoding='utf-8', allow_none=0): 38. _set_response(xmlrpclib.dumps((body,), methodresponse=1, 39. encoding=encoding, 40. allow_none=allow_none)) 41. 42. def on_error(): 43. body = str(sys.exc_info()[1]) 44. _set_response(xmlrpclib.dumps(xmlrpclib.Fault(1, body))) 45.