summaryrefslogtreecommitdiffstats
path: root/Lib/tempfile.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/tempfile.py')
-rw-r--r--Lib/tempfile.py26
1 files changed, 23 insertions, 3 deletions
diff --git a/Lib/tempfile.py b/Lib/tempfile.py
index b5a15f7..0eb9dde 100644
--- a/Lib/tempfile.py
+++ b/Lib/tempfile.py
@@ -437,11 +437,19 @@ class _TemporaryFileCloser:
cleanup_called = False
close_called = False
- def __init__(self, file, name, delete=True, delete_on_close=True):
+ def __init__(
+ self,
+ file,
+ name,
+ delete=True,
+ delete_on_close=True,
+ warn_message="Implicitly cleaning up unknown file",
+ ):
self.file = file
self.name = name
self.delete = delete
self.delete_on_close = delete_on_close
+ self.warn_message = warn_message
def cleanup(self, windows=(_os.name == 'nt'), unlink=_os.unlink):
if not self.cleanup_called:
@@ -469,7 +477,10 @@ class _TemporaryFileCloser:
self.cleanup()
def __del__(self):
+ close_called = self.close_called
self.cleanup()
+ if not close_called:
+ _warnings.warn(self.warn_message, ResourceWarning)
class _TemporaryFileWrapper:
@@ -483,8 +494,17 @@ class _TemporaryFileWrapper:
def __init__(self, file, name, delete=True, delete_on_close=True):
self.file = file
self.name = name
- self._closer = _TemporaryFileCloser(file, name, delete,
- delete_on_close)
+ self._closer = _TemporaryFileCloser(
+ file,
+ name,
+ delete,
+ delete_on_close,
+ warn_message=f"Implicitly cleaning up {self!r}",
+ )
+
+ def __repr__(self):
+ file = self.__dict__['file']
+ return f"<{type(self).__name__} {file=}>"
def __getattr__(self, name):
# Attribute lookups are delegated to the underlying file