]> granicus.if.org Git - python/commitdiff
Merged revisions 77952,78030,78102,78104,78107,78206,78216,78296-78297,78328,78331...
authorBenjamin Peterson <benjamin@python.org>
Sun, 21 Mar 2010 22:03:03 +0000 (22:03 +0000)
committerBenjamin Peterson <benjamin@python.org>
Sun, 21 Mar 2010 22:03:03 +0000 (22:03 +0000)
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r77952 | mark.dickinson | 2010-02-03 10:50:14 -0600 (Wed, 03 Feb 2010) | 1 line

  Fix test_inspect.py data to match recent change to inspect_fodder.py (r77942).
........
  r78030 | benjamin.peterson | 2010-02-06 14:14:10 -0600 (Sat, 06 Feb 2010) | 1 line

  check type_getattro for correctness in a descriptor corner case
........
  r78102 | andrew.kuchling | 2010-02-07 19:35:35 -0600 (Sun, 07 Feb 2010) | 1 line

  Move distutils into its own subsection; add various items
........
  r78104 | andrew.kuchling | 2010-02-08 07:22:24 -0600 (Mon, 08 Feb 2010) | 1 line

  Add two items; move a subsection
........
  r78107 | antoine.pitrou | 2010-02-08 14:25:47 -0600 (Mon, 08 Feb 2010) | 3 lines

  Clarify and correct description for ccbench and iobench.
........
  r78206 | r.david.murray | 2010-02-16 11:55:26 -0600 (Tue, 16 Feb 2010) | 3 lines

  Make the references to Popen in the description of Call
  and check_call into links.
........
  r78216 | andrew.kuchling | 2010-02-18 08:16:48 -0600 (Thu, 18 Feb 2010) | 1 line

  Add various items
........
  r78296 | andrew.kuchling | 2010-02-21 20:08:45 -0600 (Sun, 21 Feb 2010) | 1 line

  Re-word
........
  r78297 | andrew.kuchling | 2010-02-21 20:29:10 -0600 (Sun, 21 Feb 2010) | 1 line

  #7076: mention SystemRandom class near start of the module docs; reword change description for clarity.  Noted by Shawn Ligocki.
........
  r78328 | jack.diederich | 2010-02-22 12:17:16 -0600 (Mon, 22 Feb 2010) | 1 line

  fixes issue #7530, serve_forever()
........
  r78331 | andrew.kuchling | 2010-02-22 12:38:23 -0600 (Mon, 22 Feb 2010) | 1 line

  Fix comment typo
........
  r78332 | andrew.kuchling | 2010-02-22 12:42:07 -0600 (Mon, 22 Feb 2010) | 2 lines

  #7627: MH.remove() would fail if the MH mailbox was locked;
  it would call _unlock_file() and pass it a closed file object.  Noted by Rob Austein.
........
  r78336 | jack.diederich | 2010-02-22 13:55:22 -0600 (Mon, 22 Feb 2010) | 1 line

  fixes issue #1522237, bad init check in _threading_local
........
  r78339 | jack.diederich | 2010-02-22 15:27:38 -0600 (Mon, 22 Feb 2010) | 1 line

  * fix issue#7476
........
  r78343 | andrew.kuchling | 2010-02-22 16:48:41 -0600 (Mon, 22 Feb 2010) | 10 lines

  #2560: remove an unnecessary 'for' loop from my_fgets() in Parser/myreadline.c.
  Noted by Joseph Armbruster; patch by Jessica McKellar.

  The original code was 'for (;;) {...}', where ... ended
  with a 'return -2' statement and did not contain a 'break' or 'continue'
  statement.  Therefore, the body of the loop is always executed once.

  Once upon a time there was a 'continue' in the loop, but it was removed in
  rev36346, committed by mwh on Wed Jul 7 17:44:12 2004.
........
  r78378 | jack.diederich | 2010-02-23 11:23:30 -0600 (Tue, 23 Feb 2010) | 1 line

  fixup markup error
........
  r78379 | jack.diederich | 2010-02-23 13:34:06 -0600 (Tue, 23 Feb 2010) | 1 line

   issue#6442 use in operator instead of has_key
........
  r78415 | dirkjan.ochtman | 2010-02-23 22:00:52 -0600 (Tue, 23 Feb 2010) | 1 line

  Issue #7733: add explicit reference in asyncore docs.
