Re: pyblosxom 3000

Steven Armstrong <[email protected]>
Newsgroups gmane.comp.web.pyblosxom.devel
Message-ID <[email protected]>
Hi all

Here's a patch for xmlrpc.py to make it play nice with the new
request/response stuff.

Patch is against current CVS head.

cheers
Steven
xmlrpc.py.diff (text/plain, 4 KB)
Index: xmlrpc.py
===================================================================
RCS file: /cvsroot/pyblosxom/pyblosxom/contrib/xmlrpc_plugins/xmlrpc.py,v
retrieving revision 1.3
diff -u -r1.3 xmlrpc.py
--- xmlrpc.py	23 Apr 2004 23:59:17 -0000	1.3
+++ xmlrpc.py	28 Jan 2005 22:09:48 -0000
@@ -41,6 +41,7 @@
         """
         Processes the xmlrpc request.
         """
+        response = self._request.getResponse()
         # XML-RPC starts here
         try:
             # Get parameters
@@ -51,32 +52,31 @@
 
             try:
                 # Call the method
-                response = self.xmlrpcCall(method, params)
-                if type(response) != type (()):
-                    response = (response,)
+                result = self.xmlrpcCall(method, params)
+                if type(result) != type (()):
+                    result = (result,)
             except xmlrpclib.Fault, faultobj:
                 # Throw an xmlrpc exception
-                response = xmlrpclib.dumps(faultobj)
+                result = xmlrpclib.dumps(faultobj)
             except:
                 # Format other exceptions into xmlrpc faults
-                response = xmlrpclib.dumps(xmlrpclib.Fault(1, '%s:%s' %
+                result = xmlrpclib.dumps(xmlrpclib.Fault(1, '%s:%s' %
                         (sys.exc_type, sys.exc_value)))
             else:
                 # Passed.
-                response = xmlrpclib.dumps(response, methodresponse=1)
+                result = xmlrpclib.dumps(result, methodresponse=1)
 
         except:
-            resp_str = 'Content-Type: text/plain\n\n' + \
-                       'XML-RPC call expected\n' + \
+            response.addHeader('Content-Type', 'text/plain')
+            result = 'XML-RPC call expected\n' + \
                        'Debug: %s:%s\n' % (str(sys.exc_type), str(sys.exc_value)) + \
                        "'" + self._data + "'"
         else:
-            resp_str = 'Content-Type: text/xml\n' + \
-                       'Content-Length: %d\n\n' % len(response) + \
-                       response
+            response.addHeader('Content-Type', 'text/xml')
+            response.addHeader('Content-Length', '%d' % len(result))
 
-        sys.stdout.write(resp_str)
-        sys.stdout.flush()
+        response.write(result)
+        response.flush()
 
 
     def xmlrpcCall(self, meth_name, args):
@@ -129,30 +129,30 @@
     request = args["request"]
     pyhttp = request.getHttp()
     config = request.getConfiguration()
+    response = request.getResponse()
+    
 
     urltrigger = config.get("xmlrpc_urltrigger", "/RPC")
 
-    if os.environ.get("PATH_INFO", "").startswith(urltrigger):
+    if pyhttp.get("PATH_INFO", "").startswith(urltrigger):
         try:
-            content_length = int(os.environ.get("CONTENT_LENGTH", "0"))
+            content_length = int(pyhttp.get("CONTENT_LENGTH", "0"))
             maxrequest_length = config.get("xmlrpc_maxrequest_length", 10000)
 
             if content_length > maxrequest_length:
                 raise ValueError, 'Request too large - %s bytes' % content_length
 
         except: 
-            response = xmlrpclib.dumps(xmlrpclib.Fault(1, "%s: %s" % sys.exc_info()[:2]))
-            resp_str = ('Content-Type: text/xml\n') + \
-                       ('Content-Length: %d\n\n' % len(response)) + \
-                       response
+            result = xmlrpclib.dumps(xmlrpclib.Fault(1, "%s: %s" % sys.exc_info()[:2]))
+            response.addHeader('Content-Type', 'text/xml')
+            response.addHeader('Content-Length', '%d' % len(result))
 
-            sys.stdout.write(resp_str)
-            sys.stdout.flush()
+            response.write(result)
+            response.flush()
             return 1
 
         # everything is cool--so we handle the xmlrpc request
-
-        data = sys.stdin.read(content_length)
+        data = request.read(content_length)
 
         # here we call the xmlrpc_init callback passing in a dict.
         # each function that registers with this callback adds their
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.