]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-85567: Register a cleanup function to close files for FileType objects in argparse...
authorachhina <amanschhina@gmail.com>
Mon, 18 Apr 2022 01:53:37 +0000 (21:53 -0400)
committerGitHub <noreply@github.com>
Mon, 18 Apr 2022 01:53:37 +0000 (22:53 -0300)
* bpo-41395: Register a cleanup function to close files for FileType objects in argparse

* Added import as top level import, and renamed file as fh.

Lib/argparse.py
Misc/ACKS
Misc/NEWS.d/next/Library/2022-04-02-14-40-53.bpo-41395.Y1ZVvT.rst [new file with mode: 0644]

index 429a72ab7841e787438286304bff6a084e351b64..881dfda6d4d93210de82d9e3c86887d18e2b432f 100644 (file)
@@ -84,7 +84,7 @@ __all__ = [
     'ZERO_OR_MORE',
 ]
 
-
+import atexit as _atexit
 import os as _os
 import re as _re
 import sys as _sys
@@ -1268,8 +1268,12 @@ class FileType(object):
 
         # all other arguments are used as file names
         try:
-            return open(string, self._mode, self._bufsize, self._encoding,
-                        self._errors)
+            fh = open(string, self._mode, self._bufsize, self._encoding, self._errors)
+
+            # Register cleanup function to close file
+            _atexit.register(fh.close)
+
+            return fh
         except OSError as e:
             args = {'filename': string, 'error': e}
             message = _("can't open '%(filename)s': %(error)s")
index 5e66a2e757adf674c9021151de914cb7d869f7fd..a1df84c0d6779ed7b9beed907de1416d50461bb9 100644 (file)
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -313,6 +313,7 @@ Nicolas Chauvat
 Jerry Chen
 Michael Chermside
 Ingrid Cheung
+Adam Chhina
 Terry Chia
 Albert Chin-A-Young
 Adal Chiriliuc
diff --git a/Misc/NEWS.d/next/Library/2022-04-02-14-40-53.bpo-41395.Y1ZVvT.rst b/Misc/NEWS.d/next/Library/2022-04-02-14-40-53.bpo-41395.Y1ZVvT.rst
new file mode 100644 (file)
index 0000000..5358b0e
--- /dev/null
@@ -0,0 +1,3 @@
+FileType objects from argparse may not be closed and lead to
+ResourceWarning. Register a file.close function with atexit for FileType
+objects to ensure they are closed. Patch Contributed by Adam Chhina.