mirror of https://github.com/python/cpython.git
Demand version 2.5.1 since 2.5 has a bug with codecs.open context managers.
This commit is contained in:
parent
1bb124ad0d
commit
fdca6d8599
|
@ -11,9 +11,9 @@
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|
||||||
if sys.version_info[:3] < (2, 5, 0):
|
if sys.version_info[:3] < (2, 5, 1):
|
||||||
print >>sys.stderr, """\
|
print >>sys.stderr, """\
|
||||||
Error: Sphinx needs to be executed with Python 2.5 or newer
|
Error: Sphinx needs to be executed with Python 2.5.1 or newer
|
||||||
(If you run this from the Makefile, you can set the PYTHON variable
|
(If you run this from the Makefile, you can set the PYTHON variable
|
||||||
to the path of an alternative interpreter executable, e.g.,
|
to the path of an alternative interpreter executable, e.g.,
|
||||||
``make html PYTHON=python2.5``).
|
``make html PYTHON=python2.5``).
|
||||||
|
|
|
@ -9,6 +9,16 @@
|
||||||
catch_warning)
|
catch_warning)
|
||||||
from test.test_pep352 import ignore_message_warning
|
from test.test_pep352 import ignore_message_warning
|
||||||
|
|
||||||
|
class NaiveException(Exception):
|
||||||
|
def __init__(self, x):
|
||||||
|
self.x = x
|
||||||
|
|
||||||
|
class SomewhatNaiveException(Exception):
|
||||||
|
def __init__(self, x):
|
||||||
|
self.x = x
|
||||||
|
Exception.__init__(self)
|
||||||
|
|
||||||
|
|
||||||
# XXX This is not really enough, each *operation* should be tested!
|
# XXX This is not really enough, each *operation* should be tested!
|
||||||
|
|
||||||
class ExceptionTests(unittest.TestCase):
|
class ExceptionTests(unittest.TestCase):
|
||||||
|
@ -263,6 +273,10 @@ def testAttributes(self):
|
||||||
{'message' : '', 'args' : (u'\u3042', 0, 1, 'ouch'),
|
{'message' : '', 'args' : (u'\u3042', 0, 1, 'ouch'),
|
||||||
'object' : u'\u3042', 'reason' : 'ouch',
|
'object' : u'\u3042', 'reason' : 'ouch',
|
||||||
'start' : 0, 'end' : 1}),
|
'start' : 0, 'end' : 1}),
|
||||||
|
(NaiveException, ('foo',),
|
||||||
|
{'message': '', 'args': ('foo',), 'x': 'foo'}),
|
||||||
|
(SomewhatNaiveException, ('foo',),
|
||||||
|
{'message': '', 'args': (), 'x': 'foo'}),
|
||||||
]
|
]
|
||||||
try:
|
try:
|
||||||
exceptionList.append(
|
exceptionList.append(
|
||||||
|
@ -283,7 +297,8 @@ def testAttributes(self):
|
||||||
if type(e) is not exc:
|
if type(e) is not exc:
|
||||||
raise
|
raise
|
||||||
# Verify module name
|
# Verify module name
|
||||||
self.assertEquals(type(e).__module__, 'exceptions')
|
if not type(e).__name__.endswith('NaiveException'):
|
||||||
|
self.assertEquals(type(e).__module__, 'exceptions')
|
||||||
# Verify no ref leaks in Exc_str()
|
# Verify no ref leaks in Exc_str()
|
||||||
s = str(e)
|
s = str(e)
|
||||||
for checkArgName in expected:
|
for checkArgName in expected:
|
||||||
|
|
|
@ -38,18 +38,31 @@ BaseException_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
|
||||||
/* the dict is created on the fly in PyObject_GenericSetAttr */
|
/* the dict is created on the fly in PyObject_GenericSetAttr */
|
||||||
self->message = self->dict = NULL;
|
self->message = self->dict = NULL;
|
||||||
|
|
||||||
self->args = PyTuple_New(0);
|
if (!args) {
|
||||||
if (!self->args) {
|
/* MemoryError instantiation */
|
||||||
|
args = PyTuple_New(0);
|
||||||
|
if (!args) {
|
||||||
|
Py_DECREF(self);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Py_INCREF(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
self->args = args;
|
||||||
|
|
||||||
|
/* Since the args can be overwritten in __init__, we have to store
|
||||||
|
the original args somewhere for pickling. */
|
||||||
|
if (PyObject_SetAttrString((PyObject *)self, "__newargs__", args) < 0) {
|
||||||
Py_DECREF(self);
|
Py_DECREF(self);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
self->message = PyString_FromString("");
|
self->message = PyString_FromString("");
|
||||||
if (!self->message) {
|
if (!self->message) {
|
||||||
Py_DECREF(self);
|
Py_DECREF(self);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (PyObject *)self;
|
return (PyObject *)self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -147,10 +160,23 @@ BaseException_repr(PyBaseExceptionObject *self)
|
||||||
static PyObject *
|
static PyObject *
|
||||||
BaseException_reduce(PyBaseExceptionObject *self)
|
BaseException_reduce(PyBaseExceptionObject *self)
|
||||||
{
|
{
|
||||||
|
PyObject *result;
|
||||||
|
PyObject *newargs = PyObject_GetAttrString((PyObject *)self, "__newargs__");
|
||||||
|
if (!newargs) {
|
||||||
|
if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
|
||||||
|
PyErr_SetString(PyExc_AttributeError,
|
||||||
|
"To pickle exceptions via BaseException.__reduce__, "
|
||||||
|
"you need to set the __newargs__ attribute in your "
|
||||||
|
"custom __new__ method.");
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
if (self->args && self->dict)
|
if (self->args && self->dict)
|
||||||
return PyTuple_Pack(3, Py_Type(self), self->args, self->dict);
|
result = PyTuple_Pack(3, Py_Type(self), newargs, self->dict);
|
||||||
else
|
else
|
||||||
return PyTuple_Pack(2, Py_Type(self), self->args);
|
result = PyTuple_Pack(2, Py_Type(self), newargs);
|
||||||
|
Py_DECREF(newargs);
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -1395,6 +1395,7 @@ find_module(char *fullname, char *subname, PyObject *path, char *buf,
|
||||||
filemode = fdp->mode;
|
filemode = fdp->mode;
|
||||||
if (filemode[0] == 'U')
|
if (filemode[0] == 'U')
|
||||||
filemode = "r" PY_STDIOTEXTMODE;
|
filemode = "r" PY_STDIOTEXTMODE;
|
||||||
|
errno = 0;
|
||||||
fp = fopen(buf, filemode);
|
fp = fopen(buf, filemode);
|
||||||
if (fp != NULL) {
|
if (fp != NULL) {
|
||||||
if (case_ok(buf, len, namelen, name))
|
if (case_ok(buf, len, namelen, name))
|
||||||
|
@ -1404,6 +1405,15 @@ find_module(char *fullname, char *subname, PyObject *path, char *buf,
|
||||||
fp = NULL;
|
fp = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/* issue a warning if the file is there */
|
||||||
|
/*if (errno != ENOENT) {
|
||||||
|
char warnstr[MAXPATHLEN+80];
|
||||||
|
sprintf(warnstr, "Not importing '%.*s': ");
|
||||||
|
|
||||||
|
if (PyErr_Warn(PyExc_ImportWarning,
|
||||||
|
warnstr)) {
|
||||||
|
|
||||||
|
}*/
|
||||||
#if defined(PYOS_OS2)
|
#if defined(PYOS_OS2)
|
||||||
/* restore the saved snapshot */
|
/* restore the saved snapshot */
|
||||||
strcpy(buf, saved_buf);
|
strcpy(buf, saved_buf);
|
||||||
|
|
Loading…
Reference in New Issue