[Python-3000-checkins] r63331 - in python/branches/py3k: .hgignore Doc/library/_winreg.rst Doc/library/colorsys.rst Doc/library/re.rst Doc/library/tempfile.rst Doc/tutorial/modules.rst Doc/whatsnew/2.6.rst Lib/distutils/command/build_ext.py Lib/site.py Lib/test/test_math.py Misc/NEWS Modules/mathmodule.c Tools/msi/msi.py

alexandre.vassalotti python-3000-checkins at python.org
Fri May 16 00:09:30 CEST 2008


Author: alexandre.vassalotti
Date: Fri May 16 00:09:29 2008
New Revision: 63331

Log:
Merged revisions 62914-62916,62918-62919,62921-62922,62924-62942,62944-62945,62947-62949 via svnmerge from 
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r62914 | skip.montanaro | 2008-05-08 20:45:00 -0400 (Thu, 08 May 2008) | 4 lines
  
  Add an example about using NamedTemporaryFile() to replace mktemp().  I'm
  unclear whether the verbatim text should have been indented or by how much.
........
  r62915 | benjamin.peterson | 2008-05-08 20:50:40 -0400 (Thu, 08 May 2008) | 2 lines
  
  reindent example
........
  r62927 | georg.brandl | 2008-05-09 02:09:25 -0400 (Fri, 09 May 2008) | 2 lines
  
  #2788: add .hgignore file.
........
  r62928 | georg.brandl | 2008-05-09 02:10:43 -0400 (Fri, 09 May 2008) | 2 lines
  
  #2781: fix function name.
........
  r62929 | georg.brandl | 2008-05-09 02:18:27 -0400 (Fri, 09 May 2008) | 2 lines
  
  Add a sentence to basicConfig() that is in the docstring.
........
  r62930 | georg.brandl | 2008-05-09 02:26:54 -0400 (Fri, 09 May 2008) | 2 lines
  
  Add another link to colorsys docs.
........
  r62931 | georg.brandl | 2008-05-09 02:36:07 -0400 (Fri, 09 May 2008) | 2 lines
  
  Add Kodos as a re reference.
........
  r62932 | georg.brandl | 2008-05-09 02:39:58 -0400 (Fri, 09 May 2008) | 2 lines
  
  Add a note about using reload().
........
  r62933 | andrew.kuchling | 2008-05-09 07:46:05 -0400 (Fri, 09 May 2008) | 3 lines
  
  Update planned release date.
  Uncomment PEP 370 section.
  Add some module items
........
  r62934 | christian.heimes | 2008-05-09 08:19:09 -0400 (Fri, 09 May 2008) | 1 line
  
  Add --user option to build_ext
........
  r62948 | mark.dickinson | 2008-05-09 13:54:23 -0400 (Fri, 09 May 2008) | 3 lines
  
  Issue #2487.  math.ldexp(x, n) raised OverflowError when n was large and 
  negative; fix to return an (appropriately signed) zero instead.
........
  r62949 | martin.v.loewis | 2008-05-09 14:21:55 -0400 (Fri, 09 May 2008) | 1 line
  
  Use the CHM file name that Sphinx assigns.
........


Added:
   python/branches/py3k/.hgignore
      - copied unchanged from r62934, /python/trunk/.hgignore
Modified:
   python/branches/py3k/   (props changed)
   python/branches/py3k/Doc/library/_winreg.rst
   python/branches/py3k/Doc/library/colorsys.rst
   python/branches/py3k/Doc/library/re.rst
   python/branches/py3k/Doc/library/tempfile.rst
   python/branches/py3k/Doc/tutorial/modules.rst
   python/branches/py3k/Doc/whatsnew/2.6.rst
   python/branches/py3k/Lib/distutils/command/build_ext.py
   python/branches/py3k/Lib/site.py
   python/branches/py3k/Lib/test/test_math.py
   python/branches/py3k/Misc/NEWS
   python/branches/py3k/Modules/mathmodule.c
   python/branches/py3k/Tools/msi/msi.py

Modified: python/branches/py3k/Doc/library/_winreg.rst
==============================================================================
--- python/branches/py3k/Doc/library/_winreg.rst	(original)
+++ python/branches/py3k/Doc/library/_winreg.rst	Fri May 16 00:09:29 2008
@@ -146,7 +146,7 @@
    *key* is an already open key, or one of the predefined  :const:`HKEY_\*`
    constants.
 
-   It is not necessary to call RegFlushKey to change a key. Registry changes are
+   It is not necessary to call :func:`FlushKey` to change a key. Registry changes are
    flushed to disk by the registry using its lazy  flusher.  Registry changes are
    also flushed to disk at system  shutdown.  Unlike :func:`CloseKey`, the
    :func:`FlushKey` method  returns only when all the data has been written to the
@@ -159,7 +159,7 @@
       isn't.
 
 
-.. function:: RegLoadKey(key, sub_key, file_name)
+.. function:: LoadKey(key, sub_key, file_name)
 
    Creates a subkey under the specified key and stores registration  information
    from a specified file into that subkey.

Modified: python/branches/py3k/Doc/library/colorsys.rst
==============================================================================
--- python/branches/py3k/Doc/library/colorsys.rst	(original)
+++ python/branches/py3k/Doc/library/colorsys.rst	Fri May 16 00:09:29 2008
@@ -1,4 +1,3 @@
-
 :mod:`colorsys` --- Conversions between color systems
 =====================================================
 
@@ -15,8 +14,11 @@
 0 and 1, but the I and Q coordinates can be positive or negative.  In all other
 spaces, the coordinates are all between 0 and 1.
 
-More information about color spaces can be found at
-http://www.poynton.com/ColorFAQ.html.
+.. seealso::
+
+   More information about color spaces can be found at
+   http://www.poynton.com/ColorFAQ.html and
+   http://www.cambridgeincolour.com/tutorials/color-spaces.htm.
 
 The :mod:`colorsys` module defines the following functions:
 
@@ -57,4 +59,3 @@
    (0.25, 0.5, 0.4)
    >>> colorsys.hsv_to_rgb(0.25, 0.5, 0.4)
    (0.3, 0.4, 0.2)
-

Modified: python/branches/py3k/Doc/library/re.rst
==============================================================================
--- python/branches/py3k/Doc/library/re.rst	(original)
+++ python/branches/py3k/Doc/library/re.rst	Fri May 16 00:09:29 2008
@@ -43,6 +43,9 @@
       second edition of the book no longer covers Python at all, but the first
       edition covered writing good regular expression patterns in great detail.
 
+   `Kodos <http://kodos.sf.net/>`_
+      is a graphical regular expression debugger written in Python.
+
 
 .. _re-syntax:
 

Modified: python/branches/py3k/Doc/library/tempfile.rst
==============================================================================
--- python/branches/py3k/Doc/library/tempfile.rst	(original)
+++ python/branches/py3k/Doc/library/tempfile.rst	Fri May 16 00:09:29 2008
@@ -152,6 +152,24 @@
       Use of this function may introduce a security hole in your program.
       By the time you get around to doing anything with the file name it
       returns, someone else may have beaten you to the punch.
+      :func:`mktemp` usage can be replaced easily with
+      :func:`NamedTemporaryFile`, passing it the  `delete=False` parameter::
+
+         >>> f = NamedTemporaryFile(delete=False)
+         >>> print f.name
+         >>> f.write("Hello World!\n")
+         >>> f.close()
+         >>> os.unlink(f.name)
+         >>> f = NamedTemporaryFile(delete=False)
+         >>> f
+         <open file '<fdopen>', mode 'w+b' at 0x384698>
+         >>> f.name
+         '/var/folders/5q/5qTPn6xq2RaWqk+1Ytw3-U+++TI/-Tmp-/tmpG7V1Y0'
+         >>> f.write("Hello World!\n")
+         >>> f.close()
+         >>> os.unlink(f.name)
+         >>> os.path.exists(f.name)
+         False
 
 The module uses two global variables that tell it how to construct a
 temporary name.  They are initialized at the first call to any of the

