[Checkins] SVN: five.megrok.layout/ Make a Zope2 compliant version of megrok.layout.

Sylvain Viollon sylvain at infrae.com
Mon Sep 14 12:17:48 EDT 2009


Log message for revision 103962:
  Make a Zope2 compliant version of megrok.layout.
  
  

Changed:
  A   five.megrok.layout/
  A   five.megrok.layout/trunk/
  A   five.megrok.layout/trunk/README.txt
  A   five.megrok.layout/trunk/bootstrap.py
  A   five.megrok.layout/trunk/buildout.cfg
  A   five.megrok.layout/trunk/docs/
  A   five.megrok.layout/trunk/docs/HISTORY.txt
  A   five.megrok.layout/trunk/setup.cfg
  A   five.megrok.layout/trunk/setup.py
  A   five.megrok.layout/trunk/src/
  A   five.megrok.layout/trunk/src/five/
  A   five.megrok.layout/trunk/src/five/__init__.py
  A   five.megrok.layout/trunk/src/five/megrok/
  A   five.megrok.layout/trunk/src/five/megrok/__init__.py
  A   five.megrok.layout/trunk/src/five/megrok/layout/
  A   five.megrok.layout/trunk/src/five/megrok/layout/__init__.py
  A   five.megrok.layout/trunk/src/five/megrok/layout/components.py
  A   five.megrok.layout/trunk/src/five/megrok/layout/configure.zcml
  A   five.megrok.layout/trunk/src/five/megrok/layout/ftesting.zcml
  A   five.megrok.layout/trunk/src/five/megrok/layout/ftests/
  A   five.megrok.layout/trunk/src/five/megrok/layout/ftests/test_grok_functional.py
  A   five.megrok.layout/trunk/src/five/megrok/layout/testing.py
  A   five.megrok.layout/trunk/versions.cfg

-=-
Added: five.megrok.layout/trunk/README.txt
===================================================================
--- five.megrok.layout/trunk/README.txt	                        (rev 0)
+++ five.megrok.layout/trunk/README.txt	2009-09-14 16:17:48 UTC (rev 103962)
@@ -0,0 +1,4 @@
+Introduction
+============
+
+

