This commit is contained in:
Brett Cannon 2013-11-22 16:14:24 -05:00
commit 02ac74eecc
9 changed files with 71 additions and 24 deletions

View file

@ -41,7 +41,7 @@ Glossary
argument argument
A value passed to a :term:`function` (or :term:`method`) when calling the A value passed to a :term:`function` (or :term:`method`) when calling the
function. There are two types of arguments: function. There are two kinds of argument:
* :dfn:`keyword argument`: an argument preceded by an identifier (e.g. * :dfn:`keyword argument`: an argument preceded by an identifier (e.g.
``name=``) in a function call or passed as a value in a dictionary ``name=``) in a function call or passed as a value in a dictionary
@ -601,7 +601,7 @@ Glossary
parameter parameter
A named entity in a :term:`function` (or method) definition that A named entity in a :term:`function` (or method) definition that
specifies an :term:`argument` (or in some cases, arguments) that the specifies an :term:`argument` (or in some cases, arguments) that the
function can accept. There are five types of parameters: function can accept. There are five kinds of parameter:
* :dfn:`positional-or-keyword`: specifies an argument that can be passed * :dfn:`positional-or-keyword`: specifies an argument that can be passed
either :term:`positionally <argument>` or as a :term:`keyword argument either :term:`positionally <argument>` or as a :term:`keyword argument
@ -615,6 +615,8 @@ Glossary
parameters. However, some built-in functions have positional-only parameters. However, some built-in functions have positional-only
parameters (e.g. :func:`abs`). parameters (e.g. :func:`abs`).
.. _keyword-only_parameter:
* :dfn:`keyword-only`: specifies an argument that can be supplied only * :dfn:`keyword-only`: specifies an argument that can be supplied only
by keyword. Keyword-only parameters can be defined by including a by keyword. Keyword-only parameters can be defined by including a
single var-positional parameter or bare ``*`` in the parameter list single var-positional parameter or bare ``*`` in the parameter list

View file

@ -10,8 +10,10 @@
-------------- --------------
Note: This module exists for backwards compatibility only. For new code we .. note::
recommend using :module:`asyncio`.
This module exists for backwards compatibility only. For new code we
recommend using :mod:`asyncio`.
This module builds on the :mod:`asyncore` infrastructure, simplifying This module builds on the :mod:`asyncore` infrastructure, simplifying
asynchronous clients and servers and making it easier to handle protocols asynchronous clients and servers and making it easier to handle protocols

View file

@ -13,8 +13,10 @@
-------------- --------------
Note: This module exists for backwards compatibility only. For new code we .. note::
recommend using :module:`asyncio`.
This module exists for backwards compatibility only. For new code we
recommend using :mod:`asyncio`.
This module provides the basic infrastructure for writing asynchronous socket This module provides the basic infrastructure for writing asynchronous socket
service clients and servers. service clients and servers.

View file

@ -20,7 +20,7 @@ The main point of entry is the :class:`Path` class, which will instantiate
a :ref:`concrete path <concrete-paths>` for the current platform. a :ref:`concrete path <concrete-paths>` for the current platform.
.. note:: .. note::
This module module has been included in the standard library on a This module has been included in the standard library on a
:term:`provisional basis <provisional package>`. Backwards incompatible :term:`provisional basis <provisional package>`. Backwards incompatible
changes (up to and including removal of the package) may occur if deemed changes (up to and including removal of the package) may occur if deemed
necessary by the core developers. necessary by the core developers.
@ -250,7 +250,7 @@ property:
Methods and properties Methods and properties
^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^
Pure paths provide the following methods an properties: Pure paths provide the following methods and properties:
.. data:: PurePath.drive .. data:: PurePath.drive
@ -454,7 +454,7 @@ Pure paths provide the following methods an properties:
.. method:: PurePath.joinpath(*other) .. method:: PurePath.joinpath(*other)
Calling this method is equivalent to indexing the path with each of Calling this method is equivalent to combining the path with each of
the *other* arguments in turn:: the *other* arguments in turn::
>>> PurePosixPath('/etc').joinpath('passwd') >>> PurePosixPath('/etc').joinpath('passwd')
@ -871,4 +871,3 @@ call fails (for example because the path doesn't exist):
Remove this file or symbolic link. If the path points to a directory, Remove this file or symbolic link. If the path points to a directory,
use :func:`Path.rmdir` instead. use :func:`Path.rmdir` instead.

View file

@ -1149,6 +1149,9 @@ application).
fail, the entire sort operation will fail (and the list will likely be left fail, the entire sort operation will fail (and the list will likely be left
in a partially modified state). in a partially modified state).
:meth:`sort` accepts two arguments that can only be passed by keyword
(:ref:`keyword-only arguments <keyword-only_parameter>`):
*key* specifies a function of one argument that is used to extract a *key* specifies a function of one argument that is used to extract a
comparison key from each list element (for example, ``key=str.lower``). comparison key from each list element (for example, ``key=str.lower``).
The key corresponding to each item in the list is calculated once and The key corresponding to each item in the list is calculated once and

View file

@ -518,6 +518,11 @@ def get_config_vars(*args):
_config_vars['prefix'] = PREFIX _config_vars['prefix'] = PREFIX
_config_vars['exec_prefix'] = EXEC_PREFIX _config_vars['exec_prefix'] = EXEC_PREFIX
# For backward compatibility, see issue19555
SO = _config_vars.get('EXT_SUFFIX')
if SO is not None:
_config_vars['SO'] = SO
# Always convert srcdir to an absolute path # Always convert srcdir to an absolute path
srcdir = _config_vars.get('srcdir', project_base) srcdir = _config_vars.get('srcdir', project_base)
if os.name == 'posix': if os.name == 'posix':
@ -568,4 +573,7 @@ def get_config_var(name):
returned by 'get_config_vars()'. Equivalent to returned by 'get_config_vars()'. Equivalent to
get_config_vars().get(name) get_config_vars().get(name)
""" """
if name == 'SO':
import warnings
warnings.warn('SO is deprecated, use EXT_SUFFIX', DeprecationWarning)
return get_config_vars().get(name) return get_config_vars().get(name)

View file

@ -1,7 +1,6 @@
"""Tests for distutils.sysconfig.""" """Tests for distutils.sysconfig."""
import os import os
import shutil import shutil
import test
import unittest import unittest
from distutils import sysconfig from distutils import sysconfig
@ -9,8 +8,7 @@ from distutils.ccompiler import get_default_compiler
from distutils.tests import support from distutils.tests import support
from test.support import TESTFN, run_unittest from test.support import TESTFN, run_unittest
class SysconfigTestCase(support.EnvironGuard, class SysconfigTestCase(support.EnvironGuard, unittest.TestCase):
unittest.TestCase):
def setUp(self): def setUp(self):
super(SysconfigTestCase, self).setUp() super(SysconfigTestCase, self).setUp()
self.makefile = None self.makefile = None
@ -32,7 +30,6 @@ class SysconfigTestCase(support.EnvironGuard,
self.assertTrue(os.path.isfile(config_h), config_h) self.assertTrue(os.path.isfile(config_h), config_h)
def test_get_python_lib(self): def test_get_python_lib(self):
lib_dir = sysconfig.get_python_lib()
# XXX doesn't work on Linux when Python was never installed before # XXX doesn't work on Linux when Python was never installed before
#self.assertTrue(os.path.isdir(lib_dir), lib_dir) #self.assertTrue(os.path.isdir(lib_dir), lib_dir)
# test for pythonxx.lib? # test for pythonxx.lib?
@ -67,8 +64,9 @@ class SysconfigTestCase(support.EnvironGuard,
self.assertTrue(os.path.exists(Python_h), Python_h) self.assertTrue(os.path.exists(Python_h), Python_h)
self.assertTrue(sysconfig._is_python_source_dir(srcdir)) self.assertTrue(sysconfig._is_python_source_dir(srcdir))
elif os.name == 'posix': elif os.name == 'posix':
self.assertEqual(os.path.dirname(sysconfig.get_makefile_filename()), self.assertEqual(
srcdir) os.path.dirname(sysconfig.get_makefile_filename()),
srcdir)
def test_srcdir_independent_of_cwd(self): def test_srcdir_independent_of_cwd(self):
# srcdir should be independent of the current working directory # srcdir should be independent of the current working directory
@ -129,10 +127,13 @@ class SysconfigTestCase(support.EnvironGuard,
def test_sysconfig_module(self): def test_sysconfig_module(self):
import sysconfig as global_sysconfig import sysconfig as global_sysconfig
self.assertEqual(global_sysconfig.get_config_var('CFLAGS'), sysconfig.get_config_var('CFLAGS')) self.assertEqual(global_sysconfig.get_config_var('CFLAGS'),
self.assertEqual(global_sysconfig.get_config_var('LDFLAGS'), sysconfig.get_config_var('LDFLAGS')) sysconfig.get_config_var('CFLAGS'))
self.assertEqual(global_sysconfig.get_config_var('LDFLAGS'),
sysconfig.get_config_var('LDFLAGS'))
@unittest.skipIf(sysconfig.get_config_var('CUSTOMIZED_OSX_COMPILER'),'compiler flags customized') @unittest.skipIf(sysconfig.get_config_var('CUSTOMIZED_OSX_COMPILER'),
'compiler flags customized')
def test_sysconfig_compiler_vars(self): def test_sysconfig_compiler_vars(self):
# On OS X, binary installers support extension module building on # On OS X, binary installers support extension module building on
# various levels of the operating system with differing Xcode # various levels of the operating system with differing Xcode
@ -151,9 +152,29 @@ class SysconfigTestCase(support.EnvironGuard,
import sysconfig as global_sysconfig import sysconfig as global_sysconfig
if sysconfig.get_config_var('CUSTOMIZED_OSX_COMPILER'): if sysconfig.get_config_var('CUSTOMIZED_OSX_COMPILER'):
return return
self.assertEqual(global_sysconfig.get_config_var('LDSHARED'), sysconfig.get_config_var('LDSHARED')) self.assertEqual(global_sysconfig.get_config_var('LDSHARED'),
self.assertEqual(global_sysconfig.get_config_var('CC'), sysconfig.get_config_var('CC')) sysconfig.get_config_var('LDSHARED'))
self.assertEqual(global_sysconfig.get_config_var('CC'),
sysconfig.get_config_var('CC'))
@unittest.skipIf(sysconfig.get_config_var('EXT_SUFFIX') is None,
'EXT_SUFFIX required for this test')
def test_SO_deprecation(self):
self.assertWarns(DeprecationWarning,
sysconfig.get_config_var, 'SO')
@unittest.skipIf(sysconfig.get_config_var('EXT_SUFFIX') is None,
'EXT_SUFFIX required for this test')
def test_SO_value(self):
self.assertEqual(sysconfig.get_config_var('SO'),
sysconfig.get_config_var('EXT_SUFFIX'))
@unittest.skipIf(sysconfig.get_config_var('EXT_SUFFIX') is None,
'EXT_SUFFIX required for this test')
def test_SO_in_vars(self):
vars = sysconfig.get_config_vars()
self.assertIsNotNone(vars['SO'])
self.assertEqual(vars['SO'], vars['EXT_SUFFIX'])
def test_suite(): def test_suite():

View file

@ -200,6 +200,8 @@ class ExtendPathTests(unittest.TestCase):
dirname = self.create_init(pkgname) dirname = self.create_init(pkgname)
pathitem = os.path.join(dirname, pkgname) pathitem = os.path.join(dirname, pkgname)
fullname = '{}.{}'.format(pkgname, modname) fullname = '{}.{}'.format(pkgname, modname)
sys.modules.pop(fullname, None)
sys.modules.pop(pkgname, None)
try: try:
self.create_submodule(dirname, pkgname, modname, 0) self.create_submodule(dirname, pkgname, modname, 0)

View file

@ -10,7 +10,8 @@ Projected release date: 2013-11-24
Core and Builtins Core and Builtins
----------------- -----------------
- Use the repr of a module name in more places in import, especially exceptions. - Use the repr of a module name in more places in import, especially
exceptions.
- Issue #19619: str.encode, bytes.decode and bytearray.decode now use an - Issue #19619: str.encode, bytes.decode and bytearray.decode now use an
internal API to throw LookupError for known non-text encodings, rather internal API to throw LookupError for known non-text encodings, rather
@ -79,8 +80,8 @@ Library
CRL enumeration are now two functions. enum_certificates() also returns CRL enumeration are now two functions. enum_certificates() also returns
purpose flags as set of OIDs. purpose flags as set of OIDs.
- Issue #19555: Restore sysconfig.get_config_var('SO'), with a - Issue #19555: Restore sysconfig.get_config_var('SO'), (and the distutils
DeprecationWarning pointing people at $EXT_SUFFIX. equivalent) with a DeprecationWarning pointing people at $EXT_SUFFIX.
- Issue #8813: Add SSLContext.verify_flags to change the verification flags - Issue #8813: Add SSLContext.verify_flags to change the verification flags
of the context in order to enable certification revocation list (CRL) of the context in order to enable certification revocation list (CRL)
@ -351,6 +352,13 @@ Tests
- Issue 19384: Fix test_py_compile for root user, patch by Claudiu Popa. - Issue 19384: Fix test_py_compile for root user, patch by Claudiu Popa.
Documentation
-------------
- Issue #18326: Clarify that list.sort's arguments are keyword-only. Also,
attempt to reduce confusion in the glossary by not saying there are
different "types" of arguments and parameters.
Build Build
----- -----