[issue17643] Expose weakref callback for introspection purposes.
Roundup Robot added the comment: New changeset 9e7d31b04d78 by Mark Dickinson in branch 'default': Issue #17643: Add __callback__ attribute to weakref.ref. http://hg.python.org/cpython/rev/9e7d31b04d78 -- nosy: +python-dev ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue17643 ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue17643] Expose weakref callback for introspection purposes.
Mark Dickinson added the comment: Committed, using support.gc_collect for the test that requires garbage collection. Thanks for the reviews! -- assignee: - mark.dickinson resolution: - fixed stage: patch review - committed/rejected status: open - closed ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue17643 ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue17643] Expose weakref callback for introspection purposes.
Terry J. Reedy added the comment: there are other tests in that test module that also rely on del resulting in immediate cleanup I would mark them all as 'cpython-only', since they are. Other implementation must be omitting this test module, ignoring its failures, or patching out the specific tests. -- nosy: +terry.reedy ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue17643 ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue17643] Expose weakref callback for introspection purposes.
Richard Oudkerk added the comment: I could mark the new test as cpython only, or add a gc.collect (but I'm not sure if the latter is enough, either). test.support.gc_collect() should work on non-refcounted implementations. -- nosy: +sbt ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue17643 ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue17643] Expose weakref callback for introspection purposes.
Mark Dickinson added the comment: Ah, test.support.gc_collect looks useful. Thanks! -- ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue17643 ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue17643] Expose weakref callback for introspection purposes.
New submission from Mark Dickinson: It would be nice to be able to access the callback of a weakref as an attribute on the weakref itself. For example: Python 3.4.0a0 (default:2bf154ca43c6+, Apr 6 2013, 13:31:29) [GCC 4.2.1 (Apple Inc. build 5664)] on darwin Type help, copyright, credits or license for more information. import weakref x = {1, 2, 3} ref = weakref.ref(x, lambda ref: print(done)) ref.__callback__ function lambda at 0x1004f56d0 del x done ref.__callback__ # Returns None I encountered this while writing a tool to show graphs of Python objects and their references to each other: I wanted to be able to annotate each edge of the graph. For something like a function, it's easy to use introspection to compare the reference target with f.__code__, f.__annotations__, etc. For a weakref, I couldn't find an easy way to retrieve the callback (or even determine whether there *was* a callback associated to the weakref). One can do a gc.get_referents call and hope that if there's exactly one object returned it's the callback, but that won't work so well with weakref.ref subclasses. Patch attached: it has tests but no doc updates as yet. -- components: Interpreter Core files: weakref___callback__.patch keywords: patch messages: 186122 nosy: mark.dickinson priority: normal severity: normal stage: patch review status: open title: Expose weakref callback for introspection purposes. type: enhancement versions: Python 3.4 Added file: http://bugs.python.org/file29685/weakref___callback__.patch ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue17643 ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue17643] Expose weakref callback for introspection purposes.
Antoine Pitrou added the comment: Sounds fine to me. -- nosy: +pitrou ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue17643 ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue17643] Expose weakref callback for introspection purposes.
Benjamin Peterson added the comment: Instead of a getset, I think you just use a read-only T_OBJECT member. -- nosy: +benjamin.peterson ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue17643 ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue17643] Expose weakref callback for introspection purposes.
Mark Dickinson added the comment: Ah yes; that's easier. New patch including doc updates. -- Added file: http://bugs.python.org/file29687/weakref___callback__2.patch ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue17643 ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue17643] Expose weakref callback for introspection purposes.
Antoine Pitrou added the comment: del x will not be enough on non-refcounted implementations. -- ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue17643 ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue17643] Expose weakref callback for introspection purposes.
Mark Dickinson added the comment: True: I'm not sure what to do about that---there are other tests in that test module that also rely on del resulting in immediate cleanup. I'm not sure what other implementations are currently doing with this test module. I could mark the new test as cpython only, or add a gc.collect (but I'm not sure if the latter is enough, either). -- ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue17643 ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue17643] Expose weakref callback for introspection purposes.
Antoine Pitrou added the comment: Ah, then we can probably keep using the same style. -- ___ Python tracker rep...@bugs.python.org http://bugs.python.org/issue17643 ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com