Mercurial > p > roundup > code
changeset 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 | 3555941caea0 |
| children | d5d5594c6fb4 |
| files | CHANGES.txt roundup/admin.py roundup/init.py |
| diffstat | 3 files changed, 106 insertions(+), 63 deletions(-) [+] |
line wrap: on
line diff
--- a/CHANGES.txt Fri Mar 05 00:04:03 2004 +0000 +++ b/CHANGES.txt Fri Mar 05 00:06:20 2004 +0000 @@ -1,6 +1,13 @@ This file contains the changes to the Roundup system over time. The entries are given with the most recent entry first. +2004-??-?? 0.6.8 +Fixed: +- existing trackers (ie. live ones) may be used as templates for new + trackers - the TEMPLATE-INFO.txt name entry has the tracker's dir name + appended (so the demo tracker's template name is "classic-demo") + + 2004-03-01 0.6.7 Fixed: - be more backward-compatible when asking for EMAIL_CHARSET
--- a/roundup/admin.py Fri Mar 05 00:04:03 2004 +0000 +++ b/roundup/admin.py Fri Mar 05 00:06:20 2004 +0000 @@ -16,7 +16,7 @@ # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. # -# $Id: admin.py,v 1.55.2.2 2003-08-29 12:45:54 richard Exp $ +# $Id: admin.py,v 1.55.2.3 2004-03-05 00:06:20 richard Exp $ '''Administration commands for maintaining Roundup trackers. ''' @@ -298,7 +298,7 @@ path = os.path.dirname(path) tdir = os.path.join(path, 'share', 'roundup', 'templates') if os.path.isdir(tdir): - templates = listTemplates(tdir) + templates = init.listTemplates(tdir) break # OK, now try as if we're in the roundup source distribution @@ -309,13 +309,13 @@ path = os.path.dirname(path) tdir = os.path.join(path, 'templates') if os.path.isdir(tdir): - templates.update(listTemplates(tdir)) + templates.update(init.listTemplates(tdir)) # Try subdirs of the current dir - templates.update(listTemplates(os.getcwd())) + templates.update(init.listTemplates(os.getcwd())) # Finally, try the current directory as a template - template = loadTemplate(os.getcwd()) + template = init.loadTemplateInfo(os.getcwd()) if template: templates[template['name']] = template @@ -1407,40 +1407,6 @@ self.db.close() -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 = loadTemplate(idir) - if ti: - ret[ti['name']] = ti - return ret - -def loadTemplate(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 - m = rfc822.Message(open(ti)) - ti = {} - ti['name'] = m['name'] - ti['description'] = m['description'] - ti['intended-for'] = m['intended-for'] - ti['path'] = dir - return ti - if __name__ == '__main__': tool = AdminTool() sys.exit(tool.main())
--- 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 '''
