[pypy-commit] pypy py3.3: __dir__ is allowed to return a tuple (it's converted to list like in cpython3).
kvas
noreply at buildbot.pypy.org
Sat Jul 26 12:32:31 CEST 2014
Author: Vasily Kuznetsov <kvas.it at gmail.com>
Branch: py3.3
Changeset: r72490:71501209fc12
Date: 2014-07-26 11:22 +0200
http://bitbucket.org/pypy/pypy/changeset/71501209fc12/
Log: __dir__ is allowed to return a tuple (it's converted to list like in
cpython3).
diff --git a/pypy/module/__builtin__/app_inspect.py b/pypy/module/__builtin__/app_inspect.py
--- a/pypy/module/__builtin__/app_inspect.py
+++ b/pypy/module/__builtin__/app_inspect.py
@@ -52,6 +52,8 @@
dir_meth = lookup_special(obj, "__dir__")
if dir_meth is not None:
result = dir_meth()
+ if isinstance(result, tuple):
+ result = list(result)
if not isinstance(result, list):
raise TypeError("__dir__() must return a list, not %r" % (
type(result),))
diff --git a/pypy/module/__builtin__/test/test_dir.py b/pypy/module/__builtin__/test/test_dir.py
new file mode 100644
--- /dev/null
+++ b/pypy/module/__builtin__/test/test_dir.py
@@ -0,0 +1,12 @@
+class AppTestDir:
+
+ def test_dir_obj__dir__tuple(self):
+ """When __dir__ method returns a tuple, python3 converts it to list."""
+
+ class Foo(object):
+ def __dir__(self):
+ return ("b", "c", "a")
+
+ res = dir(Foo())
+ assert isinstance(res, list)
+ assert res == ["a", "b", "c"]
More information about the pypy-commit
mailing list