Mercurial > hg > lxmlmiddleware
view lxmlmiddleware/middleware.py @ 0:d1067d921e97
initial import of lxml middleware
author | k0s <k0scist@gmail.com> |
---|---|
date | Sun, 24 Jan 2010 12:00:39 -0500 |
parents | |
children | 2bf25337048f |
line wrap: on
line source
""" LXML middleware """ from lxml import etree 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 # get the response response = self.app(environ, start_response) # get the DOM, if not already made if not isinstance(response, etree._Element): response = etree.fromstring(''.join(response)) # manipulate the DOM response = self.manipulate(environ, response) # recompose the DOM if the last in the chain if environ['lxml.recomposer'] is self: response = [ etree.tostring(response) ] # return the response return response def manipulate(self, environ, tree): """manipulate the DOM; should return an etree._Element""" return tree