Writers

Writers post-process generated content.

The default writer in piecutter.Cutter is piecutter.TransparentWriter.

TransparentWriter

piecutter.TransparentWriter just returns result as is:

>>> import piecutter
>>> write = piecutter.TransparentWriter()
>>> write('Hello') is 'Hello'
True

With this writer in a Cutter, you get the output of the engine.

StreamWriter

piecutter.StreamWriter writes generated content to a stream:

>>> import sys
>>> render = piecutter.Cutter()
>>> render.writer = piecutter.StreamWriter(stream=sys.stdout)
>>> render('file://demo/simple/hello.txt', {u'who': u'world'})
Hello world!

PrintWriter

piecutter.PrintWriter sends generated content to builtin print function:

>>> import sys
>>> render = piecutter.Cutter()
>>> render.writer = piecutter.PrintWriter()
>>> render('file://demo/simple/hello.txt', {u'who': u'world'})
Hello world!

FileWriter

piecutter.FileWriter writes generated files to disk and return list of written filenames:

>>> # Let's setup some output directory.
>>> output_directory = os.path.join(temp_dir, 'directory')
>>> os.path.exists(output_directory)
False

>>> # Generate files in output directory.
>>> render = piecutter.Cutter()
>>> render.writer = piecutter.FileWriter(target=output_directory)
>>> written_files = render('file://demo/simple', {u'who': u'world'})

>>> # Inspect the results.
>>> sorted(os.listdir(output_directory))
['simple']
>>> sorted(os.listdir(os.path.join(output_directory, 'simple')))
['hello.txt', 'world.txt']
>>> print(open(os.path.join(output_directory, 'simple', 'hello.txt'), 'rb').read())
Hello world!

>>> written_files  # Contains absolute path to generated files.
['/.../directory/simple/hello.txt', '/.../directory/simple/world.txt']

Custom writers

Writers typically are classes that inherit from piecutter.Writer. Feel free to implement your own!

class piecutter.writers.Writer

Bases: object

Writers post-process generated content.

Subclasses MUST implement write().

write(content)

Post-process template-rendering result.