Added: five.megrok.layout/trunk/bootstrap.py
===================================================================
--- five.megrok.layout/trunk/bootstrap.py	                        (rev 0)
+++ five.megrok.layout/trunk/bootstrap.py	2009-09-14 16:17:48 UTC (rev 103962)
@@ -0,0 +1,55 @@
+##############################################################################
+#
+# Copyright (c) 2006 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Bootstrap a buildout-based project
+
+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: bootstrap.py 85745 2008-04-26 08:49:56Z regebro $
+"""
+
+import os, shutil, sys, tempfile, urllib2
+
+tmpeggs = tempfile.mkdtemp()
+
+try:
+    import pkg_resources
+except ImportError:
+    ez = {}
+    exec urllib2.urlopen('http://peak.telecommunity.com/dist/ez_setup.py'
+                         ).read() in ez
+    ez['use_setuptools'](to_dir=tmpeggs, download_delay=0)
+
+    import pkg_resources
+
+cmd = 'from setuptools.command.easy_install import main; main()'
+if sys.platform == 'win32':
+    cmd = '"%s"' % cmd # work around spawn lamosity on windows
+
+ws = pkg_resources.working_set
+assert os.spawnle(
+    os.P_WAIT, sys.executable, sys.executable,
+    '-c', cmd, '-mqNxd', tmpeggs, 'zc.buildout',
+    dict(os.environ,
+         PYTHONPATH=
+         ws.find(pkg_resources.Requirement.parse('setuptools')).location
+         ),
+    ) == 0
+
+ws.add_entry(tmpeggs)
+ws.require('zc.buildout')
+import zc.buildout.buildout
+zc.buildout.buildout.main(sys.argv[1:] + ['bootstrap'])
+shutil.rmtree(tmpeggs)

Added: five.megrok.layout/trunk/buildout.cfg
===================================================================
--- five.megrok.layout/trunk/buildout.cfg	                        (rev 0)
+++ five.megrok.layout/trunk/buildout.cfg	2009-09-14 16:17:48 UTC (rev 103962)
@@ -0,0 +1,87 @@
+[buildout]
+extends = versions.cfg
+parts =
+    zope2
+    instance
+    zopepy
+    test
+extensions = buildout.dumppickedversions
+develop = .
+versions = versions
+
+[versions]
+# Unpin these packages so that the fake-eggs from the zope2 system are used
+zope.configuration = 
+zope.app.container = 
+ZODB3 = 
+zope.annotation = 
+zope.interface = 
+zope.app.component = 
+zope.app.security = 
+zope.lifecycleevent = 
+zope.viewlet = 
+zope.app.authentication = 
+zope.testbrowser = 
+zope.app.pagetemplate = 
+zope.traversing = 
+zope.security = 
+zope.schema = 
+zope.formlib = 
+zope.event = 
+zope.deferredimport = 
+zope.deprecation = 
+zope.app.schema = 
+zope.app.wsgi = 
+zope.app.rotterdam = 
+zope.app.basicskin = 
+zope.app.principalannotation = 
+zope.app.zopeappgenerations = 
+zope.app.locales = 
+zope.app.i18n = 
+zope.app.form = 
+zope.app.interface = 
+zope.app.generations = 
+zope.publisher = 
+zope.app.content = 
+zope.app.dependable = 
+zope.modulealias = 
+zope.location = 
+zope.i18nmessageid = 
+zope.exceptions = 
+zope.pagetemplate = 
+zope.datetime = 
+zope.contenttype = 
+zope.app.publication = 
+pytz = 
+zope.hookable = 
+zope.proxy = 
+
+[zope2]
+recipe = plone.recipe.zope2install
+url = http://www.zope.org/Products/Zope/2.10.9/Zope-2.10.9-final.tgz
+
+[instance]
+recipe = plone.recipe.zope2instance
+zope2-location = ${zope2:location}
+user = admin:admin
+http-address = 8080
+debug-mode = on
+verbose-security = on
+eggs =
+    five.megrok.layout
+zcml =
+    five.megrok.layout
+products =
+
+[zopepy]
+recipe = zc.recipe.egg
+eggs = ${instance:eggs}
+interpreter = zopepy
+extra-paths = ${zope2:location}/lib/python
+scripts = zopepy
+
+[test]
+recipe = zc.recipe.testrunner
+eggs = ${instance:eggs}
+extra-paths = ${zope2:location}/lib/python
+defaults = ['-m', 'five.grok', '--tests-pattern', '^f?tests$', '-v']

Added: five.megrok.layout/trunk/docs/HISTORY.txt
===================================================================
--- five.megrok.layout/trunk/docs/HISTORY.txt	                        (rev 0)
+++ five.megrok.layout/trunk/docs/HISTORY.txt	2009-09-14 16:17:48 UTC (rev 103962)
@@ -0,0 +1,8 @@
+Changelog
+=========
+
+1.0 - Unreleased
+----------------
+
+* Initial release
+

Added: five.megrok.layout/trunk/setup.cfg
===================================================================
--- five.megrok.layout/trunk/setup.cfg	                        (rev 0)
+++ five.megrok.layout/trunk/setup.cfg	2009-09-14 16:17:48 UTC (rev 103962)
@@ -0,0 +1,3 @@
+[egg_info]
+tag_build = dev
+tag_svn_revision = true

Added: five.megrok.layout/trunk/setup.py
===================================================================
--- five.megrok.layout/trunk/setup.py	                        (rev 0)
+++ five.megrok.layout/trunk/setup.py	2009-09-14 16:17:48 UTC (rev 103962)
@@ -0,0 +1,34 @@
+from setuptools import setup, find_packages
+import os
+
+version = '1.0'
+
+setup(name='five.megrok.layout',
+      version=version,
+      description="A grok layout component package for Zope 2",
+      long_description=open("README.txt").read() + "\n" +
+                       open(os.path.join("docs", "HISTORY.txt")).read(),
+      classifiers=[
+        "Environment :: Web Environment",
+        "Intended Audience :: Developers",
+        "License :: OSI Approved :: Zope Public License",
+        "Programming Language :: Python",
+        "Topic :: Software Development :: Libraries :: Python Modules",
+        "Framework :: Zope2",
+        ],
+      keywords='layout grok zope2',
+      author='Sylvain Viollon and Vincent Fretin',
+      author_email='grok-dev at zope.org',
+      url='http://svn.zope.org/five.megrok.layout/',
+      license='ZPL',
+      packages=find_packages('src', exclude=['ez_setup']),
+      package_dir={'': 'src'},
+      namespace_packages=['five', 'five.megrok'],
+      include_package_data=True,
+      zip_safe=False,
+      install_requires=[
+          'setuptools',
+          'five.grok',
+          'megrok.layout >= 0.6',
+      ],
+      )

Added: five.megrok.layout/trunk/src/five/__init__.py
===================================================================
--- five.megrok.layout/trunk/src/five/__init__.py	                        (rev 0)
+++ five.megrok.layout/trunk/src/five/__init__.py	2009-09-14 16:17:48 UTC (rev 103962)
@@ -0,0 +1,6 @@
+# See http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages
+try:
+    __import__('pkg_resources').declare_namespace(__name__)
+except ImportError:
+    from pkgutil import extend_path
+    __path__ = extend_path(__path__, __name__)

Added: five.megrok.layout/trunk/src/five/megrok/__init__.py
===================================================================
--- five.megrok.layout/trunk/src/five/megrok/__init__.py	                        (rev 0)
+++ five.megrok.layout/trunk/src/five/megrok/__init__.py	2009-09-14 16:17:48 UTC (rev 103962)
@@ -0,0 +1,6 @@
+# See http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages
+try:
+    __import__('pkg_resources').declare_namespace(__name__)
+except ImportError:
+    from pkgutil import extend_path
+    __path__ = extend_path(__path__, __name__)

Added: five.megrok.layout/trunk/src/five/megrok/layout/__init__.py
===================================================================
--- five.megrok.layout/trunk/src/five/megrok/layout/__init__.py	                        (rev 0)
+++ five.megrok.layout/trunk/src/five/megrok/layout/__init__.py	2009-09-14 16:17:48 UTC (rev 103962)
@@ -0,0 +1,17 @@
+#############################################################################
+#
+# Copyright (c) 2009 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+
+from megrok.layout import *
+
+from five.megrok.layout.components import Layout, Page

Added: five.megrok.layout/trunk/src/five/megrok/layout/components.py
===================================================================
--- five.megrok.layout/trunk/src/five/megrok/layout/components.py	                        (rev 0)
+++ five.megrok.layout/trunk/src/five/megrok/layout/components.py	2009-09-14 16:17:48 UTC (rev 103962)
@@ -0,0 +1,48 @@
+#############################################################################
+#
+# Copyright (c) 2009 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+
+import megrok.layout
+
+import Acquisition
+
+
+class Layout(megrok.layout.Layout, Acquisition.Explicit):
+
+    def __init__(self, *args):
+        super(View, self).__init__(*args)
+        if not (self.static is None):
+            # static should be wrapper correctly with acquisition,
+            # otherwise you will not be able to compute URL for
+            # resources.
+            self.static = self.static.__of__(self)
+
+    # We let getPhysicalPath to be acquired. This make static URL's
+    # work, and prevent us to inherit from Acquisition.Implicit
+    getPhysicalPath = Acquisition.Acquired
+
+
+class Page(megrok.layout.Layout, Acquisition.Explicit):
+
+
+    def __init__(self, *args):
+        super(View, self).__init__(*args)
+        if not (self.static is None):
+            # static should be wrapper correctly with acquisition,
+            # otherwise you will not be able to compute URL for
+            # resources.
+            self.static = self.static.__of__(self)
+
+    # We let getPhysicalPath to be acquired. This make static URL's
+    # work, and prevent us to inherit from Acquisition.Implicit
+    getPhysicalPath = Acquisition.Acquired

Added: five.megrok.layout/trunk/src/five/megrok/layout/configure.zcml
===================================================================
--- five.megrok.layout/trunk/src/five/megrok/layout/configure.zcml	                        (rev 0)
+++ five.megrok.layout/trunk/src/five/megrok/layout/configure.zcml	2009-09-14 16:17:48 UTC (rev 103962)
@@ -0,0 +1,9 @@
+<configure
+    xmlns="http://namespaces.zope.org/zope"
+    xmlns:grok="http://namespaces.zope.org/grok"
+    i18n_domain="five.megrok.layout">
+
+  <include package="five.grok" />
+  <include package="megrok.layout" />
+
+</configure>

Added: five.megrok.layout/trunk/src/five/megrok/layout/ftesting.zcml
===================================================================
--- five.megrok.layout/trunk/src/five/megrok/layout/ftesting.zcml	                        (rev 0)
+++ five.megrok.layout/trunk/src/five/megrok/layout/ftesting.zcml	2009-09-14 16:17:48 UTC (rev 103962)
@@ -0,0 +1,16 @@
+<configure
+    xmlns="http://namespaces.zope.org/zope"
+    xmlns:grok="http://namespaces.zope.org/grok">
+
+  <!-- This file acts kinda like a virtual "site.zcml" during ftesting.
+   five.grok's zcml needs to be included. /-->
+  <include package="five.grok" file="meta.zcml" />
+  <include package="five.grok" />
+
+  <!-- And also grok all the ftests /-->
+  <grok:grok package="five.grok.ftests" />
+
+  <include package="zope.app.basicskin" />
+  <include package="zope.app.rotterdam" />
+
+</configure>

Added: five.megrok.layout/trunk/src/five/megrok/layout/ftests/test_grok_functional.py
===================================================================
--- five.megrok.layout/trunk/src/five/megrok/layout/ftests/test_grok_functional.py	                        (rev 0)
+++ five.megrok.layout/trunk/src/five/megrok/layout/ftests/test_grok_functional.py	2009-09-14 16:17:48 UTC (rev 103962)
@@ -0,0 +1,70 @@
+import unittest
+
+from pkg_resources import resource_listdir
+from zope.testing import doctest
+from zope.app.testing.functional import HTTPCaller
+from five.grok.testing import GrokFunctionalLayer
+from Testing.ZopeTestCase.zopedoctest.functional import getRootFolder, sync
+from Testing.ZopeTestCase import FunctionalDocTestSuite
+
+from Testing.ZopeTestCase import installProduct
+installProduct('PageTemplates')
+
+
+def http_call(method, path, data=None, **kw):
+    """Function to help make RESTful calls.
+
+    method - HTTP method to use
+    path - testbrowser style path
+    data - (body) data to submit
+    kw - any request parameters
+    """
+
+    if path.startswith('http://localhost'):
+        path = path[len('http://localhost'):]
+    request_string = '%s %s HTTP/1.1\n' % (method, path)
+    for key, value in kw.items():
+        request_string += '%s: %s\n' % (key, value)
+    if data is not None:
+        request_string += '\r\n'
+        request_string += data
+    return HTTPCaller()(request_string, handle_errors=False)
+
+
+def suiteFromPackage(name):
+    files = resource_listdir(__name__, name)
+    suite = unittest.TestSuite()
+    for filename in files:
+        if not filename.endswith('.py'):
+            continue
+        if filename == '__init__.py':
+            continue
+        if filename[0] in ('.', '#'):
+            # Some editor create temporary files which can be
+            # annoying.
+            continue
+
+        dottedname = 'five.grok.ftests.%s.%s' % (name, filename[:-3])
+        test = FunctionalDocTestSuite(
+            dottedname,
+            extraglobs=dict(http=HTTPCaller(),
+                            http_call=http_call,
+                            getRootFolder=getRootFolder,
+                            sync=sync),
+            optionflags=(doctest.ELLIPSIS+
+                         doctest.NORMALIZE_WHITESPACE+
+                         doctest.REPORT_NDIFF))
+        test.layer = GrokFunctionalLayer
+
+        suite.addTest(test)
+    return suite
+
+
+def test_suite():
+    suite = unittest.TestSuite()
+    for name in ['directoryresource', 'view', 'viewlet','form', 'site']:
+        suite.addTest(suiteFromPackage(name))
+    return suite
+
+if __name__ == '__main__':
+    unittest.main(defaultTest='test_suite')

Added: five.megrok.layout/trunk/src/five/megrok/layout/testing.py
===================================================================
--- five.megrok.layout/trunk/src/five/megrok/layout/testing.py	                        (rev 0)
+++ five.megrok.layout/trunk/src/five/megrok/layout/testing.py	2009-09-14 16:17:48 UTC (rev 103962)
@@ -0,0 +1,123 @@
+##############################################################################
+#
+# Copyright (c) 2007 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Grok test helpers
+"""
+import sys
+import grokcore.component
+from zope.configuration.config import ConfigurationMachine
+from martian import scan
+from grokcore.component import zcml
+
+def grok(module_name):
+    config = ConfigurationMachine()
+    zcml.do_grok('grokcore.component.meta', config)
+    zcml.do_grok('grokcore.view.meta.views', config)
+    zcml.do_grok('grokcore.view.meta.templates', config)
+    zcml.do_grok('grokcore.view.meta.skin', config)
+    # Use the Five override for the page template factory
+    # zcml.do_grok('grokcore.view.templatereg', config)
+    zcml.do_grok('five.grok.templatereg', config)
+    zcml.do_grok('five.grok.meta', config)
+    zcml.do_grok(module_name, config)
+    config.execute_actions()
+
+def grok_component(name, component,
+                   context=None, module_info=None, templates=None):
+    if module_info is None:
+        obj_module = getattr(component, '__grok_module__', None)
+        if obj_module is None:
+            obj_module = getattr(component, '__module__', None)
+        module_info = scan.module_info_from_dotted_name(obj_module)
+
+    module = module_info.getModule()
+    if context is not None:
+        grokcore.component.context.set(module, context)
+    if templates is not None:
+        module.__grok_templates__ = templates
+    config = ConfigurationMachine()
+    result = zcml.the_multi_grokker.grok(name, component,
+                                         module_info=module_info,
+                                         config=config)
+    config.execute_actions()
+    return result
+
+def warn(message, category=None, stacklevel=1):
+    """Intended to replace warnings.warn in tests.
+
+    Modified copy from zope.deprecation.tests to:
+
+      * make the signature identical to warnings.warn
+      * to check for *.pyc and *.pyo files.
+
+    When zope.deprecation is fixed, this warn function can be removed again.
+    """
+    print "From five.grok.testing's warn():"
+
+    frame = sys._getframe(stacklevel)
+    path = frame.f_globals['__file__']
+    if path.endswith('.pyc') or path.endswith('.pyo'):
+        path = path[:-1]
+
+    file = open(path)
+    lineno = frame.f_lineno
+    for i in range(lineno):
+        line = file.readline()
+
+    print "%s:%s: %s: %s\n  %s" % (
+        path,
+        frame.f_lineno,
+        category.__name__,
+        message,
+        line.strip(),
+        )
+
+
+from zope.app.testing.placelesssetup import tearDown as _cleanUp
+def cleanUp():
+    '''Cleans up the component architecture.'''
+    _cleanUp()
+    import Products.Five.zcml as zcml
+    zcml._initialized = 0
+
+def setDebugMode(mode):
+    '''Allows manual setting of Five's inspection of debug mode
+       to allow for ZCML to fail meaningfully.
+    '''
+    import Products.Five.fiveconfigure as fc
+    fc.debug_mode = mode
+
+import five.grok
+def safe_load_site():
+    '''Loads entire component architecture (w/ debug mode on).'''
+    cleanUp()
+    setDebugMode(1)
+    import Products.Five.zcml as zcml
+    zcml.load_site()
+    zcml.load_config('ftesting.zcml', five.grok)
+    setDebugMode(0)
+
+class Layer:
+
+    def setUp(cls):
+        '''Sets up the CA by loading etc/site.zcml.'''
+        safe_load_site()
+    setUp = classmethod(setUp)
+
+    def tearDown(cls):
+        '''Cleans up the CA.'''
+        cleanUp()
+    tearDown = classmethod(tearDown)
+
+GrokFunctionalLayer = Layer
+