Modified: python/branches/py3k/Doc/tutorial/modules.rst
==============================================================================
--- python/branches/py3k/Doc/tutorial/modules.rst	(original)
+++ python/branches/py3k/Doc/tutorial/modules.rst	Fri May 16 00:09:29 2008
@@ -106,6 +106,13 @@
 an unknown set of names into the interpreter, possibly hiding some things 
 you have already defined.
 
+.. note::
+
+   For efficiency reasons, each module is only imported once per interpreter
+   session.  Therefore, if you change your modules, you must restart the
+   interpreter -- or, if it's just one module you want to test interactively,
+   use :func:`reload`, e.g. ``reload('modulename')``.
+
 
 .. _tut-modulesasscripts:
 

Modified: python/branches/py3k/Doc/whatsnew/2.6.rst
==============================================================================
--- python/branches/py3k/Doc/whatsnew/2.6.rst	(original)
+++ python/branches/py3k/Doc/whatsnew/2.6.rst	Fri May 16 00:09:29 2008
@@ -40,25 +40,26 @@
    * Credit the author of a patch or bugfix.   Just the name is
    sufficient; the e-mail address isn't necessary.
    
-   * It's helpful to add the bug/patch number in an parenthetical
+   * It's helpful to add the bug/patch number in a parenthetical comment.
    
    XXX Describe the transmogrify() function added to the socket
    module.
    (Contributed by P.Y. Developer; :issue:`12345`.)
    
-   This saves the maintainer the effort of going through the SVN logs
+   This saves the maintainer some effort going through the SVN logs
    when researching a change.
 
-This article explains the new features in Python 2.6.  No release date for
-Python 2.6 has been set; it will probably be released in mid 2008.
+This article explains the new features in Python 2.6.  The release
+schedule is described in :pep:`361`; currently the final release is
+scheduled for September 3 2008.
 
 This article doesn't attempt to provide a complete specification of
 the new features, but instead provides a convenient overview.  For
 full details, you should refer to the documentation for Python 2.6. If
-you want to understand the complete implementation and design
-rationale, refer to the PEP for a particular new feature.  For smaller
-changes, this edition of "What's New in Python" links to the bug/patch
-item for each change whenever possible.
+you want to understand the rationale for the design and
+implementation, refer to the PEP for a particular new feature.
+Whenever possible, "What's New in Python" links to the bug/patch item
+for each change.
 
 .. Compare with previous release in 2 - 3 sentences here.
    add hyperlink when the documentation becomes available online.
@@ -481,24 +482,41 @@
 
 .. ======================================================================
 
-.. ::
+.. _pep-0370:
 
-    .. _pep-0370:
-
-    PEP 370: XXX
-    =====================================================
-
-    When you run Python, the module search page ``sys.modules`` usually
-    includes a directory whose path ends in ``"site-packages"``.  This
-    directory is intended to hold locally-installed packages available to
-    all users on a machine or using a particular site installation.
+PEP 370: Per-user ``site-packages`` Directory
+=====================================================
 
-    Python 2.6 introduces a convention for user-specific site directories.
+When you run Python, the module search path ``sys.modules`` usually
+includes a directory whose path ends in ``"site-packages"``.  This
+directory is intended to hold locally-installed packages available to
+all users on a machine or using a particular site installation.
+
+Python 2.6 introduces a convention for user-specific site directories.
+The directory varies depending on the platform:
+
+* Unix and MacOS: :file:`~/.local/`
+* Windows: :file:`%APPDATA%/Python`
+
+Within this directory, there will be version-specific subdirectories,
+such as :file:`lib/python2.6/site-packages` on Unix/MacOS and
+:file:`Python26/site-packages` on Windows.
+
+If you don't like the default directory, it can be overridden by an
+environment variable.  :envvar:`PYTHONUSERBASE` sets the root
+directory used for all Python versions supporting this feature.  On
+Windows, the directory for application-specific data can be changed by
+setting the :envvar:`APPDATA` environment variable.  You can also
+modify the :file:`site.py` file for your Python installation.
+
+The feature can be disabled entirely by running Python with the
+:option:`-s` option or setting the :envvar:`PYTHONNOUSERSITE`
+environment variable.
 
-    .. seealso::
+.. seealso::
 
