[Checkins] SVN: grokapps/rdbexample/trunk/ Upgrade rdbexample to Grok 1.0b2

Vincent Fretin vincent.fretin at gmail.com
Thu Sep 17 17:21:33 EDT 2009


Log message for revision 104264:
  Upgrade rdbexample to Grok 1.0b2

Changed:
  _U  grokapps/rdbexample/trunk/
  A   grokapps/rdbexample/trunk/bootstrap.py
  U   grokapps/rdbexample/trunk/buildout.cfg
  A   grokapps/rdbexample/trunk/etc/
  A   grokapps/rdbexample/trunk/etc/README.txt
  A   grokapps/rdbexample/trunk/etc/debug.ini.in
  A   grokapps/rdbexample/trunk/etc/deploy.ini.in
  A   grokapps/rdbexample/trunk/etc/site.zcml.in
  A   grokapps/rdbexample/trunk/etc/zdaemon.conf.in
  A   grokapps/rdbexample/trunk/etc/zope.conf.in
  U   grokapps/rdbexample/trunk/setup.py
  U   grokapps/rdbexample/trunk/src/rdbexample/app.py
  A   grokapps/rdbexample/trunk/src/rdbexample/app.txt
  U   grokapps/rdbexample/trunk/src/rdbexample/ftesting.zcml
  A   grokapps/rdbexample/trunk/src/rdbexample/static/
  A   grokapps/rdbexample/trunk/src/rdbexample/static/README.txt
  D   grokapps/rdbexample/trunk/src/rdbexample/testing.py
  A   grokapps/rdbexample/trunk/src/rdbexample/tests.py

-=-

Property changes on: grokapps/rdbexample/trunk
___________________________________________________________________
Deleted: svn:externals
   - zope.sqlalchemy svn://svn.zope.org/repos/main/zope.sqlalchemy/trunk
z3c.saconfig svn://svn.zope.org/repos/main/z3c.saconfig/trunk
megrok.rdb svn://svn.zope.org/repos/main/megrok.rdb/trunk