........
  r78559 | andrew.kuchling | 2010-03-01 13:45:21 -0600 (Mon, 01 Mar 2010) | 1 line

  #7637: update discussion of minidom.unlink() and garbage collection
........
  r78717 | benjamin.peterson | 2010-03-05 21:13:33 -0600 (Fri, 05 Mar 2010) | 1 line

  settscdump is definitely an implementation detail
........
  r78791 | andrew.kuchling | 2010-03-08 06:00:39 -0600 (Mon, 08 Mar 2010) | 1 line

  Add various items
........

16 files changed:
Doc/distutils/sourcedist.rst
Doc/library/asyncore.rst
Doc/library/multiprocessing.rst
Doc/library/random.rst
Doc/library/subprocess.rst
Doc/library/sys.rst
Doc/library/xml.dom.minidom.rst
Lib/mailbox.py
Lib/pipes.py
Lib/test/test_descr.py
Lib/test/test_inspect.py
Lib/test/test_mailbox.py
Lib/test/test_pipes.py
Misc/ACKS
Modules/_cursesmodule.c
Parser/myreadline.c

index 150d1e600c113771d4c411522df1a8194a4b84ce..57e363be2f229443d5c97427e737e0e80f4b054b 100644 (file)
@@ -54,9 +54,9 @@ Notes:
    requires the :program:`compress` program. Notice that this format is now
    pending for deprecation and will be removed in the future versions of Python.
 
-When using any ``tar`` format (``gztar``, ``bztar``, ``ztar`` or ``tar``), you
-can specify under Unix the ``owner`` and ``group`` names that will be set for
-each member of the archive.
+When using any ``tar`` format (``gztar``, ``bztar``, ``ztar`` or
+``tar``) under Unix, you can specify the ``owner`` and ``group`` names
+that will be set for each member of the archive.
 
 For example, if you want all files of the archive to be owned by root::
 
index 60d4d0336c078543fe97befab09bd745779858ee..e64d51d588f4b58acae1ff30702284b60a1d8bf9 100644 (file)
@@ -201,7 +201,8 @@ any that have been added to the map during asynchronous service) is closed.
    .. method:: bind(address)
 
       Bind the socket to *address*.  The socket must not already be bound.  (The
-      format of *address* depends on the address family --- see above.)  To mark
+      format of *address* depends on the address family --- refer to the
+      :mod:`socket` documentation for more information.)  To mark
       the socket as re-usable (setting the :const:`SO_REUSEADDR` option), call
       the :class:`dispatcher` object's :meth:`set_reuse_addr` method.
 
index 6d7e768ffe91aa5c4f0d4a6af8a434e33954f585..48b1ccc875d6d9512d66031b888dd8431747d9df 100644 (file)
@@ -1131,7 +1131,7 @@ their parent process exits.  The manager classes are defined in the
 
    Create a BaseManager object.
 
-   Once created one should call :meth:`start` or :meth:`serve_forever` to ensure
+   Once created one should call :meth:`start` or ``get_server().serve_forever()`` to ensure
    that the manager object refers to a started manager process.
 
    *address* is the address on which the manager process listens for new
@@ -1147,10 +1147,6 @@ their parent process exits.  The manager classes are defined in the
       Start a subprocess to start the manager.  If *initializer* is not ``None``
       then the subprocess will call ``initializer(*initargs)`` when it starts.
 
-   .. method:: serve_forever()
-
-      Run the server in the current process.
-
    .. method:: get_server()
 
       Returns a :class:`Server` object which represents the actual server under
index 54211f4f9d346bd2b1cf2f1728824ec9f4dfff13..bf89ade3d37f25078b9721de17ad5f222be96bb6 100644 (file)
@@ -35,6 +35,18 @@ basic generator of your own devising: in that case, override the :meth:`random`,
 Optionally, a new generator can supply a :meth:`getrandbits` method --- this
 allows :meth:`randrange` to produce selections over an arbitrarily large range.
 
+As an example of subclassing, the :mod:`random` module provides the
+:class:`WichmannHill` class that implements an alternative generator in pure
+Python.  The class provides a backward compatible way to reproduce results from
+earlier versions of Python, which used the Wichmann-Hill algorithm as the core
+generator.  Note that this Wichmann-Hill generator can no longer be recommended:
+its period is too short by contemporary standards, and the sequence generated is
+known to fail some stringent randomness tests.  See the references below for a
+recent variant that repairs these flaws.
+
+The :mod:`random` module also provides the :class:`SystemRandom` class which
+uses the system function :func:`os.urandom` to generate random numbers
+from sources provided by the operating system.
 
 Bookkeeping functions:
 
