[Python-checkins] r77167 - in python/branches/py3k: Doc/faq/design.rst Doc/library/2to3.rst Doc/library/ctypes.rst Doc/library/logging.rst Doc/library/msvcrt.rst Doc/library/optparse.rst Doc/library/os.rst Doc/library/select.rst Doc/library/stdtypes.rst Doc/library/string.rst Lib/test/regrtest.py Lib/test/test_posix.py Modules/gcmodule.c Modules/posixmodule.c Modules/selectmodule.c PC/msvcrtmodule.c

benjamin.peterson python-checkins at python.org
Thu Dec 31 04:11:24 CET 2009


Author: benjamin.peterson
Date: Thu Dec 31 04:11:23 2009
New Revision: 77167

Log:
Merged revisions 76847,76851,76869,76882,76891-76892,76924,77007,77070,77092,77096,77120,77126,77155 via svnmerge from 
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r76847 | benjamin.peterson | 2009-12-14 21:25:27 -0600 (Mon, 14 Dec 2009) | 1 line
  
  adverb
........
  r76851 | benjamin.peterson | 2009-12-15 21:28:52 -0600 (Tue, 15 Dec 2009) | 1 line
  
  remove lib2to3 resource
........
  r76869 | vinay.sajip | 2009-12-17 08:52:00 -0600 (Thu, 17 Dec 2009) | 1 line
  
  Issue #7529: logging: Minor correction to documentation.
........
  r76882 | georg.brandl | 2009-12-19 11:30:28 -0600 (Sat, 19 Dec 2009) | 1 line
  
  #7527: use standard versionadded tags.
........
  r76891 | georg.brandl | 2009-12-19 12:16:31 -0600 (Sat, 19 Dec 2009) | 1 line
  
  #7479: add note about function availability on Unices.
........
  r76892 | georg.brandl | 2009-12-19 12:20:18 -0600 (Sat, 19 Dec 2009) | 1 line
  
  #7480: remove tautology.
........
  r76924 | georg.brandl | 2009-12-20 08:28:05 -0600 (Sun, 20 Dec 2009) | 1 line
  
  Small indentation fix.
........
  r77007 | gregory.p.smith | 2009-12-23 03:31:11 -0600 (Wed, 23 Dec 2009) | 3 lines
  
  Fix possible integer overflow in lchown and fchown functions.  For issue1747858.
........
  r77070 | amaury.forgeotdarc | 2009-12-27 14:06:44 -0600 (Sun, 27 Dec 2009) | 2 lines
  
  Fix a typo in comment
........
  r77092 | georg.brandl | 2009-12-28 02:48:24 -0600 (Mon, 28 Dec 2009) | 1 line
  
  #7404: remove reference to non-existing example files.
........
  r77096 | benjamin.peterson | 2009-12-28 14:51:17 -0600 (Mon, 28 Dec 2009) | 1 line
  
  document new fix_callable behavior
........
  r77120 | georg.brandl | 2009-12-29 15:09:17 -0600 (Tue, 29 Dec 2009) | 1 line
  
  #7595: fix typo in argument default constant.
........
  r77126 | amaury.forgeotdarc | 2009-12-29 17:06:17 -0600 (Tue, 29 Dec 2009) | 2 lines
  
  #7579: Add docstrings to the msvcrt module
........
  r77155 | georg.brandl | 2009-12-30 13:03:00 -0600 (Wed, 30 Dec 2009) | 1 line
  
  We only support Windows NT derivatives now.
........


Modified:
   python/branches/py3k/   (props changed)
   python/branches/py3k/Doc/faq/design.rst
   python/branches/py3k/Doc/library/2to3.rst
   python/branches/py3k/Doc/library/ctypes.rst
   python/branches/py3k/Doc/library/logging.rst
   python/branches/py3k/Doc/library/msvcrt.rst
   python/branches/py3k/Doc/library/optparse.rst
   python/branches/py3k/Doc/library/os.rst
   python/branches/py3k/Doc/library/select.rst
   python/branches/py3k/Doc/library/stdtypes.rst
   python/branches/py3k/Doc/library/string.rst
   python/branches/py3k/Lib/test/regrtest.py
   python/branches/py3k/Lib/test/test_posix.py
   python/branches/py3k/Modules/gcmodule.c
   python/branches/py3k/Modules/posixmodule.c
   python/branches/py3k/Modules/selectmodule.c
   python/branches/py3k/PC/msvcrtmodule.c

