summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Peterson <benjamin@python.org>2012-02-06 16:29:05 (GMT)
committerBenjamin Peterson <benjamin@python.org>2012-02-06 16:29:05 (GMT)
commit1f30575713a153d5b3c558de6068bdfe1dd1a3f4 (patch)
treedeba748b158af26912ed798fe46df5e3c67d979e
parent2f9c71bbbab6fb66cd4df16e30313ea975e1c46d (diff)
parentd531b295f26d7a0364f171d95b6abac873185a2f (diff)
downloadcpython-1f30575713a153d5b3c558de6068bdfe1dd1a3f4.zip
cpython-1f30575713a153d5b3c558de6068bdfe1dd1a3f4.tar.gz
cpython-1f30575713a153d5b3c558de6068bdfe1dd1a3f4.tar.bz2
merge heads
-rw-r--r--Doc/distutils/apiref.rst36
-rw-r--r--Doc/extending/embedding.rst9
-rw-r--r--Doc/library/archiving.rst1
-rw-r--r--Doc/library/bz2.rst15
-rw-r--r--Doc/library/gzip.rst3
-rw-r--r--Doc/library/hmac.rst8
-rw-r--r--Doc/library/json.rst4
-rw-r--r--Doc/library/shutil.rst10
-rw-r--r--Doc/library/tarfile.rst3
-rw-r--r--Doc/library/zipfile.rst3
-rw-r--r--Doc/library/zlib.rst4
-rw-r--r--Lib/ctypes/_endian.py2
-rw-r--r--Lib/distutils/command/bdist_rpm.py12
-rw-r--r--Lib/distutils/tests/test_bdist_rpm.py9
-rw-r--r--Lib/idlelib/AutoComplete.py6
-rw-r--r--Lib/idlelib/EditorWindow.py51
-rw-r--r--Lib/idlelib/textView.py24
-rw-r--r--Lib/shutil.py1
-rw-r--r--Lib/test/test_audioop.py31
-rw-r--r--Lib/test/test_site.py23
-rw-r--r--Misc/ACKS1
-rw-r--r--Misc/NEWS10
22 files changed, 182 insertions, 84 deletions
diff --git a/Doc/distutils/apiref.rst b/Doc/distutils/apiref.rst
index b3def22..e15dc76 100644
--- a/Doc/distutils/apiref.rst
+++ b/Doc/distutils/apiref.rst
@@ -449,7 +449,9 @@ This module provides the following functions.
Define a preprocessor macro for all compilations driven by this compiler object.
The optional parameter *value* should be a string; if it is not supplied, then
the macro will be defined without an explicit value and the exact outcome
- depends on the compiler used (XXX true? does ANSI say anything about this?)
+ depends on the compiler used.
+
+ .. XXX true? does ANSI say anything about this?
.. method:: CCompiler.undefine_macro(name)
@@ -603,7 +605,9 @@ This module provides the following functions.
*output_libname* should be a library name, not a filename; the filename will be
inferred from the library name. *output_dir* is the directory where the library
- file will be put. XXX defaults to what?
+ file will be put.
+
+ .. XXX defaults to what?
*debug* is a boolean; if true, debugging information will be included in the
library (note that on most platforms, it is the compile step where this matters:
@@ -723,30 +727,29 @@ This module provides the following functions.
Invokes :func:`distutils.util.execute` This method invokes a Python function
*func* with the given arguments *args*, after logging and taking into account
- the *dry_run* flag. XXX see also.
+ the *dry_run* flag.
.. method:: CCompiler.spawn(cmd)
Invokes :func:`distutils.util.spawn`. This invokes an external process to run
- the given command. XXX see also.
+ the given command.
.. method:: CCompiler.mkpath(name[, mode=511])
Invokes :func:`distutils.dir_util.mkpath`. This creates a directory and any
- missing ancestor directories. XXX see also.
+ missing ancestor directories.
.. method:: CCompiler.move_file(src, dst)
- Invokes :meth:`distutils.file_util.move_file`. Renames *src* to *dst*. XXX see
- also.
+ Invokes :meth:`distutils.file_util.move_file`. Renames *src* to *dst*.
.. method:: CCompiler.announce(msg[, level=1])
- Write a message using :func:`distutils.log.debug`. XXX see also.
+ Write a message using :func:`distutils.log.debug`.
.. method:: CCompiler.warn(msg)
@@ -874,8 +877,6 @@ tarballs or zipfiles.
prefix of all files and directories in the archive. *root_dir* and *base_dir*
both default to the current directory. Returns the name of the archive file.
- .. XXX This should be changed to support bz2 files.
-
.. function:: make_tarball(base_name, base_dir[, compress='gzip', verbose=0, dry_run=0])
@@ -887,8 +888,6 @@ tarballs or zipfiles.
possibly plus the appropriate compression extension (:file:`.gz`, :file:`.bz2`
or :file:`.Z`). Return the output filename.
- .. XXX This should be replaced with calls to the :mod:`tarfile` module.
-
.. function:: make_zipfile(base_name, base_dir[, verbose=0, dry_run=0])
@@ -1000,8 +999,6 @@ directories.
errors are ignored (apart from being reported to ``sys.stdout`` if *verbose* is
true).
-.. XXX Some of this could be replaced with the shutil module?
-
:mod:`distutils.file_util` --- Single file operations
=====================================================
@@ -1115,8 +1112,6 @@ other utility module.
* ``macosx-10.6-intel``
- .. % XXX isn't this also provided by some other non-distutils module?
-
.. function:: convert_path(pathname)
@@ -1321,8 +1316,6 @@ provides the following additional features:
the "negative alias" of :option:`--verbose`, then :option:`--quiet` on the
command line sets *verbose* to false.
-.. XXX Should be replaced with optparse
-
.. function:: fancy_getopt(options, negative_opt, object, args)
Wrapper function. *options* is a list of ``(long_option, short_option,
@@ -1338,9 +1331,6 @@ provides the following additional features:
Wraps *text* to less than *width* wide.
- .. XXX Should be replaced with :mod:`textwrap` (which is available in Python
- 2.3 and later).
-
.. class:: FancyGetopt([option_table=None])
@@ -1403,10 +1393,6 @@ filesystem and building lists of files.
:synopsis: A simple logging mechanism, 282-style
-.. XXX Should be replaced with standard :mod:`logging` module.
-
-
-
:mod:`distutils.spawn` --- Spawn a sub-process
==============================================
diff --git a/Doc/extending/embedding.rst b/Doc/extending/embedding.rst
index ec93a16..3143c99 100644
--- a/Doc/extending/embedding.rst
+++ b/Doc/extending/embedding.rst
@@ -271,7 +271,7 @@ it.
To find out the required compiler and linker flags, you can execute the
:file:`python{X.Y}-config` script which is generated as part of the
-installation process (a generic :file:`python3-config` script is also
+installation process (a :file:`python3-config` script may also be
available). This script has several options, of which the following will
be directly useful to you:
@@ -294,9 +294,10 @@ be directly useful to you:
example.
If this procedure doesn't work for you (it is not guaranteed to work for
-all Unix-like platforms; however, we welcome bug reports at
-http://bugs.python.org), you will have to read your system's documentation
-about dynamic linking and/or examine Python's Makefile and compilation
+all Unix-like platforms; however, we welcome :ref:`bug reports <reporting-bugs>`)
+you will have to read your system's documentation about dynamic linking and/or
+examine Python's :file:`Makefile` (use :func:`sysconfig.get_makefile_filename`
+to find its location) and compilation
options. In this case, the :mod:`sysconfig` module is a useful tool to
programmatically extract the configuration values that you will want to
combine together::
diff --git a/Doc/library/archiving.rst b/Doc/library/archiving.rst
index f2d08ad..75d137c 100644
--- a/Doc/library/archiving.rst
+++ b/Doc/library/archiving.rst
@@ -6,6 +6,7 @@ Data Compression and Archiving
The modules described in this chapter support data compression with the zlib,
gzip, and bzip2 algorithms, and the creation of ZIP- and tar-format archives.
+See also :ref:`archiving-operations` provided by the :mod:`shutil` module.
.. toctree::
diff --git a/Doc/library/bz2.rst b/Doc/library/bz2.rst
index d9a2bad..d13f6e0 100644
--- a/Doc/library/bz2.rst
+++ b/Doc/library/bz2.rst
@@ -12,9 +12,6 @@ This module provides a comprehensive interface for the bz2 compression library.
It implements a complete file interface, one-shot (de)compression functions, and
types for sequential (de)compression.
-For other archive formats, see the :mod:`gzip`, :mod:`zipfile`, and
-:mod:`tarfile` modules.
-
Here is a summary of the features offered by the bz2 module:
* :class:`BZ2File` class implements a complete file interface, including
@@ -65,6 +62,18 @@ Handling of compressed files is offered by the :class:`BZ2File` class.
Support for the :keyword:`with` statement was added.
+ .. note::
+
+ This class does not support input files containing multiple streams (such
+ as those produced by the :program:`pbzip2` tool). When reading such an
+ input file, only the first stream will be accessible. If you require
+ support for multi-stream files, consider using the third-party
+ :mod:`bz2file` module (available from
+ `PyPI <http://pypi.python.org/pypi/bz2file>`_). This module provides a
+ backport of Python 3.3's :class:`BZ2File` class, which does support
+ multi-stream files.
+
+
.. method:: close()
Close the file. Sets data attribute :attr:`closed` to true. A closed file
diff --git a/Doc/library/gzip.rst b/Doc/library/gzip.rst
index 48a8694..8aca2dd 100644
--- a/Doc/library/gzip.rst
+++ b/Doc/library/gzip.rst
@@ -21,9 +21,6 @@ Note that additional file formats which can be decompressed by the
:program:`gzip` and :program:`gunzip` programs, such as those produced by
:program:`compress` and :program:`pack`, are not supported by this module.
-For other archive formats, see the :mod:`bz2`, :mod:`zipfile`, and
-:mod:`tarfile` modules.
-
The module defines the following items:
diff --git a/Doc/library/hmac.rst b/Doc/library/hmac.rst
index 0ca3eda..eff2724 100644
--- a/Doc/library/hmac.rst
+++ b/Doc/library/hmac.rst
@@ -24,14 +24,14 @@ This module implements the HMAC algorithm as described by :rfc:`2104`.
An HMAC object has the following methods:
-.. method:: hmac.update(msg)
+.. method:: HMAC.update(msg)
Update the hmac object with the bytes object *msg*. Repeated calls are
equivalent to a single call with the concatenation of all the arguments:
``m.update(a); m.update(b)`` is equivalent to ``m.update(a + b)``.
-.. method:: hmac.digest()
+.. method:: HMAC.digest()
Return the digest of the bytes passed to the :meth:`update` method so far.
This bytes object will be the same length as the *digest_size* of the digest
@@ -39,14 +39,14 @@ An HMAC object has the following methods:
bytes.
-.. method:: hmac.hexdigest()
+.. method:: HMAC.hexdigest()
Like :meth:`digest` except the digest is returned as a string twice the
length containing only hexadecimal digits. This may be used to exchange the
value safely in email or other non-binary environments.
-.. method:: hmac.copy()
+.. method:: HMAC.copy()
Return a copy ("clone") of the hmac object. This can be used to efficiently
compute the digests of strings that share a common initial substring.
diff --git a/Doc/library/json.rst b/Doc/library/json.rst
index 4ee17f2..a791259 100644
--- a/Doc/library/json.rst
+++ b/Doc/library/json.rst
@@ -125,6 +125,10 @@ Basic Usage
:class:`bytes` objects. Therefore, ``fp.write()`` must support :class:`str`
input.
+ If *ensure_ascii* is ``True`` (the default), the output is guaranteed to
+ have all incoming non-ASCII characters escaped. If *ensure_ascii* is
+ ``False``, these characters will be output as-is.
+
If *check_circular* is ``False`` (default: ``True``), then the circular
reference check for container types will be skipped and a circular reference
will result in an :exc:`OverflowError` (or worse).
diff --git a/Doc/library/shutil.rst b/Doc/library/shutil.rst
index 8b4aabb..3b44774 100644
--- a/Doc/library/shutil.rst
+++ b/Doc/library/shutil.rst
@@ -31,6 +31,8 @@ copying and removal. For operations on individual files, see also the
are not copied.
+.. _file-operations:
+
Directory and files operations
------------------------------
@@ -181,7 +183,7 @@ Directory and files operations
(*srcname*, *dstname*, *exception*).
-.. _shutil-example:
+.. _shutil-copytree-example:
copytree example
::::::::::::::::
@@ -248,6 +250,9 @@ Another example that uses the *ignore* argument to add a logging call::
Archiving operations
--------------------
+High-level utilities to create and read compressed and archived files are also
+provided. They rely on the :mod:`zipfile` and :mod:`tarfile` modules.
+
.. function:: make_archive(base_name, format, [root_dir, [base_dir, [verbose, [dry_run, [owner, [group, [logger]]]]]]])
Create an archive file (such as zip or tar) and return its name.
@@ -375,6 +380,7 @@ Archiving operations
.. versionadded:: 3.2
+.. _shutil-archiving-example:
Archiving example
:::::::::::::::::
@@ -400,5 +406,3 @@ The resulting archive contains::
-rw------- tarek/staff 1675 2008-06-09 13:26:54 ./id_rsa
-rw-r--r-- tarek/staff 397 2008-06-09 13:26:54 ./id_rsa.pub
-rw-r--r-- tarek/staff 37192 2010-02-06 18:23:10 ./known_hosts
-
-
diff --git a/Doc/library/tarfile.rst b/Doc/library/tarfile.rst
index b56058b..46e4900 100644
--- a/Doc/library/tarfile.rst
+++ b/Doc/library/tarfile.rst
@@ -14,7 +14,8 @@
The :mod:`tarfile` module makes it possible to read and write tar
archives, including those using gzip or bz2 compression.
-(:file:`.zip` files can be read and written using the :mod:`zipfile` module.)
+Use the :mod:`zipfile` module to read or write :file:`.zip` files, or the
+higher-level functions in :ref:`shutil <archiving-operations>`.
Some facts and figures:
diff --git a/Doc/library/zipfile.rst b/Doc/library/zipfile.rst
index 6f84bcc..bcec134 100644
--- a/Doc/library/zipfile.rst
+++ b/Doc/library/zipfile.rst
@@ -23,9 +23,6 @@ decryption of encrypted files in ZIP archives, but it currently cannot
create an encrypted file. Decryption is extremely slow as it is
implemented in native Python rather than C.
-For other archive formats, see the :mod:`bz2`, :mod:`gzip`, and
-:mod:`tarfile` modules.
-
The module defines the following items:
.. exception:: BadZipFile
diff --git a/Doc/library/zlib.rst b/Doc/library/zlib.rst
index a7b8343..897d919 100644
--- a/Doc/library/zlib.rst
+++ b/Doc/library/zlib.rst
@@ -18,9 +18,7 @@ order. This documentation doesn't attempt to cover all of the permutations;
consult the zlib manual at http://www.zlib.net/manual.html for authoritative
information.
-For reading and writing ``.gz`` files see the :mod:`gzip` module. For
-other archive formats, see the :mod:`bz2`, :mod:`zipfile`, and
-:mod:`tarfile` modules.
+For reading and writing ``.gz`` files see the :mod:`gzip` module.
The available exception and functions in this module are:
diff --git a/Lib/ctypes/_endian.py b/Lib/ctypes/_endian.py
index 721b0d1..dae65fc 100644
--- a/Lib/ctypes/_endian.py
+++ b/Lib/ctypes/_endian.py
@@ -1,7 +1,7 @@
import sys
from ctypes import *
-_array_type = type(c_int * 3)
+_array_type = type(Array)
def _other_endian(typ):
"""Return the type with the 'other' byte order. Simple types like
diff --git a/Lib/distutils/command/bdist_rpm.py b/Lib/distutils/command/bdist_rpm.py
index 678e118..357eaa5 100644
--- a/Lib/distutils/command/bdist_rpm.py
+++ b/Lib/distutils/command/bdist_rpm.py
@@ -365,16 +365,28 @@ class bdist_rpm(Command):
self.spawn(rpm_cmd)
if not self.dry_run:
+ if self.distribution.has_ext_modules():
+ pyversion = get_python_version()
+ else:
+ pyversion = 'any'
+
if not self.binary_only:
srpm = os.path.join(rpm_dir['SRPMS'], source_rpm)
assert(os.path.exists(srpm))
self.move_file(srpm, self.dist_dir)
+ filename = os.path.join(self.dist_dir, source_rpm)
+ self.distribution.dist_files.append(
+ ('bdist_rpm', pyversion, filename))
if not self.source_only:
for rpm in binary_rpms:
rpm = os.path.join(rpm_dir['RPMS'], rpm)
if os.path.exists(rpm):
self.move_file(rpm, self.dist_dir)
+ filename = os.path.join(self.dist_dir,
+ os.path.basename(rpm))
+ self.distribution.dist_files.append(
+ ('bdist_rpm', pyversion, filename))
def _dist_path(self, path):
return os.path.join(self.dist_dir, os.path.basename(path))
diff --git a/Lib/distutils/tests/test_bdist_rpm.py b/Lib/distutils/tests/test_bdist_rpm.py
index 804fb13..ab7a1bf 100644
--- a/Lib/distutils/tests/test_bdist_rpm.py
+++ b/Lib/distutils/tests/test_bdist_rpm.py
@@ -78,6 +78,10 @@ class BuildRpmTestCase(support.TempdirManager,
dist_created = os.listdir(os.path.join(pkg_dir, 'dist'))
self.assertTrue('foo-0.1-1.noarch.rpm' in dist_created)
+ # bug #2945: upload ignores bdist_rpm files
+ self.assertIn(('bdist_rpm', 'any', 'dist/foo-0.1-1.src.rpm'), dist.dist_files)
+ self.assertIn(('bdist_rpm', 'any', 'dist/foo-0.1-1.noarch.rpm'), dist.dist_files)
+
def test_no_optimize_flag(self):
# XXX I am unable yet to make this test work without
@@ -117,6 +121,11 @@ class BuildRpmTestCase(support.TempdirManager,
dist_created = os.listdir(os.path.join(pkg_dir, 'dist'))
self.assertTrue('foo-0.1-1.noarch.rpm' in dist_created)
+
+ # bug #2945: upload ignores bdist_rpm files
+ self.assertIn(('bdist_rpm', 'any', 'dist/foo-0.1-1.src.rpm'), dist.dist_files)
+ self.assertIn(('bdist_rpm', 'any', 'dist/foo-0.1-1.noarch.rpm'), dist.dist_files)
+
os.remove(os.path.join(pkg_dir, 'dist', 'foo-0.1-1.noarch.rpm'))
def test_suite():
diff --git a/Lib/idlelib/AutoComplete.py b/Lib/idlelib/AutoComplete.py
index fa1733f..4e17325 100644
--- a/Lib/idlelib/AutoComplete.py
+++ b/Lib/idlelib/AutoComplete.py
@@ -190,8 +190,7 @@ class AutoComplete:
bigl = eval("dir()", namespace)
bigl.sort()
if "__all__" in bigl:
- smalll = eval("__all__", namespace)
- smalll.sort()
+ smalll = sorted(eval("__all__", namespace))
else:
smalll = [s for s in bigl if s[:1] != '_']
else:
@@ -200,8 +199,7 @@ class AutoComplete:
bigl = dir(entity)
bigl.sort()
if "__all__" in bigl:
- smalll = entity.__all__
- smalll.sort()
+ smalll = sorted(entity.__all__)
else:
smalll = [s for s in bigl if s[:1] != '_']
except:
diff --git a/Lib/idlelib/EditorWindow.py b/Lib/idlelib/EditorWindow.py
index f47a9c1..6a01db0 100644
--- a/Lib/idlelib/EditorWindow.py
+++ b/Lib/idlelib/EditorWindow.py
@@ -63,6 +63,50 @@ def _find_module(fullname, path=None):
descr = os.path.splitext(filename)[1], None, imp.PY_SOURCE
return file, filename, descr
+
+class HelpDialog(object):
+
+ def __init__(self):
+ self.parent = None # parent of help window
+ self.dlg = None # the help window iteself
+
+ def display(self, parent, near=None):
+ """ Display the help dialog.
+
+ parent - parent widget for the help window
+
+ near - a Toplevel widget (e.g. EditorWindow or PyShell)
+ to use as a reference for placing the help window
+ """
+ if self.dlg is None:
+ self.show_dialog(parent)
+ if near:
+ self.nearwindow(near)
+
+ def show_dialog(self, parent):
+ self.parent = parent
+ fn=os.path.join(os.path.abspath(os.path.dirname(__file__)),'help.txt')
+ self.dlg = dlg = textView.view_file(parent,'Help',fn, modal=False)
+ dlg.bind('<Destroy>', self.destroy, '+')
+
+ def nearwindow(self, near):
+ # Place the help dialog near the window specified by parent.
+ # Note - this may not reposition the window in Metacity
+ # if "/apps/metacity/general/disable_workarounds" is enabled
+ dlg = self.dlg
+ geom = (near.winfo_rootx() + 10, near.winfo_rooty() + 10)
+ dlg.withdraw()
+ dlg.geometry("=+%d+%d" % geom)
+ dlg.deiconify()
+ dlg.lift()
+
+ def destroy(self, ev=None):
+ self.dlg = None
+ self.parent = None
+
+helpDialog = HelpDialog() # singleton instance
+
+
class EditorWindow(object):
from idlelib.Percolator import Percolator
from idlelib.ColorDelegator import ColorDelegator
@@ -453,8 +497,11 @@ class EditorWindow(object):
configDialog.ConfigDialog(self.top,'Settings')
def help_dialog(self, event=None):
- fn=os.path.join(os.path.abspath(os.path.dirname(__file__)),'help.txt')
- textView.view_file(self.top,'Help',fn)
+ if self.root:
+ parent = self.root
+ else:
+ parent = self.top
+ helpDialog.display(parent, near=self.top)
def python_docs(self, event=None):
if sys.platform[:3] == 'win':
diff --git a/Lib/idlelib/textView.py b/Lib/idlelib/textView.py
index e0f49d4..1eaa464 100644
--- a/Lib/idlelib/textView.py
+++ b/Lib/idlelib/textView.py
@@ -9,7 +9,7 @@ class TextViewer(Toplevel):
"""A simple text viewer dialog for IDLE
"""
- def __init__(self, parent, title, text):
+ def __init__(self, parent, title, text, modal=True):
"""Show the given text in a scrollable window with a 'close' button
"""
@@ -24,8 +24,6 @@ class TextViewer(Toplevel):
self.CreateWidgets()
self.title(title)
- self.transient(parent)
- self.grab_set()
self.protocol("WM_DELETE_WINDOW", self.Ok)
self.parent = parent
self.textView.focus_set()
@@ -34,7 +32,11 @@ class TextViewer(Toplevel):
self.bind('<Escape>',self.Ok) #dismiss dialog
self.textView.insert(0.0, text)
self.textView.config(state=DISABLED)
- self.wait_window()
+
+ if modal:
+ self.transient(parent)
+ self.grab_set()
+ self.wait_window()
def CreateWidgets(self):
frameText = Frame(self, relief=SUNKEN, height=700)
@@ -57,10 +59,10 @@ class TextViewer(Toplevel):
self.destroy()
-def view_text(parent, title, text):
- TextViewer(parent, title, text)
+def view_text(parent, title, text, modal=True):
+ return TextViewer(parent, title, text, modal)
-def view_file(parent, title, filename, encoding=None):
+def view_file(parent, title, filename, encoding=None, modal=True):
try:
with open(filename, 'r', encoding=encoding) as file:
contents = file.read()
@@ -70,7 +72,7 @@ def view_file(parent, title, filename, encoding=None):
message='Unable to load file %r .' % filename,
parent=parent)
else:
- return view_text(parent, title, contents)
+ return view_text(parent, title, contents, modal)
if __name__ == '__main__':
@@ -80,11 +82,15 @@ if __name__ == '__main__':
filename = './textView.py'
text = file(filename, 'r').read()
btn1 = Button(root, text='view_text',
- command=lambda:view_text(root, 'view_text', text))
+ command=lambda:view_text(root, 'view_text', text))
btn1.pack(side=LEFT)
btn2 = Button(root, text='view_file',
command=lambda:view_file(root, 'view_file', filename))
btn2.pack(side=LEFT)
+ btn3 = Button(root, text='nonmodal view_text',
+ command=lambda:view_text(root, 'nonmodal view_text', text,
+ modal=False))
+ btn3.pack(side=LEFT)
close = Button(root, text='Close', command=root.destroy)
close.pack(side=RIGHT)
root.mainloop()
diff --git a/Lib/shutil.py b/Lib/shutil.py
index 00bffe5..d1b1af3 100644
--- a/Lib/shutil.py
+++ b/Lib/shutil.py
@@ -493,7 +493,6 @@ def _make_zipfile(base_name, base_dir, verbose=0, dry_run=0, logger=None):
_ARCHIVE_FORMATS = {
'gztar': (_make_tarball, [('compress', 'gzip')], "gzip'ed tar-file"),
- 'bztar': (_make_tarball, [('compress', 'bzip2')], "bzip2'ed tar-file"),
'tar': (_make_tarball, [('compress', None)], "uncompressed tar file"),
'zip': (_make_zipfile, [],"ZIP file")
}
diff --git a/Lib/test/test_audioop.py b/Lib/test/test_audioop.py
index ff60a7d..c14e8b8 100644
--- a/Lib/test/test_audioop.py
+++ b/Lib/test/test_audioop.py
@@ -2,18 +2,19 @@ import audioop
import unittest
from test.support import run_unittest
+endian = 'big' if audioop.getsample(b'\0\1', 2, 0) == 1 else 'little'
def gendata1():
return b'\0\1\2'
def gendata2():
- if audioop.getsample(b'\0\1', 2, 0) == 1:
+ if endian == 'big':
return b'\0\0\0\1\0\2'
else:
return b'\0\0\1\0\2\0'
def gendata4():
- if audioop.getsample(b'\0\0\0\1', 4, 0) == 1:
+ if endian == 'big':
return b'\0\0\0\0\0\0\0\1\0\0\0\2'
else:
return b'\0\0\0\0\1\0\0\0\2\0\0\0'
@@ -111,9 +112,16 @@ class TestAudioop(unittest.TestCase):
# Cursory
d = audioop.lin2alaw(data[0], 1)
self.assertEqual(audioop.alaw2lin(d, 1), data[0])
- self.assertEqual(audioop.alaw2lin(d, 2), b'\x08\x00\x08\x01\x10\x02')
- self.assertEqual(audioop.alaw2lin(d, 4),
- b'\x00\x00\x08\x00\x00\x00\x08\x01\x00\x00\x10\x02')
+ if endian == 'big':
+ self.assertEqual(audioop.alaw2lin(d, 2),
+ b'\x00\x08\x01\x08\x02\x10')
+ self.assertEqual(audioop.alaw2lin(d, 4),
+ b'\x00\x08\x00\x00\x01\x08\x00\x00\x02\x10\x00\x00')
+ else:
+ self.assertEqual(audioop.alaw2lin(d, 2),
+ b'\x08\x00\x08\x01\x10\x02')
+ self.assertEqual(audioop.alaw2lin(d, 4),
+ b'\x00\x00\x08\x00\x00\x00\x08\x01\x00\x00\x10\x02')
def test_lin2ulaw(self):
self.assertEqual(audioop.lin2ulaw(data[0], 1), b'\xff\xe7\xdb')
@@ -124,9 +132,16 @@ class TestAudioop(unittest.TestCase):
# Cursory
d = audioop.lin2ulaw(data[0], 1)
self.assertEqual(audioop.ulaw2lin(d, 1), data[0])
- self.assertEqual(audioop.ulaw2lin(d, 2), b'\x00\x00\x04\x01\x0c\x02')
- self.assertEqual(audioop.ulaw2lin(d, 4),
- b'\x00\x00\x00\x00\x00\x00\x04\x01\x00\x00\x0c\x02')
+ if endian == 'big':
+ self.assertEqual(audioop.ulaw2lin(d, 2),
+ b'\x00\x00\x01\x04\x02\x0c')
+ self.assertEqual(audioop.ulaw2lin(d, 4),
+ b'\x00\x00\x00\x00\x01\x04\x00\x00\x02\x0c\x00\x00')
+ else:
+ self.assertEqual(audioop.ulaw2lin(d, 2),
+ b'\x00\x00\x04\x01\x0c\x02')
+ self.assertEqual(audioop.ulaw2lin(d, 4),
+ b'\x00\x00\x00\x00\x00\x00\x04\x01\x00\x00\x0c\x02')
def test_mul(self):
data2 = []
diff --git a/Lib/test/test_site.py b/Lib/test/test_site.py
index 4d36e17..ba42649 100644
--- a/Lib/test/test_site.py
+++ b/Lib/test/test_site.py
@@ -223,7 +223,19 @@ class HelperFunctionsTests(unittest.TestCase):
self.assertEqual(len(dirs), 1)
wanted = os.path.join('xoxo', 'Lib', 'site-packages')
self.assertEqual(dirs[0], wanted)
+ elif (sys.platform == "darwin" and
+ sysconfig.get_config_var("PYTHONFRAMEWORK")):
+ # OS X framework builds
+ site.PREFIXES = ['Python.framework']
+ dirs = site.getsitepackages()
+ self.assertEqual(len(dirs), 3)
+ wanted = os.path.join('/Library',
+ sysconfig.get_config_var("PYTHONFRAMEWORK"),
+ sys.version[:3],
+ 'site-packages')
+ self.assertEqual(dirs[2], wanted)
elif os.sep == '/':
+ # OS X non-framwework builds, Linux, FreeBSD, etc
self.assertEqual(len(dirs), 2)
wanted = os.path.join('xoxo', 'lib', 'python' + sys.version[:3],
'site-packages')
@@ -231,21 +243,12 @@ class HelperFunctionsTests(unittest.TestCase):
wanted = os.path.join('xoxo', 'lib', 'site-python')
self.assertEqual(dirs[1], wanted)
else:
+ # other platforms
self.assertEqual(len(dirs), 2)
self.assertEqual(dirs[0], 'xoxo')
wanted = os.path.join('xoxo', 'lib', 'site-packages')
self.assertEqual(dirs[1], wanted)
- # let's try the specific Apple location
- if (sys.platform == "darwin" and
- sysconfig.get_config_var("PYTHONFRAMEWORK")):
- site.PREFIXES = ['Python.framework']
- dirs = site.getsitepackages()
- self.assertEqual(len(dirs), 3)
- wanted = os.path.join('/Library', 'Python', sys.version[:3],
- 'site-packages')
- self.assertEqual(dirs[2], wanted)
-
class PthFile(object):
"""Helper class for handling testing of .pth files"""
diff --git a/Misc/ACKS b/Misc/ACKS
index ccc1fec..313aed5 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -767,6 +767,7 @@ Vlad Riscutia
Juan M. Bello Rivas
Davide Rizzo
Anthony Roach
+Carl Robben
Mark Roberts
Jim Robinson
Andy Robinson
diff --git a/Misc/NEWS b/Misc/NEWS
index 136748e..5761ed0 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -113,6 +113,16 @@ Core and Builtins
Library
-------
+- Issue #10881: Fix test_site failure with OS X framework builds.
+
+- Issue #964437 Make IDLE help window non-modal.
+ Patch by Guilherme Polo and Roger Serwy.
+
+- Issue #2945: Make the distutils upload command aware of bdist_rpm products.
+
+- Issue #13933: IDLE auto-complete did not work with some imported
+ module, like hashlib. (Patch by Roger Serwy)
+
- Issue #13901: Prevent test_distutils failures on OS X with --enable-shared.
- Issue #13676: Handle strings with embedded zeros correctly in sqlite3.