index 3838cc63cc5af12764b161d4ffce4029686d9468..13698e71bc6a4a75c08daec83cdd7afc3b17874b 100644 (file)
@@ -210,7 +210,7 @@ This module also defines four shortcut functions:
    Run command with arguments.  Wait for command to complete, then return the
    :attr:`returncode` attribute.
 
-   The arguments are the same as for the Popen constructor.  Example::
+   The arguments are the same as for the :class:`Popen` constructor.  Example::
 
       >>> retcode = subprocess.call(["ls", "-l"])
 
@@ -229,7 +229,7 @@ This module also defines four shortcut functions:
    :exc:`CalledProcessError` object will have the return code in the
    :attr:`returncode` attribute.
 
-   The arguments are the same as for the Popen constructor.  Example::
+   The arguments are the same as for the :class:`Popen` constructor.  Example::
 
       >>> subprocess.check_call(["ls", "-l"])
       0
index c1a00276d9315c35797f934ac21c265685bca724..6b9377dd563f6f89a5c7144397c002ad004467a3 100644 (file)
@@ -816,6 +816,10 @@ always available.
    available only if Python was compiled with :option:`--with-tsc`. To understand
    the output of this dump, read :file:`Python/ceval.c` in the Python sources.
 
+   .. impl-detail::
+      This function is intimately bound to CPython implementation details and
+      thus not likely to be implemented elsewhere.
+
 
 .. data:: stdin
           stdout
index 98e758612d89fcb203c1a70a77b0e50792588dad..5ece1ca13f8efa5a212205ddaea52e20a06e18db 100644 (file)
@@ -82,22 +82,12 @@ document: the one that holds all others.  Here is an example program::
    dom3 = parseString("<myxml>Some data</myxml>")
    assert dom3.documentElement.tagName == "myxml"
 
-When you are finished with a DOM, you should clean it up.  This is necessary
-because some versions of Python do not support garbage collection of objects
-that refer to each other in a cycle.  Until this restriction is removed from all
-versions of Python, it is safest to write your code as if cycles would not be
-cleaned up.
-
-The way to clean up a DOM is to call its :meth:`unlink` method::
-
-   dom1.unlink()
-   dom2.unlink()
-   dom3.unlink()
-
-:meth:`unlink` is a :mod:`xml.dom.minidom`\ -specific extension to the DOM API.
-After calling :meth:`unlink` on a node, the node and its descendants are
-essentially useless.
-
+When you are finished with a DOM tree, you may optionally call the
+:meth:`unlink` method to encourage early cleanup of the now-unneeded
+objects.  :meth:`unlink` is a :mod:`xml.dom.minidom`\ -specific
+extension to the DOM API that renders the node and its descendants are
+essentially useless.  Otherwise, Python's garbage collector will
+eventually take care of the objects in the tree.
 
 .. seealso::
 
index c2c9b5c549bcb792fc6e0800e1c24a6ae10e3bc3..e6f17353362fffaa99efa17d8bfe8bf1bcf8de0d 100755 (executable)
@@ -882,17 +882,9 @@ class MH(Mailbox):
                 raise KeyError('No message with key: %s' % key)
             else:
                 raise
-        try:
-            if self._locked:
-                _lock_file(f)
-            try:
-                f.close()
-                os.remove(os.path.join(self._path, str(key)))
-            finally:
-                if self._locked:
-                    _unlock_file(f)
-        finally:
+        else:
             f.close()
+            os.remove(path)
 
     def __setitem__(self, key, message):
         """Replace the keyed message; raise KeyError if it doesn't exist."""
index 6a473ae72251f2780b7a5e1367981d09da597d14..deab815a7c76b2ec89b40fdd26de95d2259bf933 100644 (file)
@@ -253,10 +253,13 @@ _safechars = string.ascii_letters + string.digits + '!@%_-+=:,./' # Safe unquote
 _funnychars = '"`$\\'                           # Unsafe inside "double quotes"
 
 def quote(file):
