Misc.make_errno.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.
# Asynchronous sockets in Jython.
#
# Copyright (c) 2002 brian zimmer
'''
Generate the errno module by extracting the values from CPython.
Better windows error messages could be derived by parsing:
http://www.sockets.com/err_lst1.htm#DetailedErrorDescriptions
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/errors_2036.asp
'''
import os
if os.name == 'java':
raise ImportError('this script must be run by CPython')
import errno, sys
error_messages = {
10035 : "The socket operation could not complete without blocking",
10022 : "Invalid argument",
}
def gen_python(fp=None):
print >> fp, "'''"
print >> fp, "This file was autogenerated using:"
print >> fp, " Python %s" % (" ".join(sys.version.split()))
print >> fp, "'''"
print >> fp, ""
for a in errno.errorcode.keys():
#if a < 1000:
print >> fp, "%-25s = %d" % (errno.errorcode[a], a)
if hasattr(fp, "flush"): fp.flush()
print >> fp, ""
print >> fp, "errorcode = {}"
for a in errno.errorcode.keys():
#if a < 1000:
print >> fp, "errorcode[%s] = '%s'" % (errno.errorcode[a], errno.errorcode[a])
if hasattr(fp, "flush"): fp.flush()
def gen_java(fp=None):
print >> fp, "package org.python.modules;"
print >> fp, ""
print >> fp, "import org.python.core.*;"
print >> fp, ""
print >> fp, "/**"
print >> fp, " * This file contains autogenerated error codes from:
"
print >> fp, " * Python %s" % (" ".join(sys.version.split()))
print >> fp, " *"
print >> fp, " * @author brian zimmer"
print >> fp, " * @version %s" % (".".join(map(lambda x: str(x), sys.version_info[:3])))
print >> fp, " * @copyright 2002 brian zimmer"
print >> fp, " */"
print >> fp, "public final class errno implements ClassDictInit {"
print >> fp, ""
print >> fp, " private errno() {}"
print >> fp, ""
errors = [(e, getattr(errno, e)) for e in dir(errno) if e[0] == 'E']
errors.sort(lambda x, y: cmp(x[1], y[1]))
for name, code in errors:
if code > 1000: continue
print >> fp, " public static final int %-25s = %d;" % (name, code)
if hasattr(fp, "flush"): fp.flush()
print >> fp, ""
print >> fp, " public static final PyObject errorcode = new PyDictionary();"
print >> fp, " private static final PyObject strerror = new PyDictionary();"
print >> fp, ""
print >> fp, " public static void classDictInit(PyObject dict) throws PyIgnoreMethodTag {"
for name, code in errors:
if code > 1000: continue
msg = error_messages.get(code, os.strerror(code));
print >> fp, ' addcode(dict, %s, "%s", "%s");' % (name, name, msg)
if hasattr(fp, "flush"): fp.flush()
print >> fp, ""
print >> fp, " }"
print >> fp, ""
print >> fp, " public static PyObject strerror(PyObject error) {"
print >> fp, " return strerror.__getitem__(error);"
print >> fp, " }"
print >> fp, ""
print >> fp, " private static void addcode(PyObject dict, int errno,"
print >> fp, " String err, String msg) {"
print >> fp, " PyObject errno_o = Py.newInteger(errno);"
print >> fp, " PyObject err_o = Py.newString(err);"
print >> fp, " strerror.__setitem__(errno_o, Py.newString(msg));"
print >> fp, " errorcode.__setitem__(errno_o, err_o);"
print >> fp, " dict.__setitem__(err_o, errno_o);"
print >> fp, " }"
print >> fp, "}"
if __name__ == '__main__':
gen_java(None)