diff lxmlmiddleware/middleware.py @ 2:bb7d50d54cb6

correct huge mistake in how i try to get the response
author k0s <k0scist@gmail.com>
date Sun, 24 Jan 2010 23:13:03 -0500
parents 2bf25337048f
children ca1f58f5bad4
line wrap: on
line diff
--- a/lxmlmiddleware/middleware.py	Sun Jan 24 17:37:17 2010 -0500
+++ b/lxmlmiddleware/middleware.py	Sun Jan 24 23:13:03 2010 -0500
@@ -4,6 +4,7 @@
 
 import lxml.html
 from lxml import etree
+from webob import Request, Response
 
 class LXMLMiddleware(object):
     """
@@ -20,26 +21,30 @@
         if not 'lxml.recomposer' in environ:
             environ['lxml.recomposer'] = self
 
+        request = Request(environ)
         # get the response
-        response = self.app(environ, start_response)
+        response = request.get_response(self.app)
+        response.decode_content()
 
         # get the DOM, if not already made
-        if not isinstance(response, etree._Element):
+        # TODO: check response.content_type
+        if not 'lxml.etree' in environ:
             try:
-                response = etree.fromstring(''.join(response))
+                environ['lxml.etree'] = etree.fromstring(response.body)
             except etree.XMLSyntaxError: # not XML
                 environ.pop('lxml.recomposer')
-                return response
+                return response(environ, start_response)
         
         # manipulate the DOM
-        response = self.manipulate(environ, response)
+        environ['lxml.etree'] = self.manipulate(environ, environ['lxml.etree'])
 
         # recompose the DOM if the last in the chain
         if environ['lxml.recomposer'] is self:
-            response = [ lxml.html.tostring(response) ]
+            response.body = lxml.html.tostring(environ['lxml.etree'])
 
         # return the response
-        return response
+        return response(environ, start_response)        
+
 
     def manipulate(self, environ, tree):
         """manipulate the DOM; should return an etree._Element"""