-       :pep:`370` - XXX
-         PEP written by XXX; implemented by Christian Heimes.
+   :pep:`370` - Per-user ``site-packages`` Directory
+     PEP written and implemented by Christian Heimes.
 
   
 .. ======================================================================
@@ -1450,6 +1468,12 @@
 by module name. Consult the :file:`Misc/NEWS` file in the source tree for a more
 complete list of changes, or look through the CVS logs for all the details.
 
+* (3.0-warning mode) The :mod:`audiodev` module is being deprecated,
+  and has been removed from Python 3.0, so importing it now triggers a
+  warning.  The module hasn't been maintained for several versions,
+  and is written against an outdated sound interface for SunOS and
+  IRIX.
+
 * The :mod:`bsddb.dbshelve` module now uses the highest pickling protocol
   available, instead of restricting itself to protocol 1.
   (Contributed by W. Barnes; :issue:`1551443`.)
@@ -2104,7 +2128,12 @@
 
   (Added by Facundo Batista.) 
 
-* The XML-RPC classes :class:`SimpleXMLRPCServer` and :class:`DocXMLRPCServer`
+* The :mod:`warnings` module's :func:`formatwarning` and :func:`showwarning` 
+  gained an optional *line* argument that can be used to supply the
+  line of source code.  (Added as part of :issue:`1631171`, which re-implemented
+  part of the :mod:`warnings` module in C code.)
+
+* The XML-RPC :class:`SimpleXMLRPCServer` and :class:`DocXMLRPCServer`
   classes can now be prevented from immediately opening and binding to
   their socket by passing True as the ``bind_and_activate``
   constructor parameter.  This can be used to modify the instance's
@@ -2144,6 +2173,9 @@
 
   (Contributed by Alan McIntyre; :issue:`467924`.)
 
+  Also, :mod:`zipfile` now supports using Unicode filenames
+  for archived files.  (Contributed by Alexey Borzenkov; :issue:`1734346`.)
+
 .. ======================================================================
 .. whole new modules get described in subsections here
 

Modified: python/branches/py3k/Lib/distutils/command/build_ext.py
==============================================================================
--- python/branches/py3k/Lib/distutils/command/build_ext.py	(original)
+++ python/branches/py3k/Lib/distutils/command/build_ext.py	Fri May 16 00:09:29 2008
@@ -7,6 +7,7 @@
 __revision__ = "$Id$"
 
 import sys, os, re
+from site import USER_BASE, USER_SITE
 from distutils.core import Command
 from distutils.errors import *
 from distutils.sysconfig import customize_compiler, get_python_version
@@ -90,9 +91,11 @@
          "list of SWIG command line options"),
         ('swig=', None,
          "path to the SWIG executable"),
+        ('user', None,
+         "add user include, library and rpath"),
         ]
 
