mirror of
https://github.com/RustPython/RustPython.git
synced 2026-10-28 18:59:04 +08:00
Update tempfile from v3.14.3
This commit is contained in:
1 parent
367aff93f0
commit
e68fac8655
2 files changed
+38
-25
No files matched your search
Vendored
+23
-3
@@ -438,11 +438,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:
|
||||
@@ -470,7 +478,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:
|
||||
@@ -484,8 +495,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
|
||||
|
||||
Vendored
+15
-22
@@ -328,10 +328,6 @@ def _mock_candidate_names(*names):
|
||||
|
||||
|
||||
class TestBadTempdir:
|
||||
|
||||
@unittest.skipIf(
|
||||
support.is_emscripten, "Emscripten cannot remove write bits."
|
||||
)
|
||||
def test_read_only_directory(self):
|
||||
with _inside_empty_temp_dir():
|
||||
oldmode = mode = os.stat(tempfile.tempdir).st_mode
|
||||
@@ -520,11 +516,11 @@ class TestMkstempInner(TestBadTempdir, BaseTestCase):
|
||||
_mock_candidate_names('aaa', 'aaa', 'bbb'):
|
||||
(fd1, name1) = self.make_temp()
|
||||
os.close(fd1)
|
||||
self.assertTrue(name1.endswith('aaa'))
|
||||
self.assertEndsWith(name1, 'aaa')
|
||||
|
||||
(fd2, name2) = self.make_temp()
|
||||
os.close(fd2)
|
||||
self.assertTrue(name2.endswith('bbb'))
|
||||
self.assertEndsWith(name2, 'bbb')
|
||||
|
||||
def test_collision_with_existing_directory(self):
|
||||
# _mkstemp_inner tries another name when a directory with
|
||||
@@ -532,11 +528,11 @@ class TestMkstempInner(TestBadTempdir, BaseTestCase):
|
||||
with _inside_empty_temp_dir(), \
|
||||
_mock_candidate_names('aaa', 'aaa', 'bbb'):
|
||||
dir = tempfile.mkdtemp()
|
||||
self.assertTrue(dir.endswith('aaa'))
|
||||
self.assertEndsWith(dir, 'aaa')
|
||||
|
||||
(fd, name) = self.make_temp()
|
||||
os.close(fd)
|
||||
self.assertTrue(name.endswith('bbb'))
|
||||
self.assertEndsWith(name, 'bbb')
|
||||
|
||||
|
||||
class TestGetTempPrefix(BaseTestCase):
|
||||
@@ -832,9 +828,9 @@ class TestMkdtemp(TestBadTempdir, BaseTestCase):
|
||||
_mock_candidate_names('aaa', 'aaa', 'bbb'):
|
||||
file = tempfile.NamedTemporaryFile(delete=False)
|
||||
file.close()
|
||||
self.assertTrue(file.name.endswith('aaa'))
|
||||
self.assertEndsWith(file.name, 'aaa')
|
||||
dir = tempfile.mkdtemp()
|
||||
self.assertTrue(dir.endswith('bbb'))
|
||||
self.assertEndsWith(dir, 'bbb')
|
||||
|
||||
def test_collision_with_existing_directory(self):
|
||||
# mkdtemp tries another name when a directory with
|
||||
@@ -842,9 +838,9 @@ class TestMkdtemp(TestBadTempdir, BaseTestCase):
|
||||
with _inside_empty_temp_dir(), \
|
||||
_mock_candidate_names('aaa', 'aaa', 'bbb'):
|
||||
dir1 = tempfile.mkdtemp()
|
||||
self.assertTrue(dir1.endswith('aaa'))
|
||||
self.assertEndsWith(dir1, 'aaa')
|
||||
dir2 = tempfile.mkdtemp()
|
||||
self.assertTrue(dir2.endswith('bbb'))
|
||||
self.assertEndsWith(dir2, 'bbb')
|
||||
|
||||
def test_for_tempdir_is_bytes_issue40701_api_warts(self):
|
||||
orig_tempdir = tempfile.tempdir
|
||||
@@ -1116,11 +1112,14 @@ class TestNamedTemporaryFile(BaseTestCase):
|
||||
# Testing extreme case, where the file is not explicitly closed
|
||||
# f.close()
|
||||
return tmp_name
|
||||
# Make sure that the garbage collector has finalized the file object.
|
||||
gc.collect()
|
||||
dir = tempfile.mkdtemp()
|
||||
try:
|
||||
tmp_name = my_func(dir)
|
||||
with self.assertWarnsRegex(
|
||||
expected_warning=ResourceWarning,
|
||||
expected_regex=r"Implicitly cleaning up <_TemporaryFileWrapper file=.*>",
|
||||
):
|
||||
tmp_name = my_func(dir)
|
||||
support.gc_collect()
|
||||
self.assertFalse(os.path.exists(tmp_name),
|
||||
f"NamedTemporaryFile {tmp_name!r} "
|
||||
f"exists after finalizer ")
|
||||
@@ -1240,9 +1239,6 @@ class TestSpooledTemporaryFile(BaseTestCase):
|
||||
with self.assertWarns(ResourceWarning):
|
||||
f.__del__()
|
||||
|
||||
@unittest.skipIf(
|
||||
support.is_emscripten, "Emscripten cannot fstat renamed files."
|
||||
)
|
||||
def test_del_rolled_file(self):
|
||||
# The rolled file should be deleted when the SpooledTemporaryFile
|
||||
# object is deleted. This should raise a ResourceWarning since the file
|
||||
@@ -1496,9 +1492,6 @@ class TestSpooledTemporaryFile(BaseTestCase):
|
||||
pass
|
||||
self.assertRaises(ValueError, use_closed)
|
||||
|
||||
@unittest.skipIf(
|
||||
support.is_emscripten, "Emscripten cannot fstat renamed files."
|
||||
)
|
||||
def test_truncate_with_size_parameter(self):
|
||||
# A SpooledTemporaryFile can be truncated to zero size
|
||||
f = tempfile.SpooledTemporaryFile(max_size=10)
|
||||
@@ -1734,8 +1727,8 @@ class TestTemporaryDirectory(BaseTestCase):
|
||||
"were deleted")
|
||||
d2.cleanup()
|
||||
|
||||
@unittest.skip("TODO: RUSTPYTHON; No such file or directory \"...\"")
|
||||
@os_helper.skip_unless_symlink
|
||||
@unittest.skip('TODO: RUSTPYTHON; No such file or directory "..."')
|
||||
def test_cleanup_with_symlink_modes(self):
|
||||
# cleanup() should not follow symlinks when fixing mode bits (#91133)
|
||||
with self.do_create(recurse=0) as d2:
|
||||
|
||||
Reference in new issue
Block a user