[pypy-commit] pypy py3.3: Implement custom __dir__ for tracebacks following cpython example.

kvas noreply at buildbot.pypy.org
Sun Aug 3 21:58:17 CEST 2014


Author: Vasily Kuznetsov <kvas.it at gmail.com>
Branch: py3.3
Changeset: r72679:2a7237fb5557
Date: 2014-08-02 09:31 +0200
http://bitbucket.org/pypy/pypy/changeset/2a7237fb5557/

Log:	Implement custom __dir__ for tracebacks following cpython example.

diff --git a/pypy/interpreter/pytraceback.py b/pypy/interpreter/pytraceback.py
--- a/pypy/interpreter/pytraceback.py
+++ b/pypy/interpreter/pytraceback.py
@@ -50,6 +50,10 @@
         self.lasti = space.int_w(w_lasti)
         self.next = space.interp_w(PyTraceback, w_next, can_be_None=True)
 
+    def descr__dir__(self, space):
+        return space.newtuple([space.wrap(n) for n in
+            ['tb_frame', 'tb_next', 'tb_lasti', 'tb_lineno']])
+
 
 def record_application_traceback(space, operror, frame, last_instruction):
     if frame.pycode.hidden_applevel:
diff --git a/pypy/interpreter/typedef.py b/pypy/interpreter/typedef.py
--- a/pypy/interpreter/typedef.py
+++ b/pypy/interpreter/typedef.py
@@ -910,6 +910,7 @@
 PyTraceback.typedef = TypeDef("traceback",
     __reduce__ = interp2app(PyTraceback.descr__reduce__),
     __setstate__ = interp2app(PyTraceback.descr__setstate__),
+    __dir__ = interp2app(PyTraceback.descr__dir__),
     tb_frame = interp_attrproperty('frame', cls=PyTraceback),
     tb_lasti = interp_attrproperty('lasti', cls=PyTraceback),
     tb_lineno = GetSetProperty(PyTraceback.descr_tb_lineno),
diff --git a/pypy/module/__builtin__/test/test_dir.py b/pypy/module/__builtin__/test/test_dir.py
--- a/pypy/module/__builtin__/test/test_dir.py
+++ b/pypy/module/__builtin__/test/test_dir.py
@@ -32,7 +32,9 @@
         try:
             raise IndexError
         except:
-            assert len(dir(sys.exc_info()[2])) == 4
+            tb_dir = dir(sys.exc_info()[2])
+            assert tb_dir == ['tb_frame', 'tb_lasti', 'tb_lineno', 'tb_next']
+
 
     def test_dir_object_inheritance(self):
         """Dir should behave the same regardless of inheriting from object."""


More information about the pypy-commit mailing list