From 3485a534208f9c26dd9b0878378bd1a6f535a951 Mon Sep 17 00:00:00 2001 From: Faizan Naeem Date: Fri, 7 Aug 2026 16:06:11 +0500 Subject: [PATCH] Show media state in list command --- src/vidxp/cli_commands/media.py | 2 ++ tests/test_cli.py | 37 +++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/src/vidxp/cli_commands/media.py b/src/vidxp/cli_commands/media.py index 83f2746..bc86552 100644 --- a/src/vidxp/cli_commands/media.py +++ b/src/vidxp/cli_commands/media.py @@ -89,12 +89,14 @@ def list_media( table.add_column("Filename") table.add_column("Duration", justify="right") table.add_column("Size", justify="right") + table.add_column("State") for asset in assets: table.add_row( asset.media_id, asset.original_filename, f"{asset.duration_seconds:.3f}s", f"{asset.byte_size:,}", + asset.state.value ) Console().print(table) diff --git a/tests/test_cli.py b/tests/test_cli.py index 90edd59..12d826e 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -40,6 +40,7 @@ JobQueue, JobState, MediaAsset, + MediaPage, PrepareModelsResult, PrepareModelsJobResult, QueryAnswer, @@ -392,6 +393,42 @@ def test_worker_lifecycle_commands_use_the_existing_job_service(self): }, ) + def test_media_list_shows_media_state(self): + self.service.list_media.return_value = MediaPage( + items=( + MediaAsset( + schema_version=1, + media_id=MEDIA_ID, + video_id=MEDIA_ID, + original_filename="video.mp4", + sha256="1" * 64, + byte_size=5, + detected_mime_type="video/mp4", + container="mp4", + duration_seconds=1, + streams=( + MediaStream( + index=0, + kind="video", + codec="h264", + width=1, + height=1, + ), + ), + state=MediaState.ready, + created_at=datetime.now(timezone.utc), + ), + ), + next_cursor=None, + total =1, + ) + + result = self.invoke(["media", "list"]) + + self.assertEqual(result.exit_code, 0, result.output) + self.assertIn("State", result.output) + self.assertIn("ready", result.output) + def test_ui_share_uses_streamlit_wildcard_bind_and_warns(self): with ( patch(