Modified: python/branches/py3k/Doc/faq/design.rst
==============================================================================
--- python/branches/py3k/Doc/faq/design.rst	(original)
+++ python/branches/py3k/Doc/faq/design.rst	Thu Dec 31 04:11:23 2009
@@ -810,7 +810,7 @@
 looks like this::
 
    with obj:
-       a = 1    # equivalent to obj.a = 1
+       a = 1               # equivalent to obj.a = 1
        total = total + 1   # obj.total = obj.total + 1
 
 In Python, such a construct would be ambiguous.

Modified: python/branches/py3k/Doc/library/2to3.rst
==============================================================================
--- python/branches/py3k/Doc/library/2to3.rst	(original)
+++ python/branches/py3k/Doc/library/2to3.rst	Thu Dec 31 04:11:23 2009
@@ -122,7 +122,8 @@
 
 .. 2to3fixer:: callable
 
-   Converts ``callable(x)`` to ``hasattr(x, "__call_")``.
+   Converts ``callable(x)`` to ``isinstance(x, collections.Callable)``, adding
+   an import to :mod:`collections` if needed.
 
 .. 2to3fixer:: dict
 

Modified: python/branches/py3k/Doc/library/ctypes.rst
==============================================================================
--- python/branches/py3k/Doc/library/ctypes.rst	(original)
+++ python/branches/py3k/Doc/library/ctypes.rst	Thu Dec 31 04:11:23 2009
@@ -1005,7 +1005,7 @@
    >>>
 
 It is funny to see that on linux the sort function seems to work much more
-efficient, it is doing less comparisons::
+efficiently, it is doing less comparisons::
 
    >>> qsort(ia, len(ia), sizeof(c_int), cmp_func) # doctest: +LINUX
    py_cmp_func 5 1

Modified: python/branches/py3k/Doc/library/logging.rst
==============================================================================
--- python/branches/py3k/Doc/library/logging.rst	(original)
+++ python/branches/py3k/Doc/library/logging.rst	Thu Dec 31 04:11:23 2009
@@ -1659,6 +1659,8 @@
 and :meth:`flush` methods).
 
 
+.. currentmodule:: logging
+
 .. class:: StreamHandler(stream=None)
 
    Returns a new instance of the :class:`StreamHandler` class. If *stream* is

Modified: python/branches/py3k/Doc/library/msvcrt.rst
==============================================================================
--- python/branches/py3k/Doc/library/msvcrt.rst	(original)
+++ python/branches/py3k/Doc/library/msvcrt.rst	Thu Dec 31 04:11:23 2009
@@ -144,6 +144,4 @@
 .. function:: heapmin()
 
    Force the :cfunc:`malloc` heap to clean itself up and return unused blocks to
-   the operating system.  This only works on Windows NT.  On failure, this raises
-   :exc:`IOError`.
-
+   the operating system.  On failure, this raises :exc:`IOError`.

Modified: python/branches/py3k/Doc/library/optparse.rst
==============================================================================
--- python/branches/py3k/Doc/library/optparse.rst	(original)
+++ python/branches/py3k/Doc/library/optparse.rst	Thu Dec 31 04:11:23 2009
@@ -153,9 +153,7 @@
    an option that must be supplied on the command-line; note that the phrase
    "required option" is self-contradictory in English.  :mod:`optparse` doesn't
    prevent you from implementing required options, but doesn't give you much
-   help at it either.  See ``examples/required_1.py`` and
-   ``examples/required_2.py`` in the :mod:`optparse` source distribution for two
-   ways to implement required options with :mod:`optparse`.
+   help at it either.
 
 For example, consider this hypothetical command-line::
 

Modified: python/branches/py3k/Doc/library/os.rst
==============================================================================
--- python/branches/py3k/Doc/library/os.rst	(original)
+++ python/branches/py3k/Doc/library/os.rst	Thu Dec 31 04:11:23 2009
@@ -13,26 +13,34 @@
 module, and for high-level file and directory handling see the :mod:`shutil`
 module.
 