Added: grokapps/rdbexample/trunk/bootstrap.py
===================================================================
--- grokapps/rdbexample/trunk/bootstrap.py	                        (rev 0)
+++ grokapps/rdbexample/trunk/bootstrap.py	2009-09-17 21:21:32 UTC (rev 104264)
@@ -0,0 +1,84 @@
+##############################################################################
+#
+# 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 85041 2008-03-31 15:57:30Z andreasjung $
+"""
+
+import os, shutil, sys, tempfile, urllib2, logging
+
+def remove_old_logger_handlers():
+    # zc.buildout installs a new log stream on every call of
+    # main(). We remove any leftover handlers to avoid multiple output
+    # of same content (doubled lines etc.)
+    root_logger = logging.getLogger()
+    if 'zc.buildout' in root_logger.manager.loggerDict.keys():
+        logger = logging.getLogger('zc.buildout')
+        for handler in logger.handlers:
+            logger.removeHandler(handler)
+    return
+
+
+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
+
+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
+
+cmd = 'from setuptools.command.easy_install import main; main()'
+ws  = pkg_resources.working_set
+assert os.spawnle(
+    os.P_WAIT, sys.executable, quote (sys.executable),
+    '-c', quote (cmd), '-mqNxd', quote (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'])
+remove_old_logger_handlers()
+shutil.rmtree(tmpeggs)
+
+# grokproject specific addition to standard bootstrap.py:
+# Install eggbasket too.  This should be verbose to give the user
+# information about what is happening, since this can take a while.
+zc.buildout.buildout.main(sys.argv[1:] + ['-v', 'install', 'eggbasket'])
+if sys.platform == 'win32':
+    print "Now you can run 'bin\buildout.exe'"
+else:
+    print "Now you can run 'bin/buildout'"

Modified: grokapps/rdbexample/trunk/buildout.cfg
===================================================================
--- grokapps/rdbexample/trunk/buildout.cfg	2009-09-17 21:03:26 UTC (rev 104263)
+++ grokapps/rdbexample/trunk/buildout.cfg	2009-09-17 21:21:32 UTC (rev 104264)
@@ -1,54 +1,57 @@
 [buildout]
-develop = . megrok.rdb zope.sqlalchemy z3c.saconfig
-parts = app data zopectl i18n test
+develop = .
+parts = eggbasket app i18n test data log zpasswd
+        zope_conf site_zcml zdaemon_conf deploy_ini debug_ini
 newest = false
-extends = http://grok.zope.org/releaseinfo/grok-0.13.cfg
+extends = http://grok.zope.org/releaseinfo/grok-1.0b2.cfg
+# eggs will be installed in the default buildout location
+# (see .buildout/default.cfg in your home directory)
+# unless you specify an eggs-directory option here.
+
 versions = versions
+extensions += mr.developer
+auto-checkout =
+    megrok.rdb
+    z3c.saconfig
 
+[sources]
+megrok.rdb      = svn svn+ssh://svn.zope.org/repos/main/megrok.rdb/trunk
+z3c.saconfig    = svn svn+ssh://svn.zope.org/repos/main/z3c.saconfig/trunk
+zope.sqlalchemy = svn svn://svn.zope.org/repos/main/zope.sqlalchemy/trunk
+
+[versions]
+Paste = 1.7.2
+PasteDeploy = 1.3.3
+PasteScript = 1.7.3
+SQLAlchemy = 0.5.6
+mr.developer = 1.1
+z3c.evalexception = 2.0
+z3c.recipe.dev = 0.5.4
+z3c.recipe.i18n = 0.5.0
+z3c.recipe.template = 0.1
+zc.recipe.egg = 1.2.2
+zc.recipe.filestorage = 1.0.1
+docutils = 0.5
+elementtree = 1.2.7-20070827-preview
+grokcore.startup = 0.2
+transaction = 1.0.0
+zc.buildout = 1.4.1
+zope.sqlalchemy = 0.4
+
 [app]
-recipe = zc.zope3recipes>=0.5.3:application
+recipe = zc.recipe.egg
 eggs = rdbexample
-site.zcml = <include package="rdbexample" />
-            <include package="zope.app.twisted" />
+       z3c.evalexception>=2.0
+       Paste
+       PasteScript
+       PasteDeploy
+interpreter = python-console
 
-            <configure i18n_domain="rdbexample">
-              <unauthenticatedPrincipal id="zope.anybody"
-                                        title="Unauthenticated User" />
-              <unauthenticatedGroup id="zope.Anybody"
-                                    title="Unauthenticated Users" />
-              <authenticatedGroup id="zope.Authenticated"
-                                title="Authenticated Users" />
-              <everybodyGroup id="zope.Everybody"
-                              title="All Users" />
-              <principal id="zope.manager"
-                         title="Manager"
-                         login="admin"
-                         password_manager="Plain Text"
-                         password="admin"
-                         />
-
-              <!-- Replace the following directive if you don't want
-                   public access -->
-              <grant permission="zope.View"
-                     principal="zope.Anybody" />
-              <grant permission="zope.app.dublincore.view"
-                     principal="zope.Anybody" />
-
-              <role id="zope.Manager" title="Site Manager" />
-              <role id="zope.Member" title="Site Member" />
-              <grantAll role="zope.Manager" />
-              <grant role="zope.Manager"
-                     principal="zope.manager" />
-           </configure>
-
 [data]
 recipe = zc.recipe.filestorage
 
-# this section named so that the start/stop script is called bin/zopectl
-[zopectl]
-recipe = zc.zope3recipes:instance
-application = app
-zope.conf = ${data:zconfig}
+[log]
+recipe = zc.recipe.filestorage
 
 [test]
 recipe = zc.recipe.testrunner
@@ -57,8 +60,48 @@
 
 # this section named so that the i18n scripts are called bin/i18n...
 [i18n]
-recipe = lovely.recipe:i18n
-package = rdbexample
+recipe = z3c.recipe.i18n:i18n
+packages = rdbexample
+eggs = rdbexample
 domain = rdbexample
-location = src/rdbexample
-output = locales
+output = src/rdbexample/locales
+zcml =
+
+# This section is named so that the zpasswd utility is
+# called `zpasswd`
+[zpasswd]
+recipe = z3c.recipe.dev:script
+eggs = rdbexample
+module = zope.app.server.zpasswd
+method = main
+
+[zope_conf]
+recipe = z3c.recipe.template
+input = etc/zope.conf.in
+output = ${buildout:parts-directory}/etc/zope.conf
+
+[site_zcml]
+recipe = z3c.recipe.template
+input = etc/site.zcml.in
+output = ${buildout:parts-directory}/etc/site.zcml
+
+[zdaemon_conf]
+recipe = z3c.recipe.template
+input = etc/zdaemon.conf.in
+output = ${buildout:parts-directory}/etc/zdaemon.conf
+
+[deploy_ini]
+recipe = z3c.recipe.template
+input = etc/deploy.ini.in
+output = ${buildout:parts-directory}/etc/deploy.ini
+
+[debug_ini]
+recipe = z3c.recipe.template
+input = etc/debug.ini.in
+output = ${buildout:parts-directory}/etc/debug.ini
+
+
+[eggbasket]
+recipe = z3c.recipe.eggbasket
+eggs = grok
+url = http://grok.zope.org/releaseinfo/grok-eggs-1.0b2.tgz

Added: grokapps/rdbexample/trunk/etc/README.txt
===================================================================
--- grokapps/rdbexample/trunk/etc/README.txt	                        (rev 0)
+++ grokapps/rdbexample/trunk/etc/README.txt	2009-09-17 21:21:32 UTC (rev 104264)
@@ -0,0 +1,26 @@
+In this directory you can find templates which are used by
+``zc.buildout`` to create the configuration files in the parts/etc/ subdir
+of your project.
+
+If you modify files in this directory, you have to run::
+
+  $ bin/buildout
+
+afterwards to rebuild the configuration files in parts/etc/.
+
+In the templates you can use placesholders recognized by zc.buildout
+to name local paths, etc. A zc.buildout placeholder looks like this::
+
+  ${buildout:directory}
+
+which gives you the path of the project directory and will be
+substituted with the real path when you run buildout the next
+time. The set of available placeholders depends on your
+buildout.cfg.
+
+You can also modify files in parts/etc directly, but those changes
+will be overwritten after running bin/buildout the next time.
+
+To run your project you can do::
+
+  $ bin/paster serve parts/etc/deploy.ini

Added: grokapps/rdbexample/trunk/etc/debug.ini.in
===================================================================
--- grokapps/rdbexample/trunk/etc/debug.ini.in	                        (rev 0)
+++ grokapps/rdbexample/trunk/etc/debug.ini.in	2009-09-17 21:21:32 UTC (rev 104264)
@@ -0,0 +1,66 @@
+# debug.ini
+#
+# Debugging configuration for use with paster/WSGI
+#
+
+[loggers]
+keys = root, wsgi
+
+[handlers]
+keys = console, accesslog
+
+[formatters]
+keys = generic, accesslog
+
+[formatter_generic]
+format = %(asctime)s %(levelname)s [%(name)s] %(message)s
+
+[formatter_accesslog]
+format = %(message)s
+
+[handler_console]
+class = StreamHandler
+args = (sys.stderr,)
+level = NOTSET
+formatter = generic
+
+[handler_accesslog]
+class = FileHandler
+args = (os.path.join(r'${buildout:directory}', 'parts', 'log', 'access.log'),
+        'a')
+level = INFO
+formatter = accesslog
+
+[logger_root]
+level = INFO
+handlers = console
+
+[logger_wsgi]
+level = INFO
+handlers = accesslog
+qualname = wsgi
+propagate = 0
+
+[filter:translogger]
+use = egg:Paste#translogger
+setup_console_handler = False
+logger_name = wsgi
+
+[filter-app:main]
+# Change the last part from 'ajax' to 'pdb' for a post-mortem debugger
+# on the console:
+use = egg:z3c.evalexception#ajax
+next = zope
+
+[app:zope]
+use = egg:rdbexample
+filter-with = translogger
+
+[server:main]
+use = egg:Paste#http
+host = 127.0.0.1
+port = 8080
+
+[DEFAULT]
+# set the name of the zope.conf file
+zope_conf = %(here)s/zope.conf

Added: grokapps/rdbexample/trunk/etc/deploy.ini.in
===================================================================
--- grokapps/rdbexample/trunk/etc/deploy.ini.in	                        (rev 0)
+++ grokapps/rdbexample/trunk/etc/deploy.ini.in	2009-09-17 21:21:32 UTC (rev 104264)
@@ -0,0 +1,60 @@
+# deploy.ini
+#
+# Deployment configuration for use with paster/WSGI
+#
+
+[loggers]
+keys = root, wsgi
+
+[handlers]
+keys = console, accesslog
+
+[formatters]
+keys = generic, accesslog
+
+[logger_root]
+level = INFO
+handlers = console
+
+[logger_wsgi]
+level = INFO
+handlers = accesslog
+qualname = wsgi
+propagate = 0
+
+[handler_console]
+class = StreamHandler
+args = (sys.stderr,)
+level = NOTSET
+formatter = generic
+
+[handler_accesslog]
+class = FileHandler
+args = (os.path.join(r'${buildout:directory}', 'parts', 'log', 'access.log'),
+        'a')
+level = INFO
+formatter = accesslog
+
+[formatter_generic]
+format = %(asctime)s %(levelname)s [%(name)s] %(message)s
+
+[formatter_accesslog]
+format = %(message)s
+
+[filter:translogger]
+use = egg:Paste#translogger
+setup_console_handler = False
+logger_name = wsgi
+
+[app:main]
+use = egg:rdbexample
+filter-with = translogger
+
+[server:main]
+use = egg:Paste#http
+host = 127.0.0.1
+port = 8080
+
+[DEFAULT]
+# set the name of the zope.conf file
+zope_conf = %(here)s/zope.conf

Added: grokapps/rdbexample/trunk/etc/site.zcml.in
===================================================================
--- grokapps/rdbexample/trunk/etc/site.zcml.in	                        (rev 0)
+++ grokapps/rdbexample/trunk/etc/site.zcml.in	2009-09-17 21:21:32 UTC (rev 104264)
@@ -0,0 +1,36 @@
+<configure xmlns="http://namespaces.zope.org/zope"
+           i18n_domain="rdbexample">
+
+  <include package="rdbexample" />
+
+    <configure i18n_domain="rdbexample">
+    
+      <unauthenticatedPrincipal id="zope.anybody"
+                                title="Unauthenticated User" />
+      <unauthenticatedGroup id="zope.Anybody"
+                            title="Unauthenticated Users" />
+      <authenticatedGroup id="zope.Authenticated"
+                        title="Authenticated Users" />
+      <everybodyGroup id="zope.Everybody"
+                      title="All Users" />
+      <principal id="zope.manager"
+                 title="Manager"
+                 login="admin"
+                 password_manager="SHA1"
+                 password="316dbba1d033e22ae348aeb5660fc2140aec35850c4da997"
+                 />
+
+      <!-- Replace the following directive if you do not want
+           public access -->
+      <grant permission="zope.View"
+             principal="zope.Anybody" />
+      <grant permission="zope.app.dublincore.view"
+             principal="zope.Anybody" />
+
+      <role id="zope.Manager" title="Site Manager" />
+      <role id="zope.Member" title="Site Member" />
+      <grantAll role="zope.Manager" />
+      <grant role="zope.Manager"
+             principal="zope.manager" />
+   </configure>
+</configure>

Added: grokapps/rdbexample/trunk/etc/zdaemon.conf.in
===================================================================
--- grokapps/rdbexample/trunk/etc/zdaemon.conf.in	                        (rev 0)
+++ grokapps/rdbexample/trunk/etc/zdaemon.conf.in	2009-09-17 21:21:32 UTC (rev 104264)
@@ -0,0 +1,8 @@
+<runner>
+  program bin/paster serve ${buildout:directory}/parts/etc/deploy.ini
+  daemon on
+  transcript ${buildout:directory}/parts/log/zdaemon.log
+  socket-name ${buildout:directory}/parts/log/zdaemonsock
+  # Enable this to run the child process as a different user
+  # user zope
+</runner>

Added: grokapps/rdbexample/trunk/etc/zope.conf.in
===================================================================
--- grokapps/rdbexample/trunk/etc/zope.conf.in	                        (rev 0)
+++ grokapps/rdbexample/trunk/etc/zope.conf.in	2009-09-17 21:21:32 UTC (rev 104264)
@@ -0,0 +1,42 @@
+# Identify the component configuration used to define the site:
+site-definition ${site_zcml:output}
+
+<zodb>
+  # Standard Filestorage
+  <filestorage>
+    path ${data:path}
+  </filestorage>
+
+# Uncomment this if you want to connect to a ZEO server instead:
+#  <zeoclient>
+#    server localhost:8100
+#    storage 1
+#    # ZEO client cache, in bytes
+#    cache-size 20MB
+#    # Uncomment to have a persistent disk cache
+#    #client zeo1
+#  </zeoclient>
+</zodb>
+
+<eventlog>
+  # This sets up logging to a file.
+  # The "path" setting can be a relative or absolute
+  # filesystem path.
+
+  <logfile>
+    path ${buildout:directory}/parts/log/z3.log
+    formatter zope.exceptions.log.Formatter
+  </logfile>
+
+  # This sets up logging to to standard output.
+  # The "path" setting can be the tokens STDOUT or STDERR
+  
+#  <logfile>
+#    path STDOUT
+#    formatter zope.exceptions.log.Formatter
+#  </logfile>
+</eventlog>
+
+# Comment this line to disable developer mode.  This should be done in
+# production
+devmode on
\ No newline at end of file

Modified: grokapps/rdbexample/trunk/setup.py
===================================================================
--- grokapps/rdbexample/trunk/setup.py	2009-09-17 21:03:26 UTC (rev 104263)
+++ grokapps/rdbexample/trunk/setup.py	2009-09-17 21:21:32 UTC (rev 104264)
@@ -19,10 +19,18 @@
       include_package_data=True,
       zip_safe=False,
       install_requires=['setuptools',
-                        'grok == 0.13',
+                        'grok',
+                        'grokui.admin',
+                        'z3c.testsetup',
+                        'grokcore.startup',
                         'megrok.rdb',
+                        # Add extra requirements here
                         ],
-      entry_points="""
-      # Add entry points here
+      entry_points = """
+      [console_scripts]
+      rdbexample-debug = grokcore.startup:interactive_debug_prompt
+      rdbexample-ctl = grokcore.startup:zdaemon_controller
+      [paste.app_factory]
+      main = grokcore.startup:application_factory
       """,
       )

