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.
#
# 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.
"""
__doc__ = """
Init (create) a roundup instance.
"""
-import os, sys, errno
+import os, sys, errno, rfc822
import roundup.instance, password
from roundup import install_util
import roundup.instance, password
from roundup import install_util
it is false, the contents of the files pointed to by symbolic
links are copied.
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:
"""
names = os.listdir(src)
try:
else:
install_util.copyDigestedFile(srcname, dstname)
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
'''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:
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
- 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
. 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)
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
# 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))
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
# vim: set filetype=python ts=4 sw=4 et si