Mercurial > hg > lxmlmiddleware
comparison 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 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:d1067d921e97 |
---|---|
1 """ | |
2 LXML middleware | |
3 """ | |
4 | |
5 from lxml import etree | |
6 | |
7 class LXMLMiddleware(object): | |
8 """ | |
9 abstract base class; inherit from and implement the manipulate method | |
10 """ | |
11 | |
12 def __init__(self, app): | |
13 self.app = app | |
14 | |
15 ### methods dealing with HTTP | |
16 def __call__(self, environ, start_response): | |
17 | |
18 # set up to recompose on the way out | |
19 if not 'lxml.recomposer' in environ: | |
20 environ['lxml.recomposer'] = self | |
21 | |
22 # get the response | |
23 response = self.app(environ, start_response) | |
24 | |
25 # get the DOM, if not already made | |
26 if not isinstance(response, etree._Element): | |
27 response = etree.fromstring(''.join(response)) | |
28 | |
29 # manipulate the DOM | |
30 response = self.manipulate(environ, response) | |
31 | |
32 # recompose the DOM if the last in the chain | |
33 if environ['lxml.recomposer'] is self: | |
34 response = [ etree.tostring(response) ] | |
35 | |
36 # return the response | |
37 return response | |
38 | |
39 def manipulate(self, environ, tree): | |
40 """manipulate the DOM; should return an etree._Element""" | |
41 return tree | |
42 |