Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
5f59dddd
Commit
5f59dddd
authored
Oct 04, 2016
by
Berker Peksag
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Issue #28229: lzma module now supports pathlib
parent
db8d6265
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
47 additions
and
13 deletions
+47
-13
Doc/library/lzma.rst
Doc/library/lzma.rst
+13
-5
Lib/lzma.py
Lib/lzma.py
+10
-8
Lib/test/test_lzma.py
Lib/test/test_lzma.py
+22
-0
Misc/NEWS
Misc/NEWS
+2
-0
No files found.
Doc/library/lzma.rst
View file @
5f59dddd
...
...
@@ -39,8 +39,9 @@ Reading and writing compressed files
object`.
The *filename* argument can be either an actual file name (given as a
:class:`str` or :class:`bytes` object), in which case the named file is
opened, or it can be an existing file object to read from or write to.
:class:`str`, :class:`bytes` or :term:`path-like object` object), in
which case the named file is opened, or it can be an existing file object
to read from or write to.
The *mode* argument can be any of ``"r"``, ``"rb"``, ``"w"``, ``"wb"``,
``"x"``, ``"xb"``, ``"a"`` or ``"ab"`` for binary mode, or ``"rt"``,
...
...
@@ -64,6 +65,9 @@ Reading and writing compressed files
.. versionchanged:: 3.4
Added support for the ``"x"``, ``"xb"`` and ``"xt"`` modes.
.. versionchanged:: 3.6
Accepts a :term:`path-like object`.
.. class:: LZMAFile(filename=None, mode="r", \*, format=None, check=-1, preset=None, filters=None)
...
...
@@ -71,9 +75,10 @@ Reading and writing compressed files
An :class:`LZMAFile` can wrap an already-open :term:`file object`, or operate
directly on a named file. The *filename* argument specifies either the file
object to wrap, or the name of the file to open (as a :class:`str` or
:class:`bytes` object). When wrapping an existing file object, the wrapped
file will not be closed when the :class:`LZMAFile` is closed.
object to wrap, or the name of the file to open (as a :class:`str`,
:class:`bytes` or :term:`path-like object` object). When wrapping an
existing file object, the wrapped file will not be closed when the
:class:`LZMAFile` is closed.
The *mode* argument can be either ``"r"`` for reading (default), ``"w"`` for
overwriting, ``"x"`` for exclusive creation, or ``"a"`` for appending. These
...
...
@@ -118,6 +123,9 @@ Reading and writing compressed files
The :meth:`~io.BufferedIOBase.read` method now accepts an argument of
``None``.
.. versionchanged:: 3.6
Accepts a :term:`path-like object`.
Compressing and decompressing data in memory
--------------------------------------------
...
...
Lib/lzma.py
View file @
5f59dddd
...
...
@@ -23,6 +23,7 @@ __all__ = [
import
builtins
import
io
import
os
from
_lzma
import
*
from
_lzma
import
_encode_filter_properties
,
_decode_filter_properties
import
_compression
...
...
@@ -49,9 +50,10 @@ class LZMAFile(_compression.BaseStream):
format
=
None
,
check
=-
1
,
preset
=
None
,
filters
=
None
):
"""Open an LZMA-compressed file in binary mode.
filename can be either an actual file name (given as a str or
bytes object), in which case the named file is opened, or it can
be an existing file object to read from or write to.
filename can be either an actual file name (given as a str,
bytes, or PathLike object), in which case the named file is
opened, or it can be an existing file object to read from or
write to.
mode can be "r" for reading (default), "w" for (over)writing,
"x" for creating exclusively, or "a" for appending. These can
...
...
@@ -112,7 +114,7 @@ class LZMAFile(_compression.BaseStream):
else
:
raise
ValueError
(
"Invalid mode: {!r}"
.
format
(
mode
))
if
isinstance
(
filename
,
(
str
,
bytes
)):
if
isinstance
(
filename
,
(
str
,
bytes
,
os
.
PathLike
)):
if
"b"
not
in
mode
:
mode
+=
"b"
self
.
_fp
=
builtins
.
open
(
filename
,
mode
)
...
...
@@ -122,7 +124,7 @@ class LZMAFile(_compression.BaseStream):
self
.
_fp
=
filename
self
.
_mode
=
mode_code
else
:
raise
TypeError
(
"filename must be a str
or bytes object, or a file
"
)
raise
TypeError
(
"filename must be a str
, bytes, file or PathLike object
"
)
if
self
.
_mode
==
_MODE_READ
:
raw
=
_compression
.
DecompressReader
(
self
.
_fp
,
LZMADecompressor
,
...
...
@@ -263,9 +265,9 @@ def open(filename, mode="rb", *,
encoding
=
None
,
errors
=
None
,
newline
=
None
):
"""Open an LZMA-compressed file in binary or text mode.
filename can be either an actual file name (given as a str
or bytes
o
bject), in which case the named file is opened, or it can be an
existing file object to read from or write to.
filename can be either an actual file name (given as a str
, bytes,
o
r PathLike object), in which case the named file is opened, or it
can be an
existing file object to read from or write to.
The mode argument can be "r", "rb" (default), "w", "wb", "x", "xb",
"a", or "ab" for binary mode, or "rt", "wt", "xt", or "at" for text
...
...
Lib/test/test_lzma.py
View file @
5f59dddd
import
_compression
from
io
import
BytesIO
,
UnsupportedOperation
,
DEFAULT_BUFFER_SIZE
import
os
import
pathlib
import
pickle
import
random
import
unittest
...
...
@@ -488,6 +489,16 @@ class FileTestCase(unittest.TestCase):
with
LZMAFile
(
BytesIO
(),
"a"
)
as
f
:
pass
def
test_init_with_PathLike_filename
(
self
):
filename
=
pathlib
.
Path
(
TESTFN
)
with
TempFile
(
filename
,
COMPRESSED_XZ
):
with
LZMAFile
(
filename
)
as
f
:
self
.
assertEqual
(
f
.
read
(),
INPUT
)
with
LZMAFile
(
filename
,
"a"
)
as
f
:
f
.
write
(
INPUT
)
with
LZMAFile
(
filename
)
as
f
:
self
.
assertEqual
(
f
.
read
(),
INPUT
*
2
)
def
test_init_with_filename
(
self
):
with
TempFile
(
TESTFN
,
COMPRESSED_XZ
):
with
LZMAFile
(
TESTFN
)
as
f
:
...
...
@@ -1180,6 +1191,17 @@ class OpenTestCase(unittest.TestCase):
with
lzma
.
open
(
TESTFN
,
"rb"
)
as
f
:
self
.
assertEqual
(
f
.
read
(),
INPUT
*
2
)
def
test_with_pathlike_filename
(
self
):
filename
=
pathlib
.
Path
(
TESTFN
)
with
TempFile
(
filename
):
with
lzma
.
open
(
filename
,
"wb"
)
as
f
:
f
.
write
(
INPUT
)
with
open
(
filename
,
"rb"
)
as
f
:
file_data
=
lzma
.
decompress
(
f
.
read
())
self
.
assertEqual
(
file_data
,
INPUT
)
with
lzma
.
open
(
filename
,
"rb"
)
as
f
:
self
.
assertEqual
(
f
.
read
(),
INPUT
)
def
test_bad_params
(
self
):
# Test invalid parameter combinations.
with
self
.
assertRaises
(
ValueError
):
...
...
Misc/NEWS
View file @
5f59dddd
...
...
@@ -50,6 +50,8 @@ Core and Builtins
Library
-------
- Issue #28229: lzma module now supports pathlib.
- Issue #28321: Fixed writing non-BMP characters with binary format in plistlib.
- Issue #28225: bz2 module now supports pathlib. Initial patch by Ethan Furman.
...
...
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