-The design of all built-in operating system dependent modules of Python is such
-that as long as the same functionality is available, it uses the same interface;
-for example, the function ``os.stat(path)`` returns stat information about
-*path* in the same format (which happens to have originated with the POSIX
-interface).
+Notes on the availability of these functions:
 
-Extensions peculiar to a particular operating system are also available through
-the :mod:`os` module, but using them is of course a threat to portability!
-
-.. note::
-
-   All functions accepting path or file names accept both bytes and string
-   objects, and result in an object of the same type, if a path or file name is
-   returned.
+* The design of all built-in operating system dependent modules of Python is
+  such that as long as the same functionality is available, it uses the same
+  interface; for example, the function ``os.stat(path)`` returns stat
+  information about *path* in the same format (which happens to have originated
+  with the POSIX interface).
+
+* Extensions peculiar to a particular operating system are also available
+  through the :mod:`os` module, but using them is of course a threat to
+  portability.
+
+* All functions accepting path or file names accept both bytes and string
+  objects, and result in an object of the same type, if a path or file name is
+  returned.
 
 .. note::
 
    If not separately noted, all functions that claim "Availability: Unix" are
    supported on Mac OS X, which builds on a Unix core.
 
+* An "Availability: Unix" note means that this function is commonly found on
+  Unix systems.  It does not make any claims about its existence on a specific
+  operating system.
+
+* If not separately noted, all functions that claim "Availability: Unix" are
+  supported on Mac OS X, which builds on a Unix core.
+
 .. note::
 
    All functions in this module raise :exc:`OSError` in the case of invalid or
@@ -46,9 +54,9 @@
 
 .. data:: name
 
-   The name of the operating system dependent module imported.  The following names
-   have currently been registered: ``'posix'``, ``'nt'``, ``'mac'``, ``'os2'``,
-   ``'ce'``, ``'java'``.
+   The name of the operating system dependent module imported.  The following
+   names have currently been registered: ``'posix'``, ``'nt'``, ``'mac'``,
+   ``'os2'``, ``'ce'``, ``'java'``.
 
 
 .. _os-filenames:

Modified: python/branches/py3k/Doc/library/select.rst
==============================================================================
--- python/branches/py3k/Doc/library/select.rst	(original)
+++ python/branches/py3k/Doc/library/select.rst	Thu Dec 31 04:11:23 2009
@@ -45,7 +45,7 @@
    :ref:`kqueue-objects` below for the methods supported by kqueue objects.
 
 
-.. function:: kevent(ident, filter=KQ_FILTER_READ, flags=KQ_ADD, fflags=0, data=0, udata=0)
+.. function:: kevent(ident, filter=KQ_FILTER_READ, flags=KQ_EV_ADD, fflags=0, data=0, udata=0)
 
    (Only supported on BSD.)  Returns a kernel event object object; see section
    :ref:`kevent-objects` below for the methods supported by kqueue objects.

Modified: python/branches/py3k/Doc/library/stdtypes.rst
==============================================================================
--- python/branches/py3k/Doc/library/stdtypes.rst	(original)
+++ python/branches/py3k/Doc/library/stdtypes.rst	Thu Dec 31 04:11:23 2009
@@ -2458,8 +2458,7 @@
 
 .. attribute:: class.__bases__
 
-   The tuple of base classes of a class object.  If there are no base classes, this
-   will be an empty tuple.
+   The tuple of base classes of a class object.
 
 
 .. attribute:: class.__name__

Modified: python/branches/py3k/Doc/library/string.rst
==============================================================================
--- python/branches/py3k/Doc/library/string.rst	(original)
+++ python/branches/py3k/Doc/library/string.rst	Thu Dec 31 04:11:23 2009
@@ -86,6 +86,7 @@
 you to create and customize your own string formatting behaviors using the same
 implementation as the built-in :meth:`format` method.
 
+
 .. class:: Formatter
 
    The :class:`Formatter` class has the following public methods:
@@ -470,6 +471,8 @@
 Template strings
 ----------------
 
+.. versionadded:: 2.4
+
 Templates provide simpler string substitutions as described in :pep:`292`.
 Instead of the normal ``%``\ -based substitutions, Templates support ``$``\
 -based substitutions, using the following rules:

