[Zope-Checkins] CVS: Zope/utilities - mkzeoinstance.py:1.1 mkzopeinstance.py:1.1 mkzeoinstance:NONE mkzopeinstance:NONE
Chris McDonough
chrism@zope.com
Wed, 25 Jun 2003 15:30:27 -0400
Update of /cvs-repository/Zope/utilities
In directory cvs.zope.org:/tmp/cvs-serv7626/utilities
Added Files:
mkzeoinstance.py mkzopeinstance.py
Removed Files:
mkzeoinstance mkzopeinstance
Log Message:
Give mkzopeinstance and mkzeoinstance a .py extension.
Don't put zconfig script into bindir.
=== Added File Zope/utilities/mkzeoinstance.py ===
#!python
##############################################################################
#
# Copyright (c) 2001 Zope Corporation and Contributors. All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.0 (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.
#
##############################################################################
import os
import sys
mydir = os.path.dirname(os.path.abspath(sys.argv[0]))
zopehome = os.path.dirname(mydir)
softwarehome = os.path.join(zopehome, "lib", "python")
if softwarehome not in sys.path:
sys.path.insert(0, softwarehome)
from ZEO.mkzeoinst import ZEOInstanceBuilder
if __name__ == "__main__":
ZEOInstanceBuilder().run()
=== Added File Zope/utilities/mkzopeinstance.py ===
#! python
##############################################################################
#
# Copyright (c) 2001 Zope Corporation and Contributors. All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.0 (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
#
##############################################################################
"""%(program)s: Create a Zope instance home.
usage: %(program)s [options] directory
Options:
-h/--help -- print this help text
-u/--user NAME:PASSWORD -- set the user name and password of the initial user
-z/--zeo host:port -- set the host:port of the ZEO server
"""
import getopt
import os
import shutil
import sys
def main():
try:
opts, args = getopt.getopt(sys.argv[1:], "hu:z:", ["help", "user=",
"zeo="])
except getopt.GetoptError, msg:
usage(sys.stderr, msg)
sys.exit(2)
user = None
password = None
zeo = None
for opt, arg in opts:
if opt in ("-h", "--help"):
usage(sys.stdout)
sys.exit()
if opt in ("-u", "--user"):
if not ":" in arg:
usage(sys.stderr, "user must be specified as name:password")
sys.exit(2)
user, password = arg.split(":", 1)
if opt in ("-z", "--zeo"):
if not ":" in arg:
usage(sys.stderr, "zeo server must be specified as host:port")
sys.exit(2)
zeo = tuple(arg.split(":", 1))
try:
int(zeo[1])
except ValueError:
usage(sys.stderr, "zeo server port must be a number")
sys.exit(2)
if len(args) != 1:
usage(sys.stderr, "mkzopeinstance requires exactly one argument")
sys.exit(2)
dirname = os.path.abspath(args[0])
inituser = os.path.join(dirname, "inituser")
if not (user or os.path.exists(inituser)):
user, password = get_inituser()
makeinstance(dirname, user, password, inituser)
if zeo:
makezeo(dirname, zeo)
def usage(stream, msg=None):
if msg:
print >>stream, msg
print >>stream
program = os.path.basename(sys.argv[0])
print >>stream, __doc__ % {"program": program}
def get_inituser():
import getpass
print 'Please choose a username and password for the initial user.'
print 'These will be the credentials you use to initially manage'
print 'your new Zope instance.'
print
user = raw_input("Username: ").strip()
if user == '':
return None, None
while 1:
passwd = getpass.getpass("Password: ")
verify = getpass.getpass("Verify password: ")
if verify == passwd:
break
else:
passwd = verify = ''
print "Password mismatch, please try again..."
return user, passwd
def makeinstance(dirname, user, password, inituser):
script = os.path.abspath(sys.argv[0])
installation = os.path.dirname(os.path.dirname(script))
skel = os.path.join(installation, "skel")
# Create the top of the instance:
if not os.path.exists(dirname):
os.mkdir(dirname)
replacements = {
"PYTHON": sys.executable,
"INSTANCE_HOME": dirname,
"SOFTWARE_HOME": os.path.join(installation, "lib", "python"),
"ZOPE_HOME": installation,
}
# This is fairly ugly. The chdir() makes path manipulation in the
# walk() callback a little easier (less magical), so we'll live
# with it.
pwd = os.getcwd()
os.chdir(skel)
try:
try:
os.path.walk(os.curdir, copyskel, (dirname, replacements))
finally:
os.chdir(pwd)
except (IOError, OSError), msg:
print >>sys.stderr, msg
sys.exit(1)
if user:
write_inituser(inituser, user, password)
def makezeo(dirname, zeo):
fp = open(os.path.join(dirname, 'custom_zodb.py'), 'w')
print >>fp, "import ZEO.ClientStorage"
print >>fp, "Storage=ZEO.ClientStorage.ClientStorage(('%s',%s))"%zeo
fp.close()
def write_inituser(fn, user, password):
import binascii
import sha
fp = open(fn, "w")
pw = binascii.b2a_base64(sha.new(password).digest())[:-1]
fp.write('%s:{SHA}%s\n' % (user, pw))
fp.close()
os.chmod(fn, 0644)
CVS = os.path.normcase("CVS")
def copyskel((basedir, replacements), dirname, names):
# Don't recurse into CVS directories:
for name in names[:]:
if os.path.normcase(name) == CVS:
names.remove(name)
elif os.path.isfile(os.path.join(dirname, name)):
# Copy the file:
sn, ext = os.path.splitext(name)
if os.path.normcase(ext) == ".in":
dst = os.path.join(basedir, dirname, sn)
if os.path.exists(dst):
continue
copyin(os.path.join(dirname, name), dst, replacements)
else:
src = os.path.join(dirname, name)
dst = os.path.join(basedir, src)
if os.path.exists(dst):
continue
shutil.copyfile(src, dst)
else:
# Directory:
dn = os.path.join(basedir, dirname, name)
if not os.path.exists(dn):
os.mkdir(dn)
def copyin(src, dst, replacements):
ifp = open(src)
text = ifp.read()
ifp.close()
for k in replacements:
text = text.replace("<<%s>>" % k, replacements[k])
ofp = open(dst, "w")
ofp.write(text)
ofp.close()
shutil.copymode(src, dst)
if __name__ == "__main__":
main()
=== Removed File Zope/utilities/mkzeoinstance ===
=== Removed File Zope/utilities/mkzopeinstance ===