summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/test/test_os.py126
-rw-r--r--Lib/test/test_posix.py26
-rw-r--r--Misc/NEWS3
-rw-r--r--Modules/posixmodule.c12
4 files changed, 98 insertions, 69 deletions
diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py
index 8bb8ce3..6f4709d 100644
--- a/Lib/test/test_os.py
+++ b/Lib/test/test_os.py
@@ -80,16 +80,18 @@ class TemporaryFileTests(unittest.TestCase):
def test_tempnam(self):
if not hasattr(os, "tempnam"):
return
- warnings.filterwarnings("ignore", "tempnam", RuntimeWarning,
- r"test_os$")
- self.check_tempfile(os.tempnam())
+ with warnings.catch_warnings():
+ warnings.filterwarnings("ignore", "tempnam", RuntimeWarning,
+ r"test_os$")
+ warnings.filterwarnings("ignore", "tempnam", DeprecationWarning)
+ self.check_tempfile(os.tempnam())
- name = os.tempnam(test_support.TESTFN)
- self.check_tempfile(name)
+ name = os.tempnam(test_support.TESTFN)
+ self.check_tempfile(name)
- name = os.tempnam(test_support.TESTFN, "pfx")
- self.assertTrue(os.path.basename(name)[:3] == "pfx")
- self.check_tempfile(name)
+ name = os.tempnam(test_support.TESTFN, "pfx")
+ self.assertTrue(os.path.basename(name)[:3] == "pfx")
+ self.check_tempfile(name)
def test_tmpfile(self):
if not hasattr(os, "tmpfile"):
@@ -108,63 +110,69 @@ class TemporaryFileTests(unittest.TestCase):
# test that a subsequent call to os.tmpfile() raises the same error. If
# it doesn't, assume we're on XP or below and the user running the test
# has administrative privileges, and proceed with the test as normal.
- if sys.platform == 'win32':
- name = '\\python_test_os_test_tmpfile.txt'
- if os.path.exists(name):
- os.remove(name)
- try:
- fp = open(name, 'w')
- except IOError, first:
- # open() failed, assert tmpfile() fails in the same way.
- # Although open() raises an IOError and os.tmpfile() raises an
- # OSError(), 'args' will be (13, 'Permission denied') in both
- # cases.
+ with warnings.catch_warnings():
+ warnings.filterwarnings("ignore", "tmpfile", DeprecationWarning)
+
+ if sys.platform == 'win32':
+ name = '\\python_test_os_test_tmpfile.txt'
+ if os.path.exists(name):
+ os.remove(name)
try:
- fp = os.tmpfile()
- except OSError, second:
- self.assertEqual(first.args, second.args)
+ fp = open(name, 'w')
+ except IOError, first:
+ # open() failed, assert tmpfile() fails in the same way.
+ # Although open() raises an IOError and os.tmpfile() raises an
+ # OSError(), 'args' will be (13, 'Permission denied') in both
+ # cases.
+ try:
+ fp = os.tmpfile()
+ except OSError, second:
+ self.assertEqual(first.args, second.args)
+ else:
+ self.fail("expected os.tmpfile() to raise OSError")
+ return
else:
- self.fail("expected os.tmpfile() to raise OSError")
- return
- else:
- # open() worked, therefore, tmpfile() should work. Close our
- # dummy file and proceed with the test as normal.
- fp.close()
- os.remove(name)
-
- fp = os.tmpfile()
- fp.write("foobar")
- fp.seek(0,0)
- s = fp.read()
- fp.close()
- self.assertTrue(s == "foobar")
+ # open() worked, therefore, tmpfile() should work. Close our
+ # dummy file and proceed with the test as normal.
+ fp.close()
+ os.remove(name)
+
+ fp = os.tmpfile()
+ fp.write("foobar")
+ fp.seek(0,0)
+ s = fp.read()
+ fp.close()
+ self.assertTrue(s == "foobar")
def test_tmpnam(self):
if not hasattr(os, "tmpnam"):
return
- warnings.filterwarnings("ignore", "tmpnam", RuntimeWarning,
- r"test_os$")
- name = os.tmpnam()
- if sys.platform in ("win32",):
- # The Windows tmpnam() seems useless. From the MS docs:
- #
- # The character string that tmpnam creates consists of
- # the path prefix, defined by the entry P_tmpdir in the
- # file STDIO.H, followed by a sequence consisting of the
- # digit characters '0' through '9'; the numerical value
- # of this string is in the range 1 - 65,535. Changing the
- # definitions of L_tmpnam or P_tmpdir in STDIO.H does not
- # change the operation of tmpnam.
- #
- # The really bizarre part is that, at least under MSVC6,
- # P_tmpdir is "\\". That is, the path returned refers to
- # the root of the current drive. That's a terrible place to
- # put temp files, and, depending on privileges, the user
- # may not even be able to open a file in the root directory.
- self.assertFalse(os.path.exists(name),
- "file already exists for temporary file")
- else:
- self.check_tempfile(name)
+ with warnings.catch_warnings():
+ warnings.filterwarnings("ignore", "tmpnam", RuntimeWarning,
+ r"test_os$")
+ warnings.filterwarnings("ignore", "tmpnam", DeprecationWarning)
+
+ name = os.tmpnam()
+ if sys.platform in ("win32",):
+ # The Windows tmpnam() seems useless. From the MS docs:
+ #
+ # The character string that tmpnam creates consists of
+ # the path prefix, defined by the entry P_tmpdir in the
+ # file STDIO.H, followed by a sequence consisting of the
+ # digit characters '0' through '9'; the numerical value
+ # of this string is in the range 1 - 65,535. Changing the
+ # definitions of L_tmpnam or P_tmpdir in STDIO.H does not
+ # change the operation of tmpnam.
+ #
+ # The really bizarre part is that, at least under MSVC6,
+ # P_tmpdir is "\\". That is, the path returned refers to
+ # the root of the current drive. That's a terrible place to
+ # put temp files, and, depending on privileges, the user
+ # may not even be able to open a file in the root directory.
+ self.assertFalse(os.path.exists(name),
+ "file already exists for temporary file")
+ else:
+ self.check_tempfile(name)
# Test attributes on return values from os.*stat* family.
class StatAttributeTests(unittest.TestCase):
diff --git a/Lib/test/test_posix.py b/Lib/test/test_posix.py
index 17cdc5b..e2ef2cf 100644
--- a/Lib/test/test_posix.py
+++ b/Lib/test/test_posix.py
@@ -38,11 +38,13 @@ class PosixTester(unittest.TestCase):
"getpid", "getpgrp", "getppid", "getuid",
]
- for name in NO_ARG_FUNCTIONS:
- posix_func = getattr(posix, name, None)
- if posix_func is not None:
- posix_func()
- self.assertRaises(TypeError, posix_func, 1)
+ with warnings.catch_warnings():
+ warnings.filterwarnings("ignore", "", DeprecationWarning)
+ for name in NO_ARG_FUNCTIONS:
+ posix_func = getattr(posix, name, None)
+ if posix_func is not None:
+ posix_func()
+ self.assertRaises(TypeError, posix_func, 1)
if hasattr(posix, 'getresuid'):
def test_getresuid(self):
@@ -290,14 +292,18 @@ class PosixTester(unittest.TestCase):
def test_tempnam(self):
if hasattr(posix, 'tempnam'):
- self.assertTrue(posix.tempnam())
- self.assertTrue(posix.tempnam(os.curdir))
- self.assertTrue(posix.tempnam(os.curdir, 'blah'))
+ with warnings.catch_warnings():
+ warnings.filterwarnings("ignore", "tempnam", DeprecationWarning)
+ self.assertTrue(posix.tempnam())
+ self.assertTrue(posix.tempnam(os.curdir))
+ self.assertTrue(posix.tempnam(os.curdir, 'blah'))
def test_tmpfile(self):
if hasattr(posix, 'tmpfile'):
- fp = posix.tmpfile()
- fp.close()
+ with warnings.catch_warnings():
+ warnings.filterwarnings("ignore", "tmpfile", DeprecationWarning)
+ fp = posix.tmpfile()
+ fp.close()
def test_utime(self):
if hasattr(posix, 'utime'):
diff --git a/Misc/NEWS b/Misc/NEWS
index bbbbc97..07d7b47 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -22,6 +22,9 @@ Core and Builtins
Library
-------
+- Issue #4662: os.tempnam(), os.tmpfile() and os.tmpnam() now raise a py3k
+ DeprecationWarning.
+
- Subclasses of collections.OrderedDict now work correctly with __missing__.
- Issue 10753 - Characters ';','=' and ',' in the PATH_INFO environment
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index 0d7ca72..fcc73ad 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -7295,6 +7295,10 @@ posix_tempnam(PyObject *self, PyObject *args)
"tempnam is a potential security risk to your program") < 0)
return NULL;
+ if (PyErr_WarnPy3k("tempnam has been removed in 3.x; "
+ "use the tempfile module", 1) < 0)
+ return NULL;
+
#ifdef MS_WINDOWS
name = _tempnam(dir, pfx);
#else
@@ -7319,6 +7323,10 @@ posix_tmpfile(PyObject *self, PyObject *noargs)
{
FILE *fp;
+ if (PyErr_WarnPy3k("tmpfile has been removed in 3.x; "
+ "use the tempfile module", 1) < 0)
+ return NULL;
+
fp = tmpfile();
if (fp == NULL)
return posix_error();
@@ -7342,6 +7350,10 @@ posix_tmpnam(PyObject *self, PyObject *noargs)
"tmpnam is a potential security risk to your program") < 0)
return NULL;
+ if (PyErr_WarnPy3k("tmpnam has been removed in 3.x; "
+ "use the tempfile module", 1) < 0)
+ return NULL;
+
#ifdef USE_TMPNAM_R
name = tmpnam_r(buffer);
#else