Skip to content

Commit 8718877

Browse files
gfyoungjreback
authored andcommitted
ENH/TST: Allow more keywords to ensure_clean (pandas-dev#30915)
These keywords will be passed through to tempfile constructor functions. Follow-up: pandas-dev#30771
1 parent 030a35c commit 8718877

File tree

3 files changed

+26
-15
lines changed

3 files changed

+26
-15
lines changed

pandas/_testing.py

+18-4
Original file line numberDiff line numberDiff line change
@@ -473,7 +473,7 @@ def close(fignum=None):
473473

474474

475475
@contextmanager
476-
def ensure_clean(filename=None, return_filelike=False):
476+
def ensure_clean(filename=None, return_filelike=False, **kwargs):
477477
"""
478478
Gets a temporary path and agrees to remove on close.
479479
@@ -485,23 +485,37 @@ def ensure_clean(filename=None, return_filelike=False):
485485
return_filelike : bool (default False)
486486
if True, returns a file-like which is *always* cleaned. Necessary for
487487
savefig and other functions which want to append extensions.
488+
**kwargs
489+
Additional keywords passed in for creating a temporary file.
490+
:meth:`tempFile.TemporaryFile` is used when `return_filelike` is ``True``.
491+
:meth:`tempfile.mkstemp` is used when `return_filelike` is ``False``.
492+
Note that the `filename` parameter will be passed in as the `suffix`
493+
argument to either function.
494+
495+
See Also
496+
--------
497+
tempfile.TemporaryFile
498+
tempfile.mkstemp
488499
"""
489500
filename = filename or ""
490501
fd = None
491502

503+
kwargs["suffix"] = filename
504+
492505
if return_filelike:
493-
f = tempfile.TemporaryFile(suffix=filename)
506+
f = tempfile.TemporaryFile(**kwargs)
507+
494508
try:
495509
yield f
496510
finally:
497511
f.close()
498512
else:
499-
# don't generate tempfile if using a path with directory specified
513+
# Don't generate tempfile if using a path with directory specified.
500514
if len(os.path.dirname(filename)):
501515
raise ValueError("Can't pass a qualified name to ensure_clean()")
502516

503517
try:
504-
fd, filename = tempfile.mkstemp(suffix=filename)
518+
fd, filename = tempfile.mkstemp(**kwargs)
505519
except UnicodeEncodeError:
506520
import pytest
507521

pandas/tests/io/parser/test_common.py

+7-9
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
from io import StringIO
99
import os
1010
import platform
11-
from tempfile import TemporaryFile
1211
from urllib.error import URLError
1312

1413
import numpy as np
@@ -1847,16 +1846,15 @@ def test_temporary_file(all_parsers):
18471846
parser = all_parsers
18481847
data = "0 0"
18491848

1850-
new_file = TemporaryFile("w+")
1851-
new_file.write(data)
1852-
new_file.flush()
1853-
new_file.seek(0)
1849+
with tm.ensure_clean(mode="w+", return_filelike=True) as new_file:
1850+
new_file.write(data)
1851+
new_file.flush()
1852+
new_file.seek(0)
18541853

1855-
result = parser.read_csv(new_file, sep=r"\s+", header=None)
1856-
new_file.close()
1854+
result = parser.read_csv(new_file, sep=r"\s+", header=None)
18571855

1858-
expected = DataFrame([[0, 0]])
1859-
tm.assert_frame_equal(result, expected)
1856+
expected = DataFrame([[0, 0]])
1857+
tm.assert_frame_equal(result, expected)
18601858

18611859

18621860
def test_internal_eof_byte(all_parsers):

pandas/tests/io/parser/test_encoding.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
from io import BytesIO
77
import os
8-
import tempfile
98

109
import numpy as np
1110
import pytest
@@ -164,7 +163,7 @@ def test_encoding_temp_file(all_parsers, utf_value, encoding_fmt, pass_encoding)
164163

165164
expected = DataFrame({"foo": ["bar"]})
166165

167-
with tempfile.TemporaryFile(mode="w+", encoding=encoding) as f:
166+
with tm.ensure_clean(mode="w+", encoding=encoding, return_filelike=True) as f:
168167
f.write("foo\nbar")
169168
f.seek(0)
170169

0 commit comments

Comments
 (0)