Hi,

The code in bootstrap.py doesn't use the 'if __name__ == "__main__"' idiom. 
This can lead to funny behaviour if it is imported for some reason (I 
stumbled upon this in conjunction with nose). I have attached a small patch 
that changes this.

-- 
René Fleschenberg
Index: zopeskel/templates/silva_buildout/bootstrap.py
===================================================================
--- zopeskel/templates/silva_buildout/bootstrap.py	(Revision 114075)
+++ zopeskel/templates/silva_buildout/bootstrap.py	(Arbeitskopie)
@@ -22,41 +22,49 @@
 
 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)
+def main():
 
-    import pkg_resources
+    tmpeggs = tempfile.mkdtemp()
 
-if sys.platform == 'win32':
-    def quote(c):
-        if ' ' in c:
-            return '"%s"' % c # work around spawn lamosity on windows
-        else:
+    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
-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
+    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'])
-shutil.rmtree(tmpeggs)
+    ws.add_entry(tmpeggs)
+    ws.require('zc.buildout')
+    import zc.buildout.buildout
+    zc.buildout.buildout.main(sys.argv[1:] + ['bootstrap'])
+    shutil.rmtree(tmpeggs)
+
+
+if __name__ == '__main__':
+    main()
+
Index: zopeskel/templates/zope2_buildout/bootstrap.py
===================================================================
--- zopeskel/templates/zope2_buildout/bootstrap.py	(Revision 114075)
+++ zopeskel/templates/zope2_buildout/bootstrap.py	(Arbeitskopie)
@@ -22,41 +22,49 @@
 
 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)
+def main():
 
-    import pkg_resources
+    tmpeggs = tempfile.mkdtemp()
 
-if sys.platform == 'win32':
-    def quote(c):
-        if ' ' in c:
-            return '"%s"' % c # work around spawn lamosity on windows
-        else:
+    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
-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
+    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'])
-shutil.rmtree(tmpeggs)
+    ws.add_entry(tmpeggs)
+    ws.require('zc.buildout')
+    import zc.buildout.buildout
+    zc.buildout.buildout.main(sys.argv[1:] + ['bootstrap'])
+    shutil.rmtree(tmpeggs)
+
+
+if __name__ == '__main__':
+    main()
+
Index: zopeskel/templates/plone3_buildout/bootstrap.py
===================================================================
--- zopeskel/templates/plone3_buildout/bootstrap.py	(Revision 114075)
+++ zopeskel/templates/plone3_buildout/bootstrap.py	(Arbeitskopie)
@@ -21,101 +21,108 @@
 import os, shutil, sys, tempfile, urllib2
 from optparse import OptionParser
 
-tmpeggs = tempfile.mkdtemp()
 
-is_jython = sys.platform.startswith('java')
+def main():
+    tmpeggs = tempfile.mkdtemp()
 
-# parsing arguments
-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="distribute", default=False,
-                   help="Use Disribute rather than Setuptools.")
+    is_jython = sys.platform.startswith('java')
 
-parser.add_option("-c", None, action="store", dest="config_file",
-                   help=("Specify the path to the buildout configuration "
-                         "file to be used."))
+    # parsing arguments
+    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="distribute", default=False,
+                       help="Use Disribute rather than Setuptools.")
 
-options, args = parser.parse_args()
+    parser.add_option("-c", None, action="store", dest="config_file",
+                       help=("Specify the path to the buildout configuration "
+                             "file to be used."))
 
-# 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]
+    options, args = parser.parse_args()
 
-if options.version is not None:
-    VERSION = '==%s' % options.version
-else:
-    VERSION = ''
+    # 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]
 
-# We decided to always use distribute, make sure this is the default for us
-# USE_DISTRIBUTE = options.distribute
-USE_DISTRIBUTE = True
-args = args + ['bootstrap']
-
-to_reload = False
-try:
-    import pkg_resources
-    if not hasattr(pkg_resources, '_distribute'):
-        to_reload = True
-        raise ImportError
-except ImportError:
-    ez = {}
-    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)
+    if options.version is not None:
+        VERSION = '==%s' % options.version
     else:
