Mercurial > hg > contenttransformer
comparison contenttransformer/transformers.py @ 7:68643e72c749
use abstract base class for transformers so that behaviour can be streamlined
author | k0s <k0scist@gmail.com> |
---|---|
date | Wed, 03 Feb 2010 17:56:24 -0500 |
parents | 1a267297f779 |
children | 051d4d39b4b9 |
comparison
equal
deleted
inserted
replaced
6:85f84b928768 | 7:68643e72c749 |
---|---|
1 import docutils.core | 1 import docutils.core |
2 import subprocess | 2 import subprocess |
3 from webob import Response | 3 from webob import Request, Response |
4 | 4 |
5 class Graphviz(object): | 5 class Transformer(object): |
6 """abstract base class for transformer objects""" | |
6 def __init__(self, content): | 7 def __init__(self, content): |
8 self.content = content | |
9 | |
10 def transform(self, request): | |
11 """returns a tuple of (body, content-type)""" | |
12 raise NotImplementedError | |
13 | |
14 def __call__(self, environ, start_response): | |
15 request = Request(environ) | |
16 content_type, body = self.transform(request) | |
17 return Response(content_type=content_type, body=body)(environ, start_response) | |
18 | |
19 class Graphviz(Transformer): | |
20 def transform(self, request): | |
7 """create a Graphviz object""" | 21 """create a Graphviz object""" |
8 process = subprocess.Popen(['dot', '-Tpng'], | 22 process = subprocess.Popen(['dot', '-Tpng'], |
9 stdin=subprocess.PIPE, | 23 stdin=subprocess.PIPE, |
10 stdout=subprocess.PIPE) | 24 stdout=subprocess.PIPE) |
11 self.image, _ = process.communicate(content) | 25 image, _ = process.communicate(self.content) |
26 return ('image/png', image) | |
12 | 27 |
13 def __call__(self, environ, start_response): | 28 class RestructuredText(Transformer): |
14 """return a WSGI response""" | |
15 return Response(content_type='image/png', body=self.image)(environ, start_response) | |
16 | |
17 class RestructuredText(object): | |
18 settings = { 'report_level': 5 } | 29 settings = { 'report_level': 5 } |
19 | 30 |
20 def __init__(self, content): | 31 def transform(self, request): |
21 """template: genshi(?) template to use (???)""" | 32 """template: genshi(?) template to use (???)""" |
22 self.html = docutils.core.publish_string(content, | 33 html = docutils.core.publish_string(self.content, |
23 writer_name='html', | 34 writer_name='html', |
24 settings_overrides=self.settings) | 35 settings_overrides=self.settings) |
25 | 36 return ('text/html', html) |
26 def __call__(self, environ, start_response): | |
27 """return a WSGI response""" | |
28 return Response(content_type='text/html', body=self.html)(environ, start_response) |