Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
cpython
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
Batuhan Osman TASKAYA
cpython
Commits
f6b16a4b
Kaydet (Commit)
f6b16a4b
authored
May 01, 2012
tarafından
Martin v. Löwis
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
Issue #14371: Support bzip2 in zipfile module.
Patch by Serhiy Storchaka.
üst
9acbb607
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
160 additions
and
6 deletions
+160
-6
zipfile.rst
Doc/library/zipfile.rst
+24
-4
support.py
Lib/test/support.py
+8
-1
test_zipfile.py
Lib/test/test_zipfile.py
+125
-1
zipfile.py
Lib/zipfile.py
+0
-0
NEWS
Misc/NEWS
+3
-0
No files found.
Doc/library/zipfile.rst
Dosyayı görüntüle @
f6b16a4b
...
...
@@ -87,7 +87,22 @@ The module defines the following items:
..
data
::
ZIP_DEFLATED
The
numeric
constant
for
the
usual
ZIP
compression
method
.
This
requires
the
zlib
module
.
No
other
compression
methods
are
currently
supported
.
zlib
module
.
..
data
::
ZIP_BZIP2
The
numeric
constant
for
the
BZIP2
compression
method
.
This
requires
the
bz2
module
.
..
versionadded
::
3.3
..
note
::
The
ZIP
file
format
specification
has
included
support
for
bzip2
compression
since
2001.
However
,
some
tools
(
including
older
Python
releases
)
do
not
support
it
,
and
may
either
refuse
to
process
the
ZIP
file
altogether
,
or
fail
to
extract
individual
files
.
..
seealso
::
...
...
@@ -118,9 +133,11 @@ ZipFile Objects
adding a ZIP archive to another file (such as :file:`python.exe`). If
*mode* is ``a`` and the file does not exist at all, it is created.
*compression* is the ZIP compression method to use when writing the archive,
and should be :const:`ZIP_STORED` or :const:`ZIP_DEFLATED`; unrecognized
values will cause :exc:`RuntimeError` to be raised. If :const:`ZIP_DEFLATED`
is specified but the :mod:`zlib` module is not available, :exc:`RuntimeError`
and should be :const:`ZIP_STORED`, :const:`ZIP_DEFLATED`; or
:const:`ZIP_DEFLATED`; unrecognized
values will cause :exc:`RuntimeError` to be raised. If :const:`ZIP_DEFLATED` or
:const:`ZIP_BZIP2` is specified but the corresponded module
(:mod:`zlib` or :mod:`bz2`) is not available, :exc:`RuntimeError`
is also raised. The default is :const:`ZIP_STORED`. If *allowZip64* is
``True`` zipfile will create ZIP files that use the ZIP64 extensions when
the zipfile is larger than 2 GB. If it is false (the default) :mod:`zipfile`
...
...
@@ -143,6 +160,9 @@ ZipFile Objects
.. versionadded:: 3.2
Added the ability to use :class:`ZipFile` as a context manager.
.. versionchanged:: 3.3
Added support for :mod:`bzip2` compression.
.. method:: ZipFile.close()
...
...
Lib/test/support.py
Dosyayı görüntüle @
f6b16a4b
...
...
@@ -40,6 +40,11 @@ try:
except
ImportError
:
zlib
=
None
try
:
import
bz2
except
ImportError
:
bz2
=
None
__all__
=
[
"Error"
,
"TestFailed"
,
"ResourceDenied"
,
"import_module"
,
"verbose"
,
"use_resources"
,
"max_memuse"
,
"record_original_stdout"
,
...
...
@@ -57,7 +62,7 @@ __all__ = [
"get_attribute"
,
"swap_item"
,
"swap_attr"
,
"requires_IEEE_754"
,
"TestHandler"
,
"Matcher"
,
"can_symlink"
,
"skip_unless_symlink"
,
"import_fresh_module"
,
"requires_zlib"
,
"PIPE_MAX_SIZE"
,
"failfast"
,
"anticipate_failure"
,
"run_with_tz"
"anticipate_failure"
,
"run_with_tz"
,
"requires_bz2"
]
class
Error
(
Exception
):
...
...
@@ -506,6 +511,8 @@ requires_IEEE_754 = unittest.skipUnless(
requires_zlib
=
unittest
.
skipUnless
(
zlib
,
'requires zlib'
)
requires_bz2
=
unittest
.
skipUnless
(
bz2
,
'requires bz2'
)
is_jython
=
sys
.
platform
.
startswith
(
'java'
)
# Filename used for testing
...
...
Lib/test/test_zipfile.py
Dosyayı görüntüle @
f6b16a4b
...
...
@@ -13,7 +13,7 @@ from tempfile import TemporaryFile
from
random
import
randint
,
random
from
unittest
import
skipUnless
from
test.support
import
TESTFN
,
run_unittest
,
findfile
,
unlink
,
requires_zlib
from
test.support
import
TESTFN
,
run_unittest
,
findfile
,
unlink
,
requires_zlib
,
requires_bz2
TESTFN2
=
TESTFN
+
"2"
TESTFNDIR
=
TESTFN
+
"d"
...
...
@@ -313,6 +313,54 @@ class TestsWithSourceFile(unittest.TestCase):
self
.
assertEqual
(
openobj
.
read
(
1
),
b
'1'
)
self
.
assertEqual
(
openobj
.
read
(
1
),
b
'2'
)
@requires_bz2
def
test_bzip2
(
self
):
for
f
in
(
TESTFN2
,
TemporaryFile
(),
io
.
BytesIO
()):
self
.
zip_test
(
f
,
zipfile
.
ZIP_BZIP2
)
@requires_bz2
def
test_open_bzip2
(
self
):
for
f
in
(
TESTFN2
,
TemporaryFile
(),
io
.
BytesIO
()):
self
.
zip_open_test
(
f
,
zipfile
.
ZIP_BZIP2
)
@requires_bz2
def
test_random_open_bzip2
(
self
):
for
f
in
(
TESTFN2
,
TemporaryFile
(),
io
.
BytesIO
()):
self
.
zip_random_open_test
(
f
,
zipfile
.
ZIP_BZIP2
)
@requires_bz2
def
test_readline_read_bzip2
(
self
):
for
f
in
(
TESTFN2
,
TemporaryFile
(),
io
.
BytesIO
()):
self
.
zip_readline_read_test
(
f
,
zipfile
.
ZIP_BZIP2
)
@requires_bz2
def
test_readline_bzip2
(
self
):
for
f
in
(
TESTFN2
,
TemporaryFile
(),
io
.
BytesIO
()):
self
.
zip_readline_test
(
f
,
zipfile
.
ZIP_BZIP2
)
@requires_bz2
def
test_readlines_bzip2
(
self
):
for
f
in
(
TESTFN2
,
TemporaryFile
(),
io
.
BytesIO
()):
self
.
zip_readlines_test
(
f
,
zipfile
.
ZIP_BZIP2
)
@requires_bz2
def
test_iterlines_bzip2
(
self
):
for
f
in
(
TESTFN2
,
TemporaryFile
(),
io
.
BytesIO
()):
self
.
zip_iterlines_test
(
f
,
zipfile
.
ZIP_BZIP2
)
@requires_bz2
def
test_low_compression_bzip2
(
self
):
"""Check for cases where compressed data is larger than original."""
# Create the ZIP archive
with
zipfile
.
ZipFile
(
TESTFN2
,
"w"
,
zipfile
.
ZIP_BZIP2
)
as
zipfp
:
zipfp
.
writestr
(
"strfile"
,
'12'
)
# Get an open object for strfile
with
zipfile
.
ZipFile
(
TESTFN2
,
"r"
,
zipfile
.
ZIP_BZIP2
)
as
zipfp
:
with
zipfp
.
open
(
"strfile"
)
as
openobj
:
self
.
assertEqual
(
openobj
.
read
(
1
),
b
'1'
)
self
.
assertEqual
(
openobj
.
read
(
1
),
b
'2'
)
def
test_absolute_arcnames
(
self
):
with
zipfile
.
ZipFile
(
TESTFN2
,
"w"
,
zipfile
.
ZIP_STORED
)
as
zipfp
:
zipfp
.
write
(
TESTFN
,
"/absolute"
)
...
...
@@ -453,6 +501,13 @@ class TestsWithSourceFile(unittest.TestCase):
info
=
zipfp
.
getinfo
(
'b.txt'
)
self
.
assertEqual
(
info
.
compress_type
,
zipfile
.
ZIP_DEFLATED
)
@requires_bz2
def
test_writestr_compression_bzip2
(
self
):
zipfp
=
zipfile
.
ZipFile
(
TESTFN2
,
"w"
)
zipfp
.
writestr
(
"b.txt"
,
"hello world"
,
compress_type
=
zipfile
.
ZIP_BZIP2
)
info
=
zipfp
.
getinfo
(
'b.txt'
)
self
.
assertEqual
(
info
.
compress_type
,
zipfile
.
ZIP_BZIP2
)
def
zip_test_writestr_permissions
(
self
,
f
,
compression
):
# Make sure that writestr creates files with mode 0600,
# when it is passed a name rather than a ZipInfo instance.
...
...
@@ -626,6 +681,11 @@ class TestZip64InSmallFiles(unittest.TestCase):
for
f
in
(
TESTFN2
,
TemporaryFile
(),
io
.
BytesIO
()):
self
.
zip_test
(
f
,
zipfile
.
ZIP_DEFLATED
)
@requires_bz2
def
test_bzip2
(
self
):
for
f
in
(
TESTFN2
,
TemporaryFile
(),
io
.
BytesIO
()):
self
.
zip_test
(
f
,
zipfile
.
ZIP_BZIP2
)
def
test_absolute_arcnames
(
self
):
with
zipfile
.
ZipFile
(
TESTFN2
,
"w"
,
zipfile
.
ZIP_STORED
,
allowZip64
=
True
)
as
zipfp
:
...
...
@@ -754,6 +814,18 @@ class OtherTests(unittest.TestCase):
b
'
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x01\x00\x00\x00
'
b
'
\x00
afilePK
\x05\x06\x00\x00\x00\x00\x01\x00
'
b
'
\x01\x00
3
\x00\x00\x00
3
\x00\x00\x00\x00\x00
'
),
zipfile
.
ZIP_BZIP2
:
(
b
'PK
\x03\x04\x14\x03\x00\x00\x0c\x00
nu
\x0c
=FA'
b
'KE8
\x00\x00\x00
n
\x00\x00\x00\x05\x00\x00\x00
af'
b
'ileBZh91AY&SY
\xd4\xa8\xca
'
b
'
\x7f\x00\x00\x0f\x11\x80
@
\x00\x06
D
\x90\x80
\x00
\xa5
'
b
'P
\xd9
!
\x03\x03\x13\x13\x13\x89\xa9\xa9\xc2
u5:
\x9f
'
b
'
\x8b\xb9
"
\x9c
(HjTe?
\x80
PK
\x01\x02\x14
'
b
'
\x03\x14\x03\x00\x00\x0c\x00
nu
\x0c
=FAKE8'
b
'
\x00\x00\x00
n
\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00
'
b
'
\x00
\x80\x80\x81\x00\x00\x00\x00
afilePK'
b
'
\x05\x06\x00\x00\x00\x00\x01\x00\x01\x00
3
\x00\x00\x00
[
\x00
'
b
'
\x00\x00\x00\x00
'
),
}
def
test_unicode_filenames
(
self
):
...
...
@@ -1007,6 +1079,10 @@ class OtherTests(unittest.TestCase):
def
test_testzip_with_bad_crc_deflated
(
self
):
self
.
check_testzip_with_bad_crc
(
zipfile
.
ZIP_DEFLATED
)
@requires_bz2
def
test_testzip_with_bad_crc_bzip2
(
self
):
self
.
check_testzip_with_bad_crc
(
zipfile
.
ZIP_BZIP2
)
def
check_read_with_bad_crc
(
self
,
compression
):
"""Tests that files with bad CRCs raise a BadZipFile exception when read."""
zipdata
=
self
.
zips_with_bad_crc
[
compression
]
...
...
@@ -1035,6 +1111,10 @@ class OtherTests(unittest.TestCase):
def
test_read_with_bad_crc_deflated
(
self
):
self
.
check_read_with_bad_crc
(
zipfile
.
ZIP_DEFLATED
)
@requires_bz2
def
test_read_with_bad_crc_bzip2
(
self
):
self
.
check_read_with_bad_crc
(
zipfile
.
ZIP_BZIP2
)
def
check_read_return_size
(
self
,
compression
):
# Issue #9837: ZipExtFile.read() shouldn't return more bytes
# than requested.
...
...
@@ -1055,6 +1135,10 @@ class OtherTests(unittest.TestCase):
def
test_read_return_size_deflated
(
self
):
self
.
check_read_return_size
(
zipfile
.
ZIP_DEFLATED
)
@requires_bz2
def
test_read_return_size_bzip2
(
self
):
self
.
check_read_return_size
(
zipfile
.
ZIP_BZIP2
)
def
test_empty_zipfile
(
self
):
# Check that creating a file in 'w' or 'a' mode and closing without
# adding any files to the archives creates a valid empty ZIP file
...
...
@@ -1196,6 +1280,11 @@ class TestsWithRandomBinaryFiles(unittest.TestCase):
for
f
in
(
TESTFN2
,
TemporaryFile
(),
io
.
BytesIO
()):
self
.
zip_test
(
f
,
zipfile
.
ZIP_DEFLATED
)
@requires_bz2
def
test_bzip2
(
self
):
for
f
in
(
TESTFN2
,
TemporaryFile
(),
io
.
BytesIO
()):
self
.
zip_test
(
f
,
zipfile
.
ZIP_BZIP2
)
def
zip_open_test
(
self
,
f
,
compression
):
self
.
make_test_archive
(
f
,
compression
)
...
...
@@ -1236,6 +1325,11 @@ class TestsWithRandomBinaryFiles(unittest.TestCase):
for
f
in
(
TESTFN2
,
TemporaryFile
(),
io
.
BytesIO
()):
self
.
zip_open_test
(
f
,
zipfile
.
ZIP_DEFLATED
)
@requires_bz2
def
test_open_bzip2
(
self
):
for
f
in
(
TESTFN2
,
TemporaryFile
(),
io
.
BytesIO
()):
self
.
zip_open_test
(
f
,
zipfile
.
ZIP_BZIP2
)
def
zip_random_open_test
(
self
,
f
,
compression
):
self
.
make_test_archive
(
f
,
compression
)
...
...
@@ -1264,6 +1358,11 @@ class TestsWithRandomBinaryFiles(unittest.TestCase):
for
f
in
(
TESTFN2
,
TemporaryFile
(),
io
.
BytesIO
()):
self
.
zip_random_open_test
(
f
,
zipfile
.
ZIP_DEFLATED
)
@requires_bz2
def
test_random_open_bzip2
(
self
):
for
f
in
(
TESTFN2
,
TemporaryFile
(),
io
.
BytesIO
()):
self
.
zip_random_open_test
(
f
,
zipfile
.
ZIP_BZIP2
)
@requires_zlib
class
TestsWithMultipleOpens
(
unittest
.
TestCase
):
...
...
@@ -1483,6 +1582,31 @@ class UniversalNewlineTests(unittest.TestCase):
for
f
in
(
TESTFN2
,
TemporaryFile
(),
io
.
BytesIO
()):
self
.
iterlines_test
(
f
,
zipfile
.
ZIP_DEFLATED
)
@requires_bz2
def
test_read_bzip2
(
self
):
for
f
in
(
TESTFN2
,
TemporaryFile
(),
io
.
BytesIO
()):
self
.
read_test
(
f
,
zipfile
.
ZIP_BZIP2
)
@requires_bz2
def
test_readline_read_bzip2
(
self
):
for
f
in
(
TESTFN2
,
TemporaryFile
(),
io
.
BytesIO
()):
self
.
readline_read_test
(
f
,
zipfile
.
ZIP_BZIP2
)
@requires_bz2
def
test_readline_bzip2
(
self
):
for
f
in
(
TESTFN2
,
TemporaryFile
(),
io
.
BytesIO
()):
self
.
readline_test
(
f
,
zipfile
.
ZIP_BZIP2
)
@requires_bz2
def
test_readlines_bzip2
(
self
):
for
f
in
(
TESTFN2
,
TemporaryFile
(),
io
.
BytesIO
()):
self
.
readlines_test
(
f
,
zipfile
.
ZIP_BZIP2
)
@requires_bz2
def
test_iterlines_bzip2
(
self
):
for
f
in
(
TESTFN2
,
TemporaryFile
(),
io
.
BytesIO
()):
self
.
iterlines_test
(
f
,
zipfile
.
ZIP_BZIP2
)
def
tearDown
(
self
):
for
sep
,
fn
in
self
.
arcfiles
.
items
():
os
.
remove
(
fn
)
...
...
Lib/zipfile.py
Dosyayı görüntüle @
f6b16a4b
This diff is collapsed.
Click to expand it.
Misc/NEWS
Dosyayı görüntüle @
f6b16a4b
...
...
@@ -87,6 +87,9 @@ Core and Builtins
Library
-------
- Issue #14371: Support bzip2 in zipfile module.
Patch by Serhiy Storchaka.
- Issue #13183: Fix pdb skipping frames after hitting a breakpoint and running
step. Patch by Xavier de Gaye.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment