-*- rst -*-
===========
 treeshape
===========

treeshape allows you to quickly make file and directory structures on disk.

For example::

    from treeshape import (
        CONTENT,
        make_tree,
        PERMISSIONS,
        )

    make_tree('.', {
        'logs/': None,
        'README': {CONTENT: "A simple directory layout\n"},
        'data/input': {CONTENT: "All of our input data\n"},
        'bin/script': {CONTENT: "#!/bin/sh\necho 'Hello'\n", PERMISSIONS: 0755},
        })

Will create a directory structure that looks like this::

    $ find .
    .
    ./logs
    ./data
    ./data/input
    ./README
    $ cat README
    A simple directory layout
    $ cat data/input
    All of our input data

This is particularly useful for tests that touch the disk.

If being explicit isn't really your thing, you can also create the same
directory structure from a rough specification::

    from treeshape import (
        from_rough_spec,
        make_tree,
        )

    make_tree('.', from_rough_spec([
        'logs/',
        ('README', "A simple directory layout\n"),
        ('data/input', "All of our input data\n"),
        ('bin/script', "#!/bin/sh\necho 'Hello'\n", 0755),
        ]))


This is also provided as a ``Fixture`` (see python-fixtures_). Thus, if you
are using testtools_, then you can also do this during your tests::

    def test_a_thing(self):
        self.useFixture(FileTree(from_rough_spec([
            'logs/',
            ('README', "A simple directory layout\n"),
            ('data/input', "All of our input data\n"),
            ])))
        # your test here


.. _python-fixtures: http://pypi.python.org/pypi/fixtures
.. _testtools: http://pypi.python.org/pypi/testtools
