Author: jhammel
Date: 2008-08-13 11:41:01 -0400 (Wed, 13 Aug 2008)
New Revision: 19812
Modified:
trac/install/TracLegos/example/topp/setup.py
trac/install/TracLegos/example/topp/topptracproject/project.py
trac/install/TracLegos/traclegos/legos.py
trac/install/TracLegos/traclegos/project.py
Log:
MODIFIED: more infrastructure for "what is a project?"
Modified: trac/install/TracLegos/example/topp/setup.py
===================================================================
--- trac/install/TracLegos/example/topp/setup.py 2008-08-13 15:28:33 UTC
(rev 19811)
+++ trac/install/TracLegos/example/topp/setup.py 2008-08-13 15:41:01 UTC
(rev 19812)
@@ -12,11 +12,14 @@
license="",
packages=find_packages(exclude=['ez_setup', 'examples', 'tests*']),
include_package_data=True,
- install_requires = [ 'PasteScript' ],
+ install_requires = [ 'PasteScript', 'TracLegos' ],
+ dependency_links = [
+ "https://svn.openplans.org/svn/trac/install/TracLegos#egg=TracLegos",
+ ],
zip_safe=False,
entry_points = """
[paste.paster_create_template]
- topp_trac_project = topptracproject:ToppTracProject
+ topp_trac_project = topptracproject.project:ToppTracProject
""",
)
Modified: trac/install/TracLegos/example/topp/topptracproject/project.py
===================================================================
--- trac/install/TracLegos/example/topp/topptracproject/project.py
2008-08-13 15:28:33 UTC (rev 19811)
+++ trac/install/TracLegos/example/topp/topptracproject/project.py
2008-08-13 15:41:01 UTC (rev 19812)
@@ -14,3 +14,9 @@
]
requirements = ['https://svn.openplans.org/svn/trac/install/plugins.txt']
+ def pre(self, command, output_dir, vars):
+ import pdb; pdb.set_trace()
+
+ def post(self, command, output_dir, vars):
+ pass
+
Modified: trac/install/TracLegos/traclegos/legos.py
===================================================================
--- trac/install/TracLegos/traclegos/legos.py 2008-08-13 15:28:33 UTC (rev
19811)
+++ trac/install/TracLegos/traclegos/legos.py 2008-08-13 15:41:01 UTC (rev
19812)
@@ -4,58 +4,81 @@
import sys
from optparse import OptionParser
+from paste.script.templates import var
from trac.admin.console import TracAdmin
from trac.env import Environment
from traclegos.config import ConfigMunger
+
class TracLegos(object):
"""tool for assembling trac projects from building blocks
* directory: directory for project creation
+ * master: path to master trac instance
* site_ini: global site configuration used for all projects
- * vars: variables for interpolation of trac.ini %(option)s
+ * vars: variables for interpolation of trac.ini
+ * inherit: inherited configuration to update
"""
- def __init__(self, directory, master, site_ini=None, **vars):
+ options = [ var('project', 'name of project') ]
+
+ def __init__(self, directory, master=None, site_ini=None, vars=None,
inherit=None):
self.directory = directory
self.site_ini = site_ini or []
- self.vars = vars
- self.options = { 'project': '(short) name of the project'}
-
+ self.vars = vars or {}
+ self.master = master
+ self.inherit = inherit or master or None
+
if not os.path.exists(self.directory):
os.mkdir(self.directory)
- def create_project(self, project, templates, var_reader=None):
+ def create_project(self, project, templates, vars=None, var_reader=None):
"""
* project: directory name of project
+ * templates to be applied
"""
# TODO: db stuff; svn stuff
+ ### set variables
+
dirname = os.path.join(self.directory, project)
- vars = self.vars.copy().update({'project': project})
+ vars = vars or {}
+ vars = self.vars.copy().update(vars)
+ vars.update({'project': project})
- ### munge .ini options
+ ### munge configuration
# apply site configuration last (override)
templates = templates + self.site_ini
+ # apply PasteScript templates (if the template is not the caller)
+ # TODO
+
+ # get the .ini file for PasteScript templates
+ ini_files =
+
munger = ConfigMunger()
munger.read(*templates)
missing = munger.missing()
if missing:
-
+ if hasattr(var_reader, '__call__'):
+ var_reader()
+ pass
options = []
for section in munger.parser.sections():
options.extend([(section,) + item
for item in munger.parser.items(section)])
options.append(('project', 'name', project))
-
- if hasattr(var_reader, '__call__'):
- var_reader9
+ if self.inherit:
+ options.append(('inherit', 'file', self.inherit))
+
# create the trac environment
env = Environment(dirname, create=True, options=options)
+ # TODO update the inherited file
+
+
def main(args=None):
# parse options
@@ -63,15 +86,20 @@
parser.add_option("-d", "--directory",
dest="directory", default=".",
help="trac projects directory")
+ parser.add_option("-i", "--inherit", dest="inherit", default=None,
+ help=".ini file to inherit from")
parser.add_option("-r", "--requires",
dest="requirements", action="append", default=[],
help="requirements files for plugins") # XXX needed?
parser.add_option("-t", dest="templates", action="append", default=[],
help="trac.ini templates to be applied in order")
+ parser.add_option("--list-templates", dest="listprojects",
+ action="store_true", default=False,
+ help="list available TracProject PasteScript templates")
options, args = parser.parse_args(args)
# project creator
- legos = TracLegos(directory=options.directory, master=None)
+ legos = TracLegos(directory=options.directory, inherit=options.inherit)
for project in args:
legos.create_project(project, options.templates)
Modified: trac/install/TracLegos/traclegos/project.py
===================================================================
--- trac/install/TracLegos/traclegos/project.py 2008-08-13 15:28:33 UTC (rev
19811)
+++ trac/install/TracLegos/traclegos/project.py 2008-08-13 15:41:01 UTC (rev
19812)
@@ -1,3 +1,9 @@
+#!/usr/bin/env python
+"""
+definition of a trac project
+"""
+
+import pkg_resources
from paste.script import templates
class TracProject(templates.Template):
@@ -8,3 +14,24 @@
def post(self, command, output_dir, vars):
pass
+
+def projects():
+ """return TracProject templates installed as eggs"""
+ templates = []
+ for entry_point in
pkg_resources.iter_entry_points('paste.paster_create_template'):
+ try:
+ template = entry_point.load()
+ except:
+ continue
+ if issubclass(template, TracProject):
+ templates.append(template(entry_point.name))
+ return templates
+
+def project_dict():
+ return
+
+if __name__ == '__main__':
+ from traclegos.project import TracProject
+ templates = projects()
+ for template in templates:
+ print template
--
To unsubscribe send an email with subject "unsubscribe" to [EMAIL PROTECTED]
Please contact [EMAIL PROTECTED] for questions.