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.

Reply via email to