diff --git a/roundup/init.py b/roundup/init.py
index 9214fb614d9984c62bff26049993b85ea881e7e3..25668c5a49ab6b80164ee9e3228a368ad6f5d2d6 100644 (file)
--- a/roundup/init.py
+++ b/roundup/init.py
# BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
# SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
#
-# $Id: init.py,v 1.20 2002-07-14 02:05:53 richard Exp $
+# $Id: init.py,v 1.28 2003-11-13 04:12:10 richard Exp $
__doc__ = """
Init (create) a roundup instance.
"""
-import os, sys, errno
+import os, sys, errno, rfc822
import roundup.instance, password
from roundup import install_util
it is false, the contents of the files pointed to by symbolic
links are copied.
- XXX copied from shutil.py in std lib
-
+ This was copied from shutil.py in std lib.
"""
names = os.listdir(src)
try:
else:
install_util.copyDigestedFile(srcname, dstname)
-def install(instance_home, template, backend):
+def install(instance_home, template):
'''Install an instance using the named template and backend.
instance_home - the directory to place the instance data in
- template - the template to use in creating the instance data
- backend - the database to use to store the instance data
+ template - the directory holding the template to use in creating
+ the instance data
The instance_home directory will be created using the files found in
the named template (roundup.templates.<name>). A standard instance_home
contains:
- . instance_config.py
+ . config.py
- simple configuration of things like the email address for the
mail gateway, the mail domain, the mail host, ...
. dbinit.py and select_db.py
. detectors/
- the auditor and reactor modules for this instance
- The html directory is typically extracted from the htmlbase module in
- the template.
'''
- # first, copy the template dir over
- import roundup.templatebuilder
-
- template_dir = os.path.split(__file__)[0]
- template_name = template
- template = os.path.join(template_dir, 'templates', template)
+ # At the moment, it's just a copy
copytree(template, instance_home)
- roundup.templatebuilder.installHtmlBase(template_name, instance_home)
+ # rename the tempate in the TEMPLATE-INFO.txt file
+ ti = loadTemplateInfo(instance_home)
+ ti['name'] = ti['name'] + '-' + os.path.split(instance_home)[1]
+ saveTemplateInfo(instance_home, ti)
+
+
+def listTemplates(dir):
+ ''' List all the Roundup template directories in a given directory.
+
+ Find all the dirs that contain a TEMPLATE-INFO.txt and parse it.
+
+ Return a list of dicts of info about the templates.
+ '''
+ ret = {}
+ for idir in os.listdir(dir):
+ idir = os.path.join(dir, idir)
+ ti = loadTemplateInfo(idir)
+ if ti:
+ ret[ti['name']] = ti
+ return ret
+
+def loadTemplateInfo(dir):
+ ''' Attempt to load a Roundup template from the indicated directory.
+
+ Return None if there's no template, otherwise a template info
+ dictionary.
+ '''
+ ti = os.path.join(dir, 'TEMPLATE-INFO.txt')
+ if not os.path.exists(ti):
+ return None
+
+ # load up the template's information
+ f = open(ti)
+ try:
+ m = rfc822.Message(open(ti))
+ ti = {}
+ ti['name'] = m['name']
+ ti['description'] = m['description']
+ ti['intended-for'] = m['intended-for']
+ ti['path'] = dir
+ finally:
+ f.close()
+ return ti
+
+def writeHeader(name, value):
+ ''' Write an rfc822-compatible header line, making it wrap reasonably
+ '''
+ out = [name.capitalize() + ':']
+ n = len(out[0])
+ for word in value.split():
+ if len(word) + n > 74:
+ out.append('\n')
+ n = 0
+ out.append(' ' + word)
+ n += len(out[-1])
+ return ''.join(out) + '\n'
+
+def saveTemplateInfo(dir, info):
+ ''' Save the template info (dict of values) to the TEMPLATE-INFO.txt
+ file in the indicated directory.
+ '''
+ ti = os.path.join(dir, 'TEMPLATE-INFO.txt')
+ f = open(ti, 'w')
+ try:
+ for name in 'name description intended-for path'.split():
+ f.write(writeHeader(name, info[name]))
+ finally:
+ f.close()
+def write_select_db(instance_home, backend):
+ ''' Write the file that selects the backend for the tracker
+ '''
# now select database
db = '''# WARNING: DO NOT EDIT THIS FILE!!!
from roundup.backends.back_%s import Database, Class, FileClass, IssueClass
instance = roundup.instance.open(instance_home)
instance.init(password.Password(adminpw))
-#
-# $Log: not supported by cvs2svn $
-# Revision 1.19 2002/05/23 01:14:20 richard
-# . split instance initialisation into two steps, allowing config changes
-# before the database is initialised.
-#
-# Revision 1.18 2001/11/22 15:46:42 jhermann
-# Added module docstrings to all modules.
-#
-# Revision 1.17 2001/11/12 23:17:38 jhermann
-# Code using copyDigestedFile() that passes unit tests
-#
-# Revision 1.16 2001/10/09 07:25:59 richard
-# Added the Password property type. See "pydoc roundup.password" for
-# implementation details. Have updated some of the documentation too.
-#
-# Revision 1.15 2001/08/07 00:24:42 richard
-# stupid typo
-#
-# Revision 1.14 2001/08/07 00:15:51 richard
-# Added the copyright/license notice to (nearly) all files at request of
-# Bizar Software.
-#
-# Revision 1.13 2001/08/06 01:20:00 richard
-# Added documentaion.
-#
-# Revision 1.12 2001/08/05 07:43:52 richard
-# Instances are now opened by a special function that generates a unique
-# module name for the instances on import time.
-#
-# Revision 1.11 2001/08/04 22:42:43 richard
-# Fixed sf.net bug #447671 - typo
-#
-# Revision 1.10 2001/08/03 01:28:33 richard
-# Used the much nicer load_package, pointed out by Steve Majewski.
-#
-# Revision 1.9 2001/08/03 00:59:34 richard
-# Instance import now imports the instance using imp.load_module so that
-# we can have instance homes of "roundup" or other existing python package
-# names.
-#
-# Revision 1.8 2001/07/29 07:01:39 richard
-# Added vim command to all source so that we don't get no steenkin' tabs :)
-#
-# Revision 1.7 2001/07/28 07:59:53 richard
-# Replaced errno integers with their module values.
-# De-tabbed templatebuilder.py
-#
-# Revision 1.6 2001/07/24 11:18:25 anthonybaxter
-# oops. left a print in
-#
-# Revision 1.5 2001/07/24 10:54:11 anthonybaxter
-# oops. Html.
-#
-# Revision 1.4 2001/07/24 10:46:22 anthonybaxter
-# Added templatebuilder module. two functions - one to pack up the html base,
-# one to unpack it. Packed up the two standard templates into htmlbases.
-# Modified __init__ to install them.
-#
-# __init__.py magic was needed for the rather high levels of wierd import magic.
-# Reducing level of import magic == (good, future)
-#
-# Revision 1.3 2001/07/23 08:45:28 richard
-# ok, so now "./roundup-admin init" will ask questions in an attempt to get a
-# workable instance_home set up :)
-# _and_ anydbm has had its first test :)
-#
-# Revision 1.2 2001/07/22 12:09:32 richard
-# Final commit of Grande Splite
-#
-#
# vim: set filetype=python ts=4 sw=4 et si