• OpenPlans SVN

  • 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