[Checkins] SVN: Zope/branches/console-scripts/src/Zope2/utilities/instance.py added for testing (from Repoze)

Andreas Jung andreas at andreas-jung.com
Thu Feb 19 08:15:29 EST 2009


Log message for revision 96744:
  added for testing (from Repoze)
  

Changed:
  A   Zope/branches/console-scripts/src/Zope2/utilities/instance.py

-=-
Added: Zope/branches/console-scripts/src/Zope2/utilities/instance.py
===================================================================
--- Zope/branches/console-scripts/src/Zope2/utilities/instance.py	                        (rev 0)
+++ Zope/branches/console-scripts/src/Zope2/utilities/instance.py	2009-02-19 13:15:28 UTC (rev 96744)
@@ -0,0 +1,86 @@
+import optparse
+import os
+import os.path
+import sys
+import re
+
+here = os.path.abspath(os.path.dirname(__file__))
+
+# I would use string.Template, but it's just too hard to change it to
+# respect only ${brace} syntax instead of both that and $name syntax.
+TOKEN_RE = re.compile(r'\$\{([\.\w/-]+)\}')
+def rewrite(repltext, **kw):
+    def replace(match):
+        return kw[match.group(1)]
+    return TOKEN_RE.sub(replace, repltext)
+
+def mkinstance(conf):
+    sandbox = conf['sandbox']
+        
+    for dir in ('bin', 'etc', 'var', 'Products', 'import', 'log'):
+        path = os.path.join(sandbox, dir)
+        if not os.path.exists(path):
+            os.makedirs(path)
+
+    try:
+        # this is (stupidly) required by the zdrun key in the <runner>
+        # section of zeo.conf
+        import zdaemon
+        conf['zdaemon_pkgdir'] = zdaemon.__path__[0]
+    except ImportError:
+        conf['zdaemon_pkgdir'] = '{unknown}'
+
+    zope_conf = conf['zope_conf']
+    site_zcml = conf['site_zcml']
+        
+    for source, target in (
+        ('zope2.ini', 'zope2.ini'),
+        (site_zcml, 'site.zcml'),
+        (zope_conf, 'zope.conf'),
+        ('apache2.conf', 'apache2.conf'),
+        ('zeo.conf', 'zeo.conf'),
+        ):
+        template = open(os.path.join(here, 'etc', source), 'r').read()
+        result = rewrite(template, **conf)
+        targetfile = os.path.join(sandbox, 'etc', target)
+        if not os.path.exists(targetfile):
+            open(targetfile, 'w').write(result)
+
+    template = open(os.path.join(here, 'etc', 'zope2.wsgi'), 'r').read()
+    result = rewrite(template, **conf)
+    targetfile = os.path.join(sandbox, 'bin', 'zope2.wsgi')
+    if not os.path.exists(targetfile):
+        open(targetfile, 'w').write(result)
+        os.chmod(targetfile, 0755)
+
+def main(argv=sys.argv):
+    """ Console script target """
+    parser = optparse.OptionParser(
+        usage='%prog [OPTIONS]'
+        )
+    parser.add_option('-s', '--sandbox', action='store', dest='sandbox',
+                      default='.', help='Create the instance in this directory')
+    parser.add_option('-p', '--zope-port', action='store', dest='zope_port',
+                      default='8080', help='Zope HTTP port')
+    parser.add_option('-j', '--zeo-port', action='store', dest='zeo_port',
+                      default='8100', help='ZEO server port number')
+    parser.add_option('-z', '--use-zeo', action='store_true', dest='use_zeo',
+                      default=False, help='Use ZEO to house main storage')
+    options, args = parser.parse_args(argv)
+    try:
+        # Zope 2.10+ (Five 1.5.3?+)
+        from Products.Five.fivedirectives import IRegisterPackageDirective
+        options.site_zcml = 'zope-2.10+-site.zcml'
+    except ImportError:
+        # Zope 2.9 (or Five before 1.5.3?)
+        options.site_zcml = 'zope-2.9-site.zcml'
+    if options.use_zeo:
+        options.zope_conf = 'zope-zeoclient.conf'
+    else:
+        options.zope_conf = 'zope-nonzeoclient.conf'
+    options.python = sys.executable
+    conf = options.__dict__
+    sandbox = conf['sandbox']
+    conf['sandbox'] = os.path.abspath(os.path.normpath(os.path.expanduser(
+        sandbox)))
+    mkinstance(conf)



More information about the Checkins mailing list