-        exec urllib2.urlopen('http://peak.telecommunity.com/dist/ez_setup.py'
-                             ).read() in ez
-        ez['use_setuptools'](to_dir=tmpeggs, download_delay=0)
+        VERSION = ''
 
-    if to_reload:
-        reload(pkg_resources)
-    else:
+    # We decided to always use distribute, make sure this is the default for us
+    # USE_DISTRIBUTE = options.distribute
+    USE_DISTRIBUTE = True
+    args = args + ['bootstrap']
+
+    to_reload = False
+    try:
         import pkg_resources
+        if not hasattr(pkg_resources, '_distribute'):
+            to_reload = True
+            raise ImportError
+    except ImportError:
+        ez = {}
+        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)
 
-if sys.platform == 'win32':
-    def quote(c):
-        if ' ' in c:
-            return '"%s"' % c # work around spawn lamosity on windows
+        if to_reload:
+            reload(pkg_resources)
         else:
+            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
-else:
-    def quote (c):
-        return c
 
-cmd = 'from setuptools.command.easy_install import main; main()'
-ws  = pkg_resources.working_set
+    cmd = 'from setuptools.command.easy_install import main; main()'
+    ws  = pkg_resources.working_set
 
-if USE_DISTRIBUTE:
-    requirement = 'distribute'
-else:
-    requirement = 'setuptools'
+    if USE_DISTRIBUTE:
+        requirement = 'distribute'
+    else:
+        requirement = 'setuptools'
 
-if is_jython:
-    import subprocess
+    if is_jython:
+        import subprocess
 
-    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
+        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
+    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)
-shutil.rmtree(tmpeggs)
+    ws.add_entry(tmpeggs)
+    ws.require('zc.buildout' + VERSION)
+    import zc.buildout.buildout
+    zc.buildout.buildout.main(args)
+    shutil.rmtree(tmpeggs)
+
+
+if __name__ == '__main__':
+    main()
+
Index: zopeskel/templates/recipe/bootstrap.py
===================================================================
--- zopeskel/templates/recipe/bootstrap.py	(Revision 114075)
+++ zopeskel/templates/recipe/bootstrap.py	(Arbeitskopie)
@@ -22,41 +22,49 @@
 
 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)
+def main():
 
-    import pkg_resources
+    tmpeggs = tempfile.mkdtemp()
 
-if sys.platform == 'win32':
-    def quote(c):
-        if ' ' in c:
-            return '"%s"' % c # work around spawn lamosity on windows
-        else:
+    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
-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
+    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'])
-shutil.rmtree(tmpeggs)
+    ws.add_entry(tmpeggs)
+    ws.require('zc.buildout')
+    import zc.buildout.buildout
+    zc.buildout.buildout.main(sys.argv[1:] + ['bootstrap'])
+    shutil.rmtree(tmpeggs)
+
+
+if __name__ == '__main__':
+    main()
+
Index: zopeskel/templates/plone_hosting/bootstrap.py
===================================================================
--- zopeskel/templates/plone_hosting/bootstrap.py	(Revision 114075)
+++ zopeskel/templates/plone_hosting/bootstrap.py	(Arbeitskopie)
@@ -22,41 +22,49 @@
 
 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)
+def main():
 
-    import pkg_resources
+    tmpeggs = tempfile.mkdtemp()
 
-if sys.platform == 'win32':
-    def quote(c):
-        if ' ' in c:
-            return '"%s"' % c # work around spawn lamosity on windows
-        else:
+    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
-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
+    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'])
-shutil.rmtree(tmpeggs)
+    ws.add_entry(tmpeggs)
+    ws.require('zc.buildout')
+    import zc.buildout.buildout
+    zc.buildout.buildout.main(sys.argv[1:] + ['bootstrap'])
+    shutil.rmtree(tmpeggs)
+
+
+if __name__ == '__main__':
+    main()
+

_______________________________________________
ZopeSkel mailing list
ZopeSkel@lists.plone.org
http://lists.plone.org/mailman/listinfo/zopeskel

Reply via email to