From: Georg Brandl Date: Fri, 21 Mar 2008 20:21:46 +0000 (+0000) Subject: #2346/#2347: add py3k warning for __methods__ and __members__. Patch by Jack Diederich. X-Git-Tag: v2.6a2~184 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=07e5681fd3a8c7169f569f6b70aa824f203f89d9;p=python #2346/#2347: add py3k warning for __methods__ and __members__. Patch by Jack Diederich. --- diff --git a/Lib/test/test_py3kwarn.py b/Lib/test/test_py3kwarn.py index aaa16231b9..f030af09f7 100644 --- a/Lib/test/test_py3kwarn.py +++ b/Lib/test/test_py3kwarn.py @@ -99,6 +99,16 @@ class TestPy3KWarnings(unittest.TestCase): with catch_warning() as w: self.assertWarning(sys.exc_clear(), w, expected) + def test_methods_members(self): + expected = '__members__ and __methods__ not supported in 3.x' + class C: + __methods__ = ['a'] + __members__ = ['b'] + c = C() + with catch_warning() as w: + self.assertWarning(dir(c), w, expected) + + def test_main(): run_unittest(TestPy3KWarnings) diff --git a/Misc/NEWS b/Misc/NEWS index a581247a0a..83903ef780 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -12,6 +12,8 @@ What's New in Python 2.6 alpha 2? Core and builtins ----------------- +- Issue #2346/#2347: add Py3k warnings for __methods__ and __members__. + - Issue #2358: Add a Py3k warning on sys.exc_clear() usage. - Issue #2400: Allow relative imports to "import *". diff --git a/Objects/methodobject.c b/Objects/methodobject.c index 5b9a3643aa..16175f9e98 100644 --- a/Objects/methodobject.c +++ b/Objects/methodobject.c @@ -352,8 +352,15 @@ PyObject * Py_FindMethodInChain(PyMethodChain *chain, PyObject *self, const char *name) { if (name[0] == '_' && name[1] == '_') { - if (strcmp(name, "__methods__") == 0) + if (strcmp(name, "__methods__") == 0) { + if (Py_Py3kWarningFlag) { + if (PyErr_Warn(PyExc_DeprecationWarning, + "__methods__ not supported " + "in 3.x") < 0) + return NULL; + } return listmethodchain(chain); + } if (strcmp(name, "__doc__") == 0) { const char *doc = self->ob_type->tp_doc; if (doc != NULL) diff --git a/Objects/object.c b/Objects/object.c index a10ac7ce19..4a66f4fee1 100644 --- a/Objects/object.c +++ b/Objects/object.c @@ -1687,6 +1687,16 @@ merge_list_attr(PyObject* dict, PyObject* obj, const char *attrname) break; } } + if (Py_Py3kWarningFlag && + (strcmp(attrname, "__members__") == 0 || + strcmp(attrname, "__methods__") == 0)) { + if (PyErr_Warn(PyExc_DeprecationWarning, + "__members__ and __methods__ not supported " + "in 3.x") < 0) { + Py_XDECREF(list); + return -1; + } + } } Py_XDECREF(list);