Commits

Thomas Lotze committed 6bf2961

applied remaining package layout conventions according to tl.pkg (version pinning, docs)

  • Participants
  • Parent commits e218502

Comments (0)

Files changed (12)

 build
 develop-eggs
 dist
-doc/tl.testing*
 eggs
 local.cfg
 parts
   ``manuel``. Moved the logic for cairo mocks used when building the docs to
   the Sphinx configuration.
 
+- Applied package layout conventions according to :pypi:`tl.pkg`.
+
 
 0.5 (2012-01-04)
 ================
   some manuel-related additional configuration. Always require :pypi:`manuel`,
   removed the ``cairo`` extra requirements.
 
-- Fixed :bbissue:`5`: Shield test runs that are the subject of this package's
+- Fixed #5: Shield test runs that are the subject of this package's
   tests from options passed to runs of this package's test suite itself.
 
 - Changed this package's own tests to use the stock ``unittest`` test runner

File bootstrap.py

 ##############################################################################
 #
-# Copyright (c) 2006 Zope Foundation and Contributors.
+# Copyright (c) 2006 Zope Corporation and Contributors.
 # All Rights Reserved.
 #
 # This software is subject to the provisions of the Zope Public License,
 Simply run this script in a directory containing a buildout.cfg.
 The script accepts buildout command-line options, so you can
 use the -c option to specify an alternate configuration file.