Modified: grokapps/rdbexample/trunk/src/rdbexample/app.py
===================================================================
--- grokapps/rdbexample/trunk/src/rdbexample/app.py	2009-09-17 21:03:26 UTC (rev 104263)
+++ grokapps/rdbexample/trunk/src/rdbexample/app.py	2009-09-17 21:21:32 UTC (rev 104264)
@@ -1,5 +1,6 @@
 import grok
 from megrok import rdb
+from megrok.rdb.schema import schema_from_model
 
 from zope.location.location import located
 
@@ -8,7 +9,7 @@
 from sqlalchemy.orm import relation
 
 from z3c.saconfig import EngineFactory, GloballyScopedSession
-from z3c.saconfig.interfaces import IEngineFactory, IEngineCreatedEvent
+from z3c.saconfig.interfaces import IEngineCreatedEvent
 
 # we set up the engine factory and the session
 # we set them up as global utilities here. It is also possible to
@@ -69,7 +70,8 @@
 
     @property
     def form_fields(self):
-        return rdb.Fields(Faculty)
+        return grok.Fields(schema_from_model(Faculty))
+        #return rdb.Fields(Faculty)
 
     @grok.action('add')
     def handle_add(self, *args, **kw):

Added: grokapps/rdbexample/trunk/src/rdbexample/app.txt
===================================================================
--- grokapps/rdbexample/trunk/src/rdbexample/app.txt	                        (rev 0)
+++ grokapps/rdbexample/trunk/src/rdbexample/app.txt	2009-09-17 21:21:32 UTC (rev 104264)
@@ -0,0 +1,32 @@
+Do a functional doctest test on the app.
+========================================
+
+:Test-Layer: functional
+
+Let's first create an instance of Rdbexample at the top level:
+
+   >>> from rdbexample.app import Rdbexample
+   >>> root = getRootFolder()
+   >>> root['app'] = Rdbexample()
+
+
+Run tests in the testbrowser
+----------------------------
+
+The zope.testbrowser.browser module exposes a Browser class that
+simulates a web browser similar to Mozilla Firefox or IE.  We use that
+to test how our application behaves in a browser.  For more
+information, see http://pypi.python.org/pypi/zope.testbrowser.
+
+Create a browser and visit the instance you just created:
+
+   >>> from zope.testbrowser.testing import Browser
+   >>> browser = Browser()
+   >>> browser.open('http://localhost/app')
+
+Check some basic information about the page you visit:
+
+   >>> browser.url
+   'http://localhost/app'
+   >>> browser.headers.get('Status').upper()
+   '200 OK'

