Issue 26604: Add optional source parameter to warnings.warn() (original) (raw)

Follow-up of the issue #26567 which added PyErr_ResourceWarning() (C API), attached patch adds a new source parameter to the warnings.warn() function (Python API).

source is the destroyed object which emits a ResourceWarning. The source is used to show the traceback where the object was created (allocated) when tracemalloc is used.

The patch also changes _pyio, asyncio and asyncore modules to set the source parameter.

Note: tempfile doesn't set source because it uses a class method:

@classmethod
def _cleanup(cls, name, warn_message):
    _shutil.rmtree(name)
    _warnings.warn(warn_message, ResourceWarning)

For asyncio, it should help to fix the ResourceWarning warnings on AIX (which has a broken ssl module):

http://buildbot.python.org/all/builders/PPC64%20AIX%203.x/builds/4700/steps/test/logs/stdio

test_create_server_ssl_verify_failed (test.test_asyncio.test_events.PollEventLoopTests) ... FAIL /home/shager/cpython-buildarea/3.x.edelsohn-aix-ppc64/build/Lib/unittest/case.py:628: ResourceWarning: unclosed <socket.socket fd=22, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=6, laddr=('127.0.0.1', 55439)> outcome.errors.clear()