[Checkins] SVN: zope.app.appsetup/trunk/src/zope/app/appsetup/ Added tests for the new zope.app.appsetup.debug module.

Marius Gedminas marius at pov.lt
Mon Aug 25 18:36:32 EDT 2008


Log message for revision 90248:
  Added tests for the new zope.app.appsetup.debug module.
  
  Also fixes a bug when debug.main() was called with no arguments.
  
  

Changed:
  U   zope.app.appsetup/trunk/src/zope/app/appsetup/debug.py
  A   zope.app.appsetup/trunk/src/zope/app/appsetup/debug.txt
  A   zope.app.appsetup/trunk/src/zope/app/appsetup/testdata/
  A   zope.app.appsetup/trunk/src/zope/app/appsetup/testdata/site.zcml
  A   zope.app.appsetup/trunk/src/zope/app/appsetup/testdata/test.conf
  U   zope.app.appsetup/trunk/src/zope/app/appsetup/tests.py

-=-
Modified: zope.app.appsetup/trunk/src/zope/app/appsetup/debug.py
===================================================================
--- zope.app.appsetup/trunk/src/zope/app/appsetup/debug.py	2008-08-25 22:35:42 UTC (rev 90247)
+++ zope.app.appsetup/trunk/src/zope/app/appsetup/debug.py	2008-08-25 22:36:31 UTC (rev 90248)
@@ -25,7 +25,6 @@
 import zope.event
 from zope.app.publication.zopepublication import ZopePublication
 
-os.environ["PYTHONINSPECT"] = "true"
 
 def load_options(args=None):
     if args is None:
@@ -34,8 +33,9 @@
     options.schemadir = os.path.join(
         os.path.dirname(os.path.abspath(__file__)), 'schema')
     options.realize(args)
+    if options.configroot is None:
+        options.usage("please specify a configuration file")
     options = options.configroot
-
     if options.path:
         sys.path[:0] = [os.path.abspath(p) for p in options.path]
     return options
@@ -60,3 +60,8 @@
         execfile(os.environ["PYTHONSTARTUP"])
     sys.modules['__main__'].root = db.open().root()[ZopePublication.root_name]
     print 'The application root is known as `root`.'
+    os.environ["PYTHONINSPECT"] = "true"
+
+
+if __name__ == '__main__':
+    main()

Added: zope.app.appsetup/trunk/src/zope/app/appsetup/debug.txt
===================================================================
--- zope.app.appsetup/trunk/src/zope/app/appsetup/debug.txt	                        (rev 0)
+++ zope.app.appsetup/trunk/src/zope/app/appsetup/debug.txt	2008-08-25 22:36:31 UTC (rev 90248)
@@ -0,0 +1,48 @@
+Debug console
+=============
+
+The debug console lets you have a Python prompt with the full Zope
+environment loaded (which includes the ZCML configuration, as well as an open
+database connection).
+
+Let's define a helper to run the debug script and trap SystemExit exceptions
+that would otherwise hide the output
+
+    >>> import sys
+    >>> from zope.app.appsetup import debug
+    >>> def run(*args):
+    ...     sys.argv[0] = 'debug'
+    ...     sys.stderr = sys.stdout
+    ...     try:
+    ...         debug.main(args)
+    ...     except SystemExit, e:
+    ...         print "(exited with status %d)" % e.code
+
+If you call the script with no arguments, it displays a brief error message
+on stderr
+
+    >>> run()
+    Error: please specify a configuration file
+    For help, use debug -h
+    (exited with status 2)
+
+We need to pass a ZConfig configuration file as an argument
+
+    >>> run('-C', 'test.conf')
+    The application root is known as `root`.
+
+Now you have the root object from the open database available as a global
+variable named 'root' in the __main__ module:
+
+    >>> main_module = sys.modules['__main__']
+    >>> main_module.root            # doctest: +ELLIPSIS
+    <zope.app.folder.folder.Folder object at ...>
+
+and we have asked Python to enter interactive mode by setting the
+PYTHONINSPECT environment variable
+
+    >>> import os
+    >>> os.environ.get('PYTHONINSPECT')
+    'true'
+
+


Property changes on: zope.app.appsetup/trunk/src/zope/app/appsetup/debug.txt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: zope.app.appsetup/trunk/src/zope/app/appsetup/testdata/site.zcml
===================================================================
--- zope.app.appsetup/trunk/src/zope/app/appsetup/testdata/site.zcml	                        (rev 0)
+++ zope.app.appsetup/trunk/src/zope/app/appsetup/testdata/site.zcml	2008-08-25 22:36:31 UTC (rev 90248)
@@ -0,0 +1,5 @@
+<configure>
+  <include package="zope.component" file="meta.zcml" />
+  <include package="zope.component" />
+  <include package="zope.app.appsetup" />
+</configure>


Property changes on: zope.app.appsetup/trunk/src/zope/app/appsetup/testdata/site.zcml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: zope.app.appsetup/trunk/src/zope/app/appsetup/testdata/test.conf
===================================================================
--- zope.app.appsetup/trunk/src/zope/app/appsetup/testdata/test.conf	                        (rev 0)
+++ zope.app.appsetup/trunk/src/zope/app/appsetup/testdata/test.conf	2008-08-25 22:36:31 UTC (rev 90248)
@@ -0,0 +1,9 @@
+site-definition site.zcml
+
+<zodb>
+  <demostorage>
+  </demostorage>
+</zodb>
+
+<eventlog>
+</eventlog>


Property changes on: zope.app.appsetup/trunk/src/zope/app/appsetup/testdata/test.conf
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: zope.app.appsetup/trunk/src/zope/app/appsetup/tests.py
===================================================================
--- zope.app.appsetup/trunk/src/zope/app/appsetup/tests.py	2008-08-25 22:35:42 UTC (rev 90247)
+++ zope.app.appsetup/trunk/src/zope/app/appsetup/tests.py	2008-08-25 22:36:31 UTC (rev 90248)
@@ -16,7 +16,8 @@
 $Id$
 """
 import ZConfig
-import os.path
+import os
+import sys
 import unittest
 import urllib
 import transaction
@@ -186,6 +187,30 @@
 def bootstraptearDown(test):
     test.globs['db'].close()
 
+
+def setUpDebug(test):
+    placelesssetup.setUp(test)
+    test.real_stderr = sys.stderr
+    test.real_argv = list(sys.argv)
+    test.olddir = os.getcwd()
+    os.chdir(os.path.join(os.path.dirname(__file__), 'testdata'))
+    from zope.security.management import endInteraction
+    endInteraction()
+
+
+def tearDownDebug(test):
+    sys.stderr = test.real_stderr
+    sys.argv[:] = test.real_argv
+    os.chdir(test.olddir)
+    # make sure we don't leave environment variables that would cause
+    # Python to open an interactive console
+    if 'PYTHONINSPECT' in os.environ:
+        del os.environ['PYTHONINSPECT']
+    from zope.security.management import endInteraction
+    endInteraction()
+    placelesssetup.tearDown(test)
+
+
 def test_suite():
     suite = unittest.TestSuite()
     suite.addTest(unittest.makeSuite(TestBootstrapSubscriber))
@@ -197,6 +222,10 @@
         'bootstrap.txt', 'product.txt',
         setUp=placelesssetup.setUp, tearDown=placelesssetup.tearDown,
         ))
+    suite.addTest(doctest.DocFileSuite(
+        'debug.txt',
+        setUp=setUpDebug, tearDown=tearDownDebug,
+        ))
     return suite
 
 if __name__ == '__main__':



More information about the Checkins mailing list