Added: five.megrok.layout/trunk/versions.cfg
===================================================================
--- five.megrok.layout/trunk/versions.cfg	                        (rev 0)
+++ five.megrok.layout/trunk/versions.cfg	2009-09-14 16:17:48 UTC (rev 103962)
@@ -0,0 +1,115 @@
+# This is a duplication of grok/versions.cfg revision 103106
+# to get differences...
+#   svn diff -r 103106 svn://svn.zope.org/repos/main/grok/trunk/versions.cfg
+
+
+[versions]
+ClientForm = 0.2.9
+grokcore.component = 1.7
+grokcore.formlib = 1.2
+grokcore.security = 1.1
+grokcore.view = 1.9
+grokcore.viewlet = 1.1
+grokui.admin = 0.4.0
+martian = 0.11
+mechanize = 0.1.7b
+pytz = 2007k
+RestrictedPython = 3.4.2
+simplejson = 1.7.1
+z3c.autoinclude = 0.2.2
+z3c.flashmessage = 1.0
+z3c.testsetup = 0.4
+zc.catalog = 1.2.0
+ZConfig = 2.5.1
+zc.recipe.testrunner = 1.0.0
+zdaemon = 2.0.2
+ZODB3 = 3.8.2
+zodbcode = 3.4.0
+zope.annotation = 3.4.1
+zope.app.apidoc = 3.4.3
+zope.app.applicationcontrol = 3.4.3
+zope.app.appsetup = 3.4.1
+zope.app.authentication = 3.4.4
+zope.app.basicskin = 3.4.0
+zope.app.broken = 3.4.0
+zope.app.catalog = 3.5.1
+zope.app.component = 3.4.1
+zope.app.container = 3.5.6
+zope.app.content = 3.4.0
+zope.app.debug = 3.4.1
+zope.app.dependable = 3.4.0
+zope.app.error = 3.5.1
+zope.app.exception = 3.4.1
+zope.app.file = 3.4.4
+zope.app.folder = 3.4.0
+zope.app.form = 3.4.1
+zope.app.generations = 3.4.1
+zope.app.http = 3.4.1
+zope.app.i18n = 3.4.4
+zope.app.interface = 3.4.0
+zope.app.intid = 3.4.1
+zope.app.keyreference = 3.4.1
+zope.app.locales = 3.4.5
+zope.app.onlinehelp = 3.4.1
+zope.app.pagetemplate = 3.4.1
+zope.app.preference = 3.4.1
+zope.app.principalannotation = 3.4.0
+zope.app.publication = 3.4.3
+zope.app.publisher = 3.5.1
+zope.app.renderer = 3.4.0
+zope.app.rotterdam = 3.4.1
+zope.app.schema = 3.4.0
+zope.app.security = 3.5.2
+zope.app.securitypolicy = 3.4.6
+zope.app.server = 3.4.2
+zope.app.session = 3.5.1
+zope.app.skins = 3.4.0
+zope.app.testing = 3.4.3
+zope.app.tree = 3.4.0
+zope.app.twisted = 3.4.1
+zope.app.wsgi = 3.4.1
+zope.app.zapi = 3.4.0
+zope.app.zcmlfiles = 3.4.3
+zope.app.zopeappgenerations = 3.4.0
+zope.cachedescriptors = 3.4.1
+zope.component = 3.4.0
+zope.configuration = 3.4.0
+zope.contentprovider = 3.4.0
+zope.contenttype = 3.4.0
+zope.copypastemove = 3.4.0
+zope.datetime = 3.4.0
+zope.deferredimport = 3.4.0
+zope.deprecation = 3.4.0
+zope.dottedname = 3.4.2
+zope.dublincore = 3.4.0
+zope.error = 3.5.1
+zope.event = 3.4.0
+zope.exceptions = 3.4.0
+zope.filerepresentation = 3.4.0
+zope.formlib = 3.4.0
+zope.hookable = 3.4.0
+zope.i18n = 3.4.0
+zope.i18nmessageid = 3.4.3
+zope.index = 3.4.1
+zope.interface = 3.4.1
+zope.lifecycleevent = 3.4.0
+zope.location = 3.4.0
+zope.minmax = 1.1.0
+zope.modulealias = 3.4.0
+zope.pagetemplate = 3.4.0
+zope.proxy = 3.4.2
+zope.publisher = 3.4.9
+zope.schema = 3.4.0
+zope.security = 3.4.1
+zope.securitypolicy = 3.4.1
+zope.server = 3.4.3
+zope.session = 3.4.1
+zope.size = 3.4.0
+zope.structuredtext = 3.4.0
+zope.tal = 3.4.1
+zope.tales = 3.4.0
+zope.testbrowser = 3.4.2
+zope.testing = 3.7.6
+zope.thread = 3.4
+zope.traversing = 3.4.1
+zope.viewlet = 3.4.2



More information about the checkins mailing list