From 6b482c62df235c9f7e291b9f7778802b706e55b7 Mon Sep 17 00:00:00 2001 From: Nick Sweeting Date: Sun, 15 Mar 2026 05:04:31 -0700 Subject: [PATCH] Restore top-level list command compatibility --- archivebox/cli/__init__.py | 1 + archivebox/cli/archivebox_list.py | 35 +++++++++++++++++++++++ archivebox/tests/test_migrations_fresh.py | 2 +- 3 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 archivebox/cli/archivebox_list.py diff --git a/archivebox/cli/__init__.py b/archivebox/cli/__init__.py index 5f17755b..b5c711ad 100644 --- a/archivebox/cli/__init__.py +++ b/archivebox/cli/__init__.py @@ -41,6 +41,7 @@ class ArchiveBoxGroup(click.Group): archive_commands = { # High-level commands 'add': 'archivebox.cli.archivebox_add.main', + 'list': 'archivebox.cli.archivebox_list.main', 'remove': 'archivebox.cli.archivebox_remove.main', 'run': 'archivebox.cli.archivebox_run.main', 'update': 'archivebox.cli.archivebox_update.main', diff --git a/archivebox/cli/archivebox_list.py b/archivebox/cli/archivebox_list.py new file mode 100644 index 00000000..eb603b77 --- /dev/null +++ b/archivebox/cli/archivebox_list.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python3 + +__package__ = 'archivebox.cli' +__command__ = 'archivebox list' + +import sys +from typing import Optional + +import rich_click as click + +from archivebox.cli.archivebox_snapshot import list_snapshots + + +@click.command() +@click.option('--status', '-s', help='Filter by status (queued, started, sealed)') +@click.option('--url__icontains', help='Filter by URL contains') +@click.option('--url__istartswith', help='Filter by URL starts with') +@click.option('--tag', '-t', help='Filter by tag name') +@click.option('--crawl-id', help='Filter by crawl ID') +@click.option('--limit', '-n', type=int, help='Limit number of results') +def main(status: Optional[str], url__icontains: Optional[str], url__istartswith: Optional[str], + tag: Optional[str], crawl_id: Optional[str], limit: Optional[int]) -> None: + """List Snapshots as JSONL.""" + sys.exit(list_snapshots( + status=status, + url__icontains=url__icontains, + url__istartswith=url__istartswith, + tag=tag, + crawl_id=crawl_id, + limit=limit, + )) + + +if __name__ == '__main__': + main() diff --git a/archivebox/tests/test_migrations_fresh.py b/archivebox/tests/test_migrations_fresh.py index 0d8ec166..619cbf15 100644 --- a/archivebox/tests/test_migrations_fresh.py +++ b/archivebox/tests/test_migrations_fresh.py @@ -176,7 +176,7 @@ class TestSchemaIntegrity(unittest.TestCase): columns = {row[1] for row in cursor.fetchall()} conn.close() - required = {'id', 'snapshot_id', 'extractor', 'status', 'created_at', 'modified_at'} + required = {'id', 'snapshot_id', 'plugin', 'status', 'created_at', 'modified_at'} for col in required: self.assertIn(col, columns, f"Missing column: {col}")