Pythonic, low noise structured document authoring
Python
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
datatree
docs
tests
.gitignore
MANIFEST.in
README.rst
example.py
license.txt
python2.6-requirements.txt
requirements.txt
runtests.py
setup.py

README.rst

Summary

DataTree is a library for creating structured documents in python. Inspired by ruby builder but with the goal of reducing the amount of line noise while remaining "pythonic". As an added bonus the tree can be output to to any structured format (with XML, JSON and YAML supported in the library).

Note

More documentation is coming soon but for now a very basic rough draft can be found at datatree.readthedocs.org.

Installation

You can install via PyPi or direct from the github repository.

To install with pip:

$ pip install datatree

To install with easy_install:

$ easy_install datatree

About the 0.2.0 Alpha

Version 0.2.0 is about 70% complete. The remaining tasks are:

  1. Implement xml namespaces.
  2. Finish updating documentation to the new API.
  3. Make the Node callable the same as the node method.

Installing the Alpha

You can install the alpha with pip directly from github using the command:

$ pip install -e git://github.com/bigjason/datatree.git@v0.2.alpha.1#egg=datatree

Example

A small example:

from datatree import Tree, Node

tree = Tree()
with tree.node("author") as author:
    author.node('name', 'Terry Pratchett')
    author.node('genre', 'Fantasy/Comedy')
    author.comment("Only 2 books listed")
    with author.node('novels', count=2) as novels:
        novels.node('novel', 'Small Gods', year=1992)
        novels.node('novel', 'The Fifth Elephant', year=1999)
        novels.node("novel", "Guards! Guards!", year=1989)

print tree(pretty=True)

Which produces the XML:

<author>
    <name>Terry Pratchett</name>
    <genre>Fantasy/Comedy</genre>
    <!-- Only 2 books listed -->
    <novels count="2">
        <novel year="1992">Small Gods</novel>
        <novel year="1999">The Fifth Elephant</novel>
        <novel year="1989">Guards! Guards!</novel>
    </novels>
</author>

Or the JSON:

{
    "author": {
        "genre": "Fantasy/Comedy",
        "name": "Terry Pratchett",
        "novels": [
            "Small Gods",
            "The Fifth Elephant",
            "Guards! Guards!"
        ]
    }
}

Or the YAML:

author:
  genre: Fantasy/Comedy
  name: Terry Pratchett
  novels: [Small Gods, The Fifth Elephant, Guards! Guards!]

License

This work is licensed under the Apache License, Version 2.0.

Souce Code

The source code can be found on github.

Feedback

I welcome any and all constructive feedback. Feel free to contact me (Jason Webb) at www.bigjason.com or (preferably) on twitter @bigjasonwebb.

Contributing

Contributions are welcome. Just fork on github and I will try to be as responsive as possible.