summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrett Cannon <brett@python.org>2014-03-21 15:02:10 (GMT)
committerBrett Cannon <brett@python.org>2014-03-21 15:02:10 (GMT)
commit46f484ee4e56c9e4589a43a20b32c0d65a23e537 (patch)
tree82074db069bde6bf9f2143243bfb43ea6c0204dc
parenta00c2407caed1fe61bdd92788f7a8eb27fcff969 (diff)
parented6783f315c0efe49f981b820332fc5067eace36 (diff)
downloadcpython-46f484ee4e56c9e4589a43a20b32c0d65a23e537.zip
cpython-46f484ee4e56c9e4589a43a20b32c0d65a23e537.tar.gz
cpython-46f484ee4e56c9e4589a43a20b32c0d65a23e537.tar.bz2
merge
-rw-r--r--Doc/distutils/apiref.rst2
-rw-r--r--Doc/faq/extending.rst4
-rw-r--r--Doc/library/enum.rst6
-rw-r--r--Doc/library/os.path.rst2
-rw-r--r--Doc/library/os.rst4
-rw-r--r--Lib/collections/__init__.py4
-rw-r--r--Lib/logging/config.py107
-rw-r--r--Lib/os.py4
-rw-r--r--Modules/socketmodule.c6
9 files changed, 60 insertions, 79 deletions
diff --git a/Doc/distutils/apiref.rst b/Doc/distutils/apiref.rst
index 36a911e..e1357fa 100644
--- a/Doc/distutils/apiref.rst
+++ b/Doc/distutils/apiref.rst
@@ -993,7 +993,7 @@ directories.
Files in *src* that begin with :file:`.nfs` are skipped (more information on
these files is available in answer D2 of the `NFS FAQ page
- <http://nfs.sourceforge.net/#section_d>`_.
+ <http://nfs.sourceforge.net/#section_d>`_).
.. versionchanged:: 3.3.1
NFS files are ignored.
diff --git a/Doc/faq/extending.rst b/Doc/faq/extending.rst
index a9a234b..d196e86 100644
--- a/Doc/faq/extending.rst
+++ b/Doc/faq/extending.rst
@@ -95,8 +95,8 @@ To test the type of an object, first make sure it isn't *NULL*, and then use
There is also a high-level API to Python objects which is provided by the
so-called 'abstract' interface -- read ``Include/abstract.h`` for further
details. It allows interfacing with any kind of Python sequence using calls
-like :c:func:`PySequence_Length`, :c:func:`PySequence_GetItem`, etc.) as well
-as many other useful protocols such as numbers (:c:func:`PyNumber_Index` et.
+like :c:func:`PySequence_Length`, :c:func:`PySequence_GetItem`, etc. as well
+as many other useful protocols such as numbers (:c:func:`PyNumber_Index` et
al.) and mappings in the PyMapping APIs.
diff --git a/Doc/library/enum.rst b/Doc/library/enum.rst
index fc7267b..acdcf7f 100644
--- a/Doc/library/enum.rst
+++ b/Doc/library/enum.rst
@@ -442,7 +442,7 @@ The complete signature is::
:value: What the new Enum class will record as its name.
-:names: The Enum members. This can be a whitespace or comma seperated string
+:names: The Enum members. This can be a whitespace or comma separated string
(values will start at 1)::
'red green blue' | 'red,green,blue' | 'red, green, blue'
@@ -453,7 +453,7 @@ The complete signature is::
or a mapping::
- {'chartruese': 7, 'sea_green': 11, 'rosemary': 42}
+ {'chartreuse': 7, 'sea_green': 11, 'rosemary': 42}
:module: name of module where new Enum class can be found.
@@ -543,7 +543,7 @@ Some rules:
add methods and don't specify another data type such as :class:`int` or
:class:`str`.
3. When another data type is mixed in, the :attr:`value` attribute is *not the
- same* as the enum member itself, although it is equivalant and will compare
+ same* as the enum member itself, although it is equivalent and will compare
equal.
4. %-style formatting: `%s` and `%r` call :class:`Enum`'s :meth:`__str__` and
:meth:`__repr__` respectively; other codes (such as `%i` or `%h` for
diff --git a/Doc/library/os.path.rst b/Doc/library/os.path.rst
index 3771ab0..6b3a3b6 100644
--- a/Doc/library/os.path.rst
+++ b/Doc/library/os.path.rst
@@ -242,7 +242,7 @@ the :mod:`glob` module.)
links encountered in the path (if they are supported by the operating system).
-.. function:: relpath(path, start=None)
+.. function:: relpath(path, start=os.curdir)
Return a relative filepath to *path* either from the current directory or
from an optional *start* directory. This is a path computation: the
diff --git a/Doc/library/os.rst b/Doc/library/os.rst
index f50e5d9..8e19c25 100644
--- a/Doc/library/os.rst
+++ b/Doc/library/os.rst
@@ -1607,7 +1607,7 @@ features:
The *dir_fd* argument.
-.. function:: makedirs(path, mode=0o777, exist_ok=False)
+.. function:: makedirs(name, mode=0o777, exist_ok=False)
.. index::
single: directory; creating
@@ -1763,7 +1763,7 @@ features:
The *dir_fd* argument.
-.. function:: removedirs(path)
+.. function:: removedirs(name)
.. index:: single: directory; deleting
diff --git a/Lib/collections/__init__.py b/Lib/collections/__init__.py
index 02bdc57..d6deb6a 100644
--- a/Lib/collections/__init__.py
+++ b/Lib/collections/__init__.py
@@ -274,9 +274,7 @@ class {typename}(tuple):
return OrderedDict(zip(self._fields, self))
def _asdict(self):
- '''Return a new OrderedDict which maps field names to their values.
- This method is obsolete. Use vars(nt) or nt.__dict__ instead.
- '''
+ 'Return a new OrderedDict which maps field names to their values.'
return self.__dict__
def __getnewargs__(self):
diff --git a/Lib/logging/config.py b/Lib/logging/config.py
index 10187e8..895fb26 100644
--- a/Lib/logging/config.py
+++ b/Lib/logging/config.py
@@ -1,4 +1,4 @@
-# Copyright 2001-2013 by Vinay Sajip. All Rights Reserved.
+# Copyright 2001-2014 by Vinay Sajip. All Rights Reserved.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose and without fee is hereby granted,
@@ -19,13 +19,19 @@ Configuration functions for the logging package for Python. The core package
is based on PEP 282 and comments thereto in comp.lang.python, and influenced
by Apache's log4j system.
-Copyright (C) 2001-2013 Vinay Sajip. All Rights Reserved.
+Copyright (C) 2001-2014 Vinay Sajip. All Rights Reserved.
To use, simply 'import logging' and log away!
"""
-import sys, logging, logging.handlers, struct, traceback, re
+import errno
import io
+import logging
+import logging.handlers
+import re
+import struct
+import sys
+import traceback
try:
import _thread as thread
@@ -38,10 +44,7 @@ from socketserver import ThreadingTCPServer, StreamRequestHandler
DEFAULT_LOGGING_CONFIG_PORT = 9030
-if sys.platform == "win32":
- RESET_ERROR = 10054 #WSAECONNRESET
-else:
- RESET_ERROR = 104 #ECONNRESET
+RESET_ERROR = errno.ECONNRESET
#
# The following code implements a socket listener for on-the-fly
@@ -274,6 +277,30 @@ def valid_ident(s):
return True
+class ConvertingMixin(object):
+ """For ConvertingXXX's, this mixin class provides common functions"""
+
+ def convert_with_key(self, key, value, replace=True):
+ result = self.configurator.convert(value)
+ #If the converted value is different, save for next time
+ if value is not result:
+ if replace:
+ self[key] = result
+ if type(result) in (ConvertingDict, ConvertingList,
+ ConvertingTuple):
+ result.parent = self
+ result.key = key
+ return result
+
+ def convert(self, value):
+ result = self.configurator.convert(value)
+ if value is not result:
+ if type(result) in (ConvertingDict, ConvertingList,
+ ConvertingTuple):
+ result.parent = self
+ return result
+
+
# The ConvertingXXX classes are wrappers around standard Python containers,
# and they serve to convert any suitable values in the container. The
# conversion converts base dicts, lists and tuples to their wrapped
@@ -283,77 +310,37 @@ def valid_ident(s):
# Each wrapper should have a configurator attribute holding the actual
# configurator to use for conversion.
-class ConvertingDict(dict):
+class ConvertingDict(dict, ConvertingMixin):
"""A converting dictionary wrapper."""
def __getitem__(self, key):
value = dict.__getitem__(self, key)
- result = self.configurator.convert(value)
- #If the converted value is different, save for next time
- if value is not result:
- self[key] = result
- if type(result) in (ConvertingDict, ConvertingList,
- ConvertingTuple):
- result.parent = self
- result.key = key
- return result
+ return self.convert_with_key(key, value)
def get(self, key, default=None):
value = dict.get(self, key, default)
- result = self.configurator.convert(value)
- #If the converted value is different, save for next time
- if value is not result:
- self[key] = result
- if type(result) in (ConvertingDict, ConvertingList,
- ConvertingTuple):
- result.parent = self
- result.key = key
- return result
+ return self.convert_with_key(key, value)
def pop(self, key, default=None):
value = dict.pop(self, key, default)
- result = self.configurator.convert(value)
- if value is not result:
- if type(result) in (ConvertingDict, ConvertingList,
- ConvertingTuple):
- result.parent = self
- result.key = key
- return result
+ return self.convert_with_key(key, value, replace=False)
-class ConvertingList(list):
+class ConvertingList(list, ConvertingMixin):
"""A converting list wrapper."""
def __getitem__(self, key):
value = list.__getitem__(self, key)
- result = self.configurator.convert(value)
- #If the converted value is different, save for next time
- if value is not result:
- self[key] = result
- if type(result) in (ConvertingDict, ConvertingList,
- ConvertingTuple):
- result.parent = self
- result.key = key
- return result
+ return self.convert_with_key(key, value)
def pop(self, idx=-1):
value = list.pop(self, idx)
- result = self.configurator.convert(value)
- if value is not result:
- if type(result) in (ConvertingDict, ConvertingList,
- ConvertingTuple):
- result.parent = self
- return result
+ return self.convert(value)
-class ConvertingTuple(tuple):
+class ConvertingTuple(tuple, ConvertingMixin):
"""A converting tuple wrapper."""
def __getitem__(self, key):
value = tuple.__getitem__(self, key)
- result = self.configurator.convert(value)
- if value is not result:
- if type(result) in (ConvertingDict, ConvertingList,
- ConvertingTuple):
- result.parent = self
- result.key = key
- return result
+ # Can't replace a tuple entry.
+ return self.convert_with_key(key, value, replace=False)
class BaseConfigurator(object):
"""
@@ -867,12 +854,8 @@ def listen(port=DEFAULT_LOGGING_CONFIG_PORT, verify=None):
if self.server.ready:
self.server.ready.set()
except OSError as e:
- if not isinstance(e.args, tuple):
+ if e.errno != RESET_ERROR:
raise
- else:
- errcode = e.args[0]
- if errcode != RESET_ERROR:
- raise
class ConfigSocketReceiver(ThreadingTCPServer):
"""
diff --git a/Lib/os.py b/Lib/os.py
index e9880a1..fa0fbb9 100644
--- a/Lib/os.py
+++ b/Lib/os.py
@@ -216,7 +216,7 @@ def _get_masked_mode(mode):
# (Inspired by Eric Raymond; the doc strings are mostly his)
def makedirs(name, mode=0o777, exist_ok=False):
- """makedirs(path [, mode=0o777][, exist_ok=False])
+ """makedirs(name [, mode=0o777][, exist_ok=False])
Super-mkdir; create a leaf directory and all intermediate ones.
Works like mkdir, except that any intermediate path segment (not
@@ -260,7 +260,7 @@ def makedirs(name, mode=0o777, exist_ok=False):
raise
def removedirs(name):
- """removedirs(path)
+ """removedirs(name)
Super-rmdir; remove a leaf directory and all empty intermediate
ones. Works like rmdir except that, if the leaf directory is
diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c
index a1e5da8..d0149dd 100644
--- a/Modules/socketmodule.c
+++ b/Modules/socketmodule.c
@@ -1165,7 +1165,7 @@ makesockaddr(SOCKET_T sockfd, struct sockaddr *addr, size_t addrlen, int proto)
}
#endif
-#ifdef HAVE_LINUX_CAN_H
+#ifdef AF_CAN
case AF_CAN:
{
struct sockaddr_can *a = (struct sockaddr_can *)addr;
@@ -1589,7 +1589,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
}
#endif
-#ifdef HAVE_LINUX_CAN_H
+#if defined(AF_CAN) && defined(CAN_RAW) && defined(CAN_BCM)
case AF_CAN:
switch (s->sock_proto) {
case CAN_RAW:
@@ -1796,7 +1796,7 @@ getsockaddrlen(PySocketSockObject *s, socklen_t *len_ret)
}
#endif
-#ifdef HAVE_LINUX_CAN_H
+#ifdef AF_CAN
case AF_CAN:
{
*len_ret = sizeof (struct sockaddr_can);