+
+$Id$
 """
 
-import os, shutil, sys, tempfile, urllib, urllib2, subprocess
+import os, shutil, sys, tempfile, urllib2
 from optparse import OptionParser
 
-if sys.platform == 'win32':
-    def quote(c):
-        if ' ' in c:
-            return '"%s"' % c  # work around spawn lamosity on windows
-        else:
-            return c
-else:
-    quote = str
-
-# See zc.buildout.easy_install._has_broken_dash_S for motivation and comments.
-stdout, stderr = subprocess.Popen(
-    [sys.executable, '-Sc',
-     'try:\n'
-     '    import ConfigParser\n'
-     'except ImportError:\n'
-     '    print 1\n'
-     'else:\n'
-     '    print 0\n'],
-    stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
-has_broken_dash_S = bool(int(stdout.strip()))
-
-# In order to be more robust in the face of system Pythons, we want to
-# run without site-packages loaded.  This is somewhat tricky, in
-# particular because Python 2.6's distutils imports site, so starting
-# with the -S flag is not sufficient.  However, we'll start with that:
-if not has_broken_dash_S and 'site' in sys.modules:
-    # We will restart with python -S.
-    args = sys.argv[:]
-    args[0:0] = [sys.executable, '-S']
-    args = map(quote, args)
-    os.execv(sys.executable, args)
-# Now we are running with -S.  We'll get the clean sys.path, import site
-# because distutils will do it later, and then reset the path and clean
-# out any namespace packages from site-packages that might have been
-# loaded by .pth files.
-clean_path = sys.path[:]
-import site  # imported because of its side effects
-sys.path[:] = clean_path
-for k, v in sys.modules.items():
-    if k in ('setuptools', 'pkg_resources') or (
-        hasattr(v, '__path__') and
-        len(v.__path__) == 1 and
-        not os.path.exists(os.path.join(v.__path__[0], '__init__.py'))):
-        # This is a namespace package.  Remove it.
-        sys.modules.pop(k)
+tmpeggs = tempfile.mkdtemp()
 
 is_jython = sys.platform.startswith('java')
 
-setuptools_source = 'http://peak.telecommunity.com/dist/ez_setup.py'
-distribute_source = 'http://python-distribute.org/distribute_setup.py'
-
-
 # parsing arguments
-def normalize_to_url(option, opt_str, value, parser):
-    if value:
-        if '://' not in value:  # It doesn't smell like a URL.
-            value = 'file://%s' % (
-                urllib.pathname2url(
-                    os.path.abspath(os.path.expanduser(value))),)
-        if opt_str == '--download-base' and not value.endswith('/'):
-            # Download base needs a trailing slash to make the world happy.
-            value += '/'
-    else:
-        value = None
-    name = opt_str[2:].replace('-', '_')
-    setattr(parser.values, name, value)
-
-usage = '''\
-[DESIRED PYTHON FOR BUILDOUT] bootstrap.py [options]
-
-Bootstraps a buildout-based project.
-
-Simply run this script in a directory containing a buildout.cfg, using the
-Python that you want bin/buildout to use.
-
-Note that by using --setup-source and --download-base to point to
-local resources, you can keep this script from going over the network.
-'''
-
-parser = OptionParser(usage=usage)
+parser = OptionParser()
 parser.add_option("-v", "--version", dest="version",
                           help="use a specific zc.buildout version")
 parser.add_option("-d", "--distribute",
-                   action="store_true", dest="use_distribute", default=False,
-                   help="Use Distribute rather than Setuptools.")
-parser.add_option("--setup-source", action="callback", dest="setup_source",
-                  callback=normalize_to_url, nargs=1, type="string",
-                  help=("Specify a URL or file location for the setup file. "
-                        "If you use Setuptools, this will default to " +
-                        setuptools_source + "; if you use Distribute, this "
-                        "will default to " + distribute_source + "."))
-parser.add_option("--download-base", action="callback", dest="download_base",
-                  callback=normalize_to_url, nargs=1, type="string",
-                  help=("Specify a URL or directory for downloading "
-                        "zc.buildout and either Setuptools or Distribute. "
-                        "Defaults to PyPI."))
-parser.add_option("--eggs",
-                  help=("Specify a directory for storing eggs.  Defaults to "
-                        "a temporary directory that is deleted when the "
-                        "bootstrap script completes."))
-parser.add_option("-t", "--accept-buildout-test-releases",
-                  dest='accept_buildout_test_releases',
-                  action="store_true", default=False,
-                  help=("Normally, if you do not specify a --version, the "
-                        "bootstrap script and buildout gets the newest "
-                        "*final* versions of zc.buildout and its recipes and "
-                        "extensions for you.  If you use this flag, "
-                        "bootstrap and buildout will get the newest releases "
-                        "even if they are alphas or betas."))
+                   action="store_true", dest="distribute", default=True,
+                   help="Use Disribute rather than Setuptools.")
+
 parser.add_option("-c", None, action="store", dest="config_file",
                    help=("Specify the path to the buildout configuration "
                          "file to be used."))
 
 options, args = parser.parse_args()
 
-# if -c was provided, we push it back into args for buildout's main function
+# if -c was provided, we push it back into args for buildout' main function
 if options.config_file is not None:
     args += ['-c', options.config_file]
 
-if options.eggs:
-    eggs_dir = os.path.abspath(os.path.expanduser(options.eggs))
+if options.version is not None:
+    VERSION = '==%s' % options.version
 else:
-    eggs_dir = tempfile.mkdtemp()
+    VERSION = ''
 
-if options.setup_source is None:
-    if options.use_distribute:
-        options.setup_source = distribute_source
-    else:
-        options.setup_source = setuptools_source
+USE_DISTRIBUTE = options.distribute
+args = args + ['bootstrap']
 
-if options.accept_buildout_test_releases:
-    args.append('buildout:accept-buildout-test-releases=true')
-args.append('bootstrap')
-
+to_reload = False
 try:
     import pkg_resources
-    import setuptools  # A flag.  Sometimes pkg_resources is installed alone.
     if not hasattr(pkg_resources, '_distribute'):
+        to_reload = True
         raise ImportError
 except ImportError:
-    ez_code = urllib2.urlopen(
-        options.setup_source).read().replace('\r\n', '\n')
     ez = {}
-    exec ez_code in ez
-    setup_args = dict(to_dir=eggs_dir, download_delay=0)
-    if options.download_base:
-        setup_args['download_base'] = options.download_base
-    if options.use_distribute:
-        setup_args['no_fake'] = True
-    ez['use_setuptools'](**setup_args)
-    if 'pkg_resources' in sys.modules:
-        reload(sys.modules['pkg_resources'])
-    import pkg_resources
-    # This does not (always?) update the default working set.  We will
-    # do it.
-    for path in sys.path:
-        if path not in pkg_resources.working_set.entries:
-            pkg_resources.working_set.add_entry(path)
+    if USE_DISTRIBUTE:
+        exec urllib2.urlopen('http://python-distribute.org/distribute_setup.py'
+                         ).read() in ez
+        ez['use_setuptools'](to_dir=tmpeggs, download_delay=0, no_fake=True)
+    else:
+        exec urllib2.urlopen('http://peak.telecommunity.com/dist/ez_setup.py'
+                             ).read() in ez
+        ez['use_setuptools'](to_dir=tmpeggs, download_delay=0)
 
-cmd = [quote(sys.executable),
-       '-c',
-       quote('from setuptools.command.easy_install import main; main()'),
-       '-mqNxd',
-       quote(eggs_dir)]
+    if to_reload:
+        reload(pkg_resources)
+    else:
+        import pkg_resources
 
-if not has_broken_dash_S:
-    cmd.insert(1, '-S')
+if sys.platform == 'win32':
+    def quote(c):
+        if ' ' in c:
+            return '"%s"' % c # work around spawn lamosity on windows
+        else:
+            return c
+else:
+    def quote (c):
+        return c
 
-find_links = options.download_base
-if not find_links:
-    find_links = os.environ.get('bootstrap-testing-find-links')
-if find_links:
-    cmd.extend(['-f', quote(find_links)])
+cmd = 'from setuptools.command.easy_install import main; main()'
+ws  = pkg_resources.working_set
 
-if options.use_distribute:
-    setup_requirement = 'distribute'
+if USE_DISTRIBUTE:
+    requirement = 'distribute'
 else:
-    setup_requirement = 'setuptools'
-ws = pkg_resources.working_set
-setup_requirement_path = ws.find(
-    pkg_resources.Requirement.parse(setup_requirement)).location
-env = dict(
-    os.environ,
-    PYTHONPATH=setup_requirement_path)
-
-requirement = 'zc.buildout'
-version = options.version
-if version is None and not options.accept_buildout_test_releases:
-    # Figure out the most recent final version of zc.buildout.
-    import setuptools.package_index
-    _final_parts = '*final-', '*final'
-
-    def _final_version(parsed_version):
-        for part in parsed_version:
-            if (part[:1] == '*') and (part not in _final_parts):
-                return False
-        return True
-    index = setuptools.package_index.PackageIndex(
-        search_path=[setup_requirement_path])
-    if find_links:
-        index.add_find_links((find_links,))
-    req = pkg_resources.Requirement.parse(requirement)
-    if index.obtain(req) is not None:
-        best = []
-        bestv = None
-        for dist in index[req.project_name]:
-            distv = dist.parsed_version
-            if _final_version(distv):
-                if bestv is None or distv > bestv:
-                    best = [dist]
-                    bestv = distv
-                elif distv == bestv:
-                    best.append(dist)
-        if best:
-            best.sort()
-            version = best[-1].version
-if version:
-    requirement = '=='.join((requirement, version))
-cmd.append(requirement)
+    requirement = 'setuptools'
 
 if is_jython:
     import subprocess
-    exitcode = subprocess.Popen(cmd, env=env).wait()
-else:  # Windows prefers this, apparently; otherwise we would prefer subprocess
-    exitcode = os.spawnle(*([os.P_WAIT, sys.executable] + cmd + [env]))
-if exitcode != 0:
-    sys.stdout.flush()
-    sys.stderr.flush()
-    print ("An error occurred when trying to install zc.buildout. "
-           "Look above this message for any errors that "
-           "were output by easy_install.")
-    sys.exit(exitcode)
 
-ws.add_entry(eggs_dir)
-ws.require(requirement)
+    assert subprocess.Popen([sys.executable] + ['-c', quote(cmd), '-mqNxd',
+           quote(tmpeggs), 'zc.buildout' + VERSION],
+           env=dict(os.environ,
+               PYTHONPATH=
+               ws.find(pkg_resources.Requirement.parse(requirement)).location
+               ),
+           ).wait() == 0
+
+else:
+    assert os.spawnle(
+        os.P_WAIT, sys.executable, quote (sys.executable),
+        '-c', quote (cmd), '-mqNxd', quote (tmpeggs), 'zc.buildout' + VERSION,
+        dict(os.environ,
+            PYTHONPATH=
+            ws.find(pkg_resources.Requirement.parse(requirement)).location
+            ),
+        ) == 0
+
+ws.add_entry(tmpeggs)
+ws.require('zc.buildout' + VERSION)
 import zc.buildout.buildout
 zc.buildout.buildout.main(args)
-if not options.eggs:  # clean up temporary egg directory
-    shutil.rmtree(eggs_dir)
+shutil.rmtree(tmpeggs)

File buildout.cfg

 # The local.cfg file is already included in .hgignore.
 
 [buildout]
+extends = versions/versions.cfg
 develop = .
-parts = demo test sphinx
-versions = versions
+parts =
+    tl.testing
+    test
+    doc
 allow-picked-versions = false
 
 [versions]
-Jinja2 = 2.6
-Pygments = 1.4
-docutils = 0.8.1
-manuel = 1.5.0
-mock = 0.8.0rc2
-pkginfo = 0.8
-setuptools = 0.6c11
-sphinx = 1.1.2
-sphinxcontrib-bitbucket = 1.0
-sphinxcontrib-cheeseshop = 0.2
-tl.buildout-gtk = 0.2.2
-z3c.recipe.scripts = 1.0.1
-zc.buildout = 1.5.2
-zc.recipe.cmmi = 1.3.5
-zc.recipe.egg = 1.3.2
-zc.recipe.testrunner = 1.4.0
-zope.exceptions = 3.6.1
-zope.interface = 3.8.0
-zope.testing = 4.0.0
-zope.testrunner = 4.0.4
+tl.testing =
 
 [cairo]
 recipe = tl.buildout_gtk>=0.2
 pygobject = false
 pygtk = false
 
-[demo]
+[tl.testing]
 recipe = zc.recipe.egg
-eggs = tl.testing
 extra-paths = ${cairo:path}
 interpreter = py
 
 eggs = tl.testing [test]
 extra-paths = ${cairo:path}
 
-[sphinx]
+[doc]
 recipe = zc.recipe.egg
-eggs = sphinx
-       pkginfo
-       sphinxcontrib-bitbucket
-       sphinxcontrib-cheeseshop
-       tl.testing
+eggs =
+    tl.pkg [doc]
+    tl.testing
 extra-paths = ${cairo:path}
-scripts = sphinx-build
-arguments = argv=sys.argv+("-E -d build/sphinx/doctrees"
-                           " doc/ build/sphinx/html/").split()
+scripts = doc
 =============
 
 .. autosummary::
-    :toctree: ./
+    :toctree: ./_api/
 
     tl.testing.fs
     tl.testing.script
-# -*- coding: utf-8 -*-
-#
-# documentation build configuration file
-#
-# This file is execfile()d with the current directory set to its containing dir.
-#
-# The contents of this file are pickled, so don't put values in the namespace
-# that aren't pickleable (module imports are okay, they're removed automatically).
-#
-# All configuration values have a default; values that are commented out
-# serve to show the default.
+# coding: utf-8
+# Copyright (c) 2008-2012 Thomas Lotze
+# See also LICENSE.txt
 
-import sys, os
-import datetime
-import pkginfo
+import tl.pkg.sphinxconf
 
-# link any txt documents from the Python source tree into the Sphinx source
-# tree so we need not maintain those links manually.
 
-for name in os.listdir('.'):
-    if name.startswith('tl.testing'):
-        os.unlink(name)
-for name in os.listdir('../tl/testing/'):
-    if not name.endswith('txt'):
-        continue
-    os.symlink('../tl/testing/' + name, 'tl.testing-' + name)
+_year_started = 2008
 
-# register an event handler that filters methods to be documented by autodoc
-# when that is used from dumb stub pages generated by autosummary
+_flattr_url = 'http://flattr.com/thing/453077/tl-testing-assorted-tools-for-testing-in-Python'
 
 
-def autodoc_skip_member(app, what, name, obj, skip, options):
-    if obj.__doc__ and obj.__doc__.strip().endswith('.. sphinx-autodoc-skip'):
-        return True
-    return skip
-
-# XXX hack hack; seen to work with Sphinx 1.1.2
-import inspect
-import sphinx.application
-for frame in inspect.stack():
-    app = frame[0].f_locals.get('self')
-    if isinstance(app, sphinx.application.Sphinx):
-        app._events['autodoc-skip-member'] = 'dummy'
-        app.connect('autodoc-skip-member', autodoc_skip_member)
-        del app._events['autodoc-skip-member']
-        break
-
-
-class Mock(object):
-    def __init__(self, *args, **kwargs):
-        pass
-
-    def __call__(self, *args, **kwargs):
-        return Mock()
-
-    @classmethod
-    def __getattr__(self, name):
-        if name in ('__file__', '__path__'):
-            return '/dev/null'
-        elif name[0] == name[0].upper():
-            return type(name, (), {})
-        else:
-            return Mock()
-
-
-MOCK_MODULES = ['cairo']
-for mod_name in MOCK_MODULES:
-    sys.modules[mod_name] = Mock()
-
-
-dist = pkginfo.Develop('..')
-
-# If your extensions are in another directory, add it here. If the directory
-# is relative to the documentation root, use os.path.abspath to make it
-# absolute, like shown here.
-#sys.path.append(os.path.abspath('.'))
-
-# General configuration
-# ---------------------
-
-# If your documentation needs a minimal Sphinx version, state it here.
-needs_sphinx = '1.0'
-
-# Add any Sphinx extension module names here, as strings. They can be extensions
-# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
-extensions = [
-    'sphinx.ext.autosummary',
-    'sphinx.ext.viewcode',
-    'sphinx.ext.inheritance_diagram',
-    'sphinxcontrib.bitbucket',
-    'sphinxcontrib.cheeseshop',
-    ]
-
-autosummary_generate = ['api.txt']
-inheritance_graph_attrs = dict(rankdir='TD')
-
-bitbucket_project_url = 'https://bitbucket.org/tlotze/tl.testing/'
-
-# Add any paths that contain templates here, relative to this directory.
-templates_path = ['templates']
-
-# The suffix of source filenames.
-source_suffix = '.txt'
-
-# The encoding of source files.
-#source_encoding = 'utf-8'
-
-# The master toctree document.
-master_doc = 'index'
-
-# General information about the project.
-project = dist.name
-copyright = u'2008-%s %s' % (datetime.date.today().year, dist.author)
-
-# The version info for the project you're documenting, acts as replacement for
-# |version| and |release|, also used in various other places throughout the
-# built documents.
-#
-# The short X.Y version.
-version = []
-for x in dist.version:
-    try:
-        version.append(str(int(x)))
-    except ValueError:
-        break
-version = '.'.join(version)
-# The full version, including alpha/beta/rc tags.
-release = dist.version
-
-# The language for content autogenerated by Sphinx. Refer to documentation
-# for a list of supported languages.
-#language = None
-
-# There are two options for replacing |today|: either, you set today to some
-# non-false value, then it is used:
-#today = ''
-# Else, today_fmt is used as the format for a strftime call.
-#today_fmt = '%B %d, %Y'
-
-# List of patterns, relative to source directory, that match files and
-# directories to ignore when looking for source files.
-# exclude_patterns = []
-
-# The reST default role (used for this markup: `text`) to use for all documents.
-#default_role = None
-
-# If true, '()' will be appended to :func: etc. cross-reference text.
-#add_function_parentheses = True
-
-# If true, the current module name will be prepended to all description
-# unit titles (such as .. function::).
-#add_module_names = True
-
-# If true, sectionauthor and moduleauthor directives will be shown in the
-# output. They are ignored by default.
-#show_authors = False
-
-# The name of the Pygments (syntax highlighting) style to use.
-pygments_style = 'sphinx'
-
-# A list of ignored prefixes for module index sorting.
-#modindex_common_prefix = []
-
-# Options for HTML output
-# -----------------------
-
-# The theme to use for HTML and HTML Help pages.  See the documentation for
-# a list of builtin themes.
-html_theme = 'nature'
-
-html_style = 'custom.css'
-
-# Theme options are theme-specific and customize the look and feel of a theme
-# further.  For a list of options available for each theme, see the
-# documentation.
-#html_theme_options = {'collapsiblesidebar': True}
-
-# Add any paths that contain custom themes here, relative to this directory.
-#html_theme_path = []
-
-# The name for this set of Sphinx documents.  If None, it defaults to
-# "<project> v<release> documentation".
-#html_title = None
-
-# A shorter title for the navigation bar.  Default is the same as html_title.
-#html_short_title = None
-
-# The name of an image file (relative to this directory) to place at the top
-# of the sidebar.
-#html_logo = None
-
-# The name of an image file (within the static path) to use as favicon of the
-# docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
-# pixels large.
-#html_favicon = None
-
-# Add any paths that contain custom static files (such as style sheets) here,
-# relative to this directory. They are copied after the builtin static files,
-# so a file named "default.css" will overwrite the builtin "default.css".
-html_static_path = ['static']
-
-# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
-# using the given strftime format.
-#html_last_updated_fmt = '%b %d, %Y'
-
-# If true, SmartyPants will be used to convert quotes and dashes to
-# typographically correct entities.
-#html_use_smartypants = True
-
-# Custom sidebar templates, maps document names to template names.
-html_sidebars = {
-    '**': ['project-links.html', 'globaltoc.html', 'searchbox.html'],
-}
-
-# Additional templates that should be rendered to pages, maps page names to
-# template names.
-#html_additional_pages = {}
-
-# If false, no module index is generated.
-html_domain_indices = False
-
-# If false, no index is generated.
-#html_use_index = True
-
-# If true, the index is split into individual pages for each letter.
-#html_split_index = False
-
-# If true, links to the reST sources are added to the pages.
-html_show_sourcelink = False
-
-# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
-#html_show_sphinx = True
-
-# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
-#html_show_copyright = True
-
-# If true, an OpenSearch description file will be output, and all pages will
-# contain a <link> tag referring to it.  The value of this option must be the
-# base URL from which the finished HTML is served.
-#html_use_opensearch = ''
-
-# If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml").
-#html_file_suffix = ''
-
-# Output file base name for HTML help builder.
-htmlhelp_basename = dist.name + '-doc'
-
-
-# Options for LaTeX output
-# ------------------------
-
-# The paper size ('letter' or 'a4').
-#latex_paper_size = 'letter'
-
-# The font size ('10pt', '11pt' or '12pt').
-#latex_font_size = '10pt'
-
-# Grouping the document tree into LaTeX files. List of tuples
-# (source start file, target name, title, author, document class [howto/manual]).
-latex_documents = [
-  ('index', dist.name+'.tex', dist.name+ur' Documentation',
-   dist.author, 'manual'),
-]
-
-# The name of an image file (relative to this directory) to place at the top of
-# the title page.
-#latex_logo = None
-
-# For "manual" documents, if this is true, then toplevel headings are parts,
-# not chapters.
-#latex_use_parts = False
-
-# Additional stuff for the LaTeX preamble.
-#latex_preamble = ''
-
-# Documents to append as an appendix to all manuals.
-#latex_appendices = []
-
-# If false, no module index is generated.
-#latex_use_modindex = True
+_bitbucket_name = 'tlotze'
+tl.pkg.sphinxconf.set_defaults()
+tl.pkg.sphinxconf.register_mock_modules('cairo')

File doc/requirements.pip

 pkginfo
-sphinxcontrib-bitbucket
 sphinxcontrib-cheeseshop
+sphinxcontrib-issuetracker
+tl.pkg

File doc/static/custom.css

-@import url("nature.css");
-
-body {
-    background-color:#f6f6f6;
-}
-
-div.footer {
-    color:#000000;
-}
-
-div.related {
-    background-color:#333333;
-}
-
-div.body h1 {
-    background-color:#e6ddaf;
-}
-
-div.body h2 {
-    background-color:#dddddd;
-}
-
-div.body dt {
-    border:1px solid #cccccc;
-    border-right:none;
-    border-bottom:none;
-    padding-top:3px;
-    padding-left:3px;
-}
-
-div.body dd dt {
-    border:none;
-    padding:none;
-}

File doc/templates/autosummary/module.rst

-{{ fullname }}
-{{ underline }}
-
-.. automodule:: {{ fullname }}
-
-   {% block functions %}
-   {% if functions %}
-   ---------
-   Functions
-   ---------
-
-   {% for item in functions %}
-   .. autofunction:: {{ item }}
-   {%- endfor %}
-   {% endif %}
-   {% endblock %}
-
-   {% block classes %}
-   {% if classes %}
-   -------
-   Classes
-   -------
-
-   .. inheritance-diagram:: {{ fullname }}
-
-   {% for item in classes %}
-   .. autoclass:: {{ item }}
-       :members:
-       :undoc-members:
-       :member-order: bysource
-       :show-inheritance:
-   {%- endfor %}
-   {% endif %}
-   {% endblock %}
-
-   {% block exceptions %}
-   {% if exceptions %}
-   ----------
-   Exceptions
-   ----------
-
-   {% for item in exceptions %}
-   .. autoexception:: {{ item }}
-       :members:
-       :undoc-members:
-       :show-inheritance:
-   {%- endfor %}
-   {% endif %}
-   {% endblock %}

File doc/templates/project-links.html

-<div style="margin:1em;margin-top:0em">
-  <a href="http://flattr.com/thing/453077/tl-testing-assorted-tools-for-testing-in-Python" target="_blank">
-    <img src="{{ pathto('_images/flattr-badge-large.png', 1) }}" alt="Flattr this" title="Flattr this" border="0" /></a><br />
-  »&nbsp;<a href="http://pypi.python.org/pypi/tl.testing/">PyPI</a>
-  »&nbsp;<a href="https://bitbucket.org/tlotze/tl.testing/">bitbucket</a>
-  »&nbsp;<a href="mailto:thomas@thomas-lotze.de">E-mail</a>
-</div>

File versions/versions.cfg

+[buildout]
+extends = ztk-versions-1.1.4.cfg
+versions = versions
+
+[versions]
+Sphinx = ${versions:sphinx}
+manuel = 1.5.0
+mock = 0.8.0rc2
+pkginfo = 0.8
+sphinx = 1.1.2
+sphinxcontrib-cheeseshop = 0.2
+sphinxcontrib-issuetracker = 0.9
+tl.buildout-gtk = 0.2.2
+tl.pkg = 0.1
+zc.recipe.cmmi = 1.3.5

File versions/ztk-versions-1.1.4.cfg

+[versions]
+# ZTK
+zope.annotation = 3.5.0
+zope.applicationcontrol = 3.5.5
+zope.authentication = 3.7.1
+zope.broken = 3.6.0
+zope.browser = 1.3
+zope.browsermenu = 3.9.1
+zope.browserpage = 3.12.2
+zope.browserresource = 3.12.0
+zope.cachedescriptors = 3.5.1
+zope.catalog = 3.8.2
+zope.component = 3.10.0
+zope.componentvocabulary = 1.0.1
+zope.configuration = 3.7.4
+zope.container = 3.12.0
+zope.contentprovider = 3.7.2
+zope.contenttype = 3.5.5
+zope.copy = 3.5.0
+zope.copypastemove = 3.8.0
+zope.datetime = 3.4.1
+zope.deferredimport = 3.5.3
+zope.deprecation = 3.4.1
+zope.dottedname = 3.4.6
+zope.dublincore = 3.8.2
+zope.error = 3.7.4
+zope.event = 3.5.1
+zope.exceptions = 3.6.1
+zope.filerepresentation = 3.6.1
+zope.formlib = 4.0.6
+zope.hookable = 3.4.1
+zope.i18n = 3.7.4
+zope.i18nmessageid = 3.5.3
+zope.index = 3.6.3
+zope.interface = 3.7.0
+zope.intid = 3.7.2
+zope.keyreference = 3.6.4
+zope.lifecycleevent = 3.6.2
+zope.location = 3.9.1
+zope.login = 1.0.0
+zope.mimetype = 1.3.1
+zope.minmax = 1.1.2
+zope.pagetemplate = 3.5.2
+zope.password = 3.6.1
+zope.pluggableauth = 1.2
+zope.principalannotation = 3.6.1
+zope.principalregistry = 3.7.1
+zope.processlifetime = 1.0
+zope.proxy = 3.6.1
+zope.ptresource = 3.9.0
+zope.publisher = 3.12.6
+zope.ramcache = 1.0
+zope.schema = 3.7.1
+zope.security = 3.8.3
+zope.securitypolicy = 3.7.0
+zope.sendmail = 3.7.4
+zope.sequencesort = 3.4.0
+zope.server = 3.8.6
+zope.session = 3.9.5
+zope.site = 3.9.2
+zope.size = 3.4.1
+zope.structuredtext = 3.5.1
+zope.tal = 3.5.2
+zope.tales = 3.5.1
+zope.testing = 3.10.3
+zope.testrunner = 4.0.4
+zope.traversing = 3.14.0
+zope.viewlet = 3.7.2
+
+# Deprecating
+
+# Dependencies
+distribute = 0.6.24
+docutils = 0.7
+Jinja2 = 2.5.5
+mechanize = 0.2.5
+Paste = 1.7.5.1
+PasteDeploy = 1.3.4
+PasteScript = 1.7.5
+py = 1.4.7
+Pygments = 1.4
+python-gettext = 1.0
+python-subunit = 0.0.7
+pytz = 2011n
+RestrictedPython = 3.6.0
+setuptools = 0.6c11
+Sphinx = 1.0.8
+testtools = 0.9.12
+transaction = 1.1.1
+z3c.recipe.sphinxdoc = 0.0.8
+zc.buildout = 1.5.2
+zc.lockfile = 1.0.0
+ZConfig = 2.8.0
+zc.recipe.egg = 1.3.2
+zc.recipe.testrunner = 1.4.0
+zc.resourcelibrary = 1.3.4
+zdaemon = 2.0.4
+ZODB3 = 3.10.5
+zope.mkzeoinstance = 3.9.5
+
+# toolchain
+argparse = 1.1
+lxml = 2.2.8
+mr.developer = 1.18
+tl.eggdeps = 0.4
+z3c.checkversions = 0.4.1
+z3c.recipe.compattest = 0.13.1
+z3c.recipe.depgraph = 0.5
+z3c.recipe.scripts = 1.0.1
+zope.kgs = 1.2.0