Modified: python/branches/py3k/Lib/test/regrtest.py
==============================================================================
--- python/branches/py3k/Lib/test/regrtest.py	(original)
+++ python/branches/py3k/Lib/test/regrtest.py	Thu Dec 31 04:11:23 2009
@@ -121,8 +121,6 @@
     curses -    Tests that use curses and will modify the terminal's
                 state and output modes.
 
-    lib2to3 -   Run the tests for 2to3 (They take a while.)
-
     largefile - It is okay to run some test that may create huge
                 files.  These tests can take a long time and may
                 consume >2GB of disk space temporarily.

Modified: python/branches/py3k/Lib/test/test_posix.py
==============================================================================
--- python/branches/py3k/Lib/test/test_posix.py	(original)
+++ python/branches/py3k/Lib/test/test_posix.py	Thu Dec 31 04:11:23 2009
@@ -195,32 +195,54 @@
         if hasattr(posix, 'stat'):
             self.assertTrue(posix.stat(support.TESTFN))
 
-    if hasattr(posix, 'chown'):
-        def test_chown(self):
-            # raise an OSError if the file does not exist
-            os.unlink(support.TESTFN)
-            self.assertRaises(OSError, posix.chown, support.TESTFN, -1, -1)
-
-            # re-create the file
-            open(support.TESTFN, 'w').close()
-            if os.getuid() == 0:
-                try:
-                    # Many linux distros have a nfsnobody user as MAX_UID-2
-                    # that makes a good test case for signedness issues.
-                    #   http://bugs.python.org/issue1747858
-                    # This part of the test only runs when run as root.
-                    # Only scary people run their tests as root.
-                    ent = pwd.getpwnam('nfsnobody')
-                    posix.chown(support.TESTFN, ent.pw_uid, ent.pw_gid)
-                except KeyError:
-                    pass
-            else:
-                # non-root cannot chown to root, raises OSError
-                self.assertRaises(OSError, posix.chown,
-                                  support.TESTFN, 0, 0)
-
-            # test a successful chown call
-            posix.chown(support.TESTFN, os.getuid(), os.getgid())
+    def _test_all_chown_common(self, chown_func, first_param):
+        """Common code for chown, fchown and lchown tests."""
+        if os.getuid() == 0:
+            try:
+                # Many linux distros have a nfsnobody user as MAX_UID-2
+                # that makes a good test case for signedness issues.
+                #   http://bugs.python.org/issue1747858
+                # This part of the test only runs when run as root.
+                # Only scary people run their tests as root.
+                ent = pwd.getpwnam('nfsnobody')
+                chown_func(first_param, ent.pw_uid, ent.pw_gid)
+            except KeyError:
+                pass
+        else:
+            # non-root cannot chown to root, raises OSError
+            self.assertRaises(OSError, chown_func,
+                              first_param, 0, 0)
+        # test a successful chown call
+        chown_func(first_param, os.getuid(), os.getgid())
+
+    @unittest.skipUnless(hasattr(posix, 'chown'), "test needs os.chown()")
+    def test_chown(self):
+        # raise an OSError if the file does not exist
+        os.unlink(support.TESTFN)
+        self.assertRaises(OSError, posix.chown, support.TESTFN, -1, -1)
+
+        # re-create the file
+        open(support.TESTFN, 'w').close()
+        self._test_all_chown_common(posix.chown, support.TESTFN)
+
+    @unittest.skipUnless(hasattr(posix, 'fchown'), "test needs os.fchown()")
+    def test_fchown(self):
+        os.unlink(support.TESTFN)
+
+        # re-create the file
+        test_file = open(support.TESTFN, 'w')
+        try:
+            fd = test_file.fileno()
+            self._test_all_chown_common(posix.fchown, fd)
+        finally:
+            test_file.close()
+
+    @unittest.skipUnless(hasattr(posix, 'lchown'), "test needs os.lchown()")
+    def test_lchown(self):
+        os.unlink(support.TESTFN)
+        # create a symlink
+        os.symlink('/tmp/dummy-symlink-target', support.TESTFN)
+        self._test_all_chown_common(posix.lchown, support.TESTFN)
 
     def test_chdir(self):
         if hasattr(posix, 'chdir'):

