bpo-35803: Document and test dir=PathLike for tempfile (GH-11644)

Co-Authored-By: Ammar Askar <ammar_askar@hotmail.com>
This commit is contained in:
Anthony Sottile 2019-09-09 08:54:34 -07:00 committed by Zachary Ware
parent 9488a5289d
commit 370138ba9c
3 changed files with 22 additions and 2 deletions

View File

@ -191,6 +191,9 @@ The module defines the following user-callable items:
*suffix* and *prefix* now accept and default to ``None`` to cause *suffix* and *prefix* now accept and default to ``None`` to cause
an appropriate default value to be used. an appropriate default value to be used.
.. versionchanged:: 3.6
The *dir* parameter now accepts a :term:`path-like object`.
.. function:: mkdtemp(suffix=None, prefix=None, dir=None) .. function:: mkdtemp(suffix=None, prefix=None, dir=None)
@ -214,6 +217,9 @@ The module defines the following user-callable items:
*suffix* and *prefix* now accept and default to ``None`` to cause *suffix* and *prefix* now accept and default to ``None`` to cause
an appropriate default value to be used. an appropriate default value to be used.
.. versionchanged:: 3.6
The *dir* parameter now accepts a :term:`path-like object`.
.. function:: gettempdir() .. function:: gettempdir()

View File

@ -3,6 +3,7 @@ import tempfile
import errno import errno
import io import io
import os import os
import pathlib
import signal import signal
import sys import sys
import re import re
@ -56,6 +57,9 @@ class TestLowLevelInternals(unittest.TestCase):
with self.assertRaises(TypeError): with self.assertRaises(TypeError):
tempfile._infer_return_type(b'', None, '') tempfile._infer_return_type(b'', None, '')
def test_infer_return_type_pathlib(self):
self.assertIs(str, tempfile._infer_return_type(pathlib.Path('/')))
# Common functionality. # Common functionality.
@ -79,8 +83,13 @@ class BaseTestCase(unittest.TestCase):
nsuf = nbase[len(nbase)-len(suf):] nsuf = nbase[len(nbase)-len(suf):]
if dir is not None: if dir is not None:
self.assertIs(type(name), str if type(dir) is str else bytes, self.assertIs(
"unexpected return type") type(name),
str
if type(dir) is str or isinstance(dir, os.PathLike) else
bytes,
"unexpected return type",
)
if pre is not None: if pre is not None:
self.assertIs(type(name), str if type(pre) is str else bytes, self.assertIs(type(name), str if type(pre) is str else bytes,
"unexpected return type") "unexpected return type")
@ -425,6 +434,7 @@ class TestMkstempInner(TestBadTempdir, BaseTestCase):
dir = tempfile.mkdtemp() dir = tempfile.mkdtemp()
try: try:
self.do_create(dir=dir).write(b"blat") self.do_create(dir=dir).write(b"blat")
self.do_create(dir=pathlib.Path(dir)).write(b"blat")
finally: finally:
os.rmdir(dir) os.rmdir(dir)
@ -659,6 +669,7 @@ class TestMkstemp(BaseTestCase):
dir = tempfile.mkdtemp() dir = tempfile.mkdtemp()
try: try:
self.do_create(dir=dir) self.do_create(dir=dir)
self.do_create(dir=pathlib.Path(dir))
finally: finally:
os.rmdir(dir) os.rmdir(dir)
@ -728,6 +739,7 @@ class TestMkdtemp(TestBadTempdir, BaseTestCase):
dir = tempfile.mkdtemp() dir = tempfile.mkdtemp()
try: try:
os.rmdir(self.do_create(dir=dir)) os.rmdir(self.do_create(dir=dir))
os.rmdir(self.do_create(dir=pathlib.Path(dir)))
finally: finally:
os.rmdir(dir) os.rmdir(dir)

View File

@ -0,0 +1,2 @@
Document and test that ``tempfile`` functions may accept a
:term:`path-like object` for the ``dir`` argument. Patch by Anthony Sottile.