view examples/doctest.txt @ 113:c3b8ce33d3ad

make variable getting logic a little less horrible
author Jeff Hammel <jhammel@mozilla.com>
date Mon, 17 Jan 2011 14:32:07 -0800
parents b54898f7d8a9
children 7dbc3cdadffe
line wrap: on
line source

MakeItSo!
=========

A filesystem templating system for rapid deploy of projects

Boilerplate::

    >>> import makeitso
    >>> import os
    >>> import shutil
    >>> import tempfile
    >>> from StringIO import StringIO

Basic functionality::

    >>> example = os.path.join(here, 'example.txt')
    >>> template = makeitso.PolyTemplate([example], interactive=False)
    >>> template.missing()
    set(['name'])
    >>> template.substitute(dict(name='foo'))
    Hello foo
    
Substitute to a buffer::

    >>> buffer = StringIO()
    >>> template = makeitso.PolyTemplate([example], interactive=False)
    >>> template.substitute(dict(name='bar'), output=buffer)
    >>> buffer.getvalue().strip()
    'Hello bar'

Substitute to a file::

    >>> buffer = tempfile.mktemp()
    >>> template = makeitso.PolyTemplate([example], interactive=False)
    >>> template.substitute(dict(name='fleem'), buffer)
    >>> file(buffer).read().strip()
    'Hello fleem'
    >>> os.remove(buffer)

Including a file::

    >>> include_example = os.path.join(here, 'include-example.txt')
    >>> buffer = tempfile.mktemp()
    >>> template = makeitso.PolyTemplate([include_example], interactive=False)
    >>> template.substitute({}, buffer)
    >>> os.remove(buffer)

Directory case::

    >>> exampledir = os.path.join(here, 'directory-example')
    >>> tempdir = tempfile.mkdtemp()
    >>> template = makeitso.PolyTemplate([exampledir], interactive=False)
    >>> sorted(template.missing())
    ['bar', 'foo', 'subdir']
    >>> template.substitute(dict(foo='It', bar='life', subdir='mysubdir'), output=tempdir)
    >>> sorted(os.listdir(tempdir))
    ['foo.txt', 'mysubdir']
    >>> file(os.path.join(tempdir, 'foo.txt')).read().strip()
    'It is a wonderful life'
    >>> os.listdir(os.path.join(tempdir, 'mysubdir'))
    ['life.txt']
    >>> file(os.path.join(tempdir, 'mysubdir', 'life.txt')).read().strip()
    'It'
    >>> shutil.rmtree(tempdir)

Mixed case::

    >>> template = makeitso.PolyTemplate([example, exampledir], interactive=False)
    >>> variables = sorted(template.missing())
    >>> variables
    ['bar', 'foo', 'name', 'subdir']

You need to provide output for mixing files and directory templates::

    >>> variables = dict([(i, i.title()) for i in variables])
    >>> try:
    ...    template.substitute(variables)
    ... except AssertionError, e:
    ...    pass
    >>> e
    AssertionError()

Provide an output::

    >>> template = makeitso.PolyTemplate([example, exampledir], interactive=False)
    >>> template.substitute(variables, tempdir)
    >>> sorted(os.listdir(tempdir))
    ['Subdir', 'example.txt', 'foo.txt']
    >>> shutil.rmtree(tempdir)

Test API templates::

    >>> from makeitso.template import MakeItSoTemplate, Variable
    >>> class MyTemplate(MakeItSoTemplate):
    ...    name = 'foo'
    ...    templates = ['example.txt']
    ...    vars = [Variable(name='name', default='bar')]
    >>> buffer = tempfile.mktemp()
    >>> apitemplate = MyTemplate(interactive=False)
    >>> apitemplate.missing()
    set([])
    >>> apitemplate.substitute({}, buffer)
    >>> file(buffer).read().strip()
    'Hello bar'
    >>> os.remove(buffer)

If you dont use the defaults, then you will get a missing variable::

    >>> apitemplate.usedefaults = False
    >>> apitemplate.missing()
    set(['name'])
    >>> try:
    ...     apitemplate.substitute({})
    ... except Exception, e:
    ...     pass
    >>> isinstance(e, makeitso.MissingVariablesException)
    True

Test CLI handler:

    >>> from makeitso.cli import MakeItSoCLI
    >>> cli = MakeItSoCLI(MyTemplate)
    >>> buffer = tempfile.mktemp()
    >>> cli(buffer)
    >>> os.remove(buffer)

Test to make sure permissions are preserved. This won't work on windows::

    >>> buffer = tempfile.mktemp()
    >>> f = file(buffer, 'w')
    >>> print >> f, '#!/bin/bash\necho foo'
    >>> f.close()
    >>> os.chmod(buffer, 0755)
    >>> uritemplate = makeitso.URITemplate(example, interactive=False)
    >>> uritemplate.substitute(dict(name='bar'), buffer)
    >>> ('%o' % os.stat(buffer).st_mode).endswith('755')
    True
    >>> os.remove(buffer)