Skip to content

Commit 1d09c19

Browse files
authored
Handle missing object-store without throwing exceptions (#608)
1 parent 05c3552 commit 1d09c19

File tree

2 files changed

+27
-3
lines changed

2 files changed

+27
-3
lines changed

lean/commands/cloud/object_store/list.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,18 @@ def list(key: str):
3333
try:
3434
headers = ["key", "size", "folder", "name"]
3535
display_headers = ["Key", "Bytes", "Folder", "Filename"]
36-
rows = [[str(obj.get(header, "")) for header in headers] for obj in data['objects']]
36+
objects = data.get('objects')
37+
38+
if objects is None or not objects:
39+
logger.info(f"No objects found at '{key}'.")
40+
return
41+
42+
rows = [[str(obj.get(header, "")) for header in headers] for obj in objects]
3743
# sort rows by key
3844
rows.sort(key=lambda x: x[0])
3945
all_rows = [display_headers] + rows
4046
column_widths = [max(len(row[i]) for row in all_rows) for i in range(len(all_rows[0]))]
4147
for row in all_rows:
4248
logger.info(" ".join(value.ljust(width) for value, width in zip(row, column_widths)))
43-
except KeyError as e:
44-
logger.error(f"Key {key} not found.")
4549
except Exception as e:
4650
logger.error(f"Error: {e}")

tests/commands/cloud/object_store/test_list.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
from unittest import mock
1515

16+
import pytest
1617
from click.testing import CliRunner
1718

1819
from lean.commands import lean
@@ -28,3 +29,22 @@ def test_list_gets_value_when_key_is_given() -> None:
2829
result = CliRunner().invoke(lean, ["cloud", "object-store", "list", "test-key"])
2930
assert result.exit_code == 0
3031
container.api_client.object_store.list.assert_called_once_with('test-key', 'abc')
32+
33+
@pytest.mark.parametrize("objects_value", [None, []])
34+
def test_list_handles_empty_or_none_objects(objects_value) -> None:
35+
api_client = mock.Mock()
36+
api_client.is_authenticated.return_value = True
37+
api_client.object_store.list.return_value = {
38+
'objects': objects_value,
39+
'success': True,
40+
'path': 'test'
41+
}
42+
initialize_container(api_client_to_use=api_client)
43+
44+
result = CliRunner().invoke(lean, ["cloud", "object-store", "list", "test"])
45+
46+
assert result.exit_code == 0
47+
assert "No objects found at 'test'." in result.output
48+
container.api_client.object_store.list.assert_called_once_with('test', 'abc')
49+
50+

0 commit comments

Comments
 (0)