blob: 2d740006a3706a249eb768eacb0d6f6c0156c827 [file] [log] [blame]
Raymond Hettingerd73be672010-12-18 10:48:26 +00001****************************
Raymond Hettingerf558ddd2009-06-28 21:37:08 +00002 What's New In Python 3.2
Raymond Hettinger6e6565b2009-06-28 20:56:11 +00003****************************
4
5:Author: Raymond Hettinger
Raymond Hettinger6e6565b2009-06-28 20:56:11 +00006
7.. $Id$
8 Rules for maintenance:
9
10 * Anyone can add text to this document. Do not spend very much time
11 on the wording of your changes, because your text will probably
Raymond Hettinger92acd672011-01-31 06:34:47 +000012 get rewritten. (Note, during release candidate phase or just before
13 a beta release, please use the tracker instead -- this helps avoid
14 merge conflicts. If you must add a suggested entry directly,
15 please put it in an XXX comment and the maintainer will take notice).
Raymond Hettinger6e6565b2009-06-28 20:56:11 +000016
17 * The maintainer will go through Misc/NEWS periodically and add
18 changes; it's therefore more important to add your changes to
19 Misc/NEWS than to this file.
20
21 * This is not a complete list of every single change; completeness
22 is the purpose of Misc/NEWS. Some changes I consider too small
23 or esoteric to include. If such a change is added to the text,
24 I'll just remove it. (This is another reason you shouldn't spend
25 too much time on writing your addition.)
26
27 * If you want to draw your new text to the attention of the
28 maintainer, add 'XXX' to the beginning of the paragraph or
29 section.
30
31 * It's OK to just add a fragmentary note about a change. For
32 example: "XXX Describe the transmogrify() function added to the
33 socket module." The maintainer will research the change and
34 write the necessary text.
35
36 * You can comment out your additions if you like, but it's not
37 necessary (especially when a final release is some months away).
38
39 * Credit the author of a patch or bugfix. Just the name is
Georg Brandlda0a2112010-09-05 11:28:33 +000040 sufficient; the e-mail address isn't necessary. It's helpful to
41 add the issue number:
Raymond Hettinger6e6565b2009-06-28 20:56:11 +000042
Éric Araujo4234ad42010-09-05 17:32:25 +000043 XXX Describe the transmogrify() function added to the socket
44 module.
45
46 (Contributed by P.Y. Developer; :issue:`12345`.)
Raymond Hettinger6e6565b2009-06-28 20:56:11 +000047
48 This saves the maintainer the effort of going through the SVN log
49 when researching a change.
50
Raymond Hettingerffad35e2010-12-14 21:12:03 +000051This article explains the new features in Python 3.2 as compared to 3.1. It
52focuses on a few highlights and gives a few examples. For full details, see the
Georg Brandle73778c2014-10-29 08:36:35 +010053`Misc/NEWS <https://hg.python.org/cpython/file/3.2/Misc/NEWS>`_ file.
Raymond Hettinger2c1ecc32010-12-07 09:55:02 +000054
Raymond Hettinger6778fa92010-12-21 20:09:55 +000055.. seealso::
56
57 :pep:`392` - Python 3.2 Release Schedule
Raymond Hettinger6e6565b2009-06-28 20:56:11 +000058
Raymond Hettingerca904be2011-01-18 00:02:40 +000059
Martin v. Löwis932e49e2010-12-04 13:49:32 +000060PEP 384: Defining a Stable ABI
Martin v. Löwis4d0d4712010-12-03 20:14:31 +000061==============================
62
63In the past, extension modules built for one Python version were often
64not usable with other Python versions. Particularly on Windows, every
65feature release of Python required rebuilding all extension modules that
66one wanted to use. This requirement was the result of the free access to
67Python interpreter internals that extension modules could use.
68
69With Python 3.2, an alternative approach becomes available: extension
Raymond Hettinger6f04adc2010-12-04 22:56:25 +000070modules which restrict themselves to a limited API (by defining
Martin v. Löwis4d0d4712010-12-03 20:14:31 +000071Py_LIMITED_API) cannot use many of the internals, but are constrained
72to a set of API functions that are promised to be stable for several
73releases. As a consequence, extension modules built for 3.2 in that
74mode will also work with 3.3, 3.4, and so on. Extension modules that
75make use of details of memory structures can still be built, but will
76need to be recompiled for every feature release.
77
Raymond Hettinger6f04adc2010-12-04 22:56:25 +000078.. seealso::
79
Georg Brandl65b2eb92010-12-05 11:42:38 +000080 :pep:`384` - Defining a Stable ABI
Raymond Hettinger2c1ecc32010-12-07 09:55:02 +000081 PEP written by Martin von Löwis.
Raymond Hettinger6f04adc2010-12-04 22:56:25 +000082
Raymond Hettingerca904be2011-01-18 00:02:40 +000083
Raymond Hettingera5a35542010-12-05 00:39:18 +000084PEP 389: Argparse Command Line Parsing Module
85=============================================
86
87A new module for command line parsing, :mod:`argparse`, was introduced to
88overcome the limitations of :mod:`optparse` which did not provide support for
Raymond Hettinger677e10a2010-12-07 06:45:30 +000089positional arguments (not just options), subcommands, required options and other
Raymond Hettinger413abbc2010-12-05 07:06:47 +000090common patterns of specifying and validating options.
Raymond Hettingera5a35542010-12-05 00:39:18 +000091
Raymond Hettinger9c2fc472011-01-31 06:14:48 +000092This module has already had widespread success in the community as a
Raymond Hettingerb1ff4022010-12-08 11:19:45 +000093third-party module. Being more fully featured than its predecessor, the
94:mod:`argparse` module is now the preferred module for command-line processing.
95The older module is still being kept available because of the substantial amount
96of legacy code that depends on it.
Raymond Hettingera5a35542010-12-05 00:39:18 +000097
Raymond Hettinger677e10a2010-12-07 06:45:30 +000098Here's an annotated example parser showing features like limiting results to a
99set of choices, specifying a *metavar* in the help screen, validating that one
Raymond Hettinger68f1e8d2010-12-07 09:24:30 +0000100or more positional arguments is present, and making a required option::
Raymond Hettinger677e10a2010-12-07 06:45:30 +0000101
102 import argparse
103 parser = argparse.ArgumentParser(
Raymond Hettinger9c2fc472011-01-31 06:14:48 +0000104 description = 'Manage servers', # main description for help
105 epilog = 'Tested on Solaris and Linux') # displayed after help
Raymond Hettinger677e10a2010-12-07 06:45:30 +0000106 parser.add_argument('action', # argument name
Raymond Hettinger9c2fc472011-01-31 06:14:48 +0000107 choices = ['deploy', 'start', 'stop'], # three allowed values
108 help = 'action on each target') # help msg
Raymond Hettinger677e10a2010-12-07 06:45:30 +0000109 parser.add_argument('targets',
Raymond Hettinger9c2fc472011-01-31 06:14:48 +0000110 metavar = 'HOSTNAME', # var name used in help msg
111 nargs = '+', # require one or more targets
112 help = 'url for target machines') # help msg explanation
Raymond Hettinger677e10a2010-12-07 06:45:30 +0000113 parser.add_argument('-u', '--user', # -u or --user option
Raymond Hettinger9c2fc472011-01-31 06:14:48 +0000114 required = True, # make it a required argument
115 help = 'login as user')
Raymond Hettinger677e10a2010-12-07 06:45:30 +0000116
117Example of calling the parser on a command string::
118
Serhiy Storchakadba90392016-05-10 12:01:23 +0300119 >>> cmd = 'deploy sneezy.example.com sleepy.example.com -u skycaptain'
Raymond Hettinger677e10a2010-12-07 06:45:30 +0000120 >>> result = parser.parse_args(cmd.split())
Raymond Hettinger677e10a2010-12-07 06:45:30 +0000121 >>> result.action
122 'deploy'
123 >>> result.targets
124 ['sneezy.example.com', 'sleepy.example.com']
125 >>> result.user
126 'skycaptain'
127
128Example of the parser's automatically generated help::
129
130 >>> parser.parse_args('-h'.split())
131
Raymond Hettinger3fcf0022010-12-08 01:13:53 +0000132 usage: manage_cloud.py [-h] -u USER
133 {deploy,start,stop} HOSTNAME [HOSTNAME ...]
Raymond Hettinger677e10a2010-12-07 06:45:30 +0000134
135 Manage servers
136
137 positional arguments:
138 {deploy,start,stop} action on each target
139 HOSTNAME url for target machines
140
141 optional arguments:
142 -h, --help show this help message and exit
143 -u USER, --user USER login as user
144
145 Tested on Solaris and Linux
146
Raymond Hettingerb1ff4022010-12-08 11:19:45 +0000147An especially nice :mod:`argparse` feature is the ability to define subparsers,
148each with their own argument patterns and help displays::
149
150 import argparse
151 parser = argparse.ArgumentParser(prog='HELM')
152 subparsers = parser.add_subparsers()
153
154 parser_l = subparsers.add_parser('launch', help='Launch Control') # first subgroup
Raymond Hettingerbb9686f2010-12-16 00:53:05 +0000155 parser_l.add_argument('-m', '--missiles', action='store_true')
Raymond Hettingerb1ff4022010-12-08 11:19:45 +0000156 parser_l.add_argument('-t', '--torpedos', action='store_true')
157
Raymond Hettinger3094ed82010-12-18 09:41:32 +0000158 parser_m = subparsers.add_parser('move', help='Move Vessel', # second subgroup
159 aliases=('steer', 'turn')) # equivalent names
Raymond Hettingerb1ff4022010-12-08 11:19:45 +0000160 parser_m.add_argument('-c', '--course', type=int, required=True)
161 parser_m.add_argument('-s', '--speed', type=int, default=0)
162
Martin Panter1050d2d2016-07-26 11:18:21 +0200163.. code-block:: shell-session
164
Raymond Hettingerb1ff4022010-12-08 11:19:45 +0000165 $ ./helm.py --help # top level help (launch and move)
166 $ ./helm.py launch --help # help for launch options
167 $ ./helm.py launch --missiles # set missiles=True and torpedos=False
Raymond Hettinger3094ed82010-12-18 09:41:32 +0000168 $ ./helm.py steer --course 180 --speed 5 # set movement parameters
Raymond Hettingera5a35542010-12-05 00:39:18 +0000169
170.. seealso::
171
172 :pep:`389` - New Command Line Parsing Module
173 PEP written by Steven Bethard.
174
Raymond Hettingerbe9994e2011-01-19 08:44:33 +0000175 :ref:`upgrading-optparse-code` for details on the differences from :mod:`optparse`.
Raymond Hettinger677e10a2010-12-07 06:45:30 +0000176
Raymond Hettinger6e6565b2009-06-28 20:56:11 +0000177
Éric Araujo4234ad42010-09-05 17:32:25 +0000178PEP 391: Dictionary Based Configuration for Logging
179====================================================
Raymond Hettingeref2335c2010-09-05 08:35:38 +0000180
Raymond Hettinger92ba2862010-09-06 01:16:46 +0000181The :mod:`logging` module provided two kinds of configuration, one style with
182function calls for each option or another style driven by an external file saved
183in a :mod:`ConfigParser` format. Those options did not provide the flexibility
Georg Brandl9e75cad2010-09-06 06:45:47 +0000184to create configurations from JSON or YAML files, nor did they support
Raymond Hettinger92ba2862010-09-06 01:16:46 +0000185incremental configuration, which is needed for specifying logger options from a
186command line.
Raymond Hettingeref2335c2010-09-05 08:35:38 +0000187
188To support a more flexible style, the module now offers
Raymond Hettinger92ba2862010-09-06 01:16:46 +0000189:func:`logging.config.dictConfig` for specifying logging configuration with
190plain Python dictionaries. The configuration options include formatters,
191handlers, filters, and loggers. Here's a working example of a configuration
192dictionary::
Raymond Hettingeref2335c2010-09-05 08:35:38 +0000193
Georg Brandlda0a2112010-09-05 11:28:33 +0000194 {"version": 1,
195 "formatters": {"brief": {"format": "%(levelname)-8s: %(name)-15s: %(message)s"},
Raymond Hettinger03a6e662011-02-17 19:19:44 +0000196 "full": {"format": "%(asctime)s %(name)-15s %(levelname)-8s %(message)s"}
Georg Brandlda0a2112010-09-05 11:28:33 +0000197 },
198 "handlers": {"console": {
199 "class": "logging.StreamHandler",
200 "formatter": "brief",
201 "level": "INFO",
202 "stream": "ext://sys.stdout"},
203 "console_priority": {
204 "class": "logging.StreamHandler",
205 "formatter": "full",
206 "level": "ERROR",
Raymond Hettinger03a6e662011-02-17 19:19:44 +0000207 "stream": "ext://sys.stderr"}
Georg Brandlda0a2112010-09-05 11:28:33 +0000208 },
209 "root": {"level": "DEBUG", "handlers": ["console", "console_priority"]}}
Raymond Hettingeref2335c2010-09-05 08:35:38 +0000210
Raymond Hettinger92ba2862010-09-06 01:16:46 +0000211
Raymond Hettingerde2e6182011-01-10 05:40:57 +0000212If that dictionary is stored in a file called :file:`conf.json`, it can be
213loaded and called with code like this::
Raymond Hettinger92ba2862010-09-06 01:16:46 +0000214
Raymond Hettingerca904be2011-01-18 00:02:40 +0000215 >>> import json, logging.config
Raymond Hettinger03a6e662011-02-17 19:19:44 +0000216 >>> with open('conf.json') as f:
Serhiy Storchakadba90392016-05-10 12:01:23 +0300217 ... conf = json.load(f)
218 ...
Raymond Hettingerca904be2011-01-18 00:02:40 +0000219 >>> logging.config.dictConfig(conf)
220 >>> logging.info("Transaction completed normally")
Raymond Hettinger03a6e662011-02-17 19:19:44 +0000221 INFO : root : Transaction completed normally
Raymond Hettingerca904be2011-01-18 00:02:40 +0000222 >>> logging.critical("Abnormal termination")
Raymond Hettinger03a6e662011-02-17 19:19:44 +0000223 2011-02-17 11:14:36,694 root CRITICAL Abnormal termination
Raymond Hettinger92ba2862010-09-06 01:16:46 +0000224
Raymond Hettingeref2335c2010-09-05 08:35:38 +0000225.. seealso::
226
227 :pep:`391` - Dictionary Based Configuration for Logging
228 PEP written by Vinay Sajip.
229
Raymond Hettingerca904be2011-01-18 00:02:40 +0000230
Georg Brandl97b20da2010-11-16 15:15:29 +0000231PEP 3148: The ``concurrent.futures`` module
232============================================
233
Raymond Hettingerc8a16862011-01-18 09:01:34 +0000234Code for creating and managing concurrency is being collected in a new top-level
Raymond Hettinger6f04adc2010-12-04 22:56:25 +0000235namespace, *concurrent*. Its first member is a *futures* package which provides
Raymond Hettingerc8a16862011-01-18 09:01:34 +0000236a uniform high-level interface for managing threads and processes.
Raymond Hettinger6f04adc2010-12-04 22:56:25 +0000237
Éric Araujo04e69092011-11-14 18:00:48 +0100238The design for :mod:`concurrent.futures` was inspired by the
239*java.util.concurrent* package. In that model, a running call and its result
Raymond Hettingerc136b042011-01-18 07:15:39 +0000240are represented by a :class:`~concurrent.futures.Future` object that abstracts
Raymond Hettinger6f04adc2010-12-04 22:56:25 +0000241features common to threads, processes, and remote procedure calls. That object
242supports status checks (running or done), timeouts, cancellations, adding
Raymond Hettinger24a09412010-12-08 06:50:02 +0000243callbacks, and access to results or exceptions.
Raymond Hettinger6f04adc2010-12-04 22:56:25 +0000244
245The primary offering of the new module is a pair of executor classes for
246launching and managing calls. The goal of the executors is to make it easier to
247use existing tools for making parallel calls. They save the effort needed to
248setup a pool of resources, launch the calls, create a results queue, add
249time-out handling, and limit the total number of threads, processes, or remote
Raymond Hettingerc269ae82010-12-05 01:01:52 +0000250procedure calls.
Raymond Hettinger6f04adc2010-12-04 22:56:25 +0000251
252Ideally, each application should share a single executor across multiple
253components so that process and thread limits can be centrally managed. This
254solves the design challenge that arises when each component has its own
255competing strategy for resource management.
256
Raymond Hettingerb1055192010-12-08 06:42:41 +0000257Both classes share a common interface with three methods:
258:meth:`~concurrent.futures.Executor.submit` for scheduling a callable and
259returning a :class:`~concurrent.futures.Future` object;
260:meth:`~concurrent.futures.Executor.map` for scheduling many asynchronous calls
Raymond Hettinger83d80792010-12-08 06:48:33 +0000261at a time, and :meth:`~concurrent.futures.Executor.shutdown` for freeing
Raymond Hettingerc8a16862011-01-18 09:01:34 +0000262resources. The class is a :term:`context manager` and can be used in a
Raymond Hettinger83d80792010-12-08 06:48:33 +0000263:keyword:`with` statement to assure that resources are automatically released
264when currently pending futures are done executing.
Raymond Hettinger6f04adc2010-12-04 22:56:25 +0000265
Raymond Hettingerb1055192010-12-08 06:42:41 +0000266A simple of example of :class:`~concurrent.futures.ThreadPoolExecutor` is a
Raymond Hettinger83d80792010-12-08 06:48:33 +0000267launch of four parallel threads for copying files::
Raymond Hettingerb1055192010-12-08 06:42:41 +0000268
Raymond Hettinger4a8f50a2011-02-17 19:05:53 +0000269 import concurrent.futures, shutil
270 with concurrent.futures.ThreadPoolExecutor(max_workers=4) as e:
Raymond Hettingerb1055192010-12-08 06:42:41 +0000271 e.submit(shutil.copy, 'src1.txt', 'dest1.txt')
272 e.submit(shutil.copy, 'src2.txt', 'dest2.txt')
273 e.submit(shutil.copy, 'src3.txt', 'dest3.txt')
274 e.submit(shutil.copy, 'src3.txt', 'dest4.txt')
275
Raymond Hettinger6f04adc2010-12-04 22:56:25 +0000276.. seealso::
277
Raymond Hettingera5a35542010-12-05 00:39:18 +0000278 :pep:`3148` - Futures -- Execute Computations Asynchronously
Andrew M. Kuchling42877fe2010-12-15 02:37:01 +0000279 PEP written by Brian Quinlan.
Georg Brandl97b20da2010-11-16 15:15:29 +0000280
Raymond Hettinger83d80792010-12-08 06:48:33 +0000281 :ref:`Code for Threaded Parallel URL reads<threadpoolexecutor-example>`, an
282 example using threads to fetch multiple web pages in parallel.
283
284 :ref:`Code for computing prime numbers in
285 parallel<processpoolexecutor-example>`, an example demonstrating
286 :class:`~concurrent.futures.ProcessPoolExecutor`.
287
288
Raymond Hettingerf95b1992010-09-04 23:53:24 +0000289PEP 3147: PYC Repository Directories
290=====================================
291
David Malcolm778645a2010-12-07 00:32:04 +0000292Python's scheme for caching bytecode in *.pyc* files did not work well in
Raymond Hettingerde2e6182011-01-10 05:40:57 +0000293environments with multiple Python interpreters. If one interpreter encountered
Raymond Hettingerf95b1992010-09-04 23:53:24 +0000294a cached file created by another interpreter, it would recompile the source and
295overwrite the cached file, thus losing the benefits of caching.
296
297The issue of "pyc fights" has become more pronounced as it has become
Éric Araujo4234ad42010-09-05 17:32:25 +0000298commonplace for Linux distributions to ship with multiple versions of Python.
Raymond Hettingerf95b1992010-09-04 23:53:24 +0000299These conflicts also arise with CPython alternatives such as Unladen Swallow.
300
301To solve this problem, Python's import machinery has been extended to use
Éric Araujo4234ad42010-09-05 17:32:25 +0000302distinct filenames for each interpreter. Instead of Python 3.2 and Python 3.3 and
303Unladen Swallow each competing for a file called "mymodule.pyc", they will now
Raymond Hettingerf95b1992010-09-04 23:53:24 +0000304look for "mymodule.cpython-32.pyc", "mymodule.cpython-33.pyc", and
Éric Araujo4234ad42010-09-05 17:32:25 +0000305"mymodule.unladen10.pyc". And to prevent all of these new files from
Raymond Hettingerf95b1992010-09-04 23:53:24 +0000306cluttering source directories, the *pyc* files are now collected in a
307"__pycache__" directory stored under the package directory.
308
309Aside from the filenames and target directories, the new scheme has a few
310aspects that are visible to the programmer:
311
Georg Brandlda0a2112010-09-05 11:28:33 +0000312* Imported modules now have a :attr:`__cached__` attribute which stores the name
313 of the actual file that was imported:
Raymond Hettingerf95b1992010-09-04 23:53:24 +0000314
Raymond Hettinger92ba2862010-09-06 01:16:46 +0000315 >>> import collections
Zachary Ware40326202016-08-10 00:30:41 -0500316 >>> collections.__cached__ # doctest: +SKIP
Raymond Hettinger92ba2862010-09-06 01:16:46 +0000317 'c:/py32/lib/__pycache__/collections.cpython-32.pyc'
Raymond Hettingerf95b1992010-09-04 23:53:24 +0000318
319* The tag that is unique to each interpreter is accessible from the :mod:`imp`
Georg Brandlda0a2112010-09-05 11:28:33 +0000320 module:
Raymond Hettingerf95b1992010-09-04 23:53:24 +0000321
Raymond Hettinger92ba2862010-09-06 01:16:46 +0000322 >>> import imp
Zachary Ware40326202016-08-10 00:30:41 -0500323 >>> imp.get_tag() # doctest: +SKIP
Raymond Hettinger92ba2862010-09-06 01:16:46 +0000324 'cpython-32'
Raymond Hettingerf95b1992010-09-04 23:53:24 +0000325
326* Scripts that try to deduce source filename from the imported file now need to
327 be smarter. It is no longer sufficient to simply strip the "c" from a ".pyc"
328 filename. Instead, use the new functions in the :mod:`imp` module:
329
Georg Brandlda0a2112010-09-05 11:28:33 +0000330 >>> imp.source_from_cache('c:/py32/lib/__pycache__/collections.cpython-32.pyc')
331 'c:/py32/lib/collections.py'
Zachary Ware40326202016-08-10 00:30:41 -0500332 >>> imp.cache_from_source('c:/py32/lib/collections.py') # doctest: +SKIP
Georg Brandlda0a2112010-09-05 11:28:33 +0000333 'c:/py32/lib/__pycache__/collections.cpython-32.pyc'
Raymond Hettingerf95b1992010-09-04 23:53:24 +0000334
335* The :mod:`py_compile` and :mod:`compileall` modules have been updated to
Raymond Hettinger50307b62011-01-24 01:18:30 +0000336 reflect the new naming convention and target directory. The command-line
Éric Araujo85dacf72011-02-19 18:06:50 +0000337 invocation of *compileall* has new options: ``-i`` for
Raymond Hettinger9c2fc472011-01-31 06:14:48 +0000338 specifying a list of files and directories to compile and ``-b`` which causes
Raymond Hettinger50307b62011-01-24 01:18:30 +0000339 bytecode files to be written to their legacy location rather than
340 *__pycache__*.
Raymond Hettingerf95b1992010-09-04 23:53:24 +0000341
Raymond Hettinger1dcc84e2011-01-17 21:55:40 +0000342* The :mod:`importlib.abc` module has been updated with new :term:`abstract base
Eli Benderskyd7cde5d2011-01-31 04:05:52 +0000343 classes <abstract base class>` for loading bytecode files. The obsolete
Raymond Hettinger66352d22011-01-17 22:33:11 +0000344 ABCs, :class:`~importlib.abc.PyLoader` and
Raymond Hettinger1dcc84e2011-01-17 21:55:40 +0000345 :class:`~importlib.abc.PyPycLoader`, have been deprecated (instructions on how
Raymond Hettinger66352d22011-01-17 22:33:11 +0000346 to stay Python 3.1 compatible are included with the documentation).
Brett Cannon83a682d2011-01-16 21:02:09 +0000347
Raymond Hettingerf95b1992010-09-04 23:53:24 +0000348.. seealso::
349
350 :pep:`3147` - PYC Repository Directories
351 PEP written by Barry Warsaw.
352
Georg Brandlda0a2112010-09-05 11:28:33 +0000353
Georg Brandl3ad46752010-12-05 07:59:29 +0000354PEP 3149: ABI Version Tagged .so Files
355======================================
Georg Brandlf11c6c42010-09-03 22:20:58 +0000356
Raymond Hettingerebea6fa2010-09-05 00:27:25 +0000357The PYC repository directory allows multiple bytecode cache files to be
358co-located. This PEP implements a similar mechanism for shared object files by
359giving them a common directory and distinct names for each version.
Georg Brandlf11c6c42010-09-03 22:20:58 +0000360
Raymond Hettingerebea6fa2010-09-05 00:27:25 +0000361The common directory is "pyshared" and the file names are made distinct by
362identifying the Python implementation (such as CPython, PyPy, Jython, etc.), the
363major and minor version numbers, and optional build flags (such as "d" for
Éric Araujo4234ad42010-09-05 17:32:25 +0000364debug, "m" for pymalloc, "u" for wide-unicode). For an arbitrary package "foo",
Raymond Hettingerebea6fa2010-09-05 00:27:25 +0000365you may see these files when the distribution package is installed::
366
367 /usr/share/pyshared/foo.cpython-32m.so
368 /usr/share/pyshared/foo.cpython-33md.so
369
370In Python itself, the tags are accessible from functions in the :mod:`sysconfig`
371module::
372
373 >>> import sysconfig
doko@ubuntu.comd5537d02013-03-21 13:21:49 -0700374 >>> sysconfig.get_config_var('SOABI') # find the version tag
Raymond Hettingerebea6fa2010-09-05 00:27:25 +0000375 'cpython-32mu'
doko@ubuntu.comd5537d02013-03-21 13:21:49 -0700376 >>> sysconfig.get_config_var('EXT_SUFFIX') # find the full filename extension
Éric Araujoe0e824d2011-02-19 18:46:02 +0000377 '.cpython-32mu.so'
Raymond Hettingerebea6fa2010-09-05 00:27:25 +0000378
379.. seealso::
380
381 :pep:`3149` - ABI Version Tagged .so Files
382 PEP written by Barry Warsaw.
Raymond Hettinger6e6565b2009-06-28 20:56:11 +0000383
Raymond Hettingerca904be2011-01-18 00:02:40 +0000384
Raymond Hettinger3df46212011-01-06 02:01:26 +0000385PEP 3333: Python Web Server Gateway Interface v1.0.1
386=====================================================
387
388This informational PEP clarifies how bytes/text issues are to be handled by the
Raymond Hettingera63d45c2011-06-16 22:32:10 +0100389WSGI protocol. The challenge is that string handling in Python 3 is most
Raymond Hettingerde2e6182011-01-10 05:40:57 +0000390conveniently handled with the :class:`str` type even though the HTTP protocol
Raymond Hettinger3df46212011-01-06 02:01:26 +0000391is itself bytes oriented.
392
393The PEP differentiates so-called *native strings* that are used for
394request/response headers and metadata versus *byte strings* which are used for
395the bodies of requests and responses.
396
397The *native strings* are always of type :class:`str` but are restricted to code
Georg Brandl52a43b52011-01-16 09:11:45 +0000398points between *U+0000* through *U+00FF* which are translatable to bytes using
Raymond Hettinger32e8fea2011-01-07 21:04:30 +0000399*Latin-1* encoding. These strings are used for the keys and values in the
Raymond Hettinger9c2fc472011-01-31 06:14:48 +0000400environment dictionary and for response headers and statuses in the
Raymond Hettinger32e8fea2011-01-07 21:04:30 +0000401:func:`start_response` function. They must follow :rfc:`2616` with respect to
Raymond Hettinger3df46212011-01-06 02:01:26 +0000402encoding. That is, they must either be *ISO-8859-1* characters or use
403:rfc:`2047` MIME encoding.
404
Raymond Hettinger32e8fea2011-01-07 21:04:30 +0000405For developers porting WSGI applications from Python 2, here are the salient
406points:
407
408* If the app already used strings for headers in Python 2, no change is needed.
409
410* If instead, the app encoded output headers or decoded input headers, then the
411 headers will need to be re-encoded to Latin-1. For example, an output header
412 encoded in utf-8 was using ``h.encode('utf-8')`` now needs to convert from
413 bytes to native strings using ``h.encode('utf-8').decode('latin-1')``.
414
415* Values yielded by an application or sent using the :meth:`write` method
Raymond Hettinger51e21072011-01-10 23:38:15 +0000416 must be byte strings. The :func:`start_response` function and environ
417 must use native strings. The two cannot be mixed.
Raymond Hettinger32e8fea2011-01-07 21:04:30 +0000418
419For server implementers writing CGI-to-WSGI pathways or other CGI-style
420protocols, the users must to be able access the environment using native strings
Raymond Hettingerc136b042011-01-18 07:15:39 +0000421even though the underlying platform may have a different convention. To bridge
Raymond Hettinger32e8fea2011-01-07 21:04:30 +0000422this gap, the :mod:`wsgiref` module has a new function,
423:func:`wsgiref.handlers.read_environ` for transcoding CGI variables from
424:attr:`os.environ` into native strings and returning a new dictionary.
Raymond Hettinger3df46212011-01-06 02:01:26 +0000425
426.. seealso::
427
428 :pep:`3333` - Python Web Server Gateway Interface v1.0.1
429 PEP written by Phillip Eby.
Raymond Hettinger6e6565b2009-06-28 20:56:11 +0000430
Raymond Hettingerca904be2011-01-18 00:02:40 +0000431
Raymond Hettinger6e6565b2009-06-28 20:56:11 +0000432Other Language Changes
433======================
434
435Some smaller changes made to the core Python language are:
436
Raymond Hettingere5e1a982010-12-05 08:35:21 +0000437* String formatting for :func:`format` and :meth:`str.format` gained new
438 capabilities for the format character **#**. Previously, for integers in
439 binary, octal, or hexadecimal, it caused the output to be prefixed with '0b',
440 '0o', or '0x' respectively. Now it can also handle floats, complex, and
441 Decimal, causing the output to always have a decimal point even when no digits
442 follow it.
Raymond Hettingere5e728b2010-12-05 06:35:16 +0000443
444 >>> format(20, '#o')
445 '0o24'
446 >>> format(12.34, '#5.0f')
447 ' 12.'
448
449 (Suggested by Mark Dickinson and implemented by Eric Smith in :issue:`7094`.)
Raymond Hettinger43b5a852010-12-05 04:04:21 +0000450
Raymond Hettinger08d42932011-01-29 08:51:57 +0000451* There is also a new :meth:`str.format_map` method that extends the
452 capabilities of the existing :meth:`str.format` method by accepting arbitrary
453 :term:`mapping` objects. This new method makes it possible to use string
Éric Araujo85dacf72011-02-19 18:06:50 +0000454 formatting with any of Python's many dictionary-like objects such as
Raymond Hettinger08d42932011-01-29 08:51:57 +0000455 :class:`~collections.defaultdict`, :class:`~shelve.Shelf`,
Eli Benderskyd7cde5d2011-01-31 04:05:52 +0000456 :class:`~configparser.ConfigParser`, or :mod:`dbm`. It is also useful with
Raymond Hettinger08d42932011-01-29 08:51:57 +0000457 custom :class:`dict` subclasses that normalize keys before look-up or that
458 supply a :meth:`__missing__` method for unknown keys::
Eric Smith598b5132011-01-28 20:23:25 +0000459
Raymond Hettinger08d42932011-01-29 08:51:57 +0000460 >>> import shelve
461 >>> d = shelve.open('tmp.shl')
462 >>> 'The {project_name} status is {status} as of {date}'.format_map(d)
463 'The testing project status is green as of February 15, 2011'
Eric Smith598b5132011-01-28 20:23:25 +0000464
Raymond Hettinger08d42932011-01-29 08:51:57 +0000465 >>> class LowerCasedDict(dict):
Serhiy Storchakadba90392016-05-10 12:01:23 +0300466 ... def __getitem__(self, key):
467 ... return dict.__getitem__(self, key.lower())
Raymond Hettinger08d42932011-01-29 08:51:57 +0000468 >>> lcd = LowerCasedDict(part='widgets', quantity=10)
469 >>> 'There are {QUANTITY} {Part} in stock'.format_map(lcd)
470 'There are 10 widgets in stock'
Eric Smith598b5132011-01-28 20:23:25 +0000471
Raymond Hettinger08d42932011-01-29 08:51:57 +0000472 >>> class PlaceholderDict(dict):
Serhiy Storchakadba90392016-05-10 12:01:23 +0300473 ... def __missing__(self, key):
474 ... return '<{}>'.format(key)
Raymond Hettinger08d42932011-01-29 08:51:57 +0000475 >>> 'Hello {name}, welcome to {location}'.format_map(PlaceholderDict())
476 'Hello <name>, welcome to <location>'
Eric Smith598b5132011-01-28 20:23:25 +0000477
Raymond Hettinger08d42932011-01-29 08:51:57 +0000478 (Suggested by Raymond Hettinger and implemented by Eric Smith in
479 :issue:`6081`.)
Eric Smith598b5132011-01-28 20:23:25 +0000480
Éric Araujo85dacf72011-02-19 18:06:50 +0000481* The interpreter can now be started with a quiet option, ``-q``, to prevent
Raymond Hettingerde2e6182011-01-10 05:40:57 +0000482 the copyright and version information from being displayed in the interactive
Martin Panter1050d2d2016-07-26 11:18:21 +0200483 mode. The option can be introspected using the :attr:`sys.flags` attribute:
484
485 .. code-block:: shell-session
Raymond Hettinger7d967712011-01-05 20:24:08 +0000486
487 $ python -q
488 >>> sys.flags
489 sys.flags(debug=0, division_warning=0, inspect=0, interactive=0,
490 optimize=0, dont_write_bytecode=0, no_user_site=0, no_site=0,
491 ignore_environment=0, verbose=0, bytes_warning=0, quiet=1)
Raymond Hettingerc269ae82010-12-05 01:01:52 +0000492
Raymond Hettinger51e21072011-01-10 23:38:15 +0000493 (Contributed by Marcin Wojdyr in :issue:`1772833`).
Raymond Hettingerc269ae82010-12-05 01:01:52 +0000494
Raymond Hettinger2169ee22011-01-05 22:27:49 +0000495* The :func:`hasattr` function works by calling :func:`getattr` and detecting
496 whether an exception is raised. This technique allows it to detect methods
497 created dynamically by :meth:`__getattr__` or :meth:`__getattribute__` which
Raymond Hettinger90a4b312011-01-06 02:08:30 +0000498 would otherwise be absent from the class dictionary. Formerly, *hasattr*
499 would catch any exception, possibly masking genuine errors. Now, *hasattr*
500 has been tightened to only catch :exc:`AttributeError` and let other
Raymond Hettinger03ca1a92011-01-20 04:12:37 +0000501 exceptions pass through::
502
503 >>> class A:
Serhiy Storchakadba90392016-05-10 12:01:23 +0300504 ... @property
505 ... def f(self):
506 ... return 1 // 0
507 ...
Raymond Hettinger03ca1a92011-01-20 04:12:37 +0000508 >>> a = A()
509 >>> hasattr(a, 'f')
510 Traceback (most recent call last):
511 ...
512 ZeroDivisionError: integer division or modulo by zero
Raymond Hettinger1784ff02010-09-05 01:00:19 +0000513
Raymond Hettingera55ffbc2010-12-15 18:31:57 +0000514 (Discovered by Yury Selivanov and fixed by Benjamin Peterson; :issue:`9666`.)
Raymond Hettinger1784ff02010-09-05 01:00:19 +0000515
Éric Araujo4234ad42010-09-05 17:32:25 +0000516* The :func:`str` of a float or complex number is now the same as its
Raymond Hettinger1784ff02010-09-05 01:00:19 +0000517 :func:`repr`. Previously, the :func:`str` form was shorter but that just
Éric Araujo4234ad42010-09-05 17:32:25 +0000518 caused confusion and is no longer needed now that the shortest possible
Georg Brandlda0a2112010-09-05 11:28:33 +0000519 :func:`repr` is displayed by default:
Raymond Hettingerbb734c62010-09-05 05:56:44 +0000520
Raymond Hettingerfb2d1672011-02-06 20:08:57 +0000521 >>> import math
Raymond Hettinger92ba2862010-09-06 01:16:46 +0000522 >>> repr(math.pi)
523 '3.141592653589793'
524 >>> str(math.pi)
525 '3.141592653589793'
Raymond Hettinger1784ff02010-09-05 01:00:19 +0000526
Georg Brandlda0a2112010-09-05 11:28:33 +0000527 (Proposed and implemented by Mark Dickinson; :issue:`9337`.)
Raymond Hettinger6e6565b2009-06-28 20:56:11 +0000528
Raymond Hettinger21ec4bc2010-12-10 01:09:01 +0000529* :class:`memoryview` objects now have a :meth:`~memoryview.release()` method
Serhiy Storchaka14867992014-09-10 23:43:41 +0300530 and they also now support the context management protocol. This allows timely
Raymond Hettinger21ec4bc2010-12-10 01:09:01 +0000531 release of any resources that were acquired when requesting a buffer from the
532 original object.
Antoine Pitroud3052002010-09-15 15:09:40 +0000533
Raymond Hettingerd8fae4e2010-12-05 05:39:54 +0000534 >>> with memoryview(b'abcdefgh') as v:
Zachary Ware40326202016-08-10 00:30:41 -0500535 ... print(v.tolist())
Raymond Hettingerd8fae4e2010-12-05 05:39:54 +0000536 [97, 98, 99, 100, 101, 102, 103, 104]
537
Antoine Pitroud3052002010-09-15 15:09:40 +0000538 (Added by Antoine Pitrou; :issue:`9757`.)
539
Amaury Forgeot d'Arcba117ef2010-09-10 21:39:53 +0000540* Previously it was illegal to delete a name from the local namespace if it
541 occurs as a free variable in a nested block::
542
Raymond Hettinger6f0d59b2011-01-17 23:10:55 +0000543 def outer(x):
544 def inner():
Serhiy Storchakadba90392016-05-10 12:01:23 +0300545 return x
Raymond Hettinger6f0d59b2011-01-17 23:10:55 +0000546 inner()
547 del x
Amaury Forgeot d'Arcba117ef2010-09-10 21:39:53 +0000548
549 This is now allowed. Remember that the target of an :keyword:`except` clause
550 is cleared, so this code which used to work with Python 2.6, raised a
551 :exc:`SyntaxError` with Python 3.1 and now works again::
552
Raymond Hettinger6f0d59b2011-01-17 23:10:55 +0000553 def f():
554 def print_error():
Serhiy Storchakadba90392016-05-10 12:01:23 +0300555 print(e)
Raymond Hettinger6f0d59b2011-01-17 23:10:55 +0000556 try:
Serhiy Storchakadba90392016-05-10 12:01:23 +0300557 something
Raymond Hettinger6f0d59b2011-01-17 23:10:55 +0000558 except Exception as e:
Serhiy Storchakadba90392016-05-10 12:01:23 +0300559 print_error()
560 # implicit "del e" here
Amaury Forgeot d'Arcba117ef2010-09-10 21:39:53 +0000561
562 (See :issue:`4617`.)
563
Raymond Hettinger480ed782010-12-15 22:07:15 +0000564* The internal :c:type:`structsequence` tool now creates subclasses of tuple.
Raymond Hettinger51e21072011-01-10 23:38:15 +0000565 This means that C structures like those returned by :func:`os.stat`,
Raymond Hettingera275c982011-01-20 04:03:19 +0000566 :func:`time.gmtime`, and :attr:`sys.version_info` now work like a
Raymond Hettingerde2e6182011-01-10 05:40:57 +0000567 :term:`named tuple` and now work with functions and methods that
Raymond Hettinger93c8cad2011-01-18 00:30:24 +0000568 expect a tuple as an argument. This is a big step forward in making the C
Raymond Hettingera275c982011-01-20 04:03:19 +0000569 structures as flexible as their pure Python counterparts:
570
Zachary Ware40326202016-08-10 00:30:41 -0500571 >>> import sys
Raymond Hettingera275c982011-01-20 04:03:19 +0000572 >>> isinstance(sys.version_info, tuple)
573 True
Zachary Ware40326202016-08-10 00:30:41 -0500574 >>> 'Version %d.%d.%d %s(%d)' % sys.version_info # doctest: +SKIP
Raymond Hettingera275c982011-01-20 04:03:19 +0000575 'Version 3.2.0 final(0)'
Raymond Hettinger480ed782010-12-15 22:07:15 +0000576
577 (Suggested by Arfrever Frehtes Taifersar Arahesis and implemented
578 by Benjamin Peterson in :issue:`8413`.)
579
Raymond Hettingerc8a16862011-01-18 09:01:34 +0000580* Warnings are now easier to control using the :envvar:`PYTHONWARNINGS`
Martin Panter1050d2d2016-07-26 11:18:21 +0200581 environment variable as an alternative to using ``-W`` at the command line:
582
583 .. code-block:: shell-session
Raymond Hettingera275c982011-01-20 04:03:19 +0000584
585 $ export PYTHONWARNINGS='ignore::RuntimeWarning::,once::UnicodeWarning::'
Raymond Hettinger480ed782010-12-15 22:07:15 +0000586
587 (Suggested by Barry Warsaw and implemented by Philip Jenvey in :issue:`7301`.)
588
Antoine Pitrou7d15a722010-11-05 22:13:55 +0000589* A new warning category, :exc:`ResourceWarning`, has been added. It is
Raymond Hettingerc269ae82010-12-05 01:01:52 +0000590 emitted when potential issues with resource consumption or cleanup
Raymond Hettinger93c8cad2011-01-18 00:30:24 +0000591 are detected. It is silenced by default in normal release builds but
Raymond Hettingerc269ae82010-12-05 01:01:52 +0000592 can be enabled through the means provided by the :mod:`warnings`
Antoine Pitrou7d15a722010-11-05 22:13:55 +0000593 module, or on the command line.
594
Raymond Hettingerd8fae4e2010-12-05 05:39:54 +0000595 A :exc:`ResourceWarning` is issued at interpreter shutdown if the
Raymond Hettingerd0d59b12011-01-24 05:07:13 +0000596 :data:`gc.garbage` list isn't empty, and if :attr:`gc.DEBUG_UNCOLLECTABLE` is
597 set, all uncollectable objects are printed. This is meant to make the
598 programmer aware that their code contains object finalization issues.
Antoine Pitrou7d15a722010-11-05 22:13:55 +0000599
Raymond Hettingerd8fae4e2010-12-05 05:39:54 +0000600 A :exc:`ResourceWarning` is also issued when a :term:`file object` is destroyed
Antoine Pitrou7d15a722010-11-05 22:13:55 +0000601 without having been explicitly closed. While the deallocator for such
602 object ensures it closes the underlying operating system resource
603 (usually, a file descriptor), the delay in deallocating the object could
604 produce various issues, especially under Windows. Here is an example
Martin Panter1050d2d2016-07-26 11:18:21 +0200605 of enabling the warning from the command line:
606
607 .. code-block:: shell-session
Antoine Pitrou7d15a722010-11-05 22:13:55 +0000608
Raymond Hettingerde2e6182011-01-10 05:40:57 +0000609 $ python -q -Wdefault
Antoine Pitrou7d15a722010-11-05 22:13:55 +0000610 >>> f = open("foo", "wb")
611 >>> del f
612 __main__:1: ResourceWarning: unclosed file <_io.BufferedWriter name='foo'>
Antoine Pitrou7d15a722010-11-05 22:13:55 +0000613
Raymond Hettingerd8fae4e2010-12-05 05:39:54 +0000614 (Added by Antoine Pitrou and Georg Brandl in :issue:`10093` and :issue:`477863`.)
Antoine Pitrou7d15a722010-11-05 22:13:55 +0000615
Raymond Hettingera0266332010-12-07 08:52:41 +0000616* :class:`range` objects now support *index* and *count* methods. This is part
617 of an effort to make more objects fully implement the
618 :class:`collections.Sequence` :term:`abstract base class`. As a result, the
619 language will have a more uniform API. In addition, :class:`range` objects
Raymond Hettingerb9656292011-01-16 18:22:06 +0000620 now support slicing and negative indices, even with values larger than
621 :attr:`sys.maxsize`. This makes *range* more interoperable with lists::
Raymond Hettinger2ffa6712010-12-08 10:18:21 +0000622
623 >>> range(0, 100, 2).count(10)
624 1
625 >>> range(0, 100, 2).index(10)
626 5
627 >>> range(0, 100, 2)[5]
628 10
629 >>> range(0, 100, 2)[0:5]
630 range(0, 10, 2)
Raymond Hettingerdadf93c2010-12-05 02:56:21 +0000631
Raymond Hettingerb9656292011-01-16 18:22:06 +0000632 (Contributed by Daniel Stutzbach in :issue:`9213`, by Alexander Belopolsky
633 in :issue:`2690`, and by Nick Coghlan in :issue:`10889`.)
Nick Coghlan37ee8502010-12-03 14:26:13 +0000634
Raymond Hettingerd8fae4e2010-12-05 05:39:54 +0000635* The :func:`callable` builtin function from Py2.x was resurrected. It provides
Raymond Hettingerb87ba262010-12-06 04:31:40 +0000636 a concise, readable alternative to using an :term:`abstract base class` in an
Raymond Hettinger792c0762010-12-09 16:41:54 +0000637 expression like ``isinstance(x, collections.Callable)``:
638
639 >>> callable(max)
640 True
641 >>> callable(20)
642 False
Raymond Hettingerd8fae4e2010-12-05 05:39:54 +0000643
644 (See :issue:`10518`.)
Amaury Forgeot d'Arcba117ef2010-09-10 21:39:53 +0000645
Raymond Hettinger93c8cad2011-01-18 00:30:24 +0000646* Python's import mechanism can now load modules installed in directories with
Raymond Hettingerfb2d1672011-02-06 20:08:57 +0000647 non-ASCII characters in the path name. This solved an aggravating problem
648 with home directories for users with non-ASCII characters in their usernames.
Raymond Hettingera275c982011-01-20 04:03:19 +0000649
Raymond Hettingerfb2d1672011-02-06 20:08:57 +0000650 (Required extensive work by Victor Stinner in :issue:`9425`.)
Raymond Hettinger070ec702010-12-10 17:45:13 +0000651
652
Raymond Hettinger6e6565b2009-06-28 20:56:11 +0000653New, Improved, and Deprecated Modules
654=====================================
655
Raymond Hettinger99db3fd2010-12-15 19:33:49 +0000656Python's standard library has undergone significant maintenance efforts and
657quality improvements.
Raymond Hettingere434b3b2010-12-15 19:20:01 +0000658
Raymond Hettingerfb2d1672011-02-06 20:08:57 +0000659The biggest news for Python 3.2 is that the :mod:`email` package, :mod:`mailbox`
660module, and :mod:`nntplib` modules now work correctly with the bytes/text model
Raymond Hettinger186f4412011-02-09 18:16:32 +0000661in Python 3. For the first time, there is correct handling of messages with
Raymond Hettingerfb2d1672011-02-06 20:08:57 +0000662mixed encodings.
Raymond Hettingere434b3b2010-12-15 19:20:01 +0000663
Raymond Hettinger6046e222010-12-16 00:21:08 +0000664Throughout the standard library, there has been more careful attention to
665encodings and text versus bytes issues. In particular, interactions with the
Raymond Hettingerfb2d1672011-02-06 20:08:57 +0000666operating system are now better able to exchange non-ASCII data using the
667Windows MBCS encoding, locale-aware encodings, or UTF-8.
Raymond Hettinger6046e222010-12-16 00:21:08 +0000668
Raymond Hettingere434b3b2010-12-15 19:20:01 +0000669Another significant win is the addition of substantially better support for
670*SSL* connections and security certificates.
671
Raymond Hettinger51e21072011-01-10 23:38:15 +0000672In addition, more classes now implement a :term:`context manager` to support
Raymond Hettingerc136b042011-01-18 07:15:39 +0000673convenient and reliable resource clean-up using a :keyword:`with` statement.
Raymond Hettingere434b3b2010-12-15 19:20:01 +0000674
Raymond Hettinger0358a172010-12-15 19:00:38 +0000675email
676-----
677
678The usability of the :mod:`email` package in Python 3 has been mostly fixed by
679the extensive efforts of R. David Murray. The problem was that emails are
680typically read and stored in the form of :class:`bytes` rather than :class:`str`
681text, and they may contain multiple encodings within a single email. So, the
682email package had to be extended to parse and generate email messages in bytes
683format.
684
685* New functions :func:`~email.message_from_bytes` and
686 :func:`~email.message_from_binary_file`, and new classes
687 :class:`~email.parser.BytesFeedParser` and :class:`~email.parser.BytesParser`
688 allow binary message data to be parsed into model objects.
689
690* Given bytes input to the model, :meth:`~email.message.Message.get_payload`
691 will by default decode a message body that has a
692 :mailheader:`Content-Transfer-Encoding` of *8bit* using the charset
693 specified in the MIME headers and return the resulting string.
694
695* Given bytes input to the model, :class:`~email.generator.Generator` will
696 convert message bodies that have a :mailheader:`Content-Transfer-Encoding` of
697 *8bit* to instead have a *7bit* :mailheader:`Content-Transfer-Encoding`.
Raymond Hettingerc08ea612011-01-08 10:32:31 +0000698
Raymond Hettingercf8a3822011-01-11 21:20:20 +0000699 Headers with unencoded non-ASCII bytes are deemed to be :rfc:`2047`\ -encoded
700 using the *unknown-8bit* character set.
Raymond Hettinger0358a172010-12-15 19:00:38 +0000701
702* A new class :class:`~email.generator.BytesGenerator` produces bytes as output,
703 preserving any unchanged non-ASCII data that was present in the input used to
704 build the model, including message bodies with a
705 :mailheader:`Content-Transfer-Encoding` of *8bit*.
706
707* The :mod:`smtplib` :class:`~smtplib.SMTP` class now accepts a byte string
708 for the *msg* argument to the :meth:`~smtplib.SMTP.sendmail` method,
709 and a new method, :meth:`~smtplib.SMTP.send_message` accepts a
710 :class:`~email.message.Message` object and can optionally obtain the
711 *from_addr* and *to_addrs* addresses directly from the object.
712
Raymond Hettinger0358a172010-12-15 19:00:38 +0000713(Proposed and implemented by R. David Murray, :issue:`4661` and :issue:`10321`.)
714
Raymond Hettinger6046e222010-12-16 00:21:08 +0000715elementtree
716-----------
717
Georg Brandl5d53fdd2010-12-18 11:58:12 +0000718The :mod:`xml.etree.ElementTree` package and its :mod:`xml.etree.cElementTree`
Raymond Hettinger6046e222010-12-16 00:21:08 +0000719counterpart have been updated to version 1.3.
720
721Several new and useful functions and methods have been added:
722
723* :func:`xml.etree.ElementTree.fromstringlist` which builds an XML document
724 from a sequence of fragments
725* :func:`xml.etree.ElementTree.register_namespace` for registering a global
726 namespace prefix
727* :func:`xml.etree.ElementTree.tostringlist` for string representation
728 including all sublists
729* :meth:`xml.etree.ElementTree.Element.extend` for appending a sequence of zero
730 or more elements
731* :meth:`xml.etree.ElementTree.Element.iterfind` searches an element and
732 subelements
733* :meth:`xml.etree.ElementTree.Element.itertext` creates a text iterator over
Raymond Hettingerde2e6182011-01-10 05:40:57 +0000734 an element and its subelements
Raymond Hettinger6046e222010-12-16 00:21:08 +0000735* :meth:`xml.etree.ElementTree.TreeBuilder.end` closes the current element
736* :meth:`xml.etree.ElementTree.TreeBuilder.doctype` handles a doctype
737 declaration
738
739Two methods have been deprecated:
740
741* :meth:`xml.etree.ElementTree.getchildren` use ``list(elem)`` instead.
742* :meth:`xml.etree.ElementTree.getiterator` use ``Element.iter`` instead.
743
744For details of the update, see `Introducing ElementTree
745<http://effbot.org/zone/elementtree-13-intro.htm>`_ on Fredrik Lundh's website.
746
Antoine Pitrou12de8ac2010-12-16 13:33:56 +0000747(Contributed by Florent Xicluna and Fredrik Lundh, :issue:`6472`.)
Raymond Hettinger0358a172010-12-15 19:00:38 +0000748
Raymond Hettingerbba537b2010-12-15 18:20:19 +0000749functools
750---------
751
Éric Araujo4234ad42010-09-05 17:32:25 +0000752* The :mod:`functools` module includes a new decorator for caching function
Georg Brandlda0a2112010-09-05 11:28:33 +0000753 calls. :func:`functools.lru_cache` can save repeated queries to an external
754 resource whenever the results are expected to be the same.
Raymond Hettingeraed05eb2010-08-02 01:43:41 +0000755
Raymond Hettinger86f96132010-08-06 23:23:49 +0000756 For example, adding a caching decorator to a database query function can save
Raymond Hettinger6f0d59b2011-01-17 23:10:55 +0000757 database accesses for popular searches:
Raymond Hettingeraed05eb2010-08-02 01:43:41 +0000758
Raymond Hettinger14eb4c32011-01-26 01:13:26 +0000759 >>> import functools
Raymond Hettinger6f0d59b2011-01-17 23:10:55 +0000760 >>> @functools.lru_cache(maxsize=300)
Zachary Ware40326202016-08-10 00:30:41 -0500761 ... def get_phone_number(name):
762 ... c = conn.cursor()
763 ... c.execute('SELECT phonenumber FROM phonelist WHERE name=?', (name,))
764 ... return c.fetchone()[0]
Raymond Hettingeraed05eb2010-08-02 01:43:41 +0000765
Zachary Ware40326202016-08-10 00:30:41 -0500766 >>> for name in user_requests: # doctest: +SKIP
767 ... get_phone_number(name) # cached lookup
Raymond Hettinger7496b412010-11-30 19:15:45 +0000768
769 To help with choosing an effective cache size, the wrapped function is
770 instrumented for tracking cache statistics:
771
Zachary Ware40326202016-08-10 00:30:41 -0500772 >>> get_phone_number.cache_info() # doctest: +SKIP
Raymond Hettinger7496b412010-11-30 19:15:45 +0000773 CacheInfo(hits=4805, misses=980, maxsize=300, currsize=300)
Raymond Hettingeraed05eb2010-08-02 01:43:41 +0000774
Raymond Hettingerf3098282010-08-15 03:30:45 +0000775 If the phonelist table gets updated, the outdated contents of the cache can be
Georg Brandlda0a2112010-09-05 11:28:33 +0000776 cleared with:
Raymond Hettingerf3098282010-08-15 03:30:45 +0000777
Georg Brandlda0a2112010-09-05 11:28:33 +0000778 >>> get_phone_number.cache_clear()
Raymond Hettingerf3098282010-08-15 03:30:45 +0000779
Raymond Hettinger4a8f50a2011-02-17 19:05:53 +0000780 (Contributed by Raymond Hettinger and incorporating design ideas from Jim
781 Baker, Miki Tebeka, and Nick Coghlan; see `recipe 498245
Serhiy Storchaka6dff0202016-05-07 10:49:07 +0300782 <https://code.activestate.com/recipes/498245>`_\, `recipe 577479
783 <https://code.activestate.com/recipes/577479>`_\, :issue:`10586`, and
Raymond Hettinger4a8f50a2011-02-17 19:05:53 +0000784 :issue:`10593`.)
Raymond Hettingeraed05eb2010-08-02 01:43:41 +0000785
Antoine Pitrou7d49bc92010-09-15 15:13:17 +0000786* The :func:`functools.wraps` decorator now adds a :attr:`__wrapped__` attribute
787 pointing to the original callable function. This allows wrapped functions to
788 be introspected. It also copies :attr:`__annotations__` if defined. And now
789 it also gracefully skips over missing attributes such as :attr:`__doc__` which
Raymond Hettinger5eb63902010-12-09 23:43:34 +0000790 might not be defined for the wrapped callable.
Antoine Pitrou7d49bc92010-09-15 15:13:17 +0000791
Raymond Hettinger7a168d92011-01-21 04:59:00 +0000792 In the above example, the cache can be removed by recovering the original
793 function:
794
795 >>> get_phone_number = get_phone_number.__wrapped__ # uncached function
796
Antoine Pitrou7d49bc92010-09-15 15:13:17 +0000797 (By Nick Coghlan and Terrence Cole; :issue:`9567`, :issue:`3445`, and
798 :issue:`8814`.)
799
Raymond Hettinger6046e222010-12-16 00:21:08 +0000800* To help write classes with rich comparison methods, a new decorator
Martin Panter7462b6492015-11-02 03:37:02 +0000801 :func:`functools.total_ordering` will use existing equality and inequality
Raymond Hettingerde2e6182011-01-10 05:40:57 +0000802 methods to fill in the remaining methods.
Raymond Hettinger6046e222010-12-16 00:21:08 +0000803
804 For example, supplying *__eq__* and *__lt__* will enable
805 :func:`~functools.total_ordering` to fill-in *__le__*, *__gt__* and *__ge__*::
806
807 @total_ordering
808 class Student:
809 def __eq__(self, other):
810 return ((self.lastname.lower(), self.firstname.lower()) ==
811 (other.lastname.lower(), other.firstname.lower()))
Serhiy Storchakadba90392016-05-10 12:01:23 +0300812
Raymond Hettinger6046e222010-12-16 00:21:08 +0000813 def __lt__(self, other):
814 return ((self.lastname.lower(), self.firstname.lower()) <
815 (other.lastname.lower(), other.firstname.lower()))
816
Raymond Hettinger2169ee22011-01-05 22:27:49 +0000817 With the *total_ordering* decorator, the remaining comparison methods
Raymond Hettingerde2e6182011-01-10 05:40:57 +0000818 are filled in automatically.
Raymond Hettinger6046e222010-12-16 00:21:08 +0000819
Raymond Hettinger2169ee22011-01-05 22:27:49 +0000820 (Contributed by Raymond Hettinger.)
Raymond Hettingerf35a34c2010-12-22 09:11:54 +0000821
Raymond Hettinger4bea9782011-01-19 04:14:34 +0000822* To aid in porting programs from Python 2, the :func:`functools.cmp_to_key`
Raymond Hettingerbb9686f2010-12-16 00:53:05 +0000823 function converts an old-style comparison function to
Raymond Hettinger6046e222010-12-16 00:21:08 +0000824 modern :term:`key function`:
825
826 >>> # locale-aware sort order
Zachary Ware40326202016-08-10 00:30:41 -0500827 >>> sorted(iterable, key=cmp_to_key(locale.strcoll)) # doctest: +SKIP
Raymond Hettinger6046e222010-12-16 00:21:08 +0000828
829 For sorting examples and a brief sorting tutorial, see the `Sorting HowTo
Georg Brandle73778c2014-10-29 08:36:35 +0100830 <https://wiki.python.org/moin/HowTo/Sorting/>`_ tutorial.
Raymond Hettinger6046e222010-12-16 00:21:08 +0000831
832 (Contributed by Raymond Hettinger.)
833
Raymond Hettingerbba537b2010-12-15 18:20:19 +0000834itertools
835---------
836
Raymond Hettinger673ccf22010-12-07 09:37:11 +0000837* The :mod:`itertools` module has a new :func:`~itertools.accumulate` function
Raymond Hettinger4bea9782011-01-19 04:14:34 +0000838 modeled on APL's *scan* operator and Numpy's *accumulate* function:
Raymond Hettinger6e353942010-12-04 23:42:12 +0000839
Raymond Hettingerfb2d1672011-02-06 20:08:57 +0000840 >>> from itertools import accumulate
Raymond Hettinger44efc652011-02-14 18:18:49 +0000841 >>> list(accumulate([8, 2, 50]))
Raymond Hettinger6e353942010-12-04 23:42:12 +0000842 [8, 10, 60]
843
844 >>> prob_dist = [0.1, 0.4, 0.2, 0.3]
845 >>> list(accumulate(prob_dist)) # cumulative probability distribution
846 [0.1, 0.5, 0.7, 1.0]
847
848 For an example using :func:`~itertools.accumulate`, see the :ref:`examples for
849 the random module <random-examples>`.
850
851 (Contributed by Raymond Hettinger and incorporating design suggestions
852 from Mark Dickinson.)
853
Raymond Hettingerbba537b2010-12-15 18:20:19 +0000854collections
855-----------
856
Raymond Hettinger792c0762010-12-09 16:41:54 +0000857* The :class:`collections.Counter` class now has two forms of in-place
858 subtraction, the existing *-=* operator for `saturating subtraction
Georg Brandl5d941342016-02-26 19:37:12 +0100859 <https://en.wikipedia.org/wiki/Saturation_arithmetic>`_ and the new
Raymond Hettinger792c0762010-12-09 16:41:54 +0000860 :meth:`~collections.Counter.subtract` method for regular subtraction. The
Georg Brandl5d941342016-02-26 19:37:12 +0100861 former is suitable for `multisets <https://en.wikipedia.org/wiki/Multiset>`_
Raymond Hettingerffad35e2010-12-14 21:12:03 +0000862 which only have positive counts, and the latter is more suitable for use cases
Raymond Hettinger792c0762010-12-09 16:41:54 +0000863 that allow negative counts:
Alexander Belopolsky72572312010-12-08 21:21:56 +0000864
Zachary Ware40326202016-08-10 00:30:41 -0500865 >>> from collections import Counter
866 >>> tally = Counter(dogs=5, cats=3)
Raymond Hettinger792c0762010-12-09 16:41:54 +0000867 >>> tally -= Counter(dogs=2, cats=8) # saturating subtraction
868 >>> tally
869 Counter({'dogs': 3})
Alexander Belopolsky72572312010-12-08 21:21:56 +0000870
Raymond Hettinger792c0762010-12-09 16:41:54 +0000871 >>> tally = Counter(dogs=5, cats=3)
872 >>> tally.subtract(dogs=2, cats=8) # regular subtraction
873 >>> tally
874 Counter({'dogs': 3, 'cats': -5})
Alexander Belopolsky72572312010-12-08 21:21:56 +0000875
Raymond Hettinger792c0762010-12-09 16:41:54 +0000876 (Contributed by Raymond Hettinger.)
Alexander Belopolsky72572312010-12-08 21:21:56 +0000877
Raymond Hettingere0a96002010-12-15 17:54:13 +0000878* The :class:`collections.OrderedDict` class has a new method
879 :meth:`~collections.OrderedDict.move_to_end` which takes an existing key and
Raymond Hettinger23ab1012011-01-18 20:25:04 +0000880 moves it to either the first or last position in the ordered sequence.
881
882 The default is to move an item to the last position. This is equivalent of
883 renewing an entry with ``od[k] = od.pop(k)``.
884
885 A fast move-to-end operation is useful for resequencing entries. For example,
Raymond Hettinger00db6aa2011-01-20 09:47:04 +0000886 an ordered dictionary can be used to track order of access by aging entries
887 from the oldest to the most recently accessed.
Raymond Hettingere0a96002010-12-15 17:54:13 +0000888
Zachary Ware40326202016-08-10 00:30:41 -0500889 >>> from collections import OrderedDict
Raymond Hettingere0a96002010-12-15 17:54:13 +0000890 >>> d = OrderedDict.fromkeys(['a', 'b', 'X', 'd', 'e'])
891 >>> list(d)
892 ['a', 'b', 'X', 'd', 'e']
Raymond Hettinger23ab1012011-01-18 20:25:04 +0000893 >>> d.move_to_end('X')
Raymond Hettingere0a96002010-12-15 17:54:13 +0000894 >>> list(d)
895 ['a', 'b', 'd', 'e', 'X']
Raymond Hettingere0a96002010-12-15 17:54:13 +0000896
Raymond Hettinger6046e222010-12-16 00:21:08 +0000897 (Contributed by Raymond Hettinger.)
898
Raymond Hettinger7ec790d2011-01-18 00:19:30 +0000899* The :class:`collections.deque` class grew two new methods
900 :meth:`~collections.deque.count` and :meth:`~collections.deque.reverse` that
901 make them more substitutable for :class:`list` objects:
Raymond Hettinger6046e222010-12-16 00:21:08 +0000902
Zachary Ware40326202016-08-10 00:30:41 -0500903 >>> from collections import deque
Raymond Hettinger6046e222010-12-16 00:21:08 +0000904 >>> d = deque('simsalabim')
905 >>> d.count('s')
906 2
907 >>> d.reverse()
908 >>> d
909 deque(['m', 'i', 'b', 'a', 'l', 'a', 's', 'm', 'i', 's'])
910
911 (Contributed by Raymond Hettinger.)
912
Raymond Hettinger5cee47f2011-01-11 19:59:46 +0000913threading
914---------
915
916The :mod:`threading` module has a new :class:`~threading.Barrier`
917synchronization class for making multiple threads wait until all of them have
918reached a common barrier point. Barriers are useful for making sure that a task
919with multiple preconditions does not run until all of the predecessor tasks are
920complete.
921
922Barriers can work with an arbitrary number of threads. This is a generalization
Georg Brandl5d941342016-02-26 19:37:12 +0100923of a `Rendezvous <https://en.wikipedia.org/wiki/Synchronous_rendezvous>`_ which
Raymond Hettinger5cee47f2011-01-11 19:59:46 +0000924is defined for only two threads.
925
Raymond Hettinger15b47c52011-01-17 21:05:07 +0000926Implemented as a two-phase cyclic barrier, :class:`~threading.Barrier` objects
927are suitable for use in loops. The separate *filling* and *draining* phases
Raymond Hettingere0f1f322011-01-18 21:14:27 +0000928assure that all threads get released (drained) before any one of them can loop
929back and re-enter the barrier. The barrier fully resets after each cycle.
Raymond Hettinger5cee47f2011-01-11 19:59:46 +0000930
Raymond Hettinger5cee47f2011-01-11 19:59:46 +0000931Example of using barriers::
932
Raymond Hettingerfb2d1672011-02-06 20:08:57 +0000933 from threading import Barrier, Thread
934
Raymond Hettinger5cee47f2011-01-11 19:59:46 +0000935 def get_votes(site):
936 ballots = conduct_election(site)
937 all_polls_closed.wait() # do not count until all polls are closed
Raymond Hettinger97673652011-01-11 21:13:26 +0000938 totals = summarize(ballots)
939 publish(site, totals)
Raymond Hettinger5cee47f2011-01-11 19:59:46 +0000940
941 all_polls_closed = Barrier(len(sites))
Raymond Hettinger3a8ae5f2011-01-11 20:51:45 +0000942 for site in sites:
Raymond Hettinger5cee47f2011-01-11 19:59:46 +0000943 Thread(target=get_votes, args=(site,)).start()
944
945In this example, the barrier enforces a rule that votes cannot be counted at any
946polling site until all polls are closed. Notice how a solution with a barrier
947is similar to one with :meth:`threading.Thread.join`, but the threads stay alive
948and continue to do work (summarizing ballots) after the barrier point is
949crossed.
950
Raymond Hettinger2c3865b2011-01-18 22:58:33 +0000951If any of the predecessor tasks can hang or be delayed, a barrier can be created
952with an optional *timeout* parameter. Then if the timeout period elapses before
953all the predecessor tasks reach the barrier point, all waiting threads are
954released and a :exc:`~threading.BrokenBarrierError` exception is raised::
955
956 def get_votes(site):
957 ballots = conduct_election(site)
958 try:
Serhiy Storchakadba90392016-05-10 12:01:23 +0300959 all_polls_closed.wait(timeout=midnight - time.now())
David Malcolm49348642011-01-18 23:45:53 +0000960 except BrokenBarrierError:
Raymond Hettinger2c3865b2011-01-18 22:58:33 +0000961 lockbox = seal_ballots(ballots)
962 queue.put(lockbox)
963 else:
964 totals = summarize(ballots)
965 publish(site, totals)
966
967In this example, the barrier enforces a more robust rule. If some election
968sites do not finish before midnight, the barrier times-out and the ballots are
969sealed and deposited in a queue for later handling.
970
Raymond Hettinger5cee47f2011-01-11 19:59:46 +0000971See `Barrier Synchronization Patterns
Serhiy Storchaka6dff0202016-05-07 10:49:07 +0300972<https://parlab.eecs.berkeley.edu/wiki/_media/patterns/paraplop_g1_3.pdf>`_ for
Raymond Hettinger3a8ae5f2011-01-11 20:51:45 +0000973more examples of how barriers can be used in parallel computing. Also, there is
974a simple but thorough explanation of barriers in `The Little Book of Semaphores
975<http://greenteapress.com/semaphores/downey08semaphores.pdf>`_, *section 3.6*.
Raymond Hettinger5cee47f2011-01-11 19:59:46 +0000976
Raymond Hettinger3a8ae5f2011-01-11 20:51:45 +0000977(Contributed by Kristján Valur Jónsson with an API review by Jeffrey Yasskin in
978:issue:`8777`.)
Raymond Hettinger6655d112011-01-11 08:49:10 +0000979
Raymond Hettinger97673652011-01-11 21:13:26 +0000980datetime and time
981-----------------
Raymond Hettingerbba537b2010-12-15 18:20:19 +0000982
Raymond Hettinger792c0762010-12-09 16:41:54 +0000983* The :mod:`datetime` module has a new type :class:`~datetime.timezone` that
984 implements the :class:`~datetime.tzinfo` interface by returning a fixed UTC
Raymond Hettingerde2e6182011-01-10 05:40:57 +0000985 offset and timezone name. This makes it easier to create timezone-aware
Raymond Hettinger14eb4c32011-01-26 01:13:26 +0000986 datetime objects::
Alexander Belopolsky72572312010-12-08 21:21:56 +0000987
Raymond Hettingerfb2d1672011-02-06 20:08:57 +0000988 >>> from datetime import datetime, timezone
Alexander Belopolsky72572312010-12-08 21:21:56 +0000989
Raymond Hettinger14eb4c32011-01-26 01:13:26 +0000990 >>> datetime.now(timezone.utc)
991 datetime.datetime(2010, 12, 8, 21, 4, 2, 923754, tzinfo=datetime.timezone.utc)
992
993 >>> datetime.strptime("01/01/2000 12:00 +0000", "%m/%d/%Y %H:%M %z")
994 datetime.datetime(2000, 1, 1, 12, 0, tzinfo=datetime.timezone.utc)
Alexander Belopolsky72572312010-12-08 21:21:56 +0000995
Raymond Hettingerbba537b2010-12-15 18:20:19 +0000996* Also, :class:`~datetime.timedelta` objects can now be multiplied by
Raymond Hettinger792c0762010-12-09 16:41:54 +0000997 :class:`float` and divided by :class:`float` and :class:`int` objects.
Raymond Hettinger2169ee22011-01-05 22:27:49 +0000998 And :class:`~datetime.timedelta` objects can now divide one another.
Raymond Hettinger792c0762010-12-09 16:41:54 +0000999
Raymond Hettingerca904be2011-01-18 00:02:40 +00001000* The :meth:`datetime.date.strftime` method is no longer restricted to years
1001 after 1900. The new supported year range is from 1000 to 9999 inclusive.
Alexander Belopolsky72572312010-12-08 21:21:56 +00001002
Raymond Hettingerf1dae312011-01-21 03:00:00 +00001003* Whenever a two-digit year is used in a time tuple, the interpretation has been
Serhiy Storchakaa97cd2e2016-10-19 16:43:42 +03001004 governed by :attr:`time.accept2dyear`. The default is ``True`` which means that
Raymond Hettingerf1dae312011-01-21 03:00:00 +00001005 for a two-digit year, the century is guessed according to the POSIX rules
1006 governing the ``%y`` strptime format.
Alexander Belopolsky9ee94de2011-01-20 19:51:31 +00001007
Raymond Hettingerf1dae312011-01-21 03:00:00 +00001008 Starting with Py3.2, use of the century guessing heuristic will emit a
1009 :exc:`DeprecationWarning`. Instead, it is recommended that
Serhiy Storchakaa97cd2e2016-10-19 16:43:42 +03001010 :attr:`time.accept2dyear` be set to ``False`` so that large date ranges
Raymond Hettingere3b8f7c2011-01-26 19:36:13 +00001011 can be used without guesswork::
Raymond Hettingerf1dae312011-01-21 03:00:00 +00001012
Raymond Hettingere3b8f7c2011-01-26 19:36:13 +00001013 >>> import time, warnings
1014 >>> warnings.resetwarnings() # remove the default warning filters
1015
1016 >>> time.accept2dyear = True # guess whether 11 means 11 or 2011
1017 >>> time.asctime((11, 1, 1, 12, 34, 56, 4, 1, 0))
1018 Warning (from warnings module):
1019 ...
1020 DeprecationWarning: Century info guessed for a 2-digit year.
1021 'Fri Jan 1 12:34:56 2011'
1022
1023 >>> time.accept2dyear = False # use the full range of allowable dates
1024 >>> time.asctime((11, 1, 1, 12, 34, 56, 4, 1, 0))
1025 'Fri Jan 1 12:34:56 11'
Raymond Hettingerf1dae312011-01-21 03:00:00 +00001026
1027 Several functions now have significantly expanded date ranges. When
1028 :attr:`time.accept2dyear` is false, the :func:`time.asctime` function will
1029 accept any year that fits in a C int, while the :func:`time.mktime` and
1030 :func:`time.strftime` functions will accept the full range supported by the
1031 corresponding operating system functions.
Alexander Belopolskybd96b062011-01-10 21:55:34 +00001032
Raymond Hettinger62399742011-01-30 00:55:47 +00001033(Contributed by Alexander Belopolsky and Victor Stinner in :issue:`1289118`,
1034:issue:`5094`, :issue:`6641`, :issue:`2706`, :issue:`1777412`, :issue:`8013`,
1035and :issue:`10827`.)
1036
Georg Brandle73778c2014-10-29 08:36:35 +01001037.. XXX https://bugs.python.org/issue?%40search_text=datetime&%40sort=-activity
Alexander Belopolskybd96b062011-01-10 21:55:34 +00001038
Raymond Hettingera4cfb422011-01-25 02:35:58 +00001039math
1040----
1041
Raymond Hettinger902f3202011-01-25 08:01:01 +00001042The :mod:`math` module has been updated with six new functions inspired by the
Raymond Hettingera4cfb422011-01-25 02:35:58 +00001043C99 standard.
1044
1045The :func:`~math.isfinite` function provides a reliable and fast way to detect
Serhiy Storchakaa97cd2e2016-10-19 16:43:42 +03001046special values. It returns ``True`` for regular numbers and ``False`` for *Nan* or
Raymond Hettingera4cfb422011-01-25 02:35:58 +00001047*Infinity*:
1048
Zachary Ware40326202016-08-10 00:30:41 -05001049>>> from math import isfinite
Raymond Hettingera4cfb422011-01-25 02:35:58 +00001050>>> [isfinite(x) for x in (123, 4.56, float('Nan'), float('Inf'))]
1051[True, True, False, False]
1052
1053The :func:`~math.expm1` function computes ``e**x-1`` for small values of *x*
Raymond Hettinger1fbd8e12011-02-10 09:43:04 +00001054without incurring the loss of precision that usually accompanies the subtraction
Raymond Hettingera4cfb422011-01-25 02:35:58 +00001055of nearly equal quantities:
1056
Zachary Ware40326202016-08-10 00:30:41 -05001057>>> from math import expm1
Raymond Hettingera4cfb422011-01-25 02:35:58 +00001058>>> expm1(0.013671875) # more accurate way to compute e**x-1 for a small x
10590.013765762467652909
1060
Raymond Hettingerf9b8a192011-01-25 05:53:27 +00001061The :func:`~math.erf` function computes a probability integral or `Gaussian
Georg Brandl5d941342016-02-26 19:37:12 +01001062error function <https://en.wikipedia.org/wiki/Error_function>`_. The
Raymond Hettinger2f707c92011-01-25 06:58:01 +00001063complementary error function, :func:`~math.erfc`, is ``1 - erf(x)``:
Raymond Hettingera4cfb422011-01-25 02:35:58 +00001064
Marco Buttue65fcde2017-04-27 14:23:34 +02001065.. doctest::
1066 :options: +SKIP
1067
1068 >>> from math import erf, erfc, sqrt
1069 >>> erf(1.0/sqrt(2.0)) # portion of normal distribution within 1 standard deviation
1070 0.682689492137086
1071 >>> erfc(1.0/sqrt(2.0)) # portion of normal distribution outside 1 standard deviation
1072 0.31731050786291404
1073 >>> erf(1.0/sqrt(2.0)) + erfc(1.0/sqrt(2.0))
1074 1.0
Raymond Hettingera4cfb422011-01-25 02:35:58 +00001075
Raymond Hettinger2c639062011-01-25 02:38:59 +00001076The :func:`~math.gamma` function is a continuous extension of the factorial
Georg Brandl5d941342016-02-26 19:37:12 +01001077function. See https://en.wikipedia.org/wiki/Gamma_function for details. Because
Raymond Hettinger2c639062011-01-25 02:38:59 +00001078the function is related to factorials, it grows large even for small values of
1079*x*, so there is also a :func:`~math.lgamma` function for computing the natural
1080logarithm of the gamma function:
Raymond Hettingera4cfb422011-01-25 02:35:58 +00001081
Zachary Ware40326202016-08-10 00:30:41 -05001082>>> from math import gamma, lgamma
Raymond Hettingera4cfb422011-01-25 02:35:58 +00001083>>> gamma(7.0) # six factorial
1084720.0
1085>>> lgamma(801.0) # log(800 factorial)
10864551.950730698041
1087
1088(Contributed by Mark Dickinson.)
1089
Raymond Hettingerbba537b2010-12-15 18:20:19 +00001090abc
1091---
Antoine Pitrou7d49bc92010-09-15 15:13:17 +00001092
Raymond Hettingerbba537b2010-12-15 18:20:19 +00001093The :mod:`abc` module now supports :func:`~abc.abstractclassmethod` and
1094:func:`~abc.abstractstaticmethod`.
Raymond Hettingera5a35542010-12-05 00:39:18 +00001095
Raymond Hettinger7ec790d2011-01-18 00:19:30 +00001096These tools make it possible to define an :term:`abstract base class` that
Raymond Hettingerbba537b2010-12-15 18:20:19 +00001097requires a particular :func:`classmethod` or :func:`staticmethod` to be
Raymond Hettinger7ec790d2011-01-18 00:19:30 +00001098implemented::
1099
Raymond Hettingerfb2d1672011-02-06 20:08:57 +00001100 class Temperature(metaclass=abc.ABCMeta):
Raymond Hettinger7ec790d2011-01-18 00:19:30 +00001101 @abc.abstractclassmethod
Raymond Hettingerfb2d1672011-02-06 20:08:57 +00001102 def from_fahrenheit(cls, t):
Raymond Hettinger7ec790d2011-01-18 00:19:30 +00001103 ...
1104 @abc.abstractclassmethod
Raymond Hettingerfb2d1672011-02-06 20:08:57 +00001105 def from_celsius(cls, t):
Raymond Hettinger7ec790d2011-01-18 00:19:30 +00001106 ...
Antoine Pitrou7d49bc92010-09-15 15:13:17 +00001107
Raymond Hettingerbba537b2010-12-15 18:20:19 +00001108(Patch submitted by Daniel Urban; :issue:`5867`.)
Raymond Hettingerbcbd6962010-09-05 08:46:36 +00001109
Raymond Hettingerf4f0e6c2011-01-24 22:14:42 +00001110io
1111--
1112
1113The :class:`io.BytesIO` has a new method, :meth:`~io.BytesIO.getbuffer`, which
1114provides functionality similar to :func:`memoryview`. It creates an editable
1115view of the data without making a copy. The buffer's random access and support
1116for slice notation are well-suited to in-place editing::
1117
Raymond Hettinger14eb4c32011-01-26 01:13:26 +00001118 >>> REC_LEN, LOC_START, LOC_LEN = 34, 7, 11
Raymond Hettingerf4f0e6c2011-01-24 22:14:42 +00001119
Raymond Hettinger14eb4c32011-01-26 01:13:26 +00001120 >>> def change_location(buffer, record_number, location):
Serhiy Storchakadba90392016-05-10 12:01:23 +03001121 ... start = record_number * REC_LEN + LOC_START
1122 ... buffer[start: start+LOC_LEN] = location
Raymond Hettingerf4f0e6c2011-01-24 22:14:42 +00001123
Raymond Hettinger14eb4c32011-01-26 01:13:26 +00001124 >>> import io
Raymond Hettingerf4f0e6c2011-01-24 22:14:42 +00001125
1126 >>> byte_stream = io.BytesIO(
Serhiy Storchakadba90392016-05-10 12:01:23 +03001127 ... b'G3805 storeroom Main chassis '
1128 ... b'X7899 shipping Reserve cog '
1129 ... b'L6988 receiving Primary sprocket'
1130 ... )
Raymond Hettingerf4f0e6c2011-01-24 22:14:42 +00001131 >>> buffer = byte_stream.getbuffer()
1132 >>> change_location(buffer, 1, b'warehouse ')
1133 >>> change_location(buffer, 0, b'showroom ')
1134 >>> print(byte_stream.getvalue())
Raymond Hettingerfb2d1672011-02-06 20:08:57 +00001135 b'G3805 showroom Main chassis '
1136 b'X7899 warehouse Reserve cog '
Raymond Hettingerf4f0e6c2011-01-24 22:14:42 +00001137 b'L6988 receiving Primary sprocket'
1138
Raymond Hettinger712d2b42011-01-27 06:46:54 +00001139(Contributed by Antoine Pitrou in :issue:`5506`.)
1140
Raymond Hettinger98b140c2011-01-23 21:05:46 +00001141reprlib
1142-------
1143
1144When writing a :meth:`__repr__` method for a custom container, it is easy to
1145forget to handle the case where a member refers back to the container itself.
1146Python's builtin objects such as :class:`list` and :class:`set` handle
1147self-reference by displaying "..." in the recursive part of the representation
1148string.
1149
1150To help write such :meth:`__repr__` methods, the :mod:`reprlib` module has a new
Raymond Hettingercbc903b2011-01-23 21:13:27 +00001151decorator, :func:`~reprlib.recursive_repr`, for detecting recursive calls to
Raymond Hettingere3b8f7c2011-01-26 19:36:13 +00001152:meth:`__repr__` and substituting a placeholder string instead::
Raymond Hettinger98b140c2011-01-23 21:05:46 +00001153
1154 >>> class MyList(list):
Serhiy Storchakadba90392016-05-10 12:01:23 +03001155 ... @recursive_repr()
1156 ... def __repr__(self):
1157 ... return '<' + '|'.join(map(repr, self)) + '>'
1158 ...
Raymond Hettinger98b140c2011-01-23 21:05:46 +00001159 >>> m = MyList('abc')
1160 >>> m.append(m)
1161 >>> m.append('x')
1162 >>> print(m)
1163 <'a'|'b'|'c'|...|'x'>
1164
Raymond Hettingercbc903b2011-01-23 21:13:27 +00001165(Contributed by Raymond Hettinger in :issue:`9826` and :issue:`9840`.)
Raymond Hettinger98b140c2011-01-23 21:05:46 +00001166
Raymond Hettinger9f62d742011-02-10 09:20:26 +00001167logging
1168-------
1169
Raymond Hettinger1fbd8e12011-02-10 09:43:04 +00001170In addition to dictionary-based configuration described above, the
Raymond Hettinger9f62d742011-02-10 09:20:26 +00001171:mod:`logging` package has many other improvements.
1172
1173The logging documentation has been augmented by a :ref:`basic tutorial
1174<logging-basic-tutorial>`\, an :ref:`advanced tutorial
1175<logging-advanced-tutorial>`\, and a :ref:`cookbook <logging-cookbook>` of
1176logging recipes. These documents are the fastest way to learn about logging.
1177
1178The :func:`logging.basicConfig` set-up function gained a *style* argument to
1179support three different types of string formatting. It defaults to "%" for
1180traditional %-formatting, can be set to "{" for the new :meth:`str.format` style, or
1181can be set to "$" for the shell-style formatting provided by
1182:class:`string.Template`. The following three configurations are equivalent::
1183
1184 >>> from logging import basicConfig
1185 >>> basicConfig(style='%', format="%(name)s -> %(levelname)s: %(message)s")
1186 >>> basicConfig(style='{', format="{name} -> {levelname} {message}")
1187 >>> basicConfig(style='$', format="$name -> $levelname: $message")
1188
1189If no configuration is set-up before a logging event occurs, there is now a
1190default configuration using a :class:`~logging.StreamHandler` directed to
1191:attr:`sys.stderr` for events of ``WARNING`` level or higher. Formerly, an
1192event occurring before a configuration was set-up would either raise an
1193exception or silently drop the event depending on the value of
1194:attr:`logging.raiseExceptions`. The new default handler is stored in
1195:attr:`logging.lastResort`.
1196
1197The use of filters has been simplified. Instead of creating a
1198:class:`~logging.Filter` object, the predicate can be any Python callable that
Serhiy Storchakaa97cd2e2016-10-19 16:43:42 +03001199returns ``True`` or ``False``.
Raymond Hettinger9f62d742011-02-10 09:20:26 +00001200
1201There were a number of other improvements that add flexibility and simplify
1202configuration. See the module documentation for a full listing of changes in
1203Python 3.2.
1204
Raymond Hettinger50307b62011-01-24 01:18:30 +00001205csv
1206---
1207
1208The :mod:`csv` module now supports a new dialect, :class:`~csv.unix_dialect`,
1209which applies quoting for all fields and a traditional Unix style with ``'\n'`` as
1210the line terminator. The registered dialect name is ``unix``.
1211
1212The :class:`csv.DictWriter` has a new method,
1213:meth:`~csv.DictWriter.writeheader` for writing-out an initial row to document
1214the field names::
1215
1216 >>> import csv, sys
1217 >>> w = csv.DictWriter(sys.stdout, ['name', 'dept'], dialect='unix')
1218 >>> w.writeheader()
1219 "name","dept"
1220 >>> w.writerows([
Serhiy Storchakadba90392016-05-10 12:01:23 +03001221 ... {'name': 'tom', 'dept': 'accounting'},
1222 ... {'name': 'susan', 'dept': 'Salesl'}])
Raymond Hettinger50307b62011-01-24 01:18:30 +00001223 "tom","accounting"
1224 "susan","sales"
1225
1226(New dialect suggested by Jay Talbot in :issue:`5975`, and the new method
1227suggested by Ed Abraham in :issue:`1537721`.)
1228
Raymond Hettinger480ed782010-12-15 22:07:15 +00001229contextlib
1230----------
1231
1232There is a new and slightly mind-blowing tool
1233:class:`~contextlib.ContextDecorator` that is helpful for creating a
Raymond Hettingerde2e6182011-01-10 05:40:57 +00001234:term:`context manager` that does double duty as a function decorator.
Raymond Hettinger480ed782010-12-15 22:07:15 +00001235
1236As a convenience, this new functionality is used by
1237:func:`~contextlib.contextmanager` so that no extra effort is needed to support
1238both roles.
1239
1240The basic idea is that both context managers and function decorators can be used
1241for pre-action and post-action wrappers. Context managers wrap a group of
Raymond Hettingerc136b042011-01-18 07:15:39 +00001242statements using a :keyword:`with` statement, and function decorators wrap a
Raymond Hettinger480ed782010-12-15 22:07:15 +00001243group of statements enclosed in a function. So, occasionally there is a need to
Raymond Hettingerde2e6182011-01-10 05:40:57 +00001244write a pre-action or post-action wrapper that can be used in either role.
Raymond Hettinger480ed782010-12-15 22:07:15 +00001245
1246For example, it is sometimes useful to wrap functions or groups of statements
1247with a logger that can track the time of entry and time of exit. Rather than
1248writing both a function decorator and a context manager for the task, the
1249:func:`~contextlib.contextmanager` provides both capabilities in a single
Raymond Hettinger6f0d59b2011-01-17 23:10:55 +00001250definition::
Raymond Hettinger480ed782010-12-15 22:07:15 +00001251
Raymond Hettinger14eb4c32011-01-26 01:13:26 +00001252 from contextlib import contextmanager
Raymond Hettinger6f0d59b2011-01-17 23:10:55 +00001253 import logging
Raymond Hettinger14eb4c32011-01-26 01:13:26 +00001254
Raymond Hettinger6f0d59b2011-01-17 23:10:55 +00001255 logging.basicConfig(level=logging.INFO)
Raymond Hettinger14eb4c32011-01-26 01:13:26 +00001256
Raymond Hettinger6f0d59b2011-01-17 23:10:55 +00001257 @contextmanager
1258 def track_entry_and_exit(name):
Vinay Sajipdd917f82016-08-31 08:22:29 +01001259 logging.info('Entering: %s', name)
Raymond Hettinger6f0d59b2011-01-17 23:10:55 +00001260 yield
Vinay Sajipdd917f82016-08-31 08:22:29 +01001261 logging.info('Exiting: %s', name)
Raymond Hettinger480ed782010-12-15 22:07:15 +00001262
Raymond Hettinger6f0d59b2011-01-17 23:10:55 +00001263Formerly, this would have only been usable as a context manager::
Raymond Hettinger480ed782010-12-15 22:07:15 +00001264
Raymond Hettinger6f0d59b2011-01-17 23:10:55 +00001265 with track_entry_and_exit('widget loader'):
1266 print('Some time consuming activity goes here')
1267 load_widget()
Raymond Hettinger480ed782010-12-15 22:07:15 +00001268
Raymond Hettinger6f0d59b2011-01-17 23:10:55 +00001269Now, it can be used as a decorator as well::
Raymond Hettinger480ed782010-12-15 22:07:15 +00001270
Raymond Hettinger6f0d59b2011-01-17 23:10:55 +00001271 @track_entry_and_exit('widget loader')
1272 def activity():
1273 print('Some time consuming activity goes here')
1274 load_widget()
Raymond Hettinger480ed782010-12-15 22:07:15 +00001275
1276Trying to fulfill two roles at once places some limitations on the technique.
1277Context managers normally have the flexibility to return an argument usable by
Raymond Hettingerc136b042011-01-18 07:15:39 +00001278a :keyword:`with` statement, but there is no parallel for function decorators.
Raymond Hettinger480ed782010-12-15 22:07:15 +00001279
Raymond Hettinger9743e4f2010-12-16 02:24:12 +00001280In the above example, there is not a clean way for the *track_entry_and_exit*
Raymond Hettinger388af4b2011-01-06 20:55:29 +00001281context manager to return a logging instance for use in the body of enclosed
1282statements.
Raymond Hettinger480ed782010-12-15 22:07:15 +00001283
1284(Contributed by Michael Foord in :issue:`9110`.)
1285
Raymond Hettinger07a605b2010-12-15 22:35:03 +00001286decimal and fractions
Raymond Hettingerde2e6182011-01-10 05:40:57 +00001287---------------------
Raymond Hettinger07a605b2010-12-15 22:35:03 +00001288
1289Mark Dickinson crafted an elegant and efficient scheme for assuring that
1290different numeric datatypes will have the same hash value whenever their actual
1291values are equal (:issue:`8188`)::
1292
Raymond Hettinger6f0d59b2011-01-17 23:10:55 +00001293 assert hash(Fraction(3, 2)) == hash(1.5) == \
1294 hash(Decimal("1.5")) == hash(complex(1.5, 0))
Raymond Hettinger07a605b2010-12-15 22:35:03 +00001295
Raymond Hettingere7dfe742011-01-24 09:17:24 +00001296Some of the hashing details are exposed through a new attribute,
1297:attr:`sys.hash_info`, which describes the bit width of the hash value, the
1298prime modulus, the hash values for *infinity* and *nan*, and the multiplier
1299used for the imaginary part of a number:
1300
Zachary Ware40326202016-08-10 00:30:41 -05001301>>> sys.hash_info # doctest: +SKIP
Raymond Hettingere7dfe742011-01-24 09:17:24 +00001302sys.hash_info(width=64, modulus=2305843009213693951, inf=314159, nan=0, imag=1000003)
1303
Raymond Hettinger07a605b2010-12-15 22:35:03 +00001304An early decision to limit the inter-operability of various numeric types has
Raymond Hettingerc8a16862011-01-18 09:01:34 +00001305been relaxed. It is still unsupported (and ill-advised) to have implicit
Raymond Hettinger07a605b2010-12-15 22:35:03 +00001306mixing in arithmetic expressions such as ``Decimal('1.1') + float('1.1')``
1307because the latter loses information in the process of constructing the binary
1308float. However, since existing floating point value can be converted losslessly
1309to either a decimal or rational representation, it makes sense to add them to
1310the constructor and to support mixed-type comparisons.
1311
Raymond Hettingerbb9686f2010-12-16 00:53:05 +00001312* The :class:`decimal.Decimal` constructor now accepts :class:`float` objects
Raymond Hettinger07a605b2010-12-15 22:35:03 +00001313 directly so there in no longer a need to use the :meth:`~decimal.Decimal.from_float`
Raymond Hettinger6046e222010-12-16 00:21:08 +00001314 method (:issue:`8257`).
Raymond Hettinger07a605b2010-12-15 22:35:03 +00001315
1316* Mixed type comparisons are now fully supported so that
1317 :class:`~decimal.Decimal` objects can be directly compared with :class:`float`
Raymond Hettinger6046e222010-12-16 00:21:08 +00001318 and :class:`fractions.Fraction` (:issue:`2531` and :issue:`8188`).
Raymond Hettinger07a605b2010-12-15 22:35:03 +00001319
1320Similar changes were made to :class:`fractions.Fraction` so that the
1321:meth:`~fractions.Fraction.from_float()` and :meth:`~fractions.Fraction.from_decimal`
Raymond Hettinger6046e222010-12-16 00:21:08 +00001322methods are no longer needed (:issue:`8294`):
1323
Zachary Ware40326202016-08-10 00:30:41 -05001324>>> from decimal import Decimal
1325>>> from fractions import Fraction
Raymond Hettinger6046e222010-12-16 00:21:08 +00001326>>> Decimal(1.1)
1327Decimal('1.100000000000000088817841970012523233890533447265625')
1328>>> Fraction(1.1)
1329Fraction(2476979795053773, 2251799813685248)
Raymond Hettinger07a605b2010-12-15 22:35:03 +00001330
1331Another useful change for the :mod:`decimal` module is that the
1332:attr:`Context.clamp` attribute is now public. This is useful in creating
1333contexts that correspond to the decimal interchange formats specified in IEEE
1334754 (see :issue:`8540`).
1335
Raymond Hettinger6046e222010-12-16 00:21:08 +00001336(Contributed by Mark Dickinson and Raymond Hettinger.)
Raymond Hettinger07a605b2010-12-15 22:35:03 +00001337
Raymond Hettingerbba537b2010-12-15 18:20:19 +00001338ftp
1339---
Raymond Hettingerbcbd6962010-09-05 08:46:36 +00001340
Serhiy Storchaka14867992014-09-10 23:43:41 +03001341The :class:`ftplib.FTP` class now supports the context management protocol to
Raymond Hettingerbba537b2010-12-15 18:20:19 +00001342unconditionally consume :exc:`socket.error` exceptions and to close the FTP
1343connection when done::
Giampaolo Rodolàbd576b72010-05-10 14:53:29 +00001344
Raymond Hettingerbba537b2010-12-15 18:20:19 +00001345 >>> from ftplib import FTP
1346 >>> with FTP("ftp1.at.proftpd.org") as ftp:
Raymond Hettingere3b8f7c2011-01-26 19:36:13 +00001347 ftp.login()
1348 ftp.dir()
1349
Raymond Hettingerbba537b2010-12-15 18:20:19 +00001350 '230 Anonymous login ok, restrictions apply.'
1351 dr-xr-xr-x 9 ftp ftp 154 May 6 10:43 .
1352 dr-xr-xr-x 9 ftp ftp 154 May 6 10:43 ..
1353 dr-xr-xr-x 5 ftp ftp 4096 May 6 10:43 CentOS
1354 dr-xr-xr-x 3 ftp ftp 18 Jul 10 2008 Fedora
Georg Brandlda0a2112010-09-05 11:28:33 +00001355
Raymond Hettingerbba537b2010-12-15 18:20:19 +00001356Other file-like objects such as :class:`mmap.mmap` and :func:`fileinput.input`
1357also grew auto-closing context managers::
1358
1359 with fileinput.input(files=('log1.txt', 'log2.txt')) as f:
1360 for line in f:
1361 process(line)
1362
1363(Contributed by Tarek Ziadé and Giampaolo Rodolà in :issue:`4972`, and
1364by Georg Brandl in :issue:`8046` and :issue:`1286`.)
Antoine Pitrou696e0352010-08-08 22:18:46 +00001365
Antoine Pitroubcba4342011-01-16 18:29:34 +00001366The :class:`~ftplib.FTP_TLS` class now accepts a *context* parameter, which is a
1367:class:`ssl.SSLContext` object allowing bundling SSL configuration options,
Raymond Hettinger4854d142011-01-17 21:29:58 +00001368certificates and private keys into a single (potentially long-lived) structure.
Antoine Pitroubcba4342011-01-16 18:29:34 +00001369
1370(Contributed by Giampaolo Rodolà; :issue:`8806`.)
1371
Raymond Hettinger2169ee22011-01-05 22:27:49 +00001372popen
1373-----
1374
1375The :func:`os.popen` and :func:`subprocess.Popen` functions now support
Raymond Hettingerc136b042011-01-18 07:15:39 +00001376:keyword:`with` statements for auto-closing of the file descriptors.
Georg Brandl3ad46752010-12-05 07:59:29 +00001377
Raymond Hettinger8f0ae9a2011-02-18 00:53:55 +00001378(Contributed by Antoine Pitrou and Brian Curtin in :issue:`7461` and
1379:issue:`10554`.)
Raymond Hettinger712d2b42011-01-27 06:46:54 +00001380
Raymond Hettingerda4a05d2011-01-25 07:46:07 +00001381select
1382------
1383
1384The :mod:`select` module now exposes a new, constant attribute,
Antoine Pitroucfad97b2011-01-25 17:24:57 +00001385:attr:`~select.PIPE_BUF`, which gives the minimum number of bytes which are
1386guaranteed not to block when :func:`select.select` says a pipe is ready
1387for writing.
Raymond Hettingerda4a05d2011-01-25 07:46:07 +00001388
1389>>> import select
Marco Buttue65fcde2017-04-27 14:23:34 +02001390>>> select.PIPE_BUF # doctest: +SKIP
Raymond Hettingerda4a05d2011-01-25 07:46:07 +00001391512
1392
Giampaolo Rodolàac039ae2011-01-29 13:24:33 +00001393(Available on Unix systems. Patch by Sébastien Sablé in :issue:`9862`)
Raymond Hettingerda4a05d2011-01-25 07:46:07 +00001394
Raymond Hettinger6046e222010-12-16 00:21:08 +00001395gzip and zipfile
1396----------------
Antoine Pitroucd889af2010-10-06 21:13:56 +00001397
Raymond Hettingerbba537b2010-12-15 18:20:19 +00001398:class:`gzip.GzipFile` now implements the :class:`io.BufferedIOBase`
1399:term:`abstract base class` (except for ``truncate()``). It also has a
1400:meth:`~gzip.GzipFile.peek` method and supports unseekable as well as
1401zero-padded file objects.
Raymond Hettingera0266332010-12-07 08:52:41 +00001402
Raymond Hettingerbba537b2010-12-15 18:20:19 +00001403The :mod:`gzip` module also gains the :func:`~gzip.compress` and
1404:func:`~gzip.decompress` functions for easier in-memory compression and
Raymond Hettinger51e21072011-01-10 23:38:15 +00001405decompression. Keep in mind that text needs to be encoded as :class:`bytes`
Raymond Hettingerbba537b2010-12-15 18:20:19 +00001406before compressing and decompressing:
Raymond Hettingera0266332010-12-07 08:52:41 +00001407
Zachary Ware40326202016-08-10 00:30:41 -05001408>>> import gzip
Raymond Hettingerbba537b2010-12-15 18:20:19 +00001409>>> s = 'Three shall be the number thou shalt count, '
1410>>> s += 'and the number of the counting shall be three'
1411>>> b = s.encode() # convert to utf-8
1412>>> len(b)
141389
1414>>> c = gzip.compress(b)
1415>>> len(c)
141677
1417>>> gzip.decompress(c).decode()[:42] # decompress and convert to text
Zachary Ware40326202016-08-10 00:30:41 -05001418'Three shall be the number thou shalt count'
Antoine Pitroucd889af2010-10-06 21:13:56 +00001419
Raymond Hettingerbba537b2010-12-15 18:20:19 +00001420(Contributed by Anand B. Pillai in :issue:`3488`; and by Antoine Pitrou, Nir
1421Aides and Brian Curtin in :issue:`9962`, :issue:`1675951`, :issue:`7471` and
1422:issue:`2846`.)
1423
Raymond Hettinger6046e222010-12-16 00:21:08 +00001424Also, the :class:`zipfile.ZipExtFile` class was reworked internally to represent
1425files stored inside an archive. The new implementation is significantly faster
Martin Panter7462b6492015-11-02 03:37:02 +00001426and can be wrapped in an :class:`io.BufferedReader` object for more speedups. It
Raymond Hettinger6046e222010-12-16 00:21:08 +00001427also solves an issue where interleaved calls to *read* and *readline* gave the
1428wrong results.
1429
Raymond Hettingerc8a16862011-01-18 09:01:34 +00001430(Patch submitted by Nir Aides in :issue:`7610`.)
Raymond Hettinger6046e222010-12-16 00:21:08 +00001431
Raymond Hettinger7626ef92011-01-27 05:48:56 +00001432tarfile
1433-------
1434
Éric Araujo85dacf72011-02-19 18:06:50 +00001435The :class:`~tarfile.TarFile` class can now be used as a context manager. In
Raymond Hettinger7626ef92011-01-27 05:48:56 +00001436addition, its :meth:`~tarfile.TarFile.add` method has a new option, *filter*,
1437that controls which files are added to the archive and allows the file metadata
1438to be edited.
1439
1440The new *filter* option replaces the older, less flexible *exclude* parameter
1441which is now deprecated. If specified, the optional *filter* parameter needs to
1442be a :term:`keyword argument`. The user-supplied filter function accepts a
1443:class:`~tarfile.TarInfo` object and returns an updated
1444:class:`~tarfile.TarInfo` object, or if it wants the file to be excluded, the
Serhiy Storchakaecf41da2016-10-19 16:29:26 +03001445function can return ``None``::
Raymond Hettinger7626ef92011-01-27 05:48:56 +00001446
1447 >>> import tarfile, glob
1448
1449 >>> def myfilter(tarinfo):
Serhiy Storchakadba90392016-05-10 12:01:23 +03001450 ... if tarinfo.isfile(): # only save real files
1451 ... tarinfo.uname = 'monty' # redact the user name
1452 ... return tarinfo
Raymond Hettinger7626ef92011-01-27 05:48:56 +00001453
Raymond Hettingere6f0abf2011-01-27 07:34:45 +00001454 >>> with tarfile.open(name='myarchive.tar.gz', mode='w:gz') as tf:
Serhiy Storchakadba90392016-05-10 12:01:23 +03001455 ... for filename in glob.glob('*.txt'):
1456 ... tf.add(filename, filter=myfilter)
1457 ... tf.list()
Raymond Hettinger7626ef92011-01-27 05:48:56 +00001458 -rw-r--r-- monty/501 902 2011-01-26 17:59:11 annotations.txt
1459 -rw-r--r-- monty/501 123 2011-01-26 17:59:11 general_questions.txt
1460 -rw-r--r-- monty/501 3514 2011-01-26 17:59:11 prion.txt
1461 -rw-r--r-- monty/501 124 2011-01-26 17:59:11 py_todo.txt
1462 -rw-r--r-- monty/501 1399 2011-01-26 17:59:11 semaphore_notes.txt
1463
Raymond Hettinger712d2b42011-01-27 06:46:54 +00001464(Proposed by Tarek Ziadé and implemented by Lars Gustäbel in :issue:`6856`.)
1465
Raymond Hettingerd0d59b12011-01-24 05:07:13 +00001466hashlib
1467-------
1468
1469The :mod:`hashlib` module has two new constant attributes listing the hashing
1470algorithms guaranteed to be present in all implementations and those available
Raymond Hettingere3b8f7c2011-01-26 19:36:13 +00001471on the current implementation::
Raymond Hettingerd0d59b12011-01-24 05:07:13 +00001472
1473 >>> import hashlib
Raymond Hettingere3b8f7c2011-01-26 19:36:13 +00001474
Raymond Hettingerd0d59b12011-01-24 05:07:13 +00001475 >>> hashlib.algorithms_guaranteed
1476 {'sha1', 'sha224', 'sha384', 'sha256', 'sha512', 'md5'}
Raymond Hettingere3b8f7c2011-01-26 19:36:13 +00001477
Raymond Hettingerd0d59b12011-01-24 05:07:13 +00001478 >>> hashlib.algorithms_available
1479 {'md2', 'SHA256', 'SHA512', 'dsaWithSHA', 'mdc2', 'SHA224', 'MD4', 'sha256',
1480 'sha512', 'ripemd160', 'SHA1', 'MDC2', 'SHA', 'SHA384', 'MD2',
1481 'ecdsa-with-SHA1','md4', 'md5', 'sha1', 'DSA-SHA', 'sha224',
1482 'dsaEncryption', 'DSA', 'RIPEMD160', 'sha', 'MD5', 'sha384'}
1483
1484(Suggested by Carl Chenet in :issue:`7418`.)
1485
Raymond Hettinger50307b62011-01-24 01:18:30 +00001486ast
1487---
1488
1489The :mod:`ast` module has a wonderful a general-purpose tool for safely
Raymond Hettinger9c2fc472011-01-31 06:14:48 +00001490evaluating expression strings using the Python literal
Raymond Hettinger50307b62011-01-24 01:18:30 +00001491syntax. The :func:`ast.literal_eval` function serves as a secure alternative to
1492the builtin :func:`eval` function which is easily abused. Python 3.2 adds
1493:class:`bytes` and :class:`set` literals to the list of supported types:
Serhiy Storchakaecf41da2016-10-19 16:29:26 +03001494strings, bytes, numbers, tuples, lists, dicts, sets, booleans, and ``None``.
Raymond Hettinger50307b62011-01-24 01:18:30 +00001495
1496::
Raymond Hettingere3b8f7c2011-01-26 19:36:13 +00001497
Raymond Hettingerfb2d1672011-02-06 20:08:57 +00001498 >>> from ast import literal_eval
Raymond Hettinger50307b62011-01-24 01:18:30 +00001499
1500 >>> request = "{'req': 3, 'func': 'pow', 'args': (2, 0.5)}"
1501 >>> literal_eval(request)
1502 {'args': (2, 0.5), 'req': 3, 'func': 'pow'}
1503
1504 >>> request = "os.system('do something harmful')"
1505 >>> literal_eval(request)
1506 Traceback (most recent call last):
1507 ...
1508 ValueError: malformed node or string: <_ast.Call object at 0x101739a10>
1509
Éric Araujo85dacf72011-02-19 18:06:50 +00001510(Implemented by Benjamin Peterson and Georg Brandl.)
Raymond Hettinger712d2b42011-01-27 06:46:54 +00001511
Raymond Hettinger2270d582011-01-20 09:04:39 +00001512os
1513--
1514
1515Different operating systems use various encodings for filenames and environment
1516variables. The :mod:`os` module provides two new functions,
1517:func:`~os.fsencode` and :func:`~os.fsdecode`, for encoding and decoding
1518filenames:
1519
Zachary Ware40326202016-08-10 00:30:41 -05001520>>> import os
Raymond Hettinger2e042d32011-01-21 09:18:19 +00001521>>> filename = 'Sehenswürdigkeiten'
Raymond Hettinger2270d582011-01-20 09:04:39 +00001522>>> os.fsencode(filename)
Raymond Hettinger2e042d32011-01-21 09:18:19 +00001523b'Sehensw\xc3\xbcrdigkeiten'
Raymond Hettinger2270d582011-01-20 09:04:39 +00001524
Raymond Hettingerdf07aac2011-03-25 12:41:07 -07001525Some operating systems allow direct access to encoded bytes in the
Raymond Hettinger2270d582011-01-20 09:04:39 +00001526environment. If so, the :attr:`os.supports_bytes_environ` constant will be
1527true.
1528
Raymond Hettingerdf07aac2011-03-25 12:41:07 -07001529For direct access to encoded environment variables (if available),
Raymond Hettinger2270d582011-01-20 09:04:39 +00001530use the new :func:`os.getenvb` function or use :data:`os.environb`
1531which is a bytes version of :data:`os.environ`.
1532
Raymond Hettinger712d2b42011-01-27 06:46:54 +00001533(Contributed by Victor Stinner.)
Raymond Hettinger2270d582011-01-20 09:04:39 +00001534
Raymond Hettingerbba537b2010-12-15 18:20:19 +00001535shutil
1536------
1537
1538The :func:`shutil.copytree` function has two new options:
Antoine Pitroud67075e2010-07-31 22:48:02 +00001539
Antoine Pitrou121a0552011-01-16 18:16:52 +00001540* *ignore_dangling_symlinks*: when ``symlinks=False`` so that the function
Raymond Hettingerc136b042011-01-18 07:15:39 +00001541 copies a file pointed to by a symlink, not the symlink itself. This option
1542 will silence the error raised if the file doesn't exist.
Antoine Pitroud67075e2010-07-31 22:48:02 +00001543
Antoine Pitrou121a0552011-01-16 18:16:52 +00001544* *copy_function*: is a callable that will be used to copy files.
1545 :func:`shutil.copy2` is used by default.
Antoine Pitroud67075e2010-07-31 22:48:02 +00001546
Raymond Hettingerbba537b2010-12-15 18:20:19 +00001547(Contributed by Tarek Ziadé.)
Antoine Pitroud67075e2010-07-31 22:48:02 +00001548
Raymond Hettinger0929b1f2011-01-23 11:29:08 +00001549In addition, the :mod:`shutil` module now supports :ref:`archiving operations
1550<archiving-operations>` for zipfiles, uncompressed tarfiles, gzipped tarfiles,
1551and bzipped tarfiles. And there are functions for registering additional
1552archiving file formats (such as xz compressed tarfiles or custom formats).
1553
1554The principal functions are :func:`~shutil.make_archive` and
1555:func:`~shutil.unpack_archive`. By default, both operate on the current
1556directory (which can be set by :func:`os.chdir`) and on any sub-directories.
Raymond Hettinger1fbd8e12011-02-10 09:43:04 +00001557The archive filename needs to be specified with a full pathname. The archiving
Raymond Hettinger0929b1f2011-01-23 11:29:08 +00001558step is non-destructive (the original files are left unchanged).
1559
1560::
1561
1562 >>> import shutil, pprint
Raymond Hettingere3b8f7c2011-01-26 19:36:13 +00001563
Serhiy Storchakadba90392016-05-10 12:01:23 +03001564 >>> os.chdir('mydata') # change to the source directory
Raymond Hettingerfb2d1672011-02-06 20:08:57 +00001565 >>> f = shutil.make_archive('/var/backup/mydata',
Serhiy Storchakadba90392016-05-10 12:01:23 +03001566 ... 'zip') # archive the current directory
1567 >>> f # show the name of archive
Raymond Hettinger0929b1f2011-01-23 11:29:08 +00001568 '/var/backup/mydata.zip'
Serhiy Storchakadba90392016-05-10 12:01:23 +03001569 >>> os.chdir('tmp') # change to an unpacking
Raymond Hettinger0929b1f2011-01-23 11:29:08 +00001570 >>> shutil.unpack_archive('/var/backup/mydata.zip') # recover the data
Raymond Hettingere3b8f7c2011-01-26 19:36:13 +00001571
Serhiy Storchakadba90392016-05-10 12:01:23 +03001572 >>> pprint.pprint(shutil.get_archive_formats()) # display known formats
Raymond Hettinger0929b1f2011-01-23 11:29:08 +00001573 [('bztar', "bzip2'ed tar-file"),
1574 ('gztar', "gzip'ed tar-file"),
1575 ('tar', 'uncompressed tar file'),
1576 ('zip', 'ZIP file')]
Raymond Hettingere3b8f7c2011-01-26 19:36:13 +00001577
Serhiy Storchakadba90392016-05-10 12:01:23 +03001578 >>> shutil.register_archive_format( # register a new archive format
1579 ... name='xz',
1580 ... function=xz.compress, # callable archiving function
1581 ... extra_args=[('level', 8)], # arguments to the function
1582 ... description='xz compression'
1583 ... )
Raymond Hettinger0929b1f2011-01-23 11:29:08 +00001584
1585(Contributed by Tarek Ziadé.)
1586
Raymond Hettingerbba537b2010-12-15 18:20:19 +00001587sqlite3
1588-------
Antoine Pitroue43f9d02010-08-08 23:24:50 +00001589
Terry Reedy91638e72011-02-09 19:21:00 +00001590The :mod:`sqlite3` module was updated to pysqlite version 2.6.0. It has two new capabilities.
Antoine Pitroue43f9d02010-08-08 23:24:50 +00001591
Raymond Hettinger0358a172010-12-15 19:00:38 +00001592* The :attr:`sqlite3.Connection.in_transit` attribute is true if there is an
1593 active transaction for uncommitted changes.
Antoine Pitroud67075e2010-07-31 22:48:02 +00001594
Raymond Hettinger0358a172010-12-15 19:00:38 +00001595* The :meth:`sqlite3.Connection.enable_load_extension` and
1596 :meth:`sqlite3.Connection.load_extension` methods allows you to load SQLite
1597 extensions from ".so" files. One well-known extension is the fulltext-search
1598 extension distributed with SQLite.
Antoine Pitroud67075e2010-07-31 22:48:02 +00001599
Raymond Hettingerbba537b2010-12-15 18:20:19 +00001600(Contributed by R. David Murray and Shashwat Anand; :issue:`8845`.)
1601
Raymond Hettingera3b7a142011-01-24 05:26:00 +00001602html
1603----
1604
1605A new :mod:`html` module was introduced with only a single function,
1606:func:`~html.escape`, which is used for escaping reserved characters from HTML
1607markup:
1608
1609>>> import html
1610>>> html.escape('x > 2 && x < 7')
1611'x &gt; 2 &amp;&amp; x &lt; 7'
1612
Raymond Hettingerbba537b2010-12-15 18:20:19 +00001613socket
1614------
1615
1616The :mod:`socket` module has two new improvements.
1617
1618* Socket objects now have a :meth:`~socket.socket.detach()` method which puts
1619 the socket into closed state without actually closing the underlying file
1620 descriptor. The latter can then be reused for other purposes.
1621 (Added by Antoine Pitrou; :issue:`8524`.)
1622
Serhiy Storchaka14867992014-09-10 23:43:41 +03001623* :func:`socket.create_connection` now supports the context management protocol
Raymond Hettingerbba537b2010-12-15 18:20:19 +00001624 to unconditionally consume :exc:`socket.error` exceptions and to close the
1625 socket when done.
1626 (Contributed by Giampaolo Rodolà; :issue:`9794`.)
1627
1628ssl
1629---
Antoine Pitroud67075e2010-07-31 22:48:02 +00001630
Raymond Hettinger4854d142011-01-17 21:29:58 +00001631The :mod:`ssl` module added a number of features to satisfy common requirements
1632for secure (encrypted, authenticated) internet connections:
Antoine Pitrou33da1d62011-01-16 18:16:09 +00001633
Raymond Hettinger4854d142011-01-17 21:29:58 +00001634* A new class, :class:`~ssl.SSLContext`, serves as a container for persistent
1635 SSL data, such as protocol settings, certificates, private keys, and various
1636 other options. It includes a :meth:`~ssl.SSLContext.wrap_socket` for creating
1637 an SSL socket from an SSL context.
Antoine Pitrou4f2a0a82010-07-31 18:08:33 +00001638
Raymond Hettinger4854d142011-01-17 21:29:58 +00001639* A new function, :func:`ssl.match_hostname`, supports server identity
1640 verification for higher-level protocols by implementing the rules of HTTPS
1641 (from :rfc:`2818`) which are also suitable for other protocols.
Antoine Pitrou0ee4c9f2010-10-08 16:46:17 +00001642
Raymond Hettingerbba537b2010-12-15 18:20:19 +00001643* The :func:`ssl.wrap_socket` constructor function now takes a *ciphers*
Raymond Hettinger4854d142011-01-17 21:29:58 +00001644 argument. The *ciphers* string lists the allowed encryption algorithms using
1645 the format described in the `OpenSSL documentation
Sanyam Khurana338cd832018-01-20 05:55:37 +05301646 <https://www.openssl.org/docs/manmaster/man1/ciphers.html#CIPHER-LIST-FORMAT>`__.
Antoine Pitrou4f2a0a82010-07-31 18:08:33 +00001647
Raymond Hettinger4854d142011-01-17 21:29:58 +00001648* When linked against recent versions of OpenSSL, the :mod:`ssl` module now
1649 supports the Server Name Indication extension to the TLS protocol, allowing
1650 multiple "virtual hosts" using different certificates on a single IP port.
1651 This extension is only supported in client mode, and is activated by passing
1652 the *server_hostname* argument to :meth:`ssl.SSLContext.wrap_socket`.
Antoine Pitrou7d15a722010-11-05 22:13:55 +00001653
Raymond Hettingerbba537b2010-12-15 18:20:19 +00001654* Various options have been added to the :mod:`ssl` module, such as
Raymond Hettinger4854d142011-01-17 21:29:58 +00001655 :data:`~ssl.OP_NO_SSLv2` which disables the insecure and obsolete SSLv2
1656 protocol.
Antoine Pitrou4f2a0a82010-07-31 18:08:33 +00001657
Raymond Hettinger4854d142011-01-17 21:29:58 +00001658* The extension now loads all the OpenSSL ciphers and digest algorithms. If
1659 some SSL certificates cannot be verified, they are reported as an "unknown
1660 algorithm" error.
Antoine Pitrou4f2a0a82010-07-31 18:08:33 +00001661
Raymond Hettinger4854d142011-01-17 21:29:58 +00001662* The version of OpenSSL being used is now accessible using the module
1663 attributes :data:`ssl.OPENSSL_VERSION` (a string),
1664 :data:`ssl.OPENSSL_VERSION_INFO` (a 5-tuple), and
1665 :data:`ssl.OPENSSL_VERSION_NUMBER` (an integer).
1666
1667(Contributed by Antoine Pitrou in :issue:`8850`, :issue:`1589`, :issue:`8322`,
1668:issue:`5639`, :issue:`4870`, :issue:`8484`, and :issue:`8321`.)
Antoine Pitrou4f2a0a82010-07-31 18:08:33 +00001669
Raymond Hettingerbba537b2010-12-15 18:20:19 +00001670nntp
1671----
Raymond Hettinger070ec702010-12-10 17:45:13 +00001672
Raymond Hettingerbba537b2010-12-15 18:20:19 +00001673The :mod:`nntplib` module has a revamped implementation with better bytes and
Raymond Hettingerde2e6182011-01-10 05:40:57 +00001674text semantics as well as more practical APIs. These improvements break
Raymond Hettingerbba537b2010-12-15 18:20:19 +00001675compatibility with the nntplib version in Python 3.1, which was partly
1676dysfunctional in itself.
Raymond Hettinger070ec702010-12-10 17:45:13 +00001677
Antoine Pitrou33da1d62011-01-16 18:16:09 +00001678Support for secure connections through both implicit (using
1679:class:`nntplib.NNTP_SSL`) and explicit (using :meth:`nntplib.NNTP.starttls`)
1680TLS has also been added.
1681
1682(Contributed by Antoine Pitrou in :issue:`9360` and Andrew Vant in :issue:`1926`.)
Raymond Hettingerbba537b2010-12-15 18:20:19 +00001683
1684certificates
1685------------
1686
1687:class:`http.client.HTTPSConnection`, :class:`urllib.request.HTTPSHandler`
1688and :func:`urllib.request.urlopen` now take optional arguments to allow for
1689server certificate checking against a set of Certificate Authorities,
1690as recommended in public uses of HTTPS.
1691
1692(Added by Antoine Pitrou, :issue:`9003`.)
1693
Antoine Pitrou2e8ec222011-01-16 18:41:36 +00001694imaplib
1695-------
1696
1697Support for explicit TLS on standard IMAP4 connections has been added through
1698the new :mod:`imaplib.IMAP4.starttls` method.
1699
1700(Contributed by Lorenzo M. Catucci and Antoine Pitrou, :issue:`4471`.)
1701
Raymond Hettinger62399742011-01-30 00:55:47 +00001702http.client
1703-----------
1704
1705There were a number of small API improvements in the :mod:`http.client` module.
1706The old-style HTTP 0.9 simple responses are no longer supported and the *strict*
1707parameter is deprecated in all classes.
1708
1709The :class:`~http.client.HTTPConnection` and
1710:class:`~http.client.HTTPSConnection` classes now have a *source_address*
1711parameter for a (host, port) tuple indicating where the HTTP connection is made
1712from.
1713
1714Support for certificate checking and HTTPS virtual hosts were added to
1715:class:`~http.client.HTTPSConnection`.
1716
1717The :meth:`~http.client.HTTPConnection.request` method on connection objects
1718allowed an optional *body* argument so that a :term:`file object` could be used
1719to supply the content of the request. Conveniently, the *body* argument now
1720also accepts an :term:`iterable` object so long as it includes an explicit
1721``Content-Length`` header. This extended interface is much more flexible than
1722before.
1723
1724To establish an HTTPS connection through a proxy server, there is a new
1725:meth:`~http.client.HTTPConnection.set_tunnel` method that sets the host and
1726port for HTTP Connect tunneling.
1727
Raymond Hettinger1fbd8e12011-02-10 09:43:04 +00001728To match the behavior of :mod:`http.server`, the HTTP client library now also
Raymond Hettinger62399742011-01-30 00:55:47 +00001729encodes headers with ISO-8859-1 (Latin-1) encoding. It was already doing that
Raymond Hettinger1fbd8e12011-02-10 09:43:04 +00001730for incoming headers, so now the behavior is consistent for both incoming and
Raymond Hettinger62399742011-01-30 00:55:47 +00001731outgoing traffic. (See work by Armin Ronacher in :issue:`10980`.)
Raymond Hettinger399bf7b2011-01-24 10:11:12 +00001732
Raymond Hettingerbba537b2010-12-15 18:20:19 +00001733unittest
1734--------
Antoine Pitrouafb078d2010-11-05 22:18:28 +00001735
Raymond Hettinger2169ee22011-01-05 22:27:49 +00001736The unittest module has a number of improvements supporting test discovery for
1737packages, easier experimentation at the interactive prompt, new testcase
1738methods, improved diagnostic messages for test failures, and better method
1739names.
1740
Raymond Hettingerde2e6182011-01-10 05:40:57 +00001741* The command-line call ``python -m unittest`` can now accept file paths
Raymond Hettingera0266332010-12-07 08:52:41 +00001742 instead of module names for running specific tests (:issue:`10620`). The new
1743 test discovery can find tests within packages, locating any test importable
Raymond Hettingerc136b042011-01-18 07:15:39 +00001744 from the top-level directory. The top-level directory can be specified with
Raymond Hettingera0266332010-12-07 08:52:41 +00001745 the `-t` option, a pattern for matching files with ``-p``, and a directory to
Martin Panter1050d2d2016-07-26 11:18:21 +02001746 start discovery with ``-s``:
1747
1748 .. code-block:: shell-session
Raymond Hettingera0266332010-12-07 08:52:41 +00001749
Raymond Hettingerde2e6182011-01-10 05:40:57 +00001750 $ python -m unittest discover -s my_proj_dir -p _test.py
Raymond Hettingera0266332010-12-07 08:52:41 +00001751
1752 (Contributed by Michael Foord.)
Antoine Pitroud3052002010-09-15 15:09:40 +00001753
Raymond Hettinger2169ee22011-01-05 22:27:49 +00001754* Experimentation at the interactive prompt is now easier because the
1755 :class:`unittest.case.TestCase` class can now be instantiated without
1756 arguments:
1757
Zachary Ware40326202016-08-10 00:30:41 -05001758 >>> from unittest import TestCase
Raymond Hettinger2169ee22011-01-05 22:27:49 +00001759 >>> TestCase().assertEqual(pow(2, 3), 8)
1760
1761 (Contributed by Michael Foord.)
1762
Raymond Hettingerdc2f9b52010-12-05 07:02:45 +00001763* The :mod:`unittest` module has two new methods,
1764 :meth:`~unittest.TestCase.assertWarns` and
Raymond Hettinger2169ee22011-01-05 22:27:49 +00001765 :meth:`~unittest.TestCase.assertWarnsRegex` to verify that a given warning type
Raymond Hettinger6f0d59b2011-01-17 23:10:55 +00001766 is triggered by the code under test::
Antoine Pitroud3052002010-09-15 15:09:40 +00001767
Raymond Hettinger6f0d59b2011-01-17 23:10:55 +00001768 with self.assertWarns(DeprecationWarning):
1769 legacy_function('XYZ')
Ezio Melotti2baf1a62010-11-22 12:56:58 +00001770
Antoine Pitroueec6dbf2011-01-16 18:21:12 +00001771 (Contributed by Antoine Pitrou, :issue:`9754`.)
Raymond Hettinger2169ee22011-01-05 22:27:49 +00001772
Raymond Hettinger21ec4bc2010-12-10 01:09:01 +00001773 Another new method, :meth:`~unittest.TestCase.assertCountEqual` is used to
Raymond Hettingerffad35e2010-12-14 21:12:03 +00001774 compare two iterables to determine if their element counts are equal (whether
1775 the same elements are present with the same number of occurrences regardless
1776 of order)::
Raymond Hettingera0266332010-12-07 08:52:41 +00001777
1778 def test_anagram(self):
1779 self.assertCountEqual('algorithm', 'logarithm')
1780
Raymond Hettinger2169ee22011-01-05 22:27:49 +00001781 (Contributed by Raymond Hettinger.)
1782
1783* A principal feature of the unittest module is an effort to produce meaningful
Raymond Hettingerde2e6182011-01-10 05:40:57 +00001784 diagnostics when a test fails. When possible, the failure is recorded along
Raymond Hettingera0266332010-12-07 08:52:41 +00001785 with a diff of the output. This is especially helpful for analyzing log files
1786 of failed test runs. However, since diffs can sometime be voluminous, there is
Raymond Hettinger1fbd8e12011-02-10 09:43:04 +00001787 a new :attr:`~unittest.TestCase.maxDiff` attribute that sets maximum length of
1788 diffs displayed.
Raymond Hettingera0266332010-12-07 08:52:41 +00001789
Raymond Hettinger2169ee22011-01-05 22:27:49 +00001790* In addition, the method names in the module have undergone a number of clean-ups.
1791
1792 For example, :meth:`~unittest.TestCase.assertRegex` is the new name for
Raymond Hettingera0266332010-12-07 08:52:41 +00001793 :meth:`~unittest.TestCase.assertRegexpMatches` which was misnamed because the
Raymond Hettinger21ec4bc2010-12-10 01:09:01 +00001794 test uses :func:`re.search`, not :func:`re.match`. Other methods using
Raymond Hettinger2169ee22011-01-05 22:27:49 +00001795 regular expressions are now named using short form "Regex" in preference to
1796 "Regexp" -- this matches the names used in other unittest implementations,
Raymond Hettinger21ec4bc2010-12-10 01:09:01 +00001797 matches Python's old name for the :mod:`re` module, and it has unambiguous
1798 camel-casing.
Raymond Hettingerdc2f9b52010-12-05 07:02:45 +00001799
Raymond Hettinger2169ee22011-01-05 22:27:49 +00001800 (Contributed by Raymond Hettinger and implemented by Ezio Melotti.)
1801
Raymond Hettingerde2e6182011-01-10 05:40:57 +00001802* To improve consistency, some long-standing method aliases are being
Raymond Hettingerdc2f9b52010-12-05 07:02:45 +00001803 deprecated in favor of the preferred names:
1804
Raymond Hettingerc1dfa2e2011-01-19 04:24:57 +00001805 =============================== ==============================
1806 Old Name Preferred Name
1807 =============================== ==============================
1808 :meth:`assert_` :meth:`.assertTrue`
1809 :meth:`assertEquals` :meth:`.assertEqual`
1810 :meth:`assertNotEquals` :meth:`.assertNotEqual`
1811 :meth:`assertAlmostEquals` :meth:`.assertAlmostEqual`
1812 :meth:`assertNotAlmostEquals` :meth:`.assertNotAlmostEqual`
1813 =============================== ==============================
Raymond Hettingerdc2f9b52010-12-05 07:02:45 +00001814
1815 Likewise, the ``TestCase.fail*`` methods deprecated in Python 3.1 are expected
Raymond Hettingerc1dfa2e2011-01-19 04:24:57 +00001816 to be removed in Python 3.3. Also see the :ref:`deprecated-aliases` section in
Raymond Hettingerdc2f9b52010-12-05 07:02:45 +00001817 the :mod:`unittest` documentation.
Ezio Melotti2baf1a62010-11-22 12:56:58 +00001818
1819 (Contributed by Ezio Melotti; :issue:`9424`.)
Antoine Pitroud3052002010-09-15 15:09:40 +00001820
Raymond Hettinger2169ee22011-01-05 22:27:49 +00001821* The :meth:`~unittest.TestCase.assertDictContainsSubset` method was deprecated
Raymond Hettingerc8a16862011-01-18 09:01:34 +00001822 because it was misimplemented with the arguments in the wrong order. This
Raymond Hettinger2169ee22011-01-05 22:27:49 +00001823 created hard-to-debug optical illusions where tests like
1824 ``TestCase().assertDictContainsSubset({'a':1, 'b':2}, {'a':1})`` would fail.
1825
1826 (Contributed by Raymond Hettinger.)
1827
Raymond Hettingerbba537b2010-12-15 18:20:19 +00001828random
1829------
Raymond Hettingere0a96002010-12-15 17:54:13 +00001830
Raymond Hettinger0358a172010-12-15 19:00:38 +00001831The integer methods in the :mod:`random` module now do a better job of producing
Raymond Hettinger99db3fd2010-12-15 19:33:49 +00001832uniform distributions. Previously, they computed selections with
1833``int(n*random())`` which had a slight bias whenever *n* was not a power of two.
Raymond Hettingerc136b042011-01-18 07:15:39 +00001834Now, multiple selections are made from a range up to the next power of two and a
Raymond Hettinger99db3fd2010-12-15 19:33:49 +00001835selection is kept only when it falls within the range ``0 <= x < n``. The
1836functions and methods affected are :func:`~random.randrange`,
1837:func:`~random.randint`, :func:`~random.choice`, :func:`~random.shuffle` and
1838:func:`~random.sample`.
Raymond Hettingerbba537b2010-12-15 18:20:19 +00001839
1840(Contributed by Raymond Hettinger; :issue:`9025`.)
1841
1842poplib
1843------
Raymond Hettingere0a96002010-12-15 17:54:13 +00001844
Raymond Hettingered92b5a2011-02-11 00:03:03 +00001845:class:`~poplib.POP3_SSL` class now accepts a *context* parameter, which is a
1846:class:`ssl.SSLContext` object allowing bundling SSL configuration options,
1847certificates and private keys into a single (potentially long-lived)
1848structure.
Giampaolo Rodolà42382fe2010-08-17 16:09:53 +00001849
Raymond Hettingered92b5a2011-02-11 00:03:03 +00001850(Contributed by Giampaolo Rodolà; :issue:`8807`.)
Giampaolo Rodolà42382fe2010-08-17 16:09:53 +00001851
Raymond Hettingered92b5a2011-02-11 00:03:03 +00001852asyncore
1853--------
Giampaolo Rodolà977c7072010-10-04 21:08:36 +00001854
Raymond Hettingered92b5a2011-02-11 00:03:03 +00001855:class:`asyncore.dispatcher` now provides a
1856:meth:`~asyncore.dispatcher.handle_accepted()` method
1857returning a `(sock, addr)` pair which is called when a connection has actually
1858been established with a new remote endpoint. This is supposed to be used as a
1859replacement for old :meth:`~asyncore.dispatcher.handle_accept()` and avoids
1860the user to call :meth:`~asyncore.dispatcher.accept()` directly.
1861
Raymond Hettinger44028d82011-02-11 00:08:38 +00001862(Contributed by Giampaolo Rodolà; :issue:`6706`.)
Georg Brandlda0a2112010-09-05 11:28:33 +00001863
Raymond Hettingerbba537b2010-12-15 18:20:19 +00001864tempfile
1865--------
Raymond Hettingera0266332010-12-07 08:52:41 +00001866
Raymond Hettingerbba537b2010-12-15 18:20:19 +00001867The :mod:`tempfile` module has a new context manager,
1868:class:`~tempfile.TemporaryDirectory` which provides easy deterministic
Raymond Hettinger6f0d59b2011-01-17 23:10:55 +00001869cleanup of temporary directories::
Nick Coghlan543af752010-10-24 11:23:25 +00001870
Raymond Hettinger6f0d59b2011-01-17 23:10:55 +00001871 with tempfile.TemporaryDirectory() as tmpdirname:
1872 print('created temporary dir:', tmpdirname)
Nick Coghlan543af752010-10-24 11:23:25 +00001873
Raymond Hettingerbba537b2010-12-15 18:20:19 +00001874(Contributed by Neil Schemenauer and Nick Coghlan; :issue:`5178`.)
Nick Coghlane0f04652010-11-21 03:44:04 +00001875
Raymond Hettingerbba537b2010-12-15 18:20:19 +00001876inspect
1877-------
1878
Raymond Hettinger0358a172010-12-15 19:00:38 +00001879* The :mod:`inspect` module has a new function
1880 :func:`~inspect.getgeneratorstate` to easily identify the current state of a
Raymond Hettingera275c982011-01-20 04:03:19 +00001881 generator-iterator::
Raymond Hettinger4bea9782011-01-19 04:14:34 +00001882
Raymond Hettingera275c982011-01-20 04:03:19 +00001883 >>> from inspect import getgeneratorstate
Raymond Hettinger4bea9782011-01-19 04:14:34 +00001884 >>> def gen():
Serhiy Storchakadba90392016-05-10 12:01:23 +03001885 ... yield 'demo'
Raymond Hettinger4bea9782011-01-19 04:14:34 +00001886 >>> g = gen()
Raymond Hettingera275c982011-01-20 04:03:19 +00001887 >>> getgeneratorstate(g)
Raymond Hettinger4bea9782011-01-19 04:14:34 +00001888 'GEN_CREATED'
1889 >>> next(g)
Raymond Hettingera275c982011-01-20 04:03:19 +00001890 'demo'
1891 >>> getgeneratorstate(g)
Raymond Hettinger4bea9782011-01-19 04:14:34 +00001892 'GEN_SUSPENDED'
Raymond Hettingera275c982011-01-20 04:03:19 +00001893 >>> next(g, None)
1894 >>> getgeneratorstate(g)
1895 'GEN_CLOSED'
Raymond Hettinger4bea9782011-01-19 04:14:34 +00001896
1897 (Contributed by Rodolpho Eckhardt and Nick Coghlan, :issue:`10220`.)
Raymond Hettingerbba537b2010-12-15 18:20:19 +00001898
Raymond Hettingera55ffbc2010-12-15 18:31:57 +00001899* To support lookups without the possibility of activating a dynamic attribute,
1900 the :mod:`inspect` module has a new function, :func:`~inspect.getattr_static`.
Raymond Hettingerc8a16862011-01-18 09:01:34 +00001901 Unlike :func:`hasattr`, this is a true read-only search, guaranteed not to
Raymond Hettinger4bea9782011-01-19 04:14:34 +00001902 change state while it is searching::
1903
1904 >>> class A:
Serhiy Storchakadba90392016-05-10 12:01:23 +03001905 ... @property
1906 ... def f(self):
1907 ... print('Running')
1908 ... return 10
1909 ...
Raymond Hettinger4bea9782011-01-19 04:14:34 +00001910 >>> a = A()
1911 >>> getattr(a, 'f')
1912 Running
1913 10
1914 >>> inspect.getattr_static(a, 'f')
1915 <property object at 0x1022bd788>
1916
1917 (Contributed by Michael Foord.)
Nick Coghlane0f04652010-11-21 03:44:04 +00001918
Raymond Hettingerbba537b2010-12-15 18:20:19 +00001919pydoc
1920-----
Nick Coghlan7bb30b72010-12-03 09:29:11 +00001921
Raymond Hettinger89c1cd12011-01-19 04:43:45 +00001922The :mod:`pydoc` module now provides a much-improved Web server interface, as
1923well as a new command-line option ``-b`` to automatically open a browser window
Martin Panter1050d2d2016-07-26 11:18:21 +02001924to display that server:
1925
1926.. code-block:: shell-session
Raymond Hettinger89c1cd12011-01-19 04:43:45 +00001927
1928 $ pydoc3.2 -b
Nick Coghlan7bb30b72010-12-03 09:29:11 +00001929
Raymond Hettingerbba537b2010-12-15 18:20:19 +00001930(Contributed by Ron Adam; :issue:`2001`.)
Raymond Hettinger3f9734c2010-12-07 01:47:52 +00001931
Raymond Hettingeracff5952011-01-24 01:51:49 +00001932dis
1933---
1934
1935The :mod:`dis` module gained two new functions for inspecting code,
1936:func:`~dis.code_info` and :func:`~dis.show_code`. Both provide detailed code
1937object information for the supplied function, method, source code string or code
1938object. The former returns a string and the latter prints it::
1939
1940 >>> import dis, random
Raymond Hettinger14eb4c32011-01-26 01:13:26 +00001941 >>> dis.show_code(random.choice)
Raymond Hettingeracff5952011-01-24 01:51:49 +00001942 Name: choice
1943 Filename: /Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/random.py
1944 Argument count: 2
1945 Kw-only arguments: 0
1946 Number of locals: 3
1947 Stack size: 11
1948 Flags: OPTIMIZED, NEWLOCALS, NOFREE
1949 Constants:
1950 0: 'Choose a random element from a non-empty sequence.'
1951 1: 'Cannot choose from an empty sequence'
1952 Names:
1953 0: _randbelow
1954 1: len
1955 2: ValueError
1956 3: IndexError
1957 Variable names:
1958 0: self
1959 1: seq
1960 2: i
1961
Raymond Hettingerfb2d1672011-02-06 20:08:57 +00001962In addition, the :func:`~dis.dis` function now accepts string arguments
1963so that the common idiom ``dis(compile(s, '', 'eval'))`` can be shortened
Raymond Hettinger8cd0b382011-02-07 04:00:24 +00001964to ``dis(s)``::
Raymond Hettingerfb2d1672011-02-06 20:08:57 +00001965
1966 >>> dis('3*x+1 if x%2==1 else x//2')
1967 1 0 LOAD_NAME 0 (x)
1968 3 LOAD_CONST 0 (2)
1969 6 BINARY_MODULO
1970 7 LOAD_CONST 1 (1)
1971 10 COMPARE_OP 2 (==)
1972 13 POP_JUMP_IF_FALSE 28
1973 16 LOAD_CONST 2 (3)
1974 19 LOAD_NAME 0 (x)
1975 22 BINARY_MULTIPLY
1976 23 LOAD_CONST 1 (1)
1977 26 BINARY_ADD
1978 27 RETURN_VALUE
1979 >> 28 LOAD_NAME 0 (x)
1980 31 LOAD_CONST 0 (2)
1981 34 BINARY_FLOOR_DIVIDE
1982 35 RETURN_VALUE
1983
1984Taken together, these improvements make it easier to explore how CPython is
1985implemented and to see for yourself what the language syntax does
1986under-the-hood.
1987
Raymond Hettingeracff5952011-01-24 01:51:49 +00001988(Contributed by Nick Coghlan in :issue:`9147`.)
1989
1990dbm
1991---
1992
Raymond Hettinger9c2fc472011-01-31 06:14:48 +00001993All database modules now support the :meth:`get` and :meth:`setdefault` methods.
Raymond Hettingeracff5952011-01-24 01:51:49 +00001994
1995(Suggested by Ray Allen in :issue:`9523`.)
1996
1997ctypes
1998------
1999
2000A new type, :class:`ctypes.c_ssize_t` represents the C :c:type:`ssize_t` datatype.
2001
Raymond Hettingerda4a05d2011-01-25 07:46:07 +00002002site
2003----
2004
2005The :mod:`site` module has three new functions useful for reporting on the
2006details of a given Python installation.
2007
2008* :func:`~site.getsitepackages` lists all global site-packages directories.
2009
2010* :func:`~site.getuserbase` reports on the user's base directory where data can
2011 be stored.
2012
2013* :func:`~site.getusersitepackages` reveals the user-specific site-packages
2014 directory path.
2015
2016::
2017
Raymond Hettinger14eb4c32011-01-26 01:13:26 +00002018 >>> import site
Raymond Hettingerda4a05d2011-01-25 07:46:07 +00002019 >>> site.getsitepackages()
2020 ['/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/site-packages',
2021 '/Library/Frameworks/Python.framework/Versions/3.2/lib/site-python',
2022 '/Library/Python/3.2/site-packages']
2023 >>> site.getuserbase()
2024 '/Users/raymondhettinger/Library/Python/3.2'
2025 >>> site.getusersitepackages()
2026 '/Users/raymondhettinger/Library/Python/3.2/lib/python/site-packages'
2027
2028Conveniently, some of site's functionality is accessible directly from the
Martin Panter1050d2d2016-07-26 11:18:21 +02002029command-line:
2030
2031.. code-block:: shell-session
Raymond Hettingerda4a05d2011-01-25 07:46:07 +00002032
2033 $ python -m site --user-base
2034 /Users/raymondhettinger/.local
2035 $ python -m site --user-site
2036 /Users/raymondhettinger/.local/lib/python3.2/site-packages
2037
Éric Araujo85dacf72011-02-19 18:06:50 +00002038(Contributed by Tarek Ziadé in :issue:`6693`.)
Raymond Hettinger712d2b42011-01-27 06:46:54 +00002039
Raymond Hettingerbba537b2010-12-15 18:20:19 +00002040sysconfig
2041---------
Raymond Hettinger3f9734c2010-12-07 01:47:52 +00002042
Raymond Hettingerde2e6182011-01-10 05:40:57 +00002043The new :mod:`sysconfig` module makes it straightforward to discover
Raymond Hettinger1fbd8e12011-02-10 09:43:04 +00002044installation paths and configuration variables that vary across platforms and
Raymond Hettingerbba537b2010-12-15 18:20:19 +00002045installations.
Raymond Hettinger3f9734c2010-12-07 01:47:52 +00002046
Raymond Hettingerbba537b2010-12-15 18:20:19 +00002047The module offers access simple access functions for platform and version
2048information:
Raymond Hettinger3f9734c2010-12-07 01:47:52 +00002049
Raymond Hettingerbba537b2010-12-15 18:20:19 +00002050* :func:`~sysconfig.get_platform` returning values like *linux-i586* or
2051 *macosx-10.6-ppc*.
Raymond Hettingerde2e6182011-01-10 05:40:57 +00002052* :func:`~sysconfig.get_python_version` returns a Python version string
2053 such as "3.2".
Raymond Hettinger3f9734c2010-12-07 01:47:52 +00002054
Raymond Hettingerbba537b2010-12-15 18:20:19 +00002055It also provides access to the paths and variables corresponding to one of
2056seven named schemes used by :mod:`distutils`. Those include *posix_prefix*,
2057*posix_home*, *posix_user*, *nt*, *nt_user*, *os2*, *os2_home*:
Raymond Hettinger3f9734c2010-12-07 01:47:52 +00002058
Raymond Hettingerbba537b2010-12-15 18:20:19 +00002059* :func:`~sysconfig.get_paths` makes a dictionary containing installation paths
2060 for the current installation scheme.
2061* :func:`~sysconfig.get_config_vars` returns a dictionary of platform specific
2062 variables.
Raymond Hettinger3f9734c2010-12-07 01:47:52 +00002063
Martin Panter1050d2d2016-07-26 11:18:21 +02002064There is also a convenient command-line interface:
2065
2066.. code-block:: doscon
Raymond Hettinger3f9734c2010-12-07 01:47:52 +00002067
Raymond Hettingerbba537b2010-12-15 18:20:19 +00002068 C:\Python32>python -m sysconfig
2069 Platform: "win32"
2070 Python version: "3.2"
2071 Current installation scheme: "nt"
Raymond Hettinger3f9734c2010-12-07 01:47:52 +00002072
Raymond Hettingerbba537b2010-12-15 18:20:19 +00002073 Paths:
2074 data = "C:\Python32"
Łukasz Langa79a06ed2010-12-17 22:05:46 +00002075 include = "C:\Python32\Include"
2076 platinclude = "C:\Python32\Include"
2077 platlib = "C:\Python32\Lib\site-packages"
2078 platstdlib = "C:\Python32\Lib"
2079 purelib = "C:\Python32\Lib\site-packages"
2080 scripts = "C:\Python32\Scripts"
2081 stdlib = "C:\Python32\Lib"
Raymond Hettingerbba537b2010-12-15 18:20:19 +00002082
2083 Variables:
2084 BINDIR = "C:\Python32"
Łukasz Langa79a06ed2010-12-17 22:05:46 +00002085 BINLIBDEST = "C:\Python32\Lib"
2086 EXE = ".exe"
2087 INCLUDEPY = "C:\Python32\Include"
2088 LIBDEST = "C:\Python32\Lib"
2089 SO = ".pyd"
2090 VERSION = "32"
2091 abiflags = ""
2092 base = "C:\Python32"
2093 exec_prefix = "C:\Python32"
2094 platbase = "C:\Python32"
2095 prefix = "C:\Python32"
2096 projectbase = "C:\Python32"
2097 py_version = "3.2"
2098 py_version_nodot = "32"
2099 py_version_short = "3.2"
2100 srcdir = "C:\Python32"
2101 userbase = "C:\Documents and Settings\Raymond\Application Data\Python"
Raymond Hettingerbba537b2010-12-15 18:20:19 +00002102
Raymond Hettinger712d2b42011-01-27 06:46:54 +00002103(Moved out of Distutils by Tarek Ziadé.)
2104
Raymond Hettingerbba537b2010-12-15 18:20:19 +00002105pdb
2106---
2107
2108The :mod:`pdb` debugger module gained a number of usability improvements:
Raymond Hettingerb5d79332010-12-07 02:04:56 +00002109
Raymond Hettinger99db3fd2010-12-15 19:33:49 +00002110* :file:`pdb.py` now has a ``-c`` option that executes commands as given in a
2111 :file:`.pdbrc` script file.
2112* A :file:`.pdbrc` script file can contain ``continue`` and ``next`` commands
2113 that continue debugging.
2114* The :class:`Pdb` class constructor now accepts a *nosigint* argument.
Raymond Hettinger51e21072011-01-10 23:38:15 +00002115* New commands: ``l(list)``, ``ll(long list)`` and ``source`` for
Raymond Hettinger99db3fd2010-12-15 19:33:49 +00002116 listing source code.
Raymond Hettingerde2e6182011-01-10 05:40:57 +00002117* New commands: ``display`` and ``undisplay`` for showing or hiding
Raymond Hettinger99db3fd2010-12-15 19:33:49 +00002118 the value of an expression if it has changed.
Raymond Hettingerde2e6182011-01-10 05:40:57 +00002119* New command: ``interact`` for starting an interactive interpreter containing
Raymond Hettinger99db3fd2010-12-15 19:33:49 +00002120 the global and local names found in the current scope.
Raymond Hettingerde2e6182011-01-10 05:40:57 +00002121* Breakpoints can be cleared by breakpoint number.
Raymond Hettingerb5d79332010-12-07 02:04:56 +00002122
Georg Brandl101234b2010-12-18 11:53:25 +00002123(Contributed by Georg Brandl, Antonio Cuni and Ilya Sandler.)
2124
Łukasz Langa2b38b6c2010-12-17 21:57:32 +00002125configparser
2126------------
Raymond Hettinger3f9734c2010-12-07 01:47:52 +00002127
Łukasz Langa2b38b6c2010-12-17 21:57:32 +00002128The :mod:`configparser` module was modified to improve usability and
2129predictability of the default parser and its supported INI syntax. The old
2130:class:`ConfigParser` class was removed in favor of :class:`SafeConfigParser`
Raymond Hettinger04129742010-12-18 10:57:50 +00002131which has in turn been renamed to :class:`~configparser.ConfigParser`. Support
2132for inline comments is now turned off by default and section or option
2133duplicates are not allowed in a single configuration source.
Łukasz Langa2b38b6c2010-12-17 21:57:32 +00002134
2135Config parsers gained a new API based on the mapping protocol::
2136
Raymond Hettinger02dd70b2011-01-17 23:39:39 +00002137 >>> parser = ConfigParser()
2138 >>> parser.read_string("""
Serhiy Storchakadba90392016-05-10 12:01:23 +03002139 ... [DEFAULT]
2140 ... location = upper left
2141 ... visible = yes
2142 ... editable = no
2143 ... color = blue
2144 ...
2145 ... [main]
2146 ... title = Main Menu
2147 ... color = green
2148 ...
2149 ... [options]
2150 ... title = Options
2151 ... """)
Raymond Hettinger02dd70b2011-01-17 23:39:39 +00002152 >>> parser['main']['color']
2153 'green'
2154 >>> parser['main']['editable']
2155 'no'
2156 >>> section = parser['options']
2157 >>> section['title']
2158 'Options'
2159 >>> section['title'] = 'Options (editable: %(editable)s)'
2160 >>> section['title']
2161 'Options (editable: no)'
2162
2163The new API is implemented on top of the classical API, so custom parser
Łukasz Langa2b38b6c2010-12-17 21:57:32 +00002164subclasses should be able to use it without modifications.
2165
2166The INI file structure accepted by config parsers can now be customized. Users
Raymond Hettinger04129742010-12-18 10:57:50 +00002167can specify alternative option/value delimiters and comment prefixes, change the
Raymond Hettinger02dd70b2011-01-17 23:39:39 +00002168name of the *DEFAULT* section or switch the interpolation syntax.
2169
Raymond Hettingerba5512f2011-01-18 08:28:01 +00002170There is support for pluggable interpolation including an additional interpolation
Raymond Hettinger02dd70b2011-01-17 23:39:39 +00002171handler :class:`~configparser.ExtendedInterpolation`::
Łukasz Langa2b38b6c2010-12-17 21:57:32 +00002172
2173 >>> parser = ConfigParser(interpolation=ExtendedInterpolation())
2174 >>> parser.read_dict({'buildout': {'directory': '/home/ambv/zope9'},
Serhiy Storchakadba90392016-05-10 12:01:23 +03002175 ... 'custom': {'prefix': '/usr/local'}})
Łukasz Langa2b38b6c2010-12-17 21:57:32 +00002176 >>> parser.read_string("""
Serhiy Storchakadba90392016-05-10 12:01:23 +03002177 ... [buildout]
2178 ... parts =
2179 ... zope9
2180 ... instance
2181 ... find-links =
2182 ... ${buildout:directory}/downloads/dist
2183 ...
2184 ... [zope9]
2185 ... recipe = plone.recipe.zope9install
2186 ... location = /opt/zope
2187 ...
2188 ... [instance]
2189 ... recipe = plone.recipe.zope9instance
2190 ... zope9-location = ${zope9:location}
2191 ... zope-conf = ${custom:prefix}/etc/zope.conf
2192 ... """)
Łukasz Langa2b38b6c2010-12-17 21:57:32 +00002193 >>> parser['buildout']['find-links']
2194 '\n/home/ambv/zope9/downloads/dist'
2195 >>> parser['instance']['zope-conf']
2196 '/usr/local/etc/zope.conf'
2197 >>> instance = parser['instance']
2198 >>> instance['zope-conf']
2199 '/usr/local/etc/zope.conf'
2200 >>> instance['zope9-location']
2201 '/opt/zope'
2202
2203A number of smaller features were also introduced, like support for specifying
Raymond Hettinger04129742010-12-18 10:57:50 +00002204encoding in read operations, specifying fallback values for get-functions, or
2205reading directly from dictionaries and strings.
Łukasz Langa2b38b6c2010-12-17 21:57:32 +00002206
2207(All changes contributed by Łukasz Langa.)
2208
Raymond Hettinger9f62d742011-02-10 09:20:26 +00002209.. XXX consider showing a difflib example
Eli Benderskye2ae8072011-01-31 04:21:40 +00002210
Raymond Hettinger9a236b02011-01-24 09:01:27 +00002211urllib.parse
2212------------
2213
2214A number of usability improvements were made for the :mod:`urllib.parse` module.
2215
2216The :func:`~urllib.parse.urlparse` function now supports `IPv6
Georg Brandl5d941342016-02-26 19:37:12 +01002217<https://en.wikipedia.org/wiki/IPv6>`_ addresses as described in :rfc:`2732`:
Raymond Hettinger9a236b02011-01-24 09:01:27 +00002218
2219 >>> import urllib.parse
Zachary Ware40326202016-08-10 00:30:41 -05002220 >>> urllib.parse.urlparse('http://[dead:beef:cafe:5417:affe:8FA3:deaf:feed]/foo/') # doctest: +NORMALIZE_WHITESPACE
Raymond Hettinger9a236b02011-01-24 09:01:27 +00002221 ParseResult(scheme='http',
2222 netloc='[dead:beef:cafe:5417:affe:8FA3:deaf:feed]',
2223 path='/foo/',
2224 params='',
2225 query='',
2226 fragment='')
2227
2228The :func:`~urllib.parse.urldefrag` function now returns a :term:`named tuple`::
2229
2230 >>> r = urllib.parse.urldefrag('http://python.org/about/#target')
2231 >>> r
2232 DefragResult(url='http://python.org/about/', fragment='target')
2233 >>> r[0]
Éric Araujoe0e824d2011-02-19 18:46:02 +00002234 'http://python.org/about/'
Raymond Hettinger9a236b02011-01-24 09:01:27 +00002235 >>> r.fragment
2236 'target'
2237
2238And, the :func:`~urllib.parse.urlencode` function is now much more flexible,
2239accepting either a string or bytes type for the *query* argument. If it is a
2240string, then the *safe*, *encoding*, and *error* parameters are sent to
2241:func:`~urllib.parse.quote_plus` for encoding::
2242
2243 >>> urllib.parse.urlencode([
Serhiy Storchakadba90392016-05-10 12:01:23 +03002244 ... ('type', 'telenovela'),
2245 ... ('name', '¿Dónde Está Elisa?')],
2246 ... encoding='latin-1')
Raymond Hettinger9a236b02011-01-24 09:01:27 +00002247 'type=telenovela&name=%BFD%F3nde+Est%E1+Elisa%3F'
2248
Georg Brandl009a6bd2011-01-24 19:59:08 +00002249As detailed in :ref:`parsing-ascii-encoded-bytes`, all the :mod:`urllib.parse`
Raymond Hettinger9a236b02011-01-24 09:01:27 +00002250functions now accept ASCII-encoded byte strings as input, so long as they are
2251not mixed with regular strings. If ASCII-encoded byte strings are given as
2252parameters, the return types will also be an ASCII-encoded byte strings:
2253
Zachary Ware40326202016-08-10 00:30:41 -05002254 >>> urllib.parse.urlparse(b'http://www.python.org:80/about/') # doctest: +NORMALIZE_WHITESPACE
Raymond Hettinger9a236b02011-01-24 09:01:27 +00002255 ParseResultBytes(scheme=b'http', netloc=b'www.python.org:80',
2256 path=b'/about/', params=b'', query=b'', fragment=b'')
2257
2258(Work by Nick Coghlan, Dan Mahn, and Senthil Kumaran in :issue:`2987`,
2259:issue:`5468`, and :issue:`9873`.)
2260
Raymond Hettinger994d3802011-01-30 07:56:03 +00002261mailbox
2262-------
2263
2264Thanks to a concerted effort by R. David Murray, the :mod:`mailbox` module has
2265been fixed for Python 3.2. The challenge was that mailbox had been originally
2266designed with a text interface, but email messages are best represented with
2267:class:`bytes` because various parts of a message may have different encodings.
2268
2269The solution harnessed the :mod:`email` package's binary support for parsing
2270arbitrary email messages. In addition, the solution required a number of API
2271changes.
2272
2273As expected, the :meth:`~mailbox.Mailbox.add` method for
2274:class:`mailbox.Mailbox` objects now accepts binary input.
2275
2276:class:`~io.StringIO` and text file input are deprecated. Also, string input
2277will fail early if non-ASCII characters are used. Previously it would fail when
2278the email was processed in a later step.
2279
2280There is also support for binary output. The :meth:`~mailbox.Mailbox.get_file`
2281method now returns a file in the binary mode (where it used to incorrectly set
2282the file to text-mode). There is also a new :meth:`~mailbox.Mailbox.get_bytes`
2283method that returns a :class:`bytes` representation of a message corresponding
2284to a given *key*.
2285
Raymond Hettingerce227e32011-01-30 08:20:37 +00002286It is still possible to get non-binary output using the old API's
2287:meth:`~mailbox.Mailbox.get_string` method, but that approach
2288is not very useful. Instead, it is best to extract messages from
2289a :class:`~mailbox.Message` object or to load them from binary input.
2290
2291(Contributed by R. David Murray, with efforts from Steffen Daode Nurpmeso and an
2292initial patch by Victor Stinner in :issue:`9124`.)
Raymond Hettinger994d3802011-01-30 07:56:03 +00002293
Raymond Hettinger2f707c92011-01-25 06:58:01 +00002294turtledemo
2295----------
2296
2297The demonstration code for the :mod:`turtle` module was moved from the *Demo*
2298directory to main library. It includes over a dozen sample scripts with
2299lively displays. Being on :attr:`sys.path`, it can now be run directly
Martin Panter1050d2d2016-07-26 11:18:21 +02002300from the command-line:
2301
2302.. code-block:: shell-session
Raymond Hettinger2f707c92011-01-25 06:58:01 +00002303
2304 $ python -m turtledemo
2305
Raymond Hettinger712d2b42011-01-27 06:46:54 +00002306(Moved from the Demo directory by Alexander Belopolsky in :issue:`10199`.)
Raymond Hettinger3df46212011-01-06 02:01:26 +00002307
Antoine Pitroud42bc512009-11-10 23:18:31 +00002308Multi-threading
2309===============
2310
Georg Brandlda0a2112010-09-05 11:28:33 +00002311* The mechanism for serializing execution of concurrently running Python threads
Raymond Hettingerba5512f2011-01-18 08:28:01 +00002312 (generally known as the :term:`GIL` or :term:`Global Interpreter Lock`) has
2313 been rewritten. Among the objectives were more predictable switching
2314 intervals and reduced overhead due to lock contention and the number of
2315 ensuing system calls. The notion of a "check interval" to allow thread
2316 switches has been abandoned and replaced by an absolute duration expressed in
2317 seconds. This parameter is tunable through :func:`sys.setswitchinterval()`.
2318 It currently defaults to 5 milliseconds.
Antoine Pitroud42bc512009-11-10 23:18:31 +00002319
2320 Additional details about the implementation can be read from a `python-dev
2321 mailing-list message
Georg Brandle73778c2014-10-29 08:36:35 +01002322 <https://mail.python.org/pipermail/python-dev/2009-October/093321.html>`_
Georg Brandlda0a2112010-09-05 11:28:33 +00002323 (however, "priority requests" as exposed in this message have not been kept
2324 for inclusion).
Antoine Pitroud42bc512009-11-10 23:18:31 +00002325
Georg Brandl5e73a812010-04-22 07:02:51 +00002326 (Contributed by Antoine Pitrou.)
Antoine Pitroud42bc512009-11-10 23:18:31 +00002327
Georg Brandlda0a2112010-09-05 11:28:33 +00002328* Regular and recursive locks now accept an optional *timeout* argument to their
Raymond Hettingerba5512f2011-01-18 08:28:01 +00002329 :meth:`~threading.Lock.acquire` method. (Contributed by Antoine Pitrou;
2330 :issue:`7316`.)
Georg Brandlda0a2112010-09-05 11:28:33 +00002331
Raymond Hettingerbba537b2010-12-15 18:20:19 +00002332* Similarly, :meth:`threading.Semaphore.acquire` also gained a *timeout*
Georg Brandlda0a2112010-09-05 11:28:33 +00002333 argument. (Contributed by Torsten Landschoff; :issue:`850728`.)
Antoine Pitroue95a9ff2010-05-04 23:31:41 +00002334
Antoine Pitrou810023d2010-12-15 22:59:16 +00002335* Regular and recursive lock acquisitions can now be interrupted by signals on
Raymond Hettingerc136b042011-01-18 07:15:39 +00002336 platforms using Pthreads. This means that Python programs that deadlock while
Antoine Pitrou810023d2010-12-15 22:59:16 +00002337 acquiring locks can be successfully killed by repeatedly sending SIGINT to the
Georg Brandleebb2522010-12-18 12:01:15 +00002338 process (by pressing :kbd:`Ctrl+C` in most shells).
Antoine Pitrou810023d2010-12-15 22:59:16 +00002339 (Contributed by Reid Kleckner; :issue:`8844`.)
2340
Antoine Pitroud42bc512009-11-10 23:18:31 +00002341
Raymond Hettinger92ba2862010-09-06 01:16:46 +00002342Optimizations
2343=============
Raymond Hettinger6e6565b2009-06-28 20:56:11 +00002344
Raymond Hettinger92ba2862010-09-06 01:16:46 +00002345A number of small performance enhancements have been added:
Raymond Hettinger6e6565b2009-06-28 20:56:11 +00002346
Antoine Pitroud3052002010-09-15 15:09:40 +00002347* Python's peephole optimizer now recognizes patterns such ``x in {1, 2, 3}`` as
Raymond Hettinger92ba2862010-09-06 01:16:46 +00002348 being a test for membership in a set of constants. The optimizer recasts the
2349 :class:`set` as a :class:`frozenset` and stores the pre-built constant.
2350
2351 Now that the speed penalty is gone, it is practical to start writing
2352 membership tests using set-notation. This style is both semantically clear
2353 and operationally fast::
2354
2355 extension = name.rpartition('.')[2]
2356 if extension in {'xml', 'html', 'xhtml', 'css'}:
2357 handle(name)
2358
Raymond Hettingerc136b042011-01-18 07:15:39 +00002359 (Patch and additional tests contributed by Dave Malcolm; :issue:`6690`).
Raymond Hettinger92ba2862010-09-06 01:16:46 +00002360
Antoine Pitroud3052002010-09-15 15:09:40 +00002361* Serializing and unserializing data using the :mod:`pickle` module is now
Raymond Hettingerdadf93c2010-12-05 02:56:21 +00002362 several times faster.
2363
2364 (Contributed by Alexandre Vassalotti, Antoine Pitrou
Antoine Pitrouff150f22010-10-22 21:41:05 +00002365 and the Unladen Swallow team in :issue:`9410` and :issue:`3873`.)
Antoine Pitroud3052002010-09-15 15:09:40 +00002366
Georg Brandl5d941342016-02-26 19:37:12 +01002367* The `Timsort algorithm <https://en.wikipedia.org/wiki/Timsort>`_ used in
Raymond Hettingerffad35e2010-12-14 21:12:03 +00002368 :meth:`list.sort` and :func:`sorted` now runs faster and uses less memory
Raymond Hettingerc269ae82010-12-05 01:01:52 +00002369 when called with a :term:`key function`. Previously, every element of
2370 a list was wrapped with a temporary object that remembered the key value
Raymond Hettingerde2e6182011-01-10 05:40:57 +00002371 associated with each element. Now, two arrays of keys and values are
Raymond Hettingerc136b042011-01-18 07:15:39 +00002372 sorted in parallel. This saves the memory consumed by the sort wrappers,
2373 and it saves time lost to delegating comparisons.
Raymond Hettingerc269ae82010-12-05 01:01:52 +00002374
Raymond Hettingereb70b902011-01-10 21:26:49 +00002375 (Patch by Daniel Stutzbach in :issue:`9915`.)
Raymond Hettingerc269ae82010-12-05 01:01:52 +00002376
Raymond Hettingerdadf93c2010-12-05 02:56:21 +00002377* JSON decoding performance is improved and memory consumption is reduced
Raymond Hettinger413abbc2010-12-05 07:06:47 +00002378 whenever the same string is repeated for multiple keys. Also, JSON encoding
Raymond Hettingerdadf93c2010-12-05 02:56:21 +00002379 now uses the C speedups when the ``sort_keys`` argument is true.
2380
2381 (Contributed by Antoine Pitrou in :issue:`7451` and by Raymond Hettinger and
2382 Antoine Pitrou in :issue:`10314`.)
2383
Raymond Hettinger21ec4bc2010-12-10 01:09:01 +00002384* Recursive locks (created with the :func:`threading.RLock` API) now benefit
2385 from a C implementation which makes them as fast as regular locks, and between
2386 10x and 15x faster than their previous pure Python implementation.
2387
2388 (Contributed by Antoine Pitrou; :issue:`3001`.)
2389
Raymond Hettingerdadf93c2010-12-05 02:56:21 +00002390* The fast-search algorithm in stringlib is now used by the :meth:`split`,
2391 :meth:`rsplit`, :meth:`splitlines` and :meth:`replace` methods on
2392 :class:`bytes`, :class:`bytearray` and :class:`str` objects. Likewise, the
2393 algorithm is also used by :meth:`rfind`, :meth:`rindex`, :meth:`rsplit` and
2394 :meth:`rpartition`.
2395
2396 (Patch by Florent Xicluna in :issue:`7622` and :issue:`7462`.)
2397
Raymond Hettinger480ed782010-12-15 22:07:15 +00002398
Raymond Hettingeraf37b892011-10-19 14:16:18 -07002399* Integer to string conversions now work two "digits" at a time, reducing the
Raymond Hettinger480ed782010-12-15 22:07:15 +00002400 number of division and modulo operations.
2401
2402 (:issue:`6713` by Gawain Bolton, Mark Dickinson, and Victor Stinner.)
2403
Raymond Hettingerd8fae4e2010-12-05 05:39:54 +00002404There were several other minor optimizations. Set differencing now runs faster
Raymond Hettingerde2e6182011-01-10 05:40:57 +00002405when one operand is much larger than the other (patch by Andress Bennetts in
Raymond Hettingerd8fae4e2010-12-05 05:39:54 +00002406:issue:`8685`). The :meth:`array.repeat` method has a faster implementation
2407(:issue:`1569291` by Alexander Belopolsky). The :class:`BaseHTTPRequestHandler`
2408has more efficient buffering (:issue:`3709` by Andrew Schaaf). The
Raymond Hettinger2cef9492011-02-21 17:54:36 +00002409:func:`operator.attrgetter` function has been sped-up (:issue:`10160` by
2410Christos Georgiou). And :class:`ConfigParser` loads multi-line arguments a bit
2411faster (:issue:`7113` by Łukasz Langa).
Raymond Hettingerd8fae4e2010-12-05 05:39:54 +00002412
Antoine Pitroud3052002010-09-15 15:09:40 +00002413
Victor Stinner47ce9652010-10-29 00:57:35 +00002414Unicode
2415=======
Victor Stinner94908bb2010-08-18 21:23:25 +00002416
Raymond Hettinger2270d582011-01-20 09:04:39 +00002417Python has been updated to `Unicode 6.0.0
2418<http://unicode.org/versions/Unicode6.0.0/>`_. The update to the standard adds
Georg Brandl5d941342016-02-26 19:37:12 +01002419over 2,000 new characters including `emoji <https://en.wikipedia.org/wiki/Emoji>`_
Raymond Hettinger2270d582011-01-20 09:04:39 +00002420symbols which are important for mobile phones.
Alexander Belopolsky507e3f82010-12-02 00:05:57 +00002421
Raymond Hettinger2270d582011-01-20 09:04:39 +00002422In addition, the updated standard has altered the character properties for two
2423Kannada characters (U+0CF1, U+0CF2) and one New Tai Lue numeric character
2424(U+19DA), making the former eligible for use in identifiers while disqualifying
2425the latter. For more information, see `Unicode Character Database Changes
2426<http://www.unicode.org/versions/Unicode6.0.0/#Database_Changes>`_.
Alexander Belopolsky507e3f82010-12-02 00:05:57 +00002427
Alexander Belopolsky507e3f82010-12-02 00:05:57 +00002428
Raymond Hettinger2270d582011-01-20 09:04:39 +00002429Codecs
2430======
Raymond Hettingerc74d5182010-12-02 01:38:25 +00002431
Raymond Hettinger2270d582011-01-20 09:04:39 +00002432Support was added for *cp720* Arabic DOS encoding (:issue:`1616979`).
Alexander Belopolsky84cc0622010-12-08 21:38:46 +00002433
Raymond Hettinger2270d582011-01-20 09:04:39 +00002434MBCS encoding no longer ignores the error handler argument. In the default
2435strict mode, it raises an :exc:`UnicodeDecodeError` when it encounters an
2436undecodable byte sequence and an :exc:`UnicodeEncodeError` for an unencodable
2437character.
Alexander Belopolsky507e3f82010-12-02 00:05:57 +00002438
Raymond Hettinger2270d582011-01-20 09:04:39 +00002439The MBCS codec supports ``'strict'`` and ``'ignore'`` error handlers for
2440decoding, and ``'strict'`` and ``'replace'`` for encoding.
Victor Stinnere8d51452010-08-19 01:05:19 +00002441
Raymond Hettinger2270d582011-01-20 09:04:39 +00002442To emulate Python3.1 MBCS encoding, select the ``'ignore'`` handler for decoding
2443and the ``'replace'`` handler for encoding.
Victor Stinner47ce9652010-10-29 00:57:35 +00002444
Raymond Hettinger2e042d32011-01-21 09:18:19 +00002445On Mac OS X, Python decodes command line arguments with ``'utf-8'`` rather than
Raymond Hettinger2270d582011-01-20 09:04:39 +00002446the locale encoding.
Victor Stinner47ce9652010-10-29 00:57:35 +00002447
Raymond Hettinger00db6aa2011-01-20 09:47:04 +00002448By default, :mod:`tarfile` uses ``'utf-8'`` encoding on Windows (instead of
2449``'mbcs'``) and the ``'surrogateescape'`` error handler on all operating
2450systems.
Raymond Hettinger480ed782010-12-15 22:07:15 +00002451
Victor Stinner94908bb2010-08-18 21:23:25 +00002452
Raymond Hettinger1fa76822010-12-06 23:31:36 +00002453Documentation
2454=============
2455
2456The documentation continues to be improved.
2457
Raymond Hettinger08d42932011-01-29 08:51:57 +00002458* A table of quick links has been added to the top of lengthy sections such as
2459 :ref:`built-in-funcs`. In the case of :mod:`itertools`, the links are
2460 accompanied by tables of cheatsheet-style summaries to provide an overview and
2461 memory jog without having to read all of the docs.
Raymond Hettinger1fa76822010-12-06 23:31:36 +00002462
Raymond Hettinger08d42932011-01-29 08:51:57 +00002463* In some cases, the pure Python source code can be a helpful adjunct to the
2464 documentation, so now many modules now feature quick links to the latest
2465 version of the source code. For example, the :mod:`functools` module
2466 documentation has a quick link at the top labeled:
Raymond Hettinger1fa76822010-12-06 23:31:36 +00002467
Raymond Hettinger08d42932011-01-29 08:51:57 +00002468 **Source code** :source:`Lib/functools.py`.
Raymond Hettinger1fa76822010-12-06 23:31:36 +00002469
Raymond Hettinger08d42932011-01-29 08:51:57 +00002470 (Contributed by Raymond Hettinger; see
Georg Brandl5d941342016-02-26 19:37:12 +01002471 `rationale <https://rhettinger.wordpress.com/2011/01/28/open-your-source-more/>`_.)
Raymond Hettinger677e10a2010-12-07 06:45:30 +00002472
Raymond Hettinger08d42932011-01-29 08:51:57 +00002473* The docs now contain more examples and recipes. In particular, :mod:`re`
2474 module has an extensive section, :ref:`re-examples`. Likewise, the
2475 :mod:`itertools` module continues to be updated with new
2476 :ref:`itertools-recipes`.
2477
2478* The :mod:`datetime` module now has an auxiliary implementation in pure Python.
2479 No functionality was changed. This just provides an easier-to-read alternate
2480 implementation.
2481
2482 (Contributed by Alexander Belopolsky in :issue:`9528`.)
2483
2484* The unmaintained :file:`Demo` directory has been removed. Some demos were
2485 integrated into the documentation, some were moved to the :file:`Tools/demo`
2486 directory, and others were removed altogether.
2487
2488 (Contributed by Georg Brandl in :issue:`7962`.)
Raymond Hettinger2169ee22011-01-05 22:27:49 +00002489
Raymond Hettinger1fa76822010-12-06 23:31:36 +00002490
2491IDLE
2492====
Raymond Hettinger6e6565b2009-06-28 20:56:11 +00002493
Raymond Hettingerde2e6182011-01-10 05:40:57 +00002494* The format menu now has an option to clean source files by stripping
Raymond Hettinger2169ee22011-01-05 22:27:49 +00002495 trailing whitespace.
2496
2497 (Contributed by Raymond Hettinger; :issue:`5150`.)
2498
2499* IDLE on Mac OS X now works with both Carbon AquaTk and Cocoa AquaTk.
2500
2501 (Contributed by Kevin Walzer, Ned Deily, and Ronald Oussoren; :issue:`6075`.)
Raymond Hettinger6e6565b2009-06-28 20:56:11 +00002502
Raymond Hettinger00db6aa2011-01-20 09:47:04 +00002503Code Repository
2504===============
2505
2506In addition to the existing Subversion code repository at http://svn.python.org
Georg Brandl5d941342016-02-26 19:37:12 +01002507there is now a `Mercurial <https://www.mercurial-scm.org/>`_ repository at
Georg Brandle73778c2014-10-29 08:36:35 +01002508https://hg.python.org/\ .
Raymond Hettinger00db6aa2011-01-20 09:47:04 +00002509
2510After the 3.2 release, there are plans to switch to Mercurial as the primary
2511repository. This distributed version control system should make it easier for
2512members of the community to create and share external changesets. See
2513:pep:`385` for details.
2514
2515To learn to use the new version control system, see the `tutorial by Joel
Raymond Hettinger2f707c92011-01-25 06:58:01 +00002516Spolsky <http://hginit.com>`_ or the `Guide to Mercurial Workflows
Georg Brandl5d941342016-02-26 19:37:12 +01002517<https://www.mercurial-scm.org/guide>`_.
Raymond Hettinger00db6aa2011-01-20 09:47:04 +00002518
Raymond Hettinger6e6565b2009-06-28 20:56:11 +00002519
2520Build and C API Changes
2521=======================
2522
2523Changes to Python's build process and to the C API include:
2524
Raymond Hettinger2169ee22011-01-05 22:27:49 +00002525* The *idle*, *pydoc* and *2to3* scripts are now installed with a
2526 version-specific suffix on ``make altinstall`` (:issue:`10679`).
2527
Georg Brandlda0a2112010-09-05 11:28:33 +00002528* The C functions that access the Unicode Database now accept and return
2529 characters from the full Unicode range, even on narrow unicode builds
Raymond Hettinger1784ff02010-09-05 01:00:19 +00002530 (Py_UNICODE_TOLOWER, Py_UNICODE_ISDECIMAL, and others). A visible difference
Georg Brandlda0a2112010-09-05 11:28:33 +00002531 in Python is that :func:`unicodedata.numeric` now returns the correct value
2532 for large code points, and :func:`repr` may consider more characters as
2533 printable.
Raymond Hettinger6e6565b2009-06-28 20:56:11 +00002534
Raymond Hettinger1784ff02010-09-05 01:00:19 +00002535 (Reported by Bupjoe Lee and fixed by Amaury Forgeot D'Arc; :issue:`5127`.)
2536
Georg Brandlda0a2112010-09-05 11:28:33 +00002537* Computed gotos are now enabled by default on supported compilers (which are
Raymond Hettingerdb9044e2010-09-06 01:29:23 +00002538 detected by the configure script). They can still be disabled selectively by
Georg Brandlda0a2112010-09-05 11:28:33 +00002539 specifying ``--without-computed-gotos``.
Raymond Hettinger1784ff02010-09-05 01:00:19 +00002540
Georg Brandlda0a2112010-09-05 11:28:33 +00002541 (Contributed by Antoine Pitrou; :issue:`9203`.)
2542
Amaury Forgeot d'Arcfeb73072010-09-12 22:42:57 +00002543* The option ``--with-wctype-functions`` was removed. The built-in unicode
2544 database is now used for all functions.
2545
2546 (Contributed by Amaury Forgeot D'Arc; :issue:`9210`.)
2547
Raymond Hettinger480ed782010-12-15 22:07:15 +00002548* Hash values are now values of a new type, :c:type:`Py_hash_t`, which is
2549 defined to be the same size as a pointer. Previously they were of type long,
2550 which on some 64-bit operating systems is still only 32 bits long. As a
2551 result of this fix, :class:`set` and :class:`dict` can now hold more than
2552 ``2**32`` entries on builds with 64-bit pointers (previously, they could grow
2553 to that size but their performance degraded catastrophically).
Skip Montanaro961aaf52010-10-17 22:22:24 +00002554
Raymond Hettinger480ed782010-12-15 22:07:15 +00002555 (Suggested by Raymond Hettinger and implemented by Benjamin Peterson;
2556 :issue:`9778`.)
2557
2558* A new macro :c:macro:`Py_VA_COPY` copies the state of the variable argument
Raymond Hettingerde2e6182011-01-10 05:40:57 +00002559 list. It is equivalent to C99 *va_copy* but available on all Python platforms
Raymond Hettinger480ed782010-12-15 22:07:15 +00002560 (:issue:`2443`).
2561
Raymond Hettingerde2e6182011-01-10 05:40:57 +00002562* A new C API function :c:func:`PySys_SetArgvEx` allows an embedded interpreter
2563 to set :attr:`sys.argv` without also modifying :attr:`sys.path`
Raymond Hettinger480ed782010-12-15 22:07:15 +00002564 (:issue:`5753`).
2565
2566* :c:macro:`PyEval_CallObject` is now only available in macro form. The
2567 function declaration, which was kept for backwards compatibility reasons, is
Raymond Hettingerde2e6182011-01-10 05:40:57 +00002568 now removed -- the macro was introduced in 1997 (:issue:`8276`).
Raymond Hettinger480ed782010-12-15 22:07:15 +00002569
Raymond Hettinger9c2fc472011-01-31 06:14:48 +00002570* There is a new function :c:func:`PyLong_AsLongLongAndOverflow` which
Raymond Hettingerde2e6182011-01-10 05:40:57 +00002571 is analogous to :c:func:`PyLong_AsLongAndOverflow`. They both serve to
Raymond Hettinger480ed782010-12-15 22:07:15 +00002572 convert Python :class:`int` into a native fixed-width type while providing
2573 detection of cases where the conversion won't fit (:issue:`7767`).
2574
Raymond Hettinger9c2fc472011-01-31 06:14:48 +00002575* The :c:func:`PyUnicode_CompareWithASCIIString` function now returns *not
2576 equal* if the Python string is *NUL* terminated.
Raymond Hettinger480ed782010-12-15 22:07:15 +00002577
2578* There is a new function :c:func:`PyErr_NewExceptionWithDoc` that is
2579 like :c:func:`PyErr_NewException` but allows a docstring to be specified.
2580 This lets C exceptions have the same self-documenting capabilities as
2581 their pure Python counterparts (:issue:`7033`).
2582
2583* When compiled with the ``--with-valgrind`` option, the pymalloc
2584 allocator will be automatically disabled when running under Valgrind. This
2585 gives improved memory leak detection when running under Valgrind, while taking
2586 advantage of pymalloc at other times (:issue:`2422`).
2587
Raymond Hettingerde2e6182011-01-10 05:40:57 +00002588* Removed the ``O?`` format from the *PyArg_Parse* functions. The format is no
Raymond Hettinger480ed782010-12-15 22:07:15 +00002589 longer used and it had never been documented (:issue:`8837`).
2590
2591There were a number of other small changes to the C-API. See the
Raymond Hettingerc7bb1592011-01-30 01:10:07 +00002592:source:`Misc/NEWS` file for a complete list.
Skip Montanaro961aaf52010-10-17 22:22:24 +00002593
Raymond Hettinger555f2882011-02-07 12:51:05 +00002594Also, there were a number of updates to the Mac OS X build, see
Raymond Hettingerb02f7c02011-01-30 05:37:16 +00002595:source:`Mac/BuildScript/README.txt` for details. For users running a 32/64-bit
Raymond Hettinger555f2882011-02-07 12:51:05 +00002596build, there is a known problem with the default Tcl/Tk on Mac OS X 10.6.
Raymond Hettingerb02f7c02011-01-30 05:37:16 +00002597Accordingly, we recommend installing an updated alternative such as
Serhiy Storchaka6dff0202016-05-07 10:49:07 +03002598`ActiveState Tcl/Tk 8.5.9 <https://www.activestate.com/activetcl/downloads>`_\.
Georg Brandle73778c2014-10-29 08:36:35 +01002599See https://www.python.org/download/mac/tcltk/ for additional details.
Raymond Hettinger6e6565b2009-06-28 20:56:11 +00002600
Raymond Hettingerf558ddd2009-06-28 21:37:08 +00002601Porting to Python 3.2
Raymond Hettinger6e6565b2009-06-28 20:56:11 +00002602=====================
2603
Georg Brandlda0a2112010-09-05 11:28:33 +00002604This section lists previously described changes and other bugfixes that may
2605require changes to your code:
Raymond Hettinger6e6565b2009-06-28 20:56:11 +00002606
Raymond Hettingerd73be672010-12-18 10:48:26 +00002607* The :mod:`configparser` module has a number of clean-ups. The major change is
2608 to replace the old :class:`ConfigParser` class with long-standing preferred
2609 alternative :class:`SafeConfigParser`. In addition there are a number of
Raymond Hettingerc8a16862011-01-18 09:01:34 +00002610 smaller incompatibilities:
Łukasz Langa2b38b6c2010-12-17 21:57:32 +00002611
Raymond Hettingerd73be672010-12-18 10:48:26 +00002612 * The interpolation syntax is now validated on
2613 :meth:`~configparser.ConfigParser.get` and
2614 :meth:`~configparser.ConfigParser.set` operations. In the default
2615 interpolation scheme, only two tokens with percent signs are valid: ``%(name)s``
2616 and ``%%``, the latter being an escaped percent sign.
Łukasz Langa2b38b6c2010-12-17 21:57:32 +00002617
Raymond Hettingerd73be672010-12-18 10:48:26 +00002618 * The :meth:`~configparser.ConfigParser.set` and
2619 :meth:`~configparser.ConfigParser.add_section` methods now verify that
2620 values are actual strings. Formerly, unsupported types could be introduced
2621 unintentionally.
Łukasz Langa2b38b6c2010-12-17 21:57:32 +00002622
Raymond Hettinger2b8861f2010-12-18 11:20:52 +00002623 * Duplicate sections or options from a single source now raise either
Raymond Hettingerd73be672010-12-18 10:48:26 +00002624 :exc:`~configparser.DuplicateSectionError` or
2625 :exc:`~configparser.DuplicateOptionError`. Formerly, duplicates would
2626 silently overwrite a previous entry.
Łukasz Langa2b38b6c2010-12-17 21:57:32 +00002627
Raymond Hettingerd73be672010-12-18 10:48:26 +00002628 * Inline comments are now disabled by default so now the **;** character
2629 can be safely used in values.
Łukasz Langa2b38b6c2010-12-17 21:57:32 +00002630
Raymond Hettingerd73be672010-12-18 10:48:26 +00002631 * Comments now can be indented. Consequently, for **;** or **#** to appear at
2632 the start of a line in multiline values, it has to be interpolated. This
Raymond Hettinger2b8861f2010-12-18 11:20:52 +00002633 keeps comment prefix characters in values from being mistaken as comments.
Łukasz Langa2b38b6c2010-12-17 21:57:32 +00002634
Raymond Hettingerd73be672010-12-18 10:48:26 +00002635 * ``""`` is now a valid value and is no longer automatically converted to an
2636 empty string. For empty strings, use ``"option ="`` in a line.
Łukasz Langa2b38b6c2010-12-17 21:57:32 +00002637
Antoine Pitroucd889af2010-10-06 21:13:56 +00002638* The :mod:`nntplib` module was reworked extensively, meaning that its APIs
2639 are often incompatible with the 3.1 APIs.
2640
Raymond Hettinger1fa76822010-12-06 23:31:36 +00002641* :class:`bytearray` objects can no longer be used as filenames; instead,
2642 they should be converted to :class:`bytes`.
Victor Stinnerdcb24032010-04-22 12:08:36 +00002643
Raymond Hettinger399bf7b2011-01-24 10:11:12 +00002644* The :meth:`array.tostring` and :meth:`array.fromstring` have been renamed to
Raymond Hettinger50307b62011-01-24 01:18:30 +00002645 :meth:`array.tobytes` and :meth:`array.frombytes` for clarity. The old names
2646 have been deprecated. (See :issue:`8990`.)
2647
Raymond Hettinger51e21072011-01-10 23:38:15 +00002648* ``PyArg_Parse*()`` functions:
Victor Stinner3dcb5ac2010-06-08 22:54:19 +00002649
Victor Stinner25e8ec42010-06-25 00:02:38 +00002650 * "t#" format has been removed: use "s#" or "s*" instead
2651 * "w" and "w#" formats has been removed: use "w*" instead
2652
Georg Brandl60203b42010-10-06 10:11:56 +00002653* The :c:type:`PyCObject` type, deprecated in 3.1, has been removed. To wrap
2654 opaque C pointers in Python objects, the :c:type:`PyCapsule` API should be used
Éric Araujo4234ad42010-09-05 17:32:25 +00002655 instead; the new type has a well-defined interface for passing typing safety
Georg Brandlda0a2112010-09-05 11:28:33 +00002656 information and a less complicated signature for calling a destructor.
Victor Stinner0cbec572010-09-12 20:32:57 +00002657
Raymond Hettingere0a96002010-12-15 17:54:13 +00002658* The :func:`sys.setfilesystemencoding` function was removed because
2659 it had a flawed design.
Raymond Hettinger3fcf0022010-12-08 01:13:53 +00002660
Raymond Hettingere0a96002010-12-15 17:54:13 +00002661* The :func:`random.seed` function and method now salt string seeds with an
2662 sha512 hash function. To access the previous version of *seed* in order to
2663 reproduce Python 3.1 sequences, set the *version* argument to *1*,
2664 ``random.seed(s, version=1)``.
Raymond Hettinger21ec4bc2010-12-10 01:09:01 +00002665
Raymond Hettinger522cc0a2010-12-10 01:19:15 +00002666* The previously deprecated :func:`string.maketrans` function has been removed
Raymond Hettinger51e21072011-01-10 23:38:15 +00002667 in favor of the static methods :meth:`bytes.maketrans` and
Raymond Hettinger522cc0a2010-12-10 01:19:15 +00002668 :meth:`bytearray.maketrans`. This change solves the confusion around which
2669 types were supported by the :mod:`string` module. Now, :class:`str`,
2670 :class:`bytes`, and :class:`bytearray` each have their own **maketrans** and
2671 **translate** methods with intermediate translation tables of the appropriate
2672 type.
2673
2674 (Contributed by Georg Brandl; :issue:`5675`.)
2675
2676* The previously deprecated :func:`contextlib.nested` function has been removed
2677 in favor of a plain :keyword:`with` statement which can accept multiple
2678 context managers. The latter technique is faster (because it is built-in),
2679 and it does a better job finalizing multiple context managers when one of them
2680 raises an exception::
2681
Raymond Hettinger6f0d59b2011-01-17 23:10:55 +00002682 with open('mylog.txt') as infile, open('a.out', 'w') as outfile:
2683 for line in infile:
2684 if '<critical>' in line:
2685 outfile.write(line)
Raymond Hettinger522cc0a2010-12-10 01:19:15 +00002686
2687 (Contributed by Georg Brandl and Mattias Brändström;
Georg Brandlb7354a62014-10-29 10:57:37 +01002688 `appspot issue 53094 <https://codereview.appspot.com/53094>`_.)
Victor Stinnerda9ec992010-12-28 13:26:42 +00002689
Raymond Hettinger2169ee22011-01-05 22:27:49 +00002690* :func:`struct.pack` now only allows bytes for the ``s`` string pack code.
2691 Formerly, it would accept text arguments and implicitly encode them to bytes
2692 using UTF-8. This was problematic because it made assumptions about the
Raymond Hettingerde2e6182011-01-10 05:40:57 +00002693 correct encoding and because a variable-length encoding can fail when writing
Raymond Hettinger2169ee22011-01-05 22:27:49 +00002694 to fixed length segment of a structure.
Victor Stinnerda9ec992010-12-28 13:26:42 +00002695
Raymond Hettinger2169ee22011-01-05 22:27:49 +00002696 Code such as ``struct.pack('<6sHHBBB', 'GIF87a', x, y)`` should be rewritten
2697 with to use bytes instead of text, ``struct.pack('<6sHHBBB', b'GIF87a', x, y)``.
2698
Raymond Hettingerde2e6182011-01-10 05:40:57 +00002699 (Discovered by David Beazley and fixed by Victor Stinner; :issue:`10783`.)
Raymond Hettingere40808a2011-01-05 23:00:00 +00002700
2701* The :class:`xml.etree.ElementTree` class now raises an
2702 :exc:`xml.etree.ElementTree.ParseError` when a parse fails. Previously it
Berker Peksage39682b2016-07-01 12:17:05 +03002703 raised an :exc:`xml.parsers.expat.ExpatError`.
Raymond Hettingere40808a2011-01-05 23:00:00 +00002704
2705* The new, longer :func:`str` value on floats may break doctests which rely on
2706 the old output format.
Antoine Pitroubcba4342011-01-16 18:29:34 +00002707
2708* In :class:`subprocess.Popen`, the default value for *close_fds* is now
2709 ``True`` under Unix; under Windows, it is ``True`` if the three standard
2710 streams are set to ``None``, ``False`` otherwise. Previously, *close_fds*
2711 was always ``False`` by default, which produced difficult to solve bugs
2712 or race conditions when open file descriptors would leak into the child
2713 process.
2714
Antoine Pitrouf7fb7622011-01-16 18:34:09 +00002715* Support for legacy HTTP 0.9 has been removed from :mod:`urllib.request`
2716 and :mod:`http.client`. Such support is still present on the server side
2717 (in :mod:`http.server`).
2718
2719 (Contributed by Antoine Pitrou, :issue:`10711`.)
2720
Antoine Pitrou2e8ec222011-01-16 18:41:36 +00002721* SSL sockets in timeout mode now raise :exc:`socket.timeout` when a timeout
2722 occurs, rather than a generic :exc:`~ssl.SSLError`.
2723
2724 (Contributed by Antoine Pitrou, :issue:`10272`.)
Antoine Pitrouebeb9032011-01-16 18:45:17 +00002725
2726* The misleading functions :c:func:`PyEval_AcquireLock()` and
2727 :c:func:`PyEval_ReleaseLock()` have been officially deprecated. The
2728 thread-state aware APIs (such as :c:func:`PyEval_SaveThread()`
2729 and :c:func:`PyEval_RestoreThread()`) should be used instead.
Raymond Hettinger50307b62011-01-24 01:18:30 +00002730
2731* Due to security risks, :func:`asyncore.handle_accept` has been deprecated, and
Raymond Hettinger9c2fc472011-01-31 06:14:48 +00002732 a new function, :func:`asyncore.handle_accepted`, was added to replace it.
Raymond Hettinger50307b62011-01-24 01:18:30 +00002733
2734 (Contributed by Giampaolo Rodola in :issue:`6706`.)
Antoine Pitrou9bb98772011-03-15 20:22:50 +01002735
2736* Due to the new :term:`GIL` implementation, :c:func:`PyEval_InitThreads()`
2737 cannot be called before :c:func:`Py_Initialize()` anymore.