Modified: python/branches/py3k/Modules/gcmodule.c
==============================================================================
--- python/branches/py3k/Modules/gcmodule.c	(original)
+++ python/branches/py3k/Modules/gcmodule.c	Thu Dec 31 04:11:23 2009
@@ -927,7 +927,7 @@
 	 */
 	(void)handle_finalizers(&finalizers, old);
 
-	/* Clear free list only during the collection of the higest
+	/* Clear free list only during the collection of the highest
 	 * generation */
 	if (generation == NUM_GENERATIONS-1) {
 		clear_freelists();
@@ -948,7 +948,7 @@
 	int i;
 	Py_ssize_t n = 0;
 
-	/* Find the oldest generation (higest numbered) where the count
+	/* Find the oldest generation (highest numbered) where the count
 	 * exceeds the threshold.  Objects in the that generation and
 	 * generations younger than it will be collected. */
 	for (i = NUM_GENERATIONS-1; i >= 0; i--) {

Modified: python/branches/py3k/Modules/posixmodule.c
==============================================================================
--- python/branches/py3k/Modules/posixmodule.c	(original)
+++ python/branches/py3k/Modules/posixmodule.c	Thu Dec 31 04:11:23 2009
@@ -1988,9 +1988,10 @@
 static PyObject *
 posix_fchown(PyObject *self, PyObject *args)
 {
-	int fd, uid, gid;
+	int fd;
+	long uid, gid;
 	int res;
-	if (!PyArg_ParseTuple(args, "iii:chown", &fd, &uid, &gid))
+	if (!PyArg_ParseTuple(args, "ill:chown", &fd, &uid, &gid))
 		return NULL;
 	Py_BEGIN_ALLOW_THREADS
 	res = fchown(fd, (uid_t) uid, (gid_t) gid);
@@ -2012,9 +2013,9 @@
 {
 	PyObject *opath;
 	char *path;
-	int uid, gid;
+	long uid, gid;
 	int res;
-	if (!PyArg_ParseTuple(args, "O&ii:lchown",
+	if (!PyArg_ParseTuple(args, "O&ll:lchown",
 	                      PyUnicode_FSConverter, &opath,
 	                      &uid, &gid))
 		return NULL;

Modified: python/branches/py3k/Modules/selectmodule.c
==============================================================================
--- python/branches/py3k/Modules/selectmodule.c	(original)
+++ python/branches/py3k/Modules/selectmodule.c	Thu Dec 31 04:11:23 2009
@@ -1166,7 +1166,7 @@
 #endif
 
 PyDoc_STRVAR(kqueue_event_doc,
-"kevent(ident, filter=KQ_FILTER_READ, flags=KQ_ADD, fflags=0, data=0, udata=0)\n\
+"kevent(ident, filter=KQ_FILTER_READ, flags=KQ_EV_ADD, fflags=0, data=0, udata=0)\n\
 \n\
 This object is the equivalent of the struct kevent for the C API.\n\
 \n\

Modified: python/branches/py3k/PC/msvcrtmodule.c
==============================================================================
--- python/branches/py3k/PC/msvcrtmodule.c	(original)
+++ python/branches/py3k/PC/msvcrtmodule.c	Thu Dec 31 04:11:23 2009
@@ -45,6 +45,12 @@
 	return Py_None;
 }
 
+PyDoc_STRVAR(heapmin_doc,
+"heapmin() -> None\n\
+\n\
+Force the malloc() heap to clean itself up and return unused blocks\n\
+to the operating system. On failure, this raises IOError.");
+
 // Perform locking operations on a C runtime file descriptor.
 static PyObject *
 msvcrt_locking(PyObject *self, PyObject *args)
@@ -67,6 +73,17 @@
 	return Py_None;
 }
 
+PyDoc_STRVAR(locking_doc,
+"locking(fd, mode, nbytes) -> None\n\
+\n\
+Lock part of a file based on file descriptor fd from the C runtime.\n\
+Raises IOError on failure. The locked region of the file extends from\n\
+the current file position for nbytes bytes, and may continue beyond\n\
+the end of the file. mode must be one of the LK_* constants listed\n\
+below. Multiple regions in a file may be locked at the same time, but\n\
+may not overlap. Adjacent regions are not merged; they must be unlocked\n\
+individually.");
+
 // Set the file translation mode for a C runtime file descriptor.
 static PyObject *
 msvcrt_setmode(PyObject *self, PyObject *args)
@@ -83,6 +100,13 @@
 	return PyLong_FromLong(flags);
 }
 
+PyDoc_STRVAR(setmode_doc,
+"setmode(fd, mode) -> Previous mode\n\
+\n\
+Set the line-end translation mode for the file descriptor fd. To set\n\
+it to text mode, flags should be os.O_TEXT; for binary, it should be\n\
+os.O_BINARY.");
+
 // Convert an OS file handle to a C runtime file descriptor.
 static PyObject *
 msvcrt_open_osfhandle(PyObject *self, PyObject *args)
@@ -101,6 +125,14 @@
 	return PyLong_FromLong(fd);
 }
 
+PyDoc_STRVAR(open_osfhandle_doc,
+"open_osfhandle(handle, flags) -> file descriptor\n\
+\n\
+Create a C runtime file descriptor from the file handle handle. The\n\
+flags parameter should be a bitwise OR of os.O_APPEND, os.O_RDONLY,\n\
+and os.O_TEXT. The returned file descriptor may be used as a parameter\n\
+to os.fdopen() to create a file object.");
+
 // Convert a C runtime file descriptor to an OS file handle.
 static PyObject *
 msvcrt_get_osfhandle(PyObject *self, PyObject *args)
@@ -121,6 +153,12 @@
 	return PyLong_FromVoidPtr((void*)handle);
 }
 
+PyDoc_STRVAR(get_osfhandle_doc,
+"get_osfhandle(fd) -> file handle\n\
+\n\
+Return the file handle for the file descriptor fd. Raises IOError\n\
+if fd is not recognized.");
+
 /* Console I/O */
 
 static PyObject *
@@ -135,6 +173,11 @@
 	return PyLong_FromLong(ok);
 }
 
+PyDoc_STRVAR(kbhit_doc,
+"kbhit() -> bool\n\
+\n\
+Return true if a keypress is waiting to be read.");
+
 static PyObject *
 msvcrt_getch(PyObject *self, PyObject *args)
 {
@@ -151,6 +194,16 @@
 	return PyBytes_FromStringAndSize(s, 1);
 }
 
+PyDoc_STRVAR(getch_doc,
+"getch() -> key character\n\
+\n\
+Read a keypress and return the resulting character. Nothing is echoed to\n\
+the console. This call will block if a keypress is not already\n\
+available, but will not wait for Enter to be pressed. If the pressed key\n\
+was a special function key, this will return '\\000' or '\\xe0'; the next\n\
+call will return the keycode. The Control-C keypress cannot be read with\n\
+this function.");
+
 #ifdef _WCONIO_DEFINED
 static PyObject *
 msvcrt_getwch(PyObject *self, PyObject *args)
@@ -167,6 +220,11 @@
 	u[0] = ch;
 	return PyUnicode_FromUnicode(u, 1);
 }
