Skip to content

Commit 887de54

Browse files
committed
add list option
1 parent 26834b9 commit 887de54

File tree

4 files changed

+62
-9
lines changed

4 files changed

+62
-9
lines changed

src/data_designer/cli/commands/download.py

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,18 @@ def personas_command(
2424
"--dry-run",
2525
help="Show what would be downloaded without actually downloading",
2626
),
27+
list_available: bool = typer.Option(
28+
False,
29+
"--list",
30+
help="List available persona datasets and their sizes",
31+
),
2732
) -> None:
28-
"""Download persona datasets for synthetic data generation.
29-
30-
Persona datasets contain diverse character profiles that can be used
31-
to generate contextually rich synthetic data.
33+
"""Download Nemotron-Personas datasets for synthetic data generation.
3234
3335
Examples:
36+
# List available datasets
37+
data-designer download personas --list
38+
3439
# Interactive selection
3540
data-designer download personas
3641
@@ -44,4 +49,8 @@ def personas_command(
4449
data-designer download personas --all --dry-run
4550
"""
4651
controller = DownloadController(DATA_DESIGNER_HOME)
47-
controller.run_personas(locales=locales, all_locales=all_locales, dry_run=dry_run)
52+
53+
if list_available:
54+
controller.list_personas()
55+
else:
56+
controller.run_personas(locales=locales, all_locales=all_locales, dry_run=dry_run)

src/data_designer/cli/controllers/download_controller.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,25 @@ def __init__(self, config_dir: Path):
2828
self.config_dir = config_dir
2929
self.service = DownloadService(config_dir)
3030

31+
def list_personas(self) -> None:
32+
"""List available persona datasets and their sizes."""
33+
print_header("Available Nemotron-Persona Datasets")
34+
console.print()
35+
36+
available_locales = self.service.get_available_locales()
37+
38+
print_text("📦 Available locales:")
39+
console.print()
40+
41+
for locale in available_locales.keys():
42+
size = DATASET_SIZES[locale]
43+
already_downloaded = self.service.is_locale_downloaded(locale)
44+
status = " (downloaded)" if already_downloaded else ""
45+
print_text(f" • {locale}: {size}{status}")
46+
47+
console.print()
48+
print_info(f"Total: {len(available_locales)} datasets available")
49+
3150
def run_personas(self, locales: list[str] | None, all_locales: bool, dry_run: bool = False) -> None:
3251
"""Main entry point for persona dataset downloads.
3352

tests/cli/commands/test_download_command.py

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ def test_personas_command_interactive_mode(mock_download_controller: MagicMock)
1414
mock_controller_instance = MagicMock(spec=DownloadController)
1515
mock_download_controller.return_value = mock_controller_instance
1616

17-
personas_command(locales=None, all_locales=False, dry_run=False)
17+
personas_command(locales=None, all_locales=False, dry_run=False, list_available=False)
1818

1919
mock_download_controller.assert_called_once_with(DATA_DESIGNER_HOME)
2020
mock_controller_instance.run_personas.assert_called_once_with(locales=None, all_locales=False, dry_run=False)
@@ -26,7 +26,7 @@ def test_personas_command_with_specific_locales(mock_download_controller: MagicM
2626
mock_controller_instance = MagicMock(spec=DownloadController)
2727
mock_download_controller.return_value = mock_controller_instance
2828

29-
personas_command(locales=["en_US", "ja_JP"], all_locales=False, dry_run=False)
29+
personas_command(locales=["en_US", "ja_JP"], all_locales=False, dry_run=False, list_available=False)
3030

3131
mock_download_controller.assert_called_once_with(DATA_DESIGNER_HOME)
3232
mock_controller_instance.run_personas.assert_called_once_with(
@@ -40,7 +40,7 @@ def test_personas_command_with_all_flag(mock_download_controller: MagicMock) ->
4040
mock_controller_instance = MagicMock(spec=DownloadController)
4141
mock_download_controller.return_value = mock_controller_instance
4242

43-
personas_command(locales=None, all_locales=True, dry_run=False)
43+
personas_command(locales=None, all_locales=True, dry_run=False, list_available=False)
4444

4545
mock_download_controller.assert_called_once_with(DATA_DESIGNER_HOME)
4646
mock_controller_instance.run_personas.assert_called_once_with(locales=None, all_locales=True, dry_run=False)
@@ -52,7 +52,20 @@ def test_personas_command_with_dry_run_flag(mock_download_controller: MagicMock)
5252
mock_controller_instance = MagicMock(spec=DownloadController)
5353
mock_download_controller.return_value = mock_controller_instance
5454

55-
personas_command(locales=["en_US"], all_locales=False, dry_run=True)
55+
personas_command(locales=["en_US"], all_locales=False, dry_run=True, list_available=False)
5656

5757
mock_download_controller.assert_called_once_with(DATA_DESIGNER_HOME)
5858
mock_controller_instance.run_personas.assert_called_once_with(locales=["en_US"], all_locales=False, dry_run=True)
59+
60+
61+
@patch("data_designer.cli.commands.download.DownloadController")
62+
def test_personas_command_with_list_flag(mock_download_controller: MagicMock) -> None:
63+
"""Test personas_command with --list flag."""
64+
mock_controller_instance = MagicMock(spec=DownloadController)
65+
mock_download_controller.return_value = mock_controller_instance
66+
67+
personas_command(locales=None, all_locales=False, dry_run=False, list_available=True)
68+
69+
mock_download_controller.assert_called_once_with(DATA_DESIGNER_HOME)
70+
mock_controller_instance.list_personas.assert_called_once()
71+
mock_controller_instance.run_personas.assert_not_called()

tests/cli/controllers/test_download_controller.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,18 @@ def test_init(tmp_path: Path) -> None:
3434
assert controller.service.config_dir == tmp_path
3535

3636

37+
def test_list_personas(controller: DownloadController) -> None:
38+
"""Test list_personas displays all available datasets."""
39+
controller.list_personas()
40+
# Method should complete without errors and print to console
41+
42+
43+
def test_list_personas_with_downloaded_datasets(controller_with_datasets: DownloadController) -> None:
44+
"""Test list_personas shows (downloaded) status for existing datasets."""
45+
controller_with_datasets.list_personas()
46+
# Method should complete without errors and show downloaded status
47+
48+
3749
@patch("data_designer.cli.controllers.download_controller.confirm_action", return_value=False)
3850
@patch("data_designer.cli.controllers.download_controller.select_multiple_with_arrows", return_value=["en_US"])
3951
@patch("data_designer.cli.controllers.download_controller.check_ngc_cli_with_instructions", return_value=True)

0 commit comments

Comments
 (0)