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}")