[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