changeset: 90215:5e303360db14 branch: 3.4 parent: 90211:094615256a54 user: Vinay Sajip date: Thu Apr 10 07:12:19 2014 +0100 files: Lib/logging/__init__.py Misc/NEWS description: Issue #21172: isinstance check relaxed from dict to collections.Mapping. diff -r 094615256a54 -r 5e303360db14 Lib/logging/__init__.py --- a/Lib/logging/__init__.py Thu Apr 10 00:23:18 2014 -0400 +++ b/Lib/logging/__init__.py Thu Apr 10 07:12:19 2014 +0100 @@ -23,7 +23,8 @@ To use, simply 'import logging' and log away! """ -import sys, os, time, io, traceback, warnings, weakref +import sys, os, time, io, traceback, warnings, weakref, collections + from string import Template __all__ = ['BASIC_FORMAT', 'BufferingFormatter', 'CRITICAL', 'DEBUG', 'ERROR', @@ -253,7 +254,13 @@ # 'Value is %d' instead of 'Value is 0'. # For the use case of passing a dictionary, this should not be a # problem. - if args and len(args) == 1 and isinstance(args[0], dict) and args[0]: + # Issue #21172: a request was made to relax the isinstance check + # to hasattr(args[0], '__getitem__'). However, the docs on string + # formatting still seem to suggest a mapping object is required. + # Thus, while not removing the isinstance check, it does now look + # for collections.Mapping rather than, as before, dict. + if (args and len(args) == 1 and isinstance(args[0], collections.Mapping) + and args[0]): args = args[0] self.args = args self.levelname = getLevelName(level) diff -r 094615256a54 -r 5e303360db14 Misc/NEWS --- a/Misc/NEWS Thu Apr 10 00:23:18 2014 -0400 +++ b/Misc/NEWS Thu Apr 10 07:12:19 2014 +0100 @@ -27,6 +27,8 @@ Library ------- +- Issue #21172: isinstance check relaxed from dict to collections.Mapping. + - Issue #21155: asyncio.EventLoop.create_unix_server() now raises a ValueError if path and sock are specified at the same time.