Skip to content

Commit 3f0b254

Browse files
committed
test: check mode value
1 parent fdcbf36 commit 3f0b254

File tree

5 files changed

+19
-5
lines changed

5 files changed

+19
-5
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ adheres to [Semantic Versioning](https://semver.org/).
2626

2727
### :house: Internal
2828

29+
- Test the `mode` attribute of objects returned by `xz.open`/`XZFile`
2930
- Minor improvements in some docstrings
3031

3132
## [0.3.1] - 2021-12-26

src/xz/file.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ def __init__(
7070

7171
super().__init__()
7272

73-
self.mode, self._readable, self._writable = parse_mode(mode)
73+
self._mode, self._readable, self._writable = parse_mode(mode)
7474

7575
# create strategy
7676
if block_read_strategy is None:
@@ -83,7 +83,7 @@ def __init__(
8383
# get fileobj
8484
if isinstance(filename, (str, bytes, os.PathLike)):
8585
# pylint: disable=consider-using-with, unspecified-encoding
86-
self.fileobj = cast(BinaryIO, open(filename, self.mode + "b"))
86+
self.fileobj = cast(BinaryIO, open(filename, self._mode + "b"))
8787
self._close_fileobj = True
8888
elif hasattr(filename, "read"): # weak check but better than nothing
8989
self.fileobj = filename
@@ -99,18 +99,18 @@ def __init__(
9999
raise ValueError("filename is not writable")
100100

101101
# init
102-
if self.mode[0] in "wx":
102+
if self._mode[0] in "wx":
103103
self.fileobj.truncate(0)
104104
if self._readable:
105105
self._init_parse()
106-
if self.mode[0] == "r" and not self._fileobjs:
106+
if self._mode[0] == "r" and not self._fileobjs:
107107
raise XZError("file: no streams")
108108

109109
self.check = check if check != -1 else DEFAULT_CHECK
110110
self.preset = preset
111111
self.filters = filters
112112

113-
self._close_check_empty = self.mode[0] != "r"
113+
self._close_check_empty = self._mode[0] != "r"
114114

115115
@property
116116
def _last_stream(self) -> Optional[XZStream]:
@@ -122,6 +122,10 @@ def _last_stream(self) -> Optional[XZStream]:
122122
preset: _LZMAPresetType = proxy_property("preset", "_last_stream")
123123
filters: _LZMAFiltersType = proxy_property("filters", "_last_stream")
124124

125+
@property
126+
def mode(self) -> str:
127+
return self._mode
128+
125129
def readable(self) -> bool:
126130
return self._readable
127131

src/xz/open.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,10 @@ def __init__(
5252
"block_read_strategy", "xz_file"
5353
)
5454

55+
@property
56+
def mode(self) -> str:
57+
return f"{self.xz_file.mode}t"
58+
5559
@wraps(XZFile.change_stream)
5660
def change_stream(self) -> None:
5761
self.flush()

tests/unit/test_file.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ def test_required_abilities(mode: str, ability: str, init_has_ability: bool) ->
100100
else:
101101
with XZFile(fileobj, mode=mode) as xzfile:
102102
assert getattr(xzfile, ability)() == expected_ability
103+
assert xzfile.mode == mode.replace("b", "")
103104

104105

105106
#

tests/unit/test_open.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ def test_mode_rb() -> None:
2929
fileobj = BytesIO(STREAM_BYTES)
3030

3131
with xz_open(fileobj, "rb") as xzfile:
32+
assert xzfile.mode == "r"
3233
assert len(xzfile) == 13
3334
assert xzfile.stream_boundaries == [0]
3435
assert xzfile.block_boundaries == [0, 10]
@@ -43,6 +44,7 @@ def test_mode_rt() -> None:
4344
fileobj = BytesIO(STREAM_BYTES)
4445

4546
with xz_open(fileobj, "rt") as xzfile:
47+
assert xzfile.mode == "rt"
4648
assert xzfile.stream_boundaries == [0]
4749
assert xzfile.block_boundaries == [0, 10]
4850

@@ -188,6 +190,7 @@ def test_mode_wb_check() -> None:
188190
fileobj = BytesIO()
189191

190192
with xz_open(fileobj, "wb", check=1) as xzfile:
193+
assert xzfile.mode == "w"
191194
xzfile.write(b"\xce\xb1")
192195
xzfile.change_stream()
193196
xzfile.check = 4
@@ -204,6 +207,7 @@ def test_mode_wt_check() -> None:
204207
fileobj = BytesIO()
205208

206209
with xz_open(fileobj, "wt", check=1) as xzfile:
210+
assert xzfile.mode == "wt"
207211
xzfile.write("α")
208212
xzfile.change_stream()
209213
xzfile.check = 4

0 commit comments

Comments
 (0)