diff options
author | Brett Cannon <brett@python.org> | 2014-03-21 15:02:10 (GMT) |
---|---|---|
committer | Brett Cannon <brett@python.org> | 2014-03-21 15:02:10 (GMT) |
commit | 46f484ee4e56c9e4589a43a20b32c0d65a23e537 (patch) | |
tree | 82074db069bde6bf9f2143243bfb43ea6c0204dc | |
parent | a00c2407caed1fe61bdd92788f7a8eb27fcff969 (diff) | |
parent | ed6783f315c0efe49f981b820332fc5067eace36 (diff) | |
download | cpython-46f484ee4e56c9e4589a43a20b32c0d65a23e537.zip cpython-46f484ee4e56c9e4589a43a20b32c0d65a23e537.tar.gz cpython-46f484ee4e56c9e4589a43a20b32c0d65a23e537.tar.bz2 |
merge
-rw-r--r-- | Doc/distutils/apiref.rst | 2 | ||||
-rw-r--r-- | Doc/faq/extending.rst | 4 | ||||
-rw-r--r-- | Doc/library/enum.rst | 6 | ||||
-rw-r--r-- | Doc/library/os.path.rst | 2 | ||||
-rw-r--r-- | Doc/library/os.rst | 4 | ||||
-rw-r--r-- | Lib/collections/__init__.py | 4 | ||||
-rw-r--r-- | Lib/logging/config.py | 107 | ||||
-rw-r--r-- | Lib/os.py | 4 | ||||
-rw-r--r-- | Modules/socketmodule.c | 6 |
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): """ @@ -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); |