+
+PyDoc_STRVAR(getwch_doc,
+"getwch() -> Unicode key character\n\
+\n\
+Wide char variant of getch(), returning a Unicode value.");
 #endif
 
 static PyObject *
@@ -185,6 +243,12 @@
 	return PyBytes_FromStringAndSize(s, 1);
 }
 
+PyDoc_STRVAR(getche_doc,
+"getche() -> key character\n\
+\n\
+Similar to getch(), but the keypress will be echoed if it represents\n\
+a printable character.");
+
 #ifdef _WCONIO_DEFINED
 static PyObject *
 msvcrt_getwche(PyObject *self, PyObject *args)
@@ -201,6 +265,11 @@
 	s[0] = ch;
 	return PyUnicode_FromUnicode(s, 1);
 }
+
+PyDoc_STRVAR(getwche_doc,
+"getwche() -> Unicode key character\n\
+\n\
+Wide char variant of getche(), returning a Unicode value.");
 #endif
 
 static PyObject *
@@ -216,6 +285,11 @@
 	return Py_None;
 }
 
+PyDoc_STRVAR(putch_doc,
+"putch(char) -> None\n\
+\n\
+Print the character char to the console without buffering.");
+
 #ifdef _WCONIO_DEFINED
 static PyObject *
 msvcrt_putwch(PyObject *self, PyObject *args)
