From: R David Murray Date: Sun, 19 Aug 2012 21:45:40 +0000 (-0400) Subject: Merge #13579: teach string.Formatter about 'a'. X-Git-Tag: v3.3.0rc1~71 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=749bd42072c3ecf04be3e38ca479e48692bbfd7e;p=python Merge #13579: teach string.Formatter about 'a'. Patch by Francisco Martín Brugué. --- 749bd42072c3ecf04be3e38ca479e48692bbfd7e diff --cc Lib/test/test_string.py index 161573200b,34d1dcf3fe..c2bdfdb0b0 --- a/Lib/test/test_string.py +++ b/Lib/test/test_string.py @@@ -37,27 -31,22 +37,33 @@@ class ModuleTest(unittest.TestCase) self.assertEqual(fmt.format("-{arg!r}-", arg='test'), "-'test'-") self.assertEqual(fmt.format("{0!s}", 'test'), 'test') self.assertRaises(ValueError, fmt.format, "{0!h}", 'test') + # issue13579 + self.assertEqual(fmt.format("{0!a}", 42), '42') + self.assertEqual(fmt.format("{0!a}", string.ascii_letters), + "'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'") + self.assertEqual(fmt.format("{0!a}", chr(255)), "'\\xff'") + self.assertEqual(fmt.format("{0!a}", chr(256)), "'\\u0100'") - def test_formatter(self): + def test_name_lookup(self): fmt = string.Formatter() - self.assertEqual(fmt.format("foo"), "foo") - - self.assertEqual(fmt.format("foo{0}", "bar"), "foobar") - self.assertEqual(fmt.format("foo{1}{0}-{1}", "bar", 6), "foo6bar-6") - self.assertEqual(fmt.format("-{arg!r}-", arg='test'), "-'test'-") + class AnyAttr: + def __getattr__(self, attr): + return attr + x = AnyAttr() + self.assertEqual(fmt.format("{0.lumber}{0.jack}", x), 'lumberjack') + with self.assertRaises(AttributeError): + fmt.format("{0.lumber}{0.jack}", '') + + def test_index_lookup(self): + fmt = string.Formatter() + lookup = ["eggs", "and", "spam"] + self.assertEqual(fmt.format("{0[2]}{0[0]}", lookup), 'spameggs') + with self.assertRaises(IndexError): + fmt.format("{0[2]}{0[0]}", []) + with self.assertRaises(KeyError): + fmt.format("{0[2]}{0[0]}", {}) - # override get_value ############################################ + def test_override_get_value(self): class NamespaceFormatter(string.Formatter): def __init__(self, namespace={}): string.Formatter.__init__(self) diff --cc Misc/NEWS index 9f16caf4f3,857a161536..bb893cffde --- a/Misc/NEWS +++ b/Misc/NEWS @@@ -13,129 -13,93 +13,131 @@@ Core and Builtin - Issue #15604: Update uses of PyObject_IsTrue() to check for and handle errors correctly. Patch by Serhiy Storchaka. -- Issue #13119: sys.stdout and sys.stderr are now using "\r\n" newline on - Windows, as Python 2. +Library +------- -- Issue #14579: Fix CVE-2012-2135: vulnerability in the utf-16 decoder after - error handling. Patch by Serhiy Storchaka. ++- Issue #13579: string.Formatter now understands the 'a' conversion specifier. + -- Issue #15404: Refleak in PyMethodObject repr. +- Issue #15595: Fix subprocess.Popen(universal_newlines=True) + for certain locales (utf-16 and utf-32 family). Patch by Chris Jerdonek. -- Issue #15394: An issue in PyModule_Create that caused references to - be leaked on some error paths has been fixed. Patch by Julia Lawall. +- Issue #15477: In cmath and math modules, add workaround for platforms whose + system-supplied log1p function doesn't respect signs of zeros. -- Issue #15368: An issue that caused bytecode generation to be - non-deterministic when using randomized hashing (-R) has been fixed. +- Issue #15715: importlib.__import__() will silence an ImportError when the use + of fromlist leads to a failed import. -- Issue #15020: The program name used to search for Python's path is now - "python3" under Unix, not "python". +- Issue #14669: Fix pickling of connections and sockets on MacOSX + by sending/receiving an acknowledgment after file descriptor transfer. + TestPicklingConnection has been reenabled for MacOSX. -- Issue #15033: Fix the exit status bug when modules invoked using -m swith, - return the proper failure return value (1). Patch contributed by Jeff Knupp. +- Issue #11062: Fix adding a message from file to Babyl mailbox. -- Issue #12268: File readline, readlines and read() or readall() methods - no longer lose data when an underlying read system call is interrupted. - IOError is no longer raised due to a read system call returning EINTR - from within these methods. +- Issue #15646: Prevent equivalent of a fork bomb when using + multiprocessing on Windows without the "if __name__ == '__main__'" + idiom. -- Issue #15142: Fix reference leak when deallocating instances of types - created using PyType_FromSpec(). +- Issue #15678: Fix IDLE menus when started from OS X command line + (3.3.0b2 regression). -- Issue #10053: Don't close FDs when FileIO.__init__ fails. Loosely based on - the work by Hirokazu Yamamoto. +C API +----- -- Issue #14775: Fix a potential quadratic dict build-up due to the garbage - collector repeatedly trying to untrack dicts. +Extension Modules +----------------- -- Issue #14494: Fix __future__.py and its documentation to note that - absolute imports are the default behavior in 3.0 instead of 2.7. - Patch by Sven Marnach. +Tools/Demos +----------- -- Issue #14761: Fix potential leak on an error case in the import machinery. +Documentation +------------- -- Issue #14699: Fix calling the classmethod descriptor directly. +- Issue #15640: Document importlib.abc.Finder as deprecated. -- Issue #14433: Prevent msvcrt crash in interactive prompt when stdin - is closed. +- Issue #15630: Add an example for "continue" stmt in the tutorial. Patch by + Daniel Ellis. -- Issue #11603 (again): Setting __repr__ to __str__ now raises a RuntimeError - when repr() or str() is called on such an object. +Tests +----- -- Issue #14658: Fix binding a special method to a builtin implementation of a - special method with a different name. +- Issue #15615: Add some tests for the json module's handling of invalid + input data. Patch by Kushal Das. -- Issue #14630: Fix a memory access bug for instances of a subclass of int - with value 0. -- Issue #14612: Fix jumping around with blocks by setting f_lineno. +What's New in Python 3.3.0 Beta 2? +================================== -- Issue #14607: Fix keyword-only arguments which started with ``__``. +*Release date: 12-Aug-2012* -- Issue #13889: Check and (if necessary) set FPU control word before calling - any of the dtoa.c string <-> float conversion functions, on MSVC builds of - Python. This fixes issues when embedding Python in a Delphi app. +Core and Builtins +----------------- -- Issue #14474: Save and restore exception state in thread.start_new_thread() - while writing error message if the thread leaves a unhandled exception. +- Issue #15568: Fix the return value of "yield from" when StopIteration is + raised by a custom iterator. -- Issue #13019: Fix potential reference leaks in bytearray.extend(). Patch - by Suman Saha. +- Issue #13119: sys.stdout and sys.stderr are now using "\r\n" newline on + Windows, as Python 2. -- Issue #14378: Fix compiling ast.ImportFrom nodes with a "__future__" string as - the module name that was not interned. +- Issue #15534: Fix the fast-search function for non-ASCII Unicode strings. -- Issue #14331: Use significantly less stack space when importing modules by - allocating path buffers on the heap instead of the stack. +- Issue #15508: Fix the docstring for __import__ to have the proper default + value of 0 for 'level' and to not mention negative levels since they are not + supported. -- Issue #14334: Prevent in a segfault in type.__getattribute__ when it was not - passed strings. +- Issue #15425: Eliminated traceback noise from more situations involving + importlib. -- Issue #1469629: Allow cycles through an object's __dict__ slot to be - collected. (For example if ``x.__dict__ is x``). +- Issue #14578: Support modules registered in the Windows registry again. -- Issue #14172: Fix reference leak when marshalling a buffer-like object - (other than a bytes object). +- Issue #15466: Stop using TYPE_INT64 in marshal, to make importlib.h (and other + byte code files) equal between 32-bit and 64-bit systems. -- Issue #13521: dict.setdefault() now does only one lookup for the given key, - making it "atomic" for many purposes. Patch by Filip Gruszczyński. +- Issue #1692335: Move initial exception args assignment to + "BaseException.__new__" to help pickling of naive subclasses. -- Issue #14471: Fix a possible buffer overrun in the winreg module. +- Issue #12834: Fix PyBuffer_ToContiguous() for non-contiguous arrays. + +- Issue #15456: Fix code __sizeof__ after #12399 change. Patch by Serhiy + Storchaka. + +- Issue #15404: Refleak in PyMethodObject repr. + +- Issue #15394: An issue in PyModule_Create that caused references to be leaked + on some error paths has been fixed. Patch by Julia Lawall. + +- Issue #15368: An issue that caused bytecode generation to be non-deterministic + has been fixed. + +- Issue #15202: Consistently use the name "follow_symlinks" for new parameters + in os and shutil functions. + +- Issue #15314: __main__.__loader__ is now set correctly during interpreter + startup. + +- Issue #15111: When a module imported using 'from import' has an ImportError + inside itself, don't mask that fact behind a generic ImportError for the + module itself. + +- Issue #15293: Add GC support to the AST base node type. + +- Issue #15291: Fix a memory leak where AST nodes where not properly + deallocated. + +- Issue #15110: Fix the tracebacks generated by "import xxx" to not show the + importlib stack frames. + +- Issue #15020: The program name used to search for Python's path is now + "python3" under Unix, not "python". + +- Issue #15033: Fix the exit status bug when modules invoked using -m swith, + return the proper failure return value (1). Patch contributed by Jeff Knupp. + +- Issue #15229: An OSError subclass whose __init__ doesn't call back + OSError.__init__ could produce incomplete instances, leading to crashes when + calling str() on them. + +- Issue 15307: Virtual environments now use symlinks with framework builds on + Mac OS X, like other POSIX builds. Library -------