|
18 | 18 | _get_metadata, |
19 | 19 | _get_text_file_content, |
20 | 20 | _iter_metainfo_yaml_entries, |
| 21 | + _list_objects, |
21 | 22 | download_demo, |
22 | 23 | get_available_demos, |
23 | 24 | get_readme, |
@@ -1323,3 +1324,59 @@ def test_download_demo_credentials_raises_error(): |
1323 | 1324 | 'sdv-datasets-public', |
1324 | 1325 | { 'username': '[email protected]', 'license_key': 'FakeKey123'}, |
1325 | 1326 | ) |
| 1327 | + |
| 1328 | + |
| 1329 | +def test__list_objects_returns_all_contents(): |
| 1330 | + """Test that `_list_objects` returns all object summaries across paginator pages.""" |
| 1331 | + # Setup |
| 1332 | + mock_client = Mock() |
| 1333 | + paginator = mock_client.get_paginator.return_value |
| 1334 | + paginator.paginate.return_value = [ |
| 1335 | + {'Contents': [{'Key': 'path/file1.txt'}]}, |
| 1336 | + {'Contents': [{'Key': 'path/file2.txt'}]}, |
| 1337 | + ] |
| 1338 | + |
| 1339 | + # Run |
| 1340 | + result = _list_objects(prefix='single_table/', bucket='mybucket', client=mock_client) |
| 1341 | + |
| 1342 | + # Assert |
| 1343 | + assert result == [ |
| 1344 | + {'Key': 'path/file1.txt'}, |
| 1345 | + {'Key': 'path/file2.txt'}, |
| 1346 | + ] |
| 1347 | + mock_client.get_paginator.assert_called_once_with('list_objects_v2') |
| 1348 | + paginator.paginate.assert_called_once_with(Bucket='mybucket', Prefix='single_table/') |
| 1349 | + |
| 1350 | + |
| 1351 | +def test__list_objects_raises_when_no_contents_and_dataset_found(): |
| 1352 | + """Test that `_list_objects` raise a dataset-specific error when dataset name is known.""" |
| 1353 | + # Setup |
| 1354 | + mock_client = Mock() |
| 1355 | + paginator = mock_client.get_paginator.return_value |
| 1356 | + paginator.paginate.return_value = [{'Contents': []}] # no objects found |
| 1357 | + |
| 1358 | + # Run / Assert |
| 1359 | + error_msg = ( |
| 1360 | + "Could not download dataset 'mydataset' from bucket 'bucket'. " |
| 1361 | + 'Make sure the bucket name is correct. If the bucket is private ' |
| 1362 | + 'make sure to provide your credentials.' |
| 1363 | + ) |
| 1364 | + with pytest.raises(DemoResourceNotFoundError, match=error_msg): |
| 1365 | + _list_objects(prefix='single_table/mydataset/', bucket='bucket', client=mock_client) |
| 1366 | + |
| 1367 | + |
| 1368 | +def test_list_objects_raises_when_no_contents_and_no_dataset(): |
| 1369 | + """Test that `_list_objects` raise a modality-specific error when dataset name is unknown.""" |
| 1370 | + # Setup |
| 1371 | + mock_client = Mock() |
| 1372 | + paginator = mock_client.get_paginator.return_value |
| 1373 | + paginator.paginate.return_value = [{'Contents': []}] |
| 1374 | + |
| 1375 | + # Run / Assert |
| 1376 | + error_msg = ( |
| 1377 | + "Could not list datasets in modality 'single_table' from bucket 'bucket'. " |
| 1378 | + 'Make sure the bucket name is correct. If the bucket is private ' |
| 1379 | + 'make sure to provide your credentials.' |
| 1380 | + ) |
| 1381 | + with pytest.raises(DemoResourceNotFoundError, match=error_msg): |
| 1382 | + _list_objects(prefix='single_table/', bucket='bucket', client=mock_client) |
0 commit comments