diff roundup/init.py @ 2072:cc692b8b8fa9 maint-0.6

back-port template renaming fix
author Richard Jones <richard@users.sourceforge.net>
date Fri, 05 Mar 2004 00:06:20 +0000
parents 1f8bbdff56b9
children
line wrap: on
line diff
--- a/roundup/init.py	Fri Mar 05 00:04:03 2004 +0000
+++ b/roundup/init.py	Fri Mar 05 00:06:20 2004 +0000
@@ -15,13 +15,13 @@
 # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
 # 
-# $Id: init.py,v 1.27 2003-07-28 23:19:21 richard Exp $
+# $Id: init.py,v 1.27.2.1 2004-03-05 00:06:20 richard Exp $
 
-__doc__ = """
-Init (create) a roundup instance.
+"""Init (create) a roundup instance.
 """
+__docformat__ = 'restructuredtext'
 
-import os, sys, errno
+import os, sys, errno, rfc822
 
 import roundup.instance, password
 from roundup import install_util
@@ -57,35 +57,105 @@
 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 directory holding the template to use in creating
-                    the instance data
+    'instance_home'
+       the directory to place the instance data in
+    '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:
-        . 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
-          - defines the schema for the hyperdatabase and indicates which
-            backend to use.
-        . interfaces.py
-          - defines the CGI Client and mail gateway MailGW classes that are
-            used by roundup.cgi, roundup-server and roundup-mailgw.
-        . __init__.py
-          - ties together all the instance information into one interface
-        . db/
-          - the actual database that stores the instance's data
-        . html/
-          - the html templates that are used by the CGI Client
-        . detectors/
-          - the auditor and reactor modules for this instance
 
+    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
+      defines the schema for the hyperdatabase and indicates which
+      backend to use.
+    interfaces.py
+      defines the CGI Client and mail gateway MailGW classes that are
+      used by roundup.cgi, roundup-server and roundup-mailgw.
+    __init__.py
+      ties together all the instance information into one interface
+    db/
+      the actual database that stores the instance's data
+    html/
+      the html templates that are used by the CGI Client
+    detectors/
+      the auditor and reactor modules for this instance
     '''
     # At the moment, it's just a copy
     copytree(template, 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
     '''

Roundup Issue Tracker: http://roundup-tracker.org/