Modified: grokapps/rdbexample/trunk/src/rdbexample/ftesting.zcml
===================================================================
--- grokapps/rdbexample/trunk/src/rdbexample/ftesting.zcml	2009-09-17 21:03:26 UTC (rev 104263)
+++ grokapps/rdbexample/trunk/src/rdbexample/ftesting.zcml	2009-09-17 21:21:32 UTC (rev 104264)
@@ -4,12 +4,11 @@
    package="rdbexample"
    >
 
-  <include package="grok" />
   <include package="rdbexample" />
 
   <!-- Typical functional testing security setup -->
   <securityPolicy
-      component="zope.app.securitypolicy.zopepolicy.ZopeSecurityPolicy"
+      component="zope.securitypolicy.zopepolicy.ZopeSecurityPolicy"
       />
 
   <unauthenticatedPrincipal

Added: grokapps/rdbexample/trunk/src/rdbexample/static/README.txt
===================================================================
--- grokapps/rdbexample/trunk/src/rdbexample/static/README.txt	                        (rev 0)
+++ grokapps/rdbexample/trunk/src/rdbexample/static/README.txt	2009-09-17 21:21:32 UTC (rev 104264)
@@ -0,0 +1,2 @@
+Put static files here, like javascript and css.  They will be
+available as static/<filename> in views.

