Author: Benjamin Peterson <[email protected]>
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
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit