view scripts/ast_generator.py @ 1002:d599d55a9a70 trunk

Update MANIFEST.in so that all files that are meant to be included in the source builds are included explicitly rather than relying on setuptools to find files under version control (since it fails to do so for svn 1.7.x and possibly other version control system).
author hodgestar
date Sun, 27 Jan 2013 15:08:45 +0000
parents 82ba3198d913
children
line wrap: on
line source
#!/usr/bin/env python2.5

"""Script to that automatically generates genshi/templates/_astpy24.py.
Be sure to run this with a Python 2.5 interpreter.
"""

import _ast

done = set()

IGNORE_ATTRS = ('__module__', '__dict__', '__weakref__', '__setattr__',
                '__new__', '__getattribute__', '__reduce__', '__delattr__',
                '__init__')

def print_class(cls):
    bnames = []
    for base in cls.__bases__:
        if base.__module__ == '_ast':
            if base not in done:
                print_class(base)
            bnames.append(base.__name__)
        elif base.__module__ == '__builtin__':
            bnames.append("%s" % base.__name__)
        else:
            bnames.append("%s.%s" % (base.__module__,base.__name__))
    print("class %s(%s):" % (cls.__name__, ", ".join(bnames)))
    written = False
    for attr in cls.__dict__:
        if attr not in IGNORE_ATTRS:
            written = True
            print("\t%s = %s" % (attr, repr(cls.__dict__[attr]),))
    if not written:
        print("\tpass")
    done.add(cls)

print('# Generated automatically, please do not edit')
print('# Generator can be found in Genshi SVN, scripts/ast_generator.py')
print('')
print('__version__ = %s' % _ast.__version__)
print('')

for name in dir(_ast):
    cls = getattr(_ast, name)
    if cls.__class__ is type:
        print_class(cls)
        print
Copyright (C) 2012-2017 Edgewall Software