-    boolean_options = ['inplace', 'debug', 'force', 'swig-cpp']
+    boolean_options = ['inplace', 'debug', 'force', 'swig-cpp', 'user']
 
     help_options = [
         ('help-compiler', None,
@@ -120,6 +123,7 @@
         self.swig = None
         self.swig_cpp = None
         self.swig_opts = None
+        self.user = None
 
     def finalize_options(self):
         from distutils import sysconfig
@@ -253,6 +257,16 @@
         else:
             self.swig_opts = self.swig_opts.split(' ')
 
+        # Finally add the user include and library directories if requested
+        if self.user:
+            user_include = os.path.join(USER_BASE, "include")
+            user_lib = os.path.join(USER_BASE, "lib")
+            if os.path.isdir(user_include):
+                self.include_dirs.append(user_include)
+            if os.path.isdir(user_lib):
+                self.library_dirs.append(user_lib)
+                self.rpath.append(user_lib)
+
     def run(self):
         from distutils.ccompiler import new_compiler
 

Modified: python/branches/py3k/Lib/site.py
==============================================================================
--- python/branches/py3k/Lib/site.py	(original)
+++ python/branches/py3k/Lib/site.py	Fri May 16 00:09:29 2008
@@ -527,7 +527,7 @@
 
     Exit codes with --user-base or --user-site:
       0 - user site directory is enabled
-      1 - user site diretory is disabled by user
+      1 - user site directory is disabled by user
       2 - uses site directory is disabled by super user
           or for security reasons
      >2 - unknown error

Modified: python/branches/py3k/Lib/test/test_math.py
==============================================================================
--- python/branches/py3k/Lib/test/test_math.py	(original)
+++ python/branches/py3k/Lib/test/test_math.py	Fri May 16 00:09:29 2008
@@ -369,6 +369,24 @@
         self.assertEquals(math.ldexp(NINF, -213), NINF)
         self.assert_(math.isnan(math.ldexp(NAN, 0)))
 
+        # large second argument
+        for n in [10**5, 10**10, 10**20, 10**40]:
+            self.assertEquals(math.ldexp(INF, -n), INF)
+            self.assertEquals(math.ldexp(NINF, -n), NINF)
+            self.assertEquals(math.ldexp(1., -n), 0.)
+            self.assertEquals(math.ldexp(-1., -n), -0.)
+            self.assertEquals(math.ldexp(0., -n), 0.)
+            self.assertEquals(math.ldexp(-0., -n), -0.)
+            self.assert_(math.isnan(math.ldexp(NAN, -n)))
+
+            self.assertRaises(OverflowError, math.ldexp, 1., n)
+            self.assertRaises(OverflowError, math.ldexp, -1., n)
+            self.assertEquals(math.ldexp(0., n), 0.)
+            self.assertEquals(math.ldexp(-0., n), -0.)
+            self.assertEquals(math.ldexp(INF, n), INF)
+            self.assertEquals(math.ldexp(NINF, n), NINF)
+            self.assert_(math.isnan(math.ldexp(NAN, n)))
+
     def testLog(self):
         self.assertRaises(TypeError, math.log)
         self.ftest('log(1/e)', math.log(1/math.e), -1)

Modified: python/branches/py3k/Misc/NEWS
==============================================================================
--- python/branches/py3k/Misc/NEWS	(original)
+++ python/branches/py3k/Misc/NEWS	Fri May 16 00:09:29 2008
@@ -30,6 +30,11 @@
 
 - The ConfigParser module has been renamed to configparser.
 
+- Issue #2487: change the semantics of math.ldexp(x, n) when n is too
+  large to fit in a C long.  ldexp(x, n) now returns a zero (with
+  suitable sign) if n is large and negative; previously, it raised
+  OverflowError.
+
 - Issue 2865: webbrowser.open() works again in a KDE environment.
 
 - The multifile module has been removed.

Modified: python/branches/py3k/Modules/mathmodule.c
==============================================================================
--- python/branches/py3k/Modules/mathmodule.c	(original)
+++ python/branches/py3k/Modules/mathmodule.c	Fri May 16 00:09:29 2008
@@ -425,23 +425,65 @@
 math_ldexp(PyObject *self, PyObject *args)
 {
 	double x, r;
-	int exp;
-	if (! PyArg_ParseTuple(args, "di:ldexp", &x, &exp))
+	PyObject *oexp;
+	long exp;
+	if (! PyArg_ParseTuple(args, "dO:ldexp", &x, &oexp))
+		return NULL;
+
+	if (PyLong_Check(oexp)) {
+		/* on overflow, replace exponent with either LONG_MAX
+		   or LONG_MIN, depending on the sign. */
+		exp = PyLong_AsLong(oexp);
+		if (exp == -1 && PyErr_Occurred()) {
+			if (PyErr_ExceptionMatches(PyExc_OverflowError)) {
+				if (Py_SIZE(oexp) < 0) {
+					exp = LONG_MIN;
+				}
+				else {
+					exp = LONG_MAX;
+				}
+				PyErr_Clear();
+			}
+			else {
+				/* propagate any unexpected exception */
+				return NULL;
+			}
+		}
+	}
+	else if (PyLong_Check(oexp)) {
+		exp = PyLong_AS_LONG(oexp);
+	}
+	else {
+		PyErr_SetString(PyExc_TypeError,
+				"Expected an int or long as second argument "
+				"to ldexp.");
 		return NULL;
-	errno = 0;
-	PyFPE_START_PROTECT("in math_ldexp", return 0)
-	r = ldexp(x, exp);
-	PyFPE_END_PROTECT(r)
-	if (Py_IS_FINITE(x) && Py_IS_INFINITY(r))
+	}
+
+	if (x == 0. || !Py_IS_FINITE(x)) {
+		/* NaNs, zeros and infinities are returned unchanged */
+		r = x;
+		errno = 0;
+	} else if (exp > INT_MAX) {
+		/* overflow */
+		r = copysign(Py_HUGE_VAL, x);
 		errno = ERANGE;
-	/* Windows MSVC8 sets errno = EDOM on ldexp(NaN, i);
-	   we unset it to avoid raising a ValueError here. */
-	if (errno == EDOM)
+	} else if (exp < INT_MIN) {
+		/* underflow to +-0 */
+		r = copysign(0., x);
+		errno = 0;
+	} else {
 		errno = 0;
+		PyFPE_START_PROTECT("in math_ldexp", return 0);
+		r = ldexp(x, (int)exp);
+		PyFPE_END_PROTECT(r);
+		if (Py_IS_INFINITY(r))
+			errno = ERANGE;
+	}
+
 	if (errno && is_error(r))
 		return NULL;
-	else
-		return PyFloat_FromDouble(r);
+	return PyFloat_FromDouble(r);
 }
 
 PyDoc_STRVAR(math_ldexp_doc,

Modified: python/branches/py3k/Tools/msi/msi.py
==============================================================================
--- python/branches/py3k/Tools/msi/msi.py	(original)
+++ python/branches/py3k/Tools/msi/msi.py	Fri May 16 00:09:29 2008
@@ -112,6 +112,12 @@
     "30":"{6953bc3b-6768-4291-8410-7914ce6e2ca8}",
     } [major+minor]
 
+# Compute the name that Sphinx gives to the docfile
+docfile = ""
+if level < 0xf:
+    docfile = '%x%s' % (level, serial)
+docfile = 'python%s%s%s.chm' % (major, minor, docfile)
+
 # Build the mingw import library, libpythonXY.a
 # This requires 'nm' and 'dlltool' executables on your PATH
 def build_mingw_lib(lib_file, def_file, dll_file, mingw_lib):
@@ -1073,8 +1079,8 @@
     # Add documentation
     htmlfiles.set_current()
     lib = PyDirectory(db, cab, root, "Doc", "Doc", "DOC|Doc")
-    lib.start_component("documentation", keyfile="Python%s%s.chm" % (major,minor))
-    lib.add_file("Python%s%s.chm" % (major, minor), src="build/htmlhelp/pydoc.chm")
+    lib.start_component("documentation", keyfile=docfile)
+    lib.add_file(docfile, src="build/htmlhelp/"+docfile)
 
     cab.commit(db)
 
@@ -1182,7 +1188,7 @@
               ("PythonPath", -1, prefix+r"\PythonPath", "",
                r"[TARGETDIR]Lib;[TARGETDIR]DLLs;[TARGETDIR]Lib\lib-tk", "REGISTRY"),
               ("Documentation", -1, prefix+r"\Help\Main Python Documentation", "",
-               r"[TARGETDIR]Doc\Python%s%s.chm" % (major, minor), "REGISTRY.doc"),
+               "[TARGETDIR]Doc\\"+docfile , "REGISTRY.doc"),
               ("Modules", -1, prefix+r"\Modules", "+", None, "REGISTRY"),
               ("AppPaths", -1, r"Software\Microsoft\Windows\CurrentVersion\App Paths\Python.exe",
                "", r"[TARGETDIR]Python.exe", "REGISTRY.def")
@@ -1212,7 +1218,7 @@
               # htmlfiles.id, None, None, None, None, None, None, None),
               ## Non-advertised shortcuts: must be associated with a registry component
               ("Manual", "MenuDir", "MANUAL|Python Manuals", "REGISTRY.doc",
-               "[#Python%s%s.chm]" % (major,minor), None,
+               "[#%s]" % docfile, None,
                None, None, None, None, None, None),
               ("Uninstall", "MenuDir", "UNINST|Uninstall Python", "REGISTRY",
                SystemFolderName+"msiexec",  "/x%s" % product_code,


More information about the Python-3000-checkins mailing list