Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit e19558a

Browse files
committed
Add a source parameter to warnings.warn()
Issue #26604: * Add a new optional source parameter to _warnings.warn() and warnings.warn() * Modify asyncore, asyncio and _pyio modules to set the source parameter when logging a ResourceWarning warning
1 parent 060f9bb commit e19558a

13 files changed

Lines changed: 34 additions & 19 deletions

Doc/library/warnings.rst

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,7 @@ Available Functions
300300
-------------------
301301

302302

303-
.. function:: warn(message, category=None, stacklevel=1)
303+
.. function:: warn(message, category=None, stacklevel=1, source=None)
304304

305305
Issue a warning, or maybe ignore it or raise an exception. The *category*
306306
argument, if given, must be a warning category class (see above); it defaults to
@@ -318,6 +318,12 @@ Available Functions
318318
source of :func:`deprecation` itself (since the latter would defeat the purpose
319319
of the warning message).
320320

321+
*source*, if supplied, is the destroyed object which emitted a
322+
:exc:`ResourceWarning`.
323+
324+
.. versionchanged:: 3.6
325+
Added *source* parameter.
326+
321327

322328
.. function:: warn_explicit(message, category, filename, lineno, module=None, registry=None, module_globals=None, source=None)
323329

Lib/_pyio.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1514,7 +1514,7 @@ def __del__(self):
15141514
if self._fd >= 0 and self._closefd and not self.closed:
15151515
import warnings
15161516
warnings.warn('unclosed file %r' % (self,), ResourceWarning,
1517-
stacklevel=2)
1517+
stacklevel=2, source=self)
15181518
self.close()
15191519

15201520
def __getstate__(self):

Lib/asyncio/base_events.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -412,7 +412,8 @@ def is_closed(self):
412412
if compat.PY34:
413413
def __del__(self):
414414
if not self.is_closed():
415-
warnings.warn("unclosed event loop %r" % self, ResourceWarning)
415+
warnings.warn("unclosed event loop %r" % self, ResourceWarning,
416+
source=self)
416417
if not self.is_running():
417418
self.close()
418419

Lib/asyncio/base_subprocess.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,8 @@ def close(self):
122122
if compat.PY34:
123123
def __del__(self):
124124
if not self._closed:
125-
warnings.warn("unclosed transport %r" % self, ResourceWarning)
125+
warnings.warn("unclosed transport %r" % self, ResourceWarning,
126+
source=self)
126127
self.close()
127128

128129
def get_pid(self):

Lib/asyncio/proactor_events.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,8 @@ def close(self):
8686
if compat.PY34:
8787
def __del__(self):
8888
if self._sock is not None:
89-
warnings.warn("unclosed transport %r" % self, ResourceWarning)
89+
warnings.warn("unclosed transport %r" % self, ResourceWarning,
90+
source=self)
9091
self.close()
9192

9293
def _fatal_error(self, exc, message='Fatal error on pipe transport'):

Lib/asyncio/selector_events.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -573,7 +573,8 @@ def close(self):
573573
if compat.PY34:
574574
def __del__(self):
575575
if self._sock is not None:
576-
warnings.warn("unclosed transport %r" % self, ResourceWarning)
576+
warnings.warn("unclosed transport %r" % self, ResourceWarning,
577+
source=self)
577578
self._sock.close()
578579

579580
def _fatal_error(self, exc, message='Fatal error on transport'):

Lib/asyncio/sslproto.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,8 @@ def close(self):
324324
if compat.PY34:
325325
def __del__(self):
326326
if not self._closed:
327-
warnings.warn("unclosed transport %r" % self, ResourceWarning)
327+
warnings.warn("unclosed transport %r" % self, ResourceWarning,
328+
source=self)
328329
self.close()
329330

330331
def pause_reading(self):

Lib/asyncio/unix_events.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -378,7 +378,8 @@ def close(self):
378378
if compat.PY34:
379379
def __del__(self):
380380
if self._pipe is not None:
381-
warnings.warn("unclosed transport %r" % self, ResourceWarning)
381+
warnings.warn("unclosed transport %r" % self, ResourceWarning,
382+
source=self)
382383
self._pipe.close()
383384

384385
def _fatal_error(self, exc, message='Fatal error on pipe transport'):
@@ -567,7 +568,8 @@ def close(self):
567568
if compat.PY34:
568569
def __del__(self):
569570
if self._pipe is not None:
570-
warnings.warn("unclosed transport %r" % self, ResourceWarning)
571+
warnings.warn("unclosed transport %r" % self, ResourceWarning,
572+
source=self)
571573
self._pipe.close()
572574

573575
def abort(self):

Lib/asyncio/windows_utils.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,8 @@ def close(self, *, CloseHandle=_winapi.CloseHandle):
159159

160160
def __del__(self):
161161
if self._handle is not None:
162-
warnings.warn("unclosed %r" % self, ResourceWarning)
162+
warnings.warn("unclosed %r" % self, ResourceWarning,
163+
source=self)
163164
self.close()
164165

165166
def __enter__(self):

Lib/asyncore.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -595,7 +595,8 @@ def __init__(self, fd):
595595

596596
def __del__(self):
597597
if self.fd >= 0:
598-
warnings.warn("unclosed file %r" % self, ResourceWarning)
598+
warnings.warn("unclosed file %r" % self, ResourceWarning,
599+
source=self)
599600
self.close()
600601

601602
def recv(self, *args):

0 commit comments

Comments
 (0)