Mercurial > p > roundup > code
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 '''