+    ''' return a shell-escaped version of the file string '''
     for c in file:
         if c not in _safechars:
             break
     else:
+        if not file:
+            return "''"
         return file
     if '\'' not in file:
         return '\'' + file + '\''
index 011cb6d8ea9a64c0f1bd0441fcf3760962b5505f..408f72b0a97340f23a8502ea41fb543e842ed465 100644 (file)
@@ -4164,6 +4164,15 @@ order (MRO) for bases """
         x.a = 42
         self.assertEqual(x.a, 42)
 
+        # Also check type_getattro for correctness.
+        class Meta(type):
+            pass
+        class X(object):
+            __metaclass__ = Meta
+        X.a = 42
+        Meta.a = Descr("a")
+        self.assertEqual(X.a, 42)
+
     def test_getattr_hooks(self):
         # issue 4230
 
index 35fd7753ac8e46f2fcf6b255130016340a3bdb9c..1daab6423bf9ec5075a2e4703f561aad5442669c 100644 (file)
@@ -166,12 +166,12 @@ class TestInterpreterStack(IsTestBase):
 
     def test_trace(self):
         self.assertEqual(len(git.tr), 3)
-        self.assertEqual(revise(*git.tr[0][1:]),
-             (modfile, 43, 'argue', ['            spam(a, b, c)\n'], 0))
-        self.assertEqual(revise(*git.tr[1][1:]),
-             (modfile, 9, 'spam', ['    eggs(b + d, c + f)\n'], 0))
-        self.assertEqual(revise(*git.tr[2][1:]),
-             (modfile, 18, 'eggs', ['    q = y / 0\n'], 0))
+        self.assertEqual(git.tr[0][1:], (modfile, 43, 'argue',
+                                         ['            spam(a, b, c)\n'], 0))
+        self.assertEqual(git.tr[1][1:], (modfile, 9, 'spam',
+                                         ['    eggs(b + d, c + f)\n'], 0))
+        self.assertEqual(git.tr[2][1:], (modfile, 18, 'eggs',
+                                         ['    q = y / 0\n'], 0))
 
     def test_frame(self):
         args, varargs, varkw, locals = inspect.getargvalues(mod.fr)
index 83f34c7ecd2eafeac8c8c85584c79f00acb674bf..73ee69fc07f49c19941244792282a51f14e7c8ab 100644 (file)
@@ -968,6 +968,13 @@ class TestMH(TestMailbox):
         key0 = self._box.add(msg0)
         refmsg0 = self._box.get_message(key0)
 
+    def test_issue7627(self):
+        msg0 = mailbox.MHMessage(self._template % 0)
+        key0 = self._box.add(msg0)
+        self._box.lock()
+        self._box.remove(key0)
+        self._box.unlock()
+
     def test_pack(self):
         # Pack the contents of the mailbox
         msg0 = mailbox.MHMessage(self._template % 0)
index 7b7809749258ab59813ba809fcb8e956ea927eeb..9ce137e819f5eb2ed065e1ad8443a9397e2bb24f 100644 (file)
@@ -82,6 +82,8 @@ class SimplePipeTests(unittest.TestCase):
             self.assertEqual(pipes.quote("test%s'name'" % u),
                               '"test\\%s\'name\'"' % u)
 
+        self.assertEqual(pipes.quote(''), "''")
+
     def testRepr(self):
         t = pipes.Template()
         self.assertEqual(repr(t), "<Template instance, steps=[]>")
index ec15267d240842f6c7da6e00de494ad2cb91f9a7..2f47dbb3172084f08511b2ed262618637ac75849 100644 (file)
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -832,6 +832,7 @@ Blake Winton
 Jean-Claude Wippler
 Frank Wierzbicki
 Lars Wirzenius
+John Wiseman
 Chris Withers
 Stefan Witzel
 Irek Wlizlo
index a89c22bafa70b0a5d0862e2cb8d28d8b2d7bb3ef..708af0aa40d28cc567eb126b681b3d923e2d7e6a 100644 (file)
@@ -215,7 +215,7 @@ PyCurses_ConvertToChtype(PyObject *obj, chtype *ch)
   return 1;
 }
 
-/* Function versions of the 3 functions for tested whether curses has been
+/* Function versions of the 3 functions for testing whether curses has been
    initialised or not. */
    
 static int func_PyCursesSetupTermCalled(void)
index a144850910e59d7a7e50c7f0d554b462378b6a66..0d8394b5be2043a3e806c4477c42db837c7b9e6e 100644 (file)
@@ -36,66 +36,63 @@ static int
 my_fgets(char *buf, int len, FILE *fp)
 {
        char *p;
-       for (;;) {
-               if (PyOS_InputHook != NULL)
-                       (void)(PyOS_InputHook)();
-               errno = 0;
-               p = fgets(buf, len, fp);
-               if (p != NULL)
-                       return 0; /* No error */
+       if (PyOS_InputHook != NULL)
+               (void)(PyOS_InputHook)();
+       errno = 0;
+       p = fgets(buf, len, fp);
+       if (p != NULL)
+               return 0; /* No error */
 #ifdef MS_WINDOWS
-               /* In the case of a Ctrl+C or some other external event 
-                  interrupting the operation:
-                  Win2k/NT: ERROR_OPERATION_ABORTED is the most recent Win32 
-                  error code (and feof() returns TRUE).
-                  Win9x: Ctrl+C seems to have no effect on fgets() returning
-                  early - the signal handler is called, but the fgets()
-                  only returns "normally" (ie, when Enter hit or feof())
+       /* In the case of a Ctrl+C or some other external event 
+          interrupting the operation:
+          Win2k/NT: ERROR_OPERATION_ABORTED is the most recent Win32 
+          error code (and feof() returns TRUE).
+          Win9x: Ctrl+C seems to have no effect on fgets() returning
+          early - the signal handler is called, but the fgets()
+          only returns "normally" (ie, when Enter hit or feof())
+       */
+       if (GetLastError()==ERROR_OPERATION_ABORTED) {
+               /* Signals come asynchronously, so we sleep a brief 
+                  moment before checking if the handler has been 
+                  triggered (we cant just return 1 before the 
+                  signal handler has been called, as the later 
+                  signal may be treated as a separate interrupt).
                */
-               if (GetLastError()==ERROR_OPERATION_ABORTED) {
-                       /* Signals come asynchronously, so we sleep a brief 
-                          moment before checking if the handler has been 
-                          triggered (we cant just return 1 before the 
-                          signal handler has been called, as the later 
-                          signal may be treated as a separate interrupt).
-                       */
-                       Sleep(1);
-                       if (PyOS_InterruptOccurred()) {
-                               return 1; /* Interrupt */
-                       }
-                       /* Either the sleep wasn't long enough (need a
-                          short loop retrying?) or not interrupted at all
-                          (in which case we should revisit the whole thing!)
-                          Logging some warning would be nice.  assert is not
-                          viable as under the debugger, the various dialogs
-                          mean the condition is not true.
-                       */
+               Sleep(1);
+               if (PyOS_InterruptOccurred()) {
+                       return 1; /* Interrupt */
                }
+               /* Either the sleep wasn't long enough (need a
+                  short loop retrying?) or not interrupted at all
+                  (in which case we should revisit the whole thing!)
+                  Logging some warning would be nice.  assert is not
+                  viable as under the debugger, the various dialogs
+                  mean the condition is not true.
+               */
+       }
 #endif /* MS_WINDOWS */
-               if (feof(fp)) {
-                       return -1; /* EOF */
-               }
+       if (feof(fp)) {
+               return -1; /* EOF */
+       }
 #ifdef EINTR
-               if (errno == EINTR) {
-                       int s;
+       if (errno == EINTR) {
+               int s;
 #ifdef WITH_THREAD
-                       PyEval_RestoreThread(_PyOS_ReadlineTState);
+               PyEval_RestoreThread(_PyOS_ReadlineTState);
 #endif
-                       s = PyErr_CheckSignals();
+               s = PyErr_CheckSignals();
 #ifdef WITH_THREAD
-                       PyEval_SaveThread();
+               PyEval_SaveThread();
 #endif
-                       if (s < 0) {
-                               return 1;
-                       }
+               if (s < 0) {
+                       return 1;
                }
+       }
 #endif
-               if (PyOS_InterruptOccurred()) {
-                       return 1; /* Interrupt */
-               }
-               return -2; /* Error */
+       if (PyOS_InterruptOccurred()) {
+               return 1; /* Interrupt */
        }
-       /* NOTREACHED */
+       return -2; /* Error */
 }