Skip to content

Commit 5d0cac2

Browse files
committed
Fix key type error handling
Signed-off-by: Aleksei Stepanov <penguinolog@gmail.com> (cherry picked from commit bae0196) Signed-off-by: Aleksei Stepanov <penguinolog@gmail.com>
1 parent 0e7d55a commit 5d0cac2

File tree

3 files changed

+45
-41
lines changed

3 files changed

+45
-41
lines changed

doc/source/ExecResult.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ API: ExecResult
193193
:type item: typing.Union[int, slice, typing.Iterable[typing.Union[int, slice, ellipsis]]]
194194
:returns: Joined selected lines
195195
:rtype: str
196-
:raises KeyError: Unexpected key
196+
:raises TypeError: Unexpected key
197197

198198
.. py:method:: __str__(self)
199199

exec_helpers/exec_result.py

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -74,23 +74,25 @@ def __getitem__(self, item: typing.Union[int, slice, typing.Iterable[typing.Unio
7474
:type item: typing.Union[int, slice, typing.Iterable[typing.Union[int, slice, ellipsis]]]
7575
:returns: Joined selected lines
7676
:rtype: str
77-
:raises KeyError: Unexpected key
77+
:raises TypeError: Unexpected key
7878
"""
7979
if isinstance(item, int):
8080
return _get_str_from_bin(_get_bytearray_from_array([self._data[item]]))
8181
if isinstance(item, slice):
8282
return _get_str_from_bin(_get_bytearray_from_array(self._data[item]))
83-
buf = [] # type: typing.List[bytes]
84-
for rule in item:
85-
if isinstance(rule, int):
86-
buf.append(self._data[rule])
87-
elif isinstance(rule, slice):
88-
buf.extend(self._data[rule])
89-
elif rule is Ellipsis:
90-
buf.append(b"...\n")
91-
else:
92-
raise KeyError("Unexpected key: {rule!r} (from {item!r})".format(rule=rule, item=item))
93-
return _get_str_from_bin(_get_bytearray_from_array(buf))
83+
if isinstance(item, tuple):
84+
buf = [] # type: typing.List[bytes]
85+
for rule in item:
86+
if isinstance(rule, int):
87+
buf.append(self._data[rule])
88+
elif isinstance(rule, slice):
89+
buf.extend(self._data[rule])
90+
elif rule is Ellipsis:
91+
buf.append(b"...\n")
92+
else:
93+
raise TypeError("Unexpected key type: {rule!r} (from {item!r})".format(rule=rule, item=item))
94+
return _get_str_from_bin(_get_bytearray_from_array(buf))
95+
raise TypeError("Unexpected key type: {item!r}".format(item=item))
9496

9597
def __len__(self) -> int: # pragma: no cover
9698
"""Data len."""

test/test_exec_result.py

Lines changed: 30 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -254,37 +254,39 @@ def test_indexed_lines_access(self):
254254
result = exec_helpers.ExecResult(
255255
cmd,
256256
stdout=(
257-
b'line0\n',
258-
b'line1\n',
259-
b'line2\n',
260-
b'line3\n',
261-
b'line4\n',
262-
b'line5\n',
263-
b'line6\n',
264-
b'line7\n',
265-
b'line8\n',
266-
b'line9\n',
257+
b"line0\n",
258+
b"line1\n",
259+
b"line2\n",
260+
b"line3\n",
261+
b"line4\n",
262+
b"line5\n",
263+
b"line6\n",
264+
b"line7\n",
265+
b"line8\n",
266+
b"line9\n",
267267
),
268268
stderr=(
269-
b'e_line0\n',
270-
b'e_line1\n',
271-
b'e_line2\n',
272-
b'e_line3\n',
273-
b'e_line4\n',
274-
b'e_line5\n',
275-
b'e_line6\n',
276-
b'e_line7\n',
277-
b'e_line8\n',
278-
b'e_line9\n',
279-
)
269+
b"e_line0\n",
270+
b"e_line1\n",
271+
b"e_line2\n",
272+
b"e_line3\n",
273+
b"e_line4\n",
274+
b"e_line5\n",
275+
b"e_line6\n",
276+
b"e_line7\n",
277+
b"e_line8\n",
278+
b"e_line9\n",
279+
),
280280
)
281281

282282
self.assertEqual(result.stdout_lines[:], result.stdout_str)
283283
self.assertEqual(result.stderr_lines[:], result.stderr_str)
284-
self.assertEqual(result.stdout_lines[0], 'line0')
285-
self.assertEqual(result.stdout_lines[0, 1], 'line0\nline1')
286-
self.assertEqual(result.stdout_lines[0, 2], 'line0\nline2')
287-
self.assertEqual(result.stdout_lines[0, ..., 2], 'line0\n...\nline2')
288-
self.assertEqual(result.stdout_lines[:1, ..., 2], 'line0\n...\nline2')
289-
with self.assertRaises(KeyError):
290-
_ = result.stdout_lines[1, 'aaa'] # noqa
284+
self.assertEqual(result.stdout_lines[0], "line0")
285+
self.assertEqual(result.stdout_lines[0, 1], "line0\nline1")
286+
self.assertEqual(result.stdout_lines[0, 2], "line0\nline2")
287+
self.assertEqual(result.stdout_lines[0, ..., 2], "line0\n...\nline2")
288+
self.assertEqual(result.stdout_lines[:1, ..., 2], "line0\n...\nline2")
289+
with self.assertRaises(TypeError):
290+
_ = result.stdout_lines["aaa"] # noqa
291+
with self.assertRaises(TypeError):
292+
_ = result.stdout_lines[1, "aaa"] # noqa

0 commit comments

Comments
 (0)