# HG changeset patch # User k0s # Date 1265237784 18000 # Node ID 68643e72c749188169f925bc8df23496dc04c18a # Parent 85f84b928768ad125aa24e5bf428db2da96f89e1 use abstract base class for transformers so that behaviour can be streamlined diff -r 85f84b928768 -r 68643e72c749 contenttransformer/transformers.py --- a/contenttransformer/transformers.py Sun Jan 17 19:53:57 2010 -0500 +++ b/contenttransformer/transformers.py Wed Feb 03 17:56:24 2010 -0500 @@ -1,28 +1,36 @@ import docutils.core import subprocess -from webob import Response +from webob import Request, Response + +class Transformer(object): + """abstract base class for transformer objects""" + def __init__(self, content): + self.content = content -class Graphviz(object): - def __init__(self, content): + def transform(self, request): + """returns a tuple of (body, content-type)""" + raise NotImplementedError + + def __call__(self, environ, start_response): + request = Request(environ) + content_type, body = self.transform(request) + return Response(content_type=content_type, body=body)(environ, start_response) + +class Graphviz(Transformer): + def transform(self, request): """create a Graphviz object""" process = subprocess.Popen(['dot', '-Tpng'], stdin=subprocess.PIPE, stdout=subprocess.PIPE) - self.image, _ = process.communicate(content) + image, _ = process.communicate(self.content) + return ('image/png', image) - def __call__(self, environ, start_response): - """return a WSGI response""" - return Response(content_type='image/png', body=self.image)(environ, start_response) - -class RestructuredText(object): +class RestructuredText(Transformer): settings = { 'report_level': 5 } - def __init__(self, content): + def transform(self, request): """template: genshi(?) template to use (???)""" - self.html = docutils.core.publish_string(content, - writer_name='html', - settings_overrides=self.settings) - - def __call__(self, environ, start_response): - """return a WSGI response""" - return Response(content_type='text/html', body=self.html)(environ, start_response) + html = docutils.core.publish_string(self.content, + writer_name='html', + settings_overrides=self.settings) + return ('text/html', html) diff -r 85f84b928768 -r 68643e72c749 setup.py --- a/setup.py Sun Jan 17 19:53:57 2010 -0500 +++ b/setup.py Wed Feb 03 17:56:24 2010 -0500 @@ -1,7 +1,7 @@ from setuptools import setup, find_packages import sys, os -version = "0.1.1" +version = "0.2" setup(name='contenttransformer', version=version,