@@ -229,6 +303,11 @@
 	Py_RETURN_NONE;
 
 }
+
+PyDoc_STRVAR(putwch_doc,
+"putwch(unicode_char) -> None\n\
+\n\
+Wide char variant of putch(), accepting a Unicode value.");
 #endif
 
 static PyObject *
@@ -245,6 +324,12 @@
 	return Py_None;
 }
 
+PyDoc_STRVAR(ungetch_doc,
+"ungetch(char) -> None\n\
+\n\
+Cause the character char to be \"pushed back\" into the console buffer;\n\
+it will be the next character read by getch() or getche().");
+
 #ifdef _WCONIO_DEFINED
 static PyObject *
 msvcrt_ungetwch(PyObject *self, PyObject *args)
@@ -259,6 +344,11 @@
 	Py_INCREF(Py_None);
 	return Py_None;
 }
+
+PyDoc_STRVAR(ungetwch_doc,
+"ungetwch(unicode_char) -> None\n\
+\n\
+Wide char variant of ungetch(), accepting a Unicode value.");
 #endif
 
 static void
@@ -332,16 +422,16 @@
 
 /* List of functions exported by this module */
 static struct PyMethodDef msvcrt_functions[] = {
-	{"heapmin",		msvcrt_heapmin, METH_VARARGS},
-	{"locking",             msvcrt_locking, METH_VARARGS},
-	{"setmode",		msvcrt_setmode, METH_VARARGS},
-	{"open_osfhandle",	msvcrt_open_osfhandle, METH_VARARGS},
-	{"get_osfhandle",	msvcrt_get_osfhandle, METH_VARARGS},
-	{"kbhit",		msvcrt_kbhit, METH_VARARGS},
-	{"getch",		msvcrt_getch, METH_VARARGS},
-	{"getche",		msvcrt_getche, METH_VARARGS},
-	{"putch",		msvcrt_putch, METH_VARARGS},
-	{"ungetch",		msvcrt_ungetch, METH_VARARGS},
+	{"heapmin",		msvcrt_heapmin, METH_VARARGS, heapmin_doc},
+	{"locking",             msvcrt_locking, METH_VARARGS, locking_doc},
+	{"setmode",		msvcrt_setmode, METH_VARARGS, setmode_doc},
+	{"open_osfhandle",	msvcrt_open_osfhandle, METH_VARARGS, open_osfhandle_doc},
+	{"get_osfhandle",	msvcrt_get_osfhandle, METH_VARARGS, get_osfhandle_doc},
+	{"kbhit",		msvcrt_kbhit, METH_VARARGS, kbhit_doc},
+	{"getch",		msvcrt_getch, METH_VARARGS, getch_doc},
+	{"getche",		msvcrt_getche, METH_VARARGS, getche_doc},
+	{"putch",		msvcrt_putch, METH_VARARGS, putch_doc},
+	{"ungetch",		msvcrt_ungetch, METH_VARARGS, ungetch_doc},
 	{"SetErrorMode",	seterrormode, METH_VARARGS},
 #ifdef _DEBUG
 	{"CrtSetReportFile",	msvcrt_setreportfile, METH_VARARGS},
@@ -349,10 +439,10 @@
 	{"set_error_mode",	msvcrt_seterrormode, METH_VARARGS},
 #endif
 #ifdef _WCONIO_DEFINED
-	{"getwch",		msvcrt_getwch, METH_VARARGS},
-	{"getwche",		msvcrt_getwche, METH_VARARGS},
-	{"putwch",		msvcrt_putwch, METH_VARARGS},
-	{"ungetwch",		msvcrt_ungetwch, METH_VARARGS},
+	{"getwch",		msvcrt_getwch, METH_VARARGS, getwch_doc},
+	{"getwche",		msvcrt_getwche, METH_VARARGS, getwche_doc},
+	{"putwch",		msvcrt_putwch, METH_VARARGS, putwch_doc},
+	{"ungetwch",		msvcrt_ungetwch, METH_VARARGS, ungetwch_doc},
 #endif
 	{NULL,			NULL}
 };


More information about the Python-checkins mailing list