Author: Benjamin Peterson <benja...@python.org> Branch: Changeset: r44386:73158940f8b6 Date: 2011-05-23 15:49 -0500 http://bitbucket.org/pypy/pypy/changeset/73158940f8b6/
Log: __dir__() on anything should override the default behavior 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 @@ -62,7 +62,15 @@ obj = args[0] - if isinstance(obj, types.ModuleType): + + if hasattr(type(obj), "__dir__"): + result = type(obj).__dir__(obj) + if not isinstance(result, list): + raise TypeError("__dir__() must return a list, not %r" % ( + type(result),)) + result.sort() + return result + elif isinstance(obj, types.ModuleType): try: result = list(obj.__dict__) result.sort() @@ -76,14 +84,6 @@ result.sort() return result - elif hasattr(type(obj), '__dir__'): - result = type(obj).__dir__(obj) - if not isinstance(result, list): - raise TypeError("__dir__() must return a list, not %r" % ( - type(result),)) - result.sort() - return result - else: #(regular item) Dict = {} try: diff --git a/pypy/module/__builtin__/test/test_builtin.py b/pypy/module/__builtin__/test/test_builtin.py --- a/pypy/module/__builtin__/test/test_builtin.py +++ b/pypy/module/__builtin__/test/test_builtin.py @@ -129,6 +129,11 @@ return 42 f = Foo() raises(TypeError, dir, f) + import types + class Foo(types.ModuleType): + def __dir__(self): + return ["blah"] + assert dir(Foo("a_mod")) == ["blah"] def test_format(self): assert format(4) == "4" _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit