opencore r18834 - trac/plugin_skel/trac_plugin_skel
from
k0s
on Jul 03, 2008 12:37 AM
Author: jhammel
Date: 2008-07-03 00:37:52 -0400 (Thu, 03 Jul 2008)
New Revision: 18834
Modified:
trac/plugin_skel/trac_plugin_skel/interfaces.py
Log:
MODIFIED: now prints out a trac plugin template with correct syntax
Modified: trac/plugin_skel/trac_plugin_skel/interfaces.py
===================================================================
--- trac/plugin_skel/trac_plugin_skel/interfaces.py 2008-07-02 23:12:15 UTC (rev 18833)
+++ trac/plugin_skel/trac_plugin_skel/interfaces.py 2008-07-03 04:37:52 UTC (rev 18834)
@@ -1,4 +1,6 @@
import inspect
+import sys
+from cStringIO import StringIO
from trac.core import *
# interfaces live in these modules
@@ -19,9 +21,10 @@
import trac.web.chrome
import trac.wiki
-def interfaces():
- retval = Interface.__subclasses__()
- retval.sort(key=lambda x: x.__name__)
+def trac_interfaces():
+ retval = {}
+ for interface in Interface.__subclasses__():
+ retval[interface.__name__] = interface
return retval
def print_interface(interface):
@@ -47,8 +50,48 @@
return '\n'.join(retval)
+def print_component(name, *interfaces):
+ ifaces = trac_interfaces()
+ keys = sorted(ifaces.keys())
+
+ if not set(interfaces).issubset(keys):
+ # XXX handle better
+ sys.exit(1)
+
+ retval = StringIO()
+ print >> retval, '''"""
+%s:
+a plugin for Trac
+http://trac.edgewall.org
+"""
+
+from trac.core import *
+''' % name
+
+ for i in interfaces:
+ print >> retval, 'from %s import %s' % (ifaces[i].__module__, i)
+
+ print >> retval, '\nclass %s(Component):\n' % name
+ print >> retval, ' implements(%s)\n' % ', '.join(interfaces)
+
+ for i in interfaces:
+ print >> retval, print_interface(ifaces[i])
+
+ return retval.getvalue()
+
if __name__ == '__main__':
- for i in interfaces():
- print i.__name__
- print print_interface(i)
+ if len(sys.argv) < 2:
+ ifaces = trac_interfaces()
+ print """Usage:
+ %s <name> [interface1] [interface2] [...] # to create a component with name
+ %s # for usage and component list
+
+Interfaces available:
+""" % (sys.argv[0], sys.argv[0])
+ for key in sorted(ifaces.keys()):
+ print key
+ sys.exit(0)
+
+ component = print_component(*sys.argv[1:])
+ print component