mirror of https://github.com/python/cpython
merge
This commit is contained in:
commit
d3df2060a6
|
@ -61,7 +61,7 @@ The module defines the following items:
|
||||||
.. class:: ZipInfo(filename='NoName', date_time=(1980,1,1,0,0,0))
|
.. class:: ZipInfo(filename='NoName', date_time=(1980,1,1,0,0,0))
|
||||||
|
|
||||||
Class used to represent information about a member of an archive. Instances
|
Class used to represent information about a member of an archive. Instances
|
||||||
of this class are returned by the :meth:`getinfo` and :meth:`infolist`
|
of this class are returned by the :meth:`.getinfo` and :meth:`.infolist`
|
||||||
methods of :class:`ZipFile` objects. Most users of the :mod:`zipfile` module
|
methods of :class:`ZipFile` objects. Most users of the :mod:`zipfile` module
|
||||||
will not need to create these, but only use those created by this
|
will not need to create these, but only use those created by this
|
||||||
module. *filename* should be the full name of the archive member, and
|
module. *filename* should be the full name of the archive member, and
|
||||||
|
@ -87,20 +87,20 @@ The module defines the following items:
|
||||||
.. data:: ZIP_DEFLATED
|
.. data:: ZIP_DEFLATED
|
||||||
|
|
||||||
The numeric constant for the usual ZIP compression method. This requires the
|
The numeric constant for the usual ZIP compression method. This requires the
|
||||||
zlib module.
|
:mod:`zlib` module.
|
||||||
|
|
||||||
|
|
||||||
.. data:: ZIP_BZIP2
|
.. data:: ZIP_BZIP2
|
||||||
|
|
||||||
The numeric constant for the BZIP2 compression method. This requires the
|
The numeric constant for the BZIP2 compression method. This requires the
|
||||||
bz2 module.
|
:mod:`bz2` module.
|
||||||
|
|
||||||
.. versionadded:: 3.3
|
.. versionadded:: 3.3
|
||||||
|
|
||||||
.. data:: ZIP_LZMA
|
.. data:: ZIP_LZMA
|
||||||
|
|
||||||
The numeric constant for the LZMA compression method. This requires the
|
The numeric constant for the LZMA compression method. This requires the
|
||||||
lzma module.
|
:mod:`lzma` module.
|
||||||
|
|
||||||
.. versionadded:: 3.3
|
.. versionadded:: 3.3
|
||||||
|
|
||||||
|
@ -155,7 +155,7 @@ ZipFile Objects
|
||||||
these extensions.
|
these extensions.
|
||||||
|
|
||||||
If the file is created with mode ``'a'`` or ``'w'`` and then
|
If the file is created with mode ``'a'`` or ``'w'`` and then
|
||||||
:meth:`close`\ d without adding any files to the archive, the appropriate
|
:meth:`closed <close>` without adding any files to the archive, the appropriate
|
||||||
ZIP structures for an empty archive will be written to the file.
|
ZIP structures for an empty archive will be written to the file.
|
||||||
|
|
||||||
ZipFile is also a context manager and therefore supports the
|
ZipFile is also a context manager and therefore supports the
|
||||||
|
@ -169,7 +169,7 @@ ZipFile Objects
|
||||||
Added the ability to use :class:`ZipFile` as a context manager.
|
Added the ability to use :class:`ZipFile` as a context manager.
|
||||||
|
|
||||||
.. versionchanged:: 3.3
|
.. versionchanged:: 3.3
|
||||||
Added support for :mod:`bzip2` and :mod:`lzma` compression.
|
Added support for :mod:`bzip2 <bz2>` and :mod:`lzma` compression.
|
||||||
|
|
||||||
|
|
||||||
.. method:: ZipFile.close()
|
.. method:: ZipFile.close()
|
||||||
|
@ -207,7 +207,7 @@ ZipFile Objects
|
||||||
*mode* parameter, if included, must be one of the following: ``'r'`` (the
|
*mode* parameter, if included, must be one of the following: ``'r'`` (the
|
||||||
default), ``'U'``, or ``'rU'``. Choosing ``'U'`` or ``'rU'`` will enable
|
default), ``'U'``, or ``'rU'``. Choosing ``'U'`` or ``'rU'`` will enable
|
||||||
:term:`universal newlines` support in the read-only object. *pwd* is the
|
:term:`universal newlines` support in the read-only object. *pwd* is the
|
||||||
password used for encrypted files. Calling :meth:`open` on a closed
|
password used for encrypted files. Calling :meth:`.open` on a closed
|
||||||
ZipFile will raise a :exc:`RuntimeError`.
|
ZipFile will raise a :exc:`RuntimeError`.
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
@ -229,7 +229,7 @@ ZipFile Objects
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
The :meth:`open`, :meth:`read` and :meth:`extract` methods can take a filename
|
The :meth:`.open`, :meth:`read` and :meth:`extract` methods can take a filename
|
||||||
or a :class:`ZipInfo` object. You will appreciate this when trying to read a
|
or a :class:`ZipInfo` object. You will appreciate this when trying to read a
|
||||||
ZIP file that contains members with duplicate names.
|
ZIP file that contains members with duplicate names.
|
||||||
|
|
||||||
|
@ -335,7 +335,7 @@ ZipFile Objects
|
||||||
:class:`ZipInfo` constructor sets this member to :const:`ZIP_STORED`.
|
:class:`ZipInfo` constructor sets this member to :const:`ZIP_STORED`.
|
||||||
|
|
||||||
.. versionchanged:: 3.2
|
.. versionchanged:: 3.2
|
||||||
The *compression_type* argument.
|
The *compress_type* argument.
|
||||||
|
|
||||||
The following data attributes are also available:
|
The following data attributes are also available:
|
||||||
|
|
||||||
|
@ -351,7 +351,7 @@ The following data attributes are also available:
|
||||||
The comment text associated with the ZIP file. If assigning a comment to a
|
The comment text associated with the ZIP file. If assigning a comment to a
|
||||||
:class:`ZipFile` instance created with mode 'a' or 'w', this should be a
|
:class:`ZipFile` instance created with mode 'a' or 'w', this should be a
|
||||||
string no longer than 65535 bytes. Comments longer than this will be
|
string no longer than 65535 bytes. Comments longer than this will be
|
||||||
truncated in the written archive when :meth:`ZipFile.close` is called.
|
truncated in the written archive when :meth:`close` is called.
|
||||||
|
|
||||||
|
|
||||||
.. _pyzipfile-objects:
|
.. _pyzipfile-objects:
|
||||||
|
@ -407,8 +407,8 @@ The :class:`PyZipFile` constructor takes the same parameters as the
|
||||||
ZipInfo Objects
|
ZipInfo Objects
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
Instances of the :class:`ZipInfo` class are returned by the :meth:`getinfo` and
|
Instances of the :class:`ZipInfo` class are returned by the :meth:`.getinfo` and
|
||||||
:meth:`infolist` methods of :class:`ZipFile` objects. Each object stores
|
:meth:`.infolist` methods of :class:`ZipFile` objects. Each object stores
|
||||||
information about a single member of the ZIP archive.
|
information about a single member of the ZIP archive.
|
||||||
|
|
||||||
Instances have the following attributes:
|
Instances have the following attributes:
|
||||||
|
|
|
@ -96,8 +96,7 @@ class MinNode(object):
|
||||||
def leaves(self):
|
def leaves(self):
|
||||||
"Generator that returns the leaves of the tree"
|
"Generator that returns the leaves of the tree"
|
||||||
for child in self.children:
|
for child in self.children:
|
||||||
for x in child.leaves():
|
yield from child.leaves()
|
||||||
yield x
|
|
||||||
if not self.children:
|
if not self.children:
|
||||||
yield self
|
yield self
|
||||||
|
|
||||||
|
@ -277,7 +276,6 @@ def rec_test(sequence, test_func):
|
||||||
sub-iterables"""
|
sub-iterables"""
|
||||||
for x in sequence:
|
for x in sequence:
|
||||||
if isinstance(x, (list, tuple)):
|
if isinstance(x, (list, tuple)):
|
||||||
for y in rec_test(x, test_func):
|
yield from rec_test(x, test_func)
|
||||||
yield y
|
|
||||||
else:
|
else:
|
||||||
yield test_func(x)
|
yield test_func(x)
|
||||||
|
|
|
@ -194,8 +194,7 @@ class Base(object):
|
||||||
|
|
||||||
def leaves(self):
|
def leaves(self):
|
||||||
for child in self.children:
|
for child in self.children:
|
||||||
for x in child.leaves():
|
yield from child.leaves()
|
||||||
yield x
|
|
||||||
|
|
||||||
def depth(self):
|
def depth(self):
|
||||||
if self.parent is None:
|
if self.parent is None:
|
||||||
|
@ -274,16 +273,14 @@ class Node(Base):
|
||||||
def post_order(self):
|
def post_order(self):
|
||||||
"""Return a post-order iterator for the tree."""
|
"""Return a post-order iterator for the tree."""
|
||||||
for child in self.children:
|
for child in self.children:
|
||||||
for node in child.post_order():
|
yield from child.post_order()
|
||||||
yield node
|
|
||||||
yield self
|
yield self
|
||||||
|
|
||||||
def pre_order(self):
|
def pre_order(self):
|
||||||
"""Return a pre-order iterator for the tree."""
|
"""Return a pre-order iterator for the tree."""
|
||||||
yield self
|
yield self
|
||||||
for child in self.children:
|
for child in self.children:
|
||||||
for node in child.pre_order():
|
yield from child.pre_order()
|
||||||
yield node
|
|
||||||
|
|
||||||
def _prefix_getter(self):
|
def _prefix_getter(self):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -192,6 +192,28 @@ class ProcessTestCase(BaseTestCase):
|
||||||
p.wait()
|
p.wait()
|
||||||
self.assertEqual(p.stderr, None)
|
self.assertEqual(p.stderr, None)
|
||||||
|
|
||||||
|
@unittest.skipIf(mswindows, "path not included in Windows message")
|
||||||
|
def test_path_in_arg_not_found_message(self):
|
||||||
|
# Check that the error message displays the path not found when
|
||||||
|
# args[0] is not found.
|
||||||
|
self.assertRaisesRegex(FileNotFoundError, "notfound_blahblah",
|
||||||
|
subprocess.Popen, ["notfound_blahblah"])
|
||||||
|
|
||||||
|
@unittest.skipIf(mswindows, "path not displayed in Windows message")
|
||||||
|
def test_path_in_executable_not_found_message(self):
|
||||||
|
# Check that the error message displays the executable argument (and
|
||||||
|
# not args[0]) when the executable argument is not found
|
||||||
|
# (issue #16114).
|
||||||
|
# We call sys.exit() inside the code to prevent the test runner
|
||||||
|
# from hanging if the test fails and finds python.
|
||||||
|
self.assertRaisesRegex(FileNotFoundError, "notfound_blahblah",
|
||||||
|
subprocess.Popen, [sys.executable, "-c",
|
||||||
|
"import sys; sys.exit(47)"],
|
||||||
|
executable="notfound_blahblah")
|
||||||
|
self.assertRaisesRegex(FileNotFoundError, "exenotfound_blahblah",
|
||||||
|
subprocess.Popen, ["argnotfound_blahblah"],
|
||||||
|
executable="exenotfound_blahblah")
|
||||||
|
|
||||||
# For use in the test_cwd* tests below.
|
# For use in the test_cwd* tests below.
|
||||||
def _normalize_cwd(self, cwd):
|
def _normalize_cwd(self, cwd):
|
||||||
# Normalize an expected cwd (for Tru64 support).
|
# Normalize an expected cwd (for Tru64 support).
|
||||||
|
|
|
@ -291,8 +291,7 @@ class TestLoader(object):
|
||||||
# tests loaded from package file
|
# tests loaded from package file
|
||||||
yield tests
|
yield tests
|
||||||
# recurse into the package
|
# recurse into the package
|
||||||
for test in self._find_tests(full_path, pattern):
|
yield from self._find_tests(full_path, pattern)
|
||||||
yield test
|
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
yield load_tests(self, tests, pattern)
|
yield load_tests(self, tests, pattern)
|
||||||
|
|
Loading…
Reference in New Issue