Deleted: grokapps/rdbexample/trunk/src/rdbexample/testing.py
===================================================================
--- grokapps/rdbexample/trunk/src/rdbexample/testing.py	2009-09-17 21:03:26 UTC (rev 104263)
+++ grokapps/rdbexample/trunk/src/rdbexample/testing.py	2009-09-17 21:21:32 UTC (rev 104264)
@@ -1,7 +0,0 @@
-import os.path
-import rdbexample
-from zope.app.testing.functional import ZCMLLayer
-
-ftesting_zcml = os.path.join(
-    os.path.dirname(rdbexample.__file__), 'ftesting.zcml')
-FunctionalLayer = ZCMLLayer(ftesting_zcml, __name__, 'FunctionalLayer')

Added: grokapps/rdbexample/trunk/src/rdbexample/tests.py
===================================================================
--- grokapps/rdbexample/trunk/src/rdbexample/tests.py	                        (rev 0)
+++ grokapps/rdbexample/trunk/src/rdbexample/tests.py	2009-09-17 21:21:32 UTC (rev 104264)
@@ -0,0 +1,12 @@
+import os.path
+import z3c.testsetup
+import rdbexample
+from zope.app.testing.functional import ZCMLLayer
+
+
+ftesting_zcml = os.path.join(
+    os.path.dirname(rdbexample.__file__), 'ftesting.zcml')
+FunctionalLayer = ZCMLLayer(ftesting_zcml, __name__, 'FunctionalLayer',
+                            allow_teardown=True)
+
+test_suite = z3c.testsetup.register_all_tests('rdbexample')



More information about the checkins mailing list