

import types


propertyStr1 = '    %%property(%(name)s, %(get)s, doc="See `%(get)s`");'
propertyStr2 = '    %%property(%(name)s, %(get)s, %(set)s, doc="See `%(get)s` and `%(set)s`");'

def getGetters(klass):
    getters = []
    for name, item in klass.__dict__.items():
        if type(item) == types.FunctionType and name.startswith('Get'):
            name = name[3:]
            if not name:
                continue
            if name.find('Tuple') != -1:
                continue
            if klass.__dict__.has_key('Set'+name):
                getters.append( (name, 'Get'+name, 'Set'+name) )
            else:
                getters.append( (name, 'Get'+name) )
    getters.sort()
    return getters


def getClasses(module):
    klasses = []
    for name, item in module.__dict__.items():
        if type(item) in [types.TypeType, types.ClassType]:
            klasses.append(item)
    return klasses


def processModule(module):
    print '##### %s #####' % module.__name__
    
    klasses = getClasses(module)
    klasses.sort(lambda a,b: cmp(a.__name__, b.__name__))
    
    for klass in klasses:
        getters = getGetters(klass)
        if getters:
            classname = klass.__name__
            print '#---- %s ----#' % classname
            for getter in getters:
                if len(getter) == 2:
                    name, get = getter
                    print propertyStr1 % locals()
                else:
                    name, get, set = getter
                    print propertyStr2 % locals()
            print '\n\n'


def my_import(name):
    mod = __import__(name)
    components = name.split('.')
    for comp in components[1:]:
        mod = getattr(mod, comp)
    return mod


for m in ['wx',
          'wx.aui',
          'wx.calendar',
          'wx.grid',
          'wx.html',
          'wx.media',
          'wx.richtext',
          'wx.webkit',
          'wx.wizard',
          'wx.xrc',
          'wx.animate',
          'wx.gizmos',
          'wx.glcanvas',
          'wx.stc']:
    module = my_import(m)
    processModule(module)

