changeset 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
files lxmlmiddleware/middleware.py setup.py
diffstat 2 files changed, 14 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/lxmlmiddleware/middleware.py
+++ b/lxmlmiddleware/middleware.py
@@ -1,47 +1,52 @@
 """
 LXML middleware
 """
 
 import lxml.html
 from lxml import etree
+from webob import Request, Response
 
 class LXMLMiddleware(object):
     """
     abstract base class; inherit from and implement the manipulate method
     """
 
     def __init__(self, app):
         self.app = app
 
     ### methods dealing with HTTP
     def __call__(self, environ, start_response):
 
         # set up to recompose on the way out
         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"""
         return tree
 
--- a/setup.py
+++ b/setup.py
@@ -1,22 +1,22 @@
 from setuptools import setup, find_packages
 import sys, os
 
-version = "0.1"
+version = "0.2"
 
 setup(name='lxmlmiddleware',
       version=version,
       description="stack of middleware to deal with a response as a LXML etree",
       long_description="""
 """,
       classifiers=[], # Get strings from http://www.python.org/pypi?%3Aaction=list_classifiers
       author='Jeff Hammel',
       author_email='k0scist@gmail.com',
-      url='http://k0s.org',
+      url='http://k0s.org/hg/lxmlmiddleware',
       license="",
       packages=find_packages(exclude=['ez_setup', 'examples', 'tests']),
       include_package_data=True,
       zip_safe=False,
       install_requires=[
           # -*- Extra requirements: -*-
          'WebOb',	
          'Paste',