Some examples of content generation

    >>> contentstructure = """
    ... <cs:contentstructure
    ...   xmlns:cs="http://www.elyt.com/cs"
    ...   xmlns:z="http://www.zope.org/">
    ...   <cs:container z:portal_type="Folder" z:id="folder1">
    ...   <cs:leaf z:portal_type="Document" z:id="page1"/>
    ...   <cs:leaf z:portal_type="Document" z:id="page2"/>
    ...   <something/>
    ...   </cs:container>
    ... </cs:contentstructure>"""

    >>> from ely.contentgenerator import PloneContentGenerator
    >>> self.portal.invokeFactory('Folder','testcontent')
    'testcontent'
    >>> testcontentfolder = self.portal.testcontent
    >>> generator = PloneContentGenerator(contentstructure,
    ...                              testcontentfolder)

    We can print this out, but it does get a bit verbose.

    >>> generator.printContentStructure()
    {http://www.elyt.com/cs}contentstructure {}
      {http://www.elyt.com/cs}container {'{http://www.zope.org/}id': 'folder1', '{http://www.zope.org/}portal_type': 'Folder'}
        {http://www.elyt.com/cs}leaf {'{http://www.zope.org/}id': 'page1', '{http://www.zope.org/}portal_type': 'Document'}
        {http://www.elyt.com/cs}leaf {'{http://www.zope.org/}id': 'page2', '{http://www.zope.org/}portal_type': 'Document'}
        something {}

    >>> generator.generate()

    >>> from ely.contentgenerator import PloneContentSniffer
    >>> sniffer = PloneContentSniffer(testcontentfolder)
    >>> tree = sniffer.tree
    >>> from pprint import pprint
    >>> pprint(tree)
    [<ATFolder at /plone/testcontent>,
     [<ATFolder at /plone/testcontent/folder1>,
      [<ATDocument at /plone/testcontent/folder1/page1>],
      [<ATDocument at /plone/testcontent/folder1/page2>]]]


    >>> self.portal.invokeFactory('Folder','testcontent2')
    'testcontent2'
    >>> testcontent2folder = self.portal.testcontent2
    >>> contentstructure = open(self._file('samplecontent2.xml'),'r')
    >>> generator = PloneContentGenerator(contentstructure,
    ...                                   testcontent2folder)

    set some variables we will refer to in the generator xml

    >>> generator.description_page5 = "I am content injected by calling python"
    >>> generator.testfolder = self._file()
    >>> def postProcess(node):
    ...     if node.getId() == 'page1_1':
    ...         node.setTitle('post processed node')
    >>> generator.postprocessnodemethods.append(postProcess)

    now generate the content

    >>> generator.generate()

    and have a look

    >>> sniffer = PloneContentSniffer(testcontent2folder)
    >>> tree = sniffer.tree
    >>> from pprint import pprint
    >>> pprint(tree)
    [<ATFolder at /plone/testcontent2>,
     [<ATFolder at /plone/testcontent2/folder1>,
      [<ATDocument at /plone/testcontent2/folder1/page1_0>],
      [<ATDocument at /plone/testcontent2/folder1/page1_1>],
      [<ATDocument at /plone/testcontent2/folder1/page1_2>],
      [<ATDocument at /plone/testcontent2/folder1/page1_3>],
      [<ATDocument at /plone/testcontent2/folder1/page1_4>],
      [<ATDocument at /plone/testcontent2/folder1/page1_5>],
      [<ATDocument at /plone/testcontent2/folder1/page1_6>],
      [<ATDocument at /plone/testcontent2/folder1/page1_7>],
      [<ATDocument at /plone/testcontent2/folder1/page1_8>],
      [<ATDocument at /plone/testcontent2/folder1/page1_9>],
      [<ATDocument at /plone/testcontent2/folder1/page2>],
      [<ATDocument at /plone/testcontent2/folder1/page3>]],
     [<ATFolder at /plone/testcontent2/folder2>,
      [<ATDocument at /plone/testcontent2/folder2/page4>],
      [<ATDocument at /plone/testcontent2/folder2/page5>],
      [<ATLink at /plone/testcontent2/folder2/link1>],
      [<ATDocument at /plone/testcontent2/folder2/page6_0>],
      [<ATDocument at /plone/testcontent2/folder2/page6_1>]]]

    >>> print self.portal.testcontent2.folder2.page4.Description()
    This is a description given in a file using the file: attribute.
    <BLANKLINE>
    >>> print self.portal.testcontent2.folder2.page5.Description()
    I am content injected by calling python
    >>> print self.portal.testcontent2.folder2.link1.getRemoteUrl()
    http://www.google.com

    Check the postprocessed node
    >>> print self.portal.testcontent2.folder1.page1_1.title
    post processed node
