[Zope-dev] patterns for using sphinx with the Zope Toolkit?

Lennart Regebro regebro at gmail.com
Mon Jan 4 03:08:07 EST 2010


On Mon, Jan 4, 2010 at 00:43, Chris McDonough <chrism at plope.com> wrote:
> Yeah.  I haven't thought about this much, so it might be bollocks, but I
> think something like this is what I'm after:
>
> .. code-block-setup::
>
...
>
> .. code-block:: python
>   :linenos:
>
....
>
> .. code-block-teardown::
>   del sys.modules['models']
>

You don't actually have a test in that example.

Here is my usecases:

Numero Uno1
========

Here I call a method that will print things to the stdout. I need to
make sure that it prints the correct thing, but I do not want that
thing to be shown in the document.

.. testsetup::

    import sys
    sys.argv = ['setup.py', 'build']

.. testcode::

    from setuptools import setup, find_packages

    setup(name='Porting to Python 3 examples',
          version=1.0,
    )

.. testoutput::
    :hide:

    running build
    ...
    writing manifest file 'Porting_to_Python_3_examples.egg-info/SOURCES.txt'

Numero Due
========

Here I call a method that will raise an error. I need to make sure
that it raises the correct thing, but I do not want that thing to be
shown in the document.

.. testsetup::

    import sys
    sys.argv = ['setup.py', 'build']

.. testcode::

    from setuptools import setup, find_packages

    setup(name='Porting to Python 3 examples',
          version=1.0,
    )

.. testoutput::
    :hide:

    Traceback (most recent call last):
    SystemExit: False

Trinity
=====

Here I need a from __future__ import, but I want to use the >>>
format, because I *do* want to show the result.

.. doctest::

    >>> from __future__ import division
    >>> 5/2
    2.5

It is of no great importance what the blocks are called, as long as
Sphinx recognizes them as code blocks and indents them the same (I
don't know Sphinx rules there). I do prefer having a separate "setup"
and "teardown" (although I don't use that one currently) before just
using invisible code blocks as I find it clearer, even though I
realize it's just different names for the same thing, really.

I'll not that none of the above works with Manuels latest release. Uno
et Due works with trunk because I added Sphinx support yesterday
(which should have been added to a branch, but I guess I got a
temporary attack of Plone Collective disease), and Trinity I have
working because I made a custom extension to Manuel where I override
the standard doctest support and use a parser that is hacked to
special case __future__ imports.

-- 
Lennart Regebro: Python, Zope, Plone, Grok
http://regebro.wordpress.com/
+33 661 58 14 64


More information about the Zope-Dev mailing list