Misc.make_excs.py Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jython Show documentation
Show all versions of jython Show documentation
Jython is an implementation of the high-level, dynamic, object-oriented
language Python written in 100% Pure Java, and seamlessly integrated with
the Java platform. It thus allows you to run Python on any Java platform.
"""generate code for exceptions and for the types module"""
template1 = ' %(name)s = new PyString("%(name)s");'
template2 = ' dict.__setitem__("%(name)s", Py.%(name)s);'
template3 = '''\
%(name)s = new PyTuple(new PyObject[]
{%(values)s});
'''
template4 = '''\
tmp = exceptions.__findattr__("%(name)s");
if (tmp != null) %(name)s = tmp;'''
import exceptions, types, string
excs = {}
for name in dir(exceptions):
c = getattr(exceptions, name)
try:
if issubclass(c, exceptions.Exception):
excs[c] = {}
except:
pass
for key, value in excs.items():
for base in key.__bases__:
excs[base][key] = 1
import sys
fp = open('c:\\jpython\\JavaCode\\org\\python\\core\\excs.txt', 'w')
sys.stdout = fp
for exc in excs.keys():
print template4 % {'name': exc.__name__}
print
print
for exc in excs.keys():
print template2 % {'name': exc.__name__}
print
print
for exc, values in excs.items():
if len(values) == 0:
print template1 % {'name': exc.__name__}
for exc, values in excs.items():
if len(values) != 0:
vl = []
for key in values.keys():
vl.append('Py.'+key.__name__)
print template3 % {'name': exc.__name__, 'values':string.join(vl, ', ')}
print
print
sys.exit()
temp = """\
public static PyObject %(name)s;
public static PyException %(name)s(String message) {
return new PyException(Py.%(name)s, message);
}
"""
for exc, values in excs.items():
if len(values) == 0:
print temp % {'name': exc.__name__}
print
print
types = ['ArrayType', 'BuiltinFunctionType', 'BuiltinMethodType', 'ClassType', 'CodeType', 'ComplexType',
'DictType', 'DictionaryType', 'EllipsisType', 'FileType', 'FloatType', 'FrameType',
'FunctionType', 'InstanceType', 'IntType', 'LambdaType', 'ListType', 'LongType',
'MethodType', 'ModuleType', 'NoneType', 'SliceType', 'StringType',
'TracebackType', 'TupleType', 'TypeType', 'UnboundMethodType', 'XRangeType']
line = '\t\tdict.__setitem__("%(name)sType", PyJavaClass.lookup(Py%(name)s.class));'
for name in types:
name = name[:-4]
print line % {'name':name}
fp.close()