archivebox.api.v1_core

Module Contents

Classes

CustomPagination

MinimalArchiveResultSchema

ArchiveResultSchema

ArchiveResultFilterSchema

SnapshotSchema

SnapshotUpdateSchema

SnapshotCreateSchema

SnapshotDeleteResponseSchema

SnapshotFilterSchema

TagSchema

TagAutocompleteSchema

TagCreateSchema

TagCreateResponseSchema

TagSearchSnapshotSchema

TagSearchCardSchema

TagSearchResponseSchema

TagUpdateSchema

TagUpdateResponseSchema

TagDeleteResponseSchema

TagSnapshotRequestSchema

TagSnapshotResponseSchema

Functions

get_archiveresults

List all ArchiveResult entries matching these filters.

_uuid_ref_query

get_archiveresult

Get a specific ArchiveResult by id.

_normalize_uploaded_archiveresult_plugin

_normalize_uploaded_archiveresult_output_path

_parse_archiveresult_output_json

_get_archiveresult_upload_data

_get_archiveresult_upload_files

_get_archiveresult_upload_form_values

_get_archiveresult_upload_form_value

_parse_archiveresult_upload_int

_summarize_archiveresult_output_files

_get_snapshot_by_ref

_queue_archiveresult_snapshot_maintenance

Mark an uploaded ArchiveResult’s Snapshot as dirty without finalizing it.

_merge_archiveresult_output_file_maps

_write_archiveresult_files

create_archiveresult

Create or update an ArchiveResult with one or more output files.

patch_archiveresult

Append or replace files on an existing ArchiveResult.

normalize_tag_list

_parse_rss_before

_filter_snapshots_for_rss

_snapshots_rss_response

get_snapshots

List all Snapshot entries matching these filters.

get_snapshots_rss

Return matching snapshots as an RSS feed, newest first.

get_snapshot

Get a specific Snapshot by id.

create_snapshot

patch_snapshot

Update a snapshot (e.g., set status=sealed to cancel queued work).

delete_snapshot

get_tags

get_tag

get_any

Get any object by its ID (e.g. snapshot, archiveresult, tag, crawl, etc.).

_get_snapshot_for_tag_edit

search_tags

Return detailed tag cards for admin/live-search UIs.

_public_tag_listing_enabled

_request_has_tag_autocomplete_access

tags_autocomplete

Return tags matching the query for autocomplete.

tags_create

Create a new tag or return existing one.

rename_tag

delete_tag

tag_urls_export

tag_snapshots_export

tags_add_to_snapshot

Add a tag to a snapshot. Creates the tag if it doesn’t exist.

tags_remove_from_snapshot

Remove a tag from a snapshot.

Data

router

ARCHIVERESULT_UPLOAD_HOOK_NAME

ARCHIVERESULT_UPLOAD_PLUGIN_RE

API

archivebox.api.v1_core.router[source]

β€˜Router(…)’

archivebox.api.v1_core.ARCHIVERESULT_UPLOAD_HOOK_NAME[source]

β€˜on_Snapshot__archivebox_browser_extension_upload’

archivebox.api.v1_core.ARCHIVERESULT_UPLOAD_PLUGIN_RE[source]

β€˜compile(…)’

class archivebox.api.v1_core.CustomPagination[source]

Bases: ninja.pagination.PaginationBase

class Input[source]

Bases: ninja.pagination.PaginationBase.Input

limit: int[source]

200

offset: int[source]

0

page: int[source]

0

class Output[source]

Bases: ninja.pagination.PaginationBase.Output

count: int[source]

None

total_items: int[source]

None

total_pages: int[source]

None

page: int[source]

None

limit: int[source]

None

offset: int[source]

None

num_items: int[source]

None

items: list[Any][source]

None

paginate_queryset(queryset, pagination: Input, request: django.http.HttpRequest, **params)[source]
class archivebox.api.v1_core.MinimalArchiveResultSchema[source]

Bases: ninja.Schema

TYPE: str[source]

β€˜core.models.ArchiveResult’

id: uuid.UUID[source]

None

created_at: datetime.datetime | None[source]

None

modified_at: datetime.datetime | None[source]

None

created_by_id: str[source]

None

created_by_username: str[source]

None

status: str[source]

None

retry_at: datetime.datetime | None[source]

None

plugin: str[source]

None

hook_name: str[source]

None

process_id: uuid.UUID | None[source]

None

cmd_version: str | None[source]

None

cmd: list[str] | None[source]

None

pwd: str | None[source]

None

output_str: str[source]

None

output_json: dict[str, Any] | None[source]

None

output_files: dict[str, dict[str, Any]] | None[source]

None

output_size: int[source]

None

output_mimetypes: str[source]

None

start_ts: datetime.datetime | None[source]

None

end_ts: datetime.datetime | None[source]

None

static resolve_created_by_id(obj)[source]
static resolve_created_by_username(obj) str[source]
static resolve_output_files(obj)[source]
static resolve_output_mimetypes(obj) str[source]
class archivebox.api.v1_core.ArchiveResultSchema[source]

Bases: archivebox.api.v1_core.MinimalArchiveResultSchema

TYPE: str[source]

β€˜core.models.ArchiveResult’

snapshot_id: uuid.UUID[source]

None

snapshot_timestamp: str[source]

None

snapshot_url: str[source]

None

snapshot_tags: list[str][source]

None

static resolve_snapshot_timestamp(obj)[source]
static resolve_snapshot_url(obj)[source]
static resolve_snapshot_id(obj)[source]
static resolve_snapshot_tags(obj)[source]
class archivebox.api.v1_core.ArchiveResultFilterSchema[source]

Bases: ninja.FilterSchema

id: Annotated[str | None, FilterLookup(['id__startswith', 'snapshot__id__startswith', 'snapshot__timestamp__startswith'])][source]

None

search: Annotated[str | None, FilterLookup(['snapshot__url__icontains', 'snapshot__title__icontains', 'snapshot__tags__name__icontains', 'plugin', 'output_str__icontains', 'id__startswith', 'snapshot__id__startswith', 'snapshot__timestamp__startswith'])][source]

None

snapshot_id: Annotated[str | None, FilterLookup(['snapshot__id__startswith', 'snapshot__timestamp__startswith'])][source]

None

snapshot_url: Annotated[str | None, FilterLookup('snapshot__url__icontains')][source]

None

snapshot_tag: Annotated[str | None, FilterLookup('snapshot__tags__name__icontains')][source]

None

status: Annotated[str | None, FilterLookup('status')][source]

None

output_str: Annotated[str | None, FilterLookup('output_str__icontains')][source]

None

plugin: Annotated[str | None, FilterLookup('plugin__icontains')][source]

None

hook_name: Annotated[str | None, FilterLookup('hook_name__icontains')][source]

None

process_id: Annotated[str | None, FilterLookup('process__id__startswith')][source]

None

cmd: Annotated[str | None, FilterLookup('cmd__0__icontains')][source]

None

pwd: Annotated[str | None, FilterLookup('pwd__icontains')][source]

None

cmd_version: Annotated[str | None, FilterLookup('cmd_version')][source]

None

created_at: Annotated[datetime.datetime | None, FilterLookup('created_at')][source]

None

created_at__gte: Annotated[datetime.datetime | None, FilterLookup('created_at__gte')][source]

None

created_at__lt: Annotated[datetime.datetime | None, FilterLookup('created_at__lt')][source]

None

archivebox.api.v1_core.get_archiveresults(request: django.http.HttpRequest, filters: ninja.Query[archivebox.api.v1_core.ArchiveResultFilterSchema])[source]

List all ArchiveResult entries matching these filters.

archivebox.api.v1_core._uuid_ref_query(field_name: str, ref: str) django.db.models.Q[source]
archivebox.api.v1_core.get_archiveresult(request: django.http.HttpRequest, archiveresult_id: str)[source]

Get a specific ArchiveResult by id.

archivebox.api.v1_core._normalize_uploaded_archiveresult_plugin(plugin: str) str[source]
archivebox.api.v1_core._normalize_uploaded_archiveresult_output_path(output_path: str, *, filename: str) str[source]
archivebox.api.v1_core._parse_archiveresult_output_json(output_json: str | None) dict[str, Any] | None[source]
archivebox.api.v1_core._get_archiveresult_upload_data(request: django.http.HttpRequest)[source]
archivebox.api.v1_core._get_archiveresult_upload_files(request: django.http.HttpRequest, *, allow_empty: bool = False) list[ninja.UploadedFile][source]
archivebox.api.v1_core._get_archiveresult_upload_form_values(request: django.http.HttpRequest, *field_names: str) list[str][source]
archivebox.api.v1_core._get_archiveresult_upload_form_value(request: django.http.HttpRequest, *field_names: str) str[source]
archivebox.api.v1_core._parse_archiveresult_upload_int(value: str, field_name: str, *, default: int | None = None) int[source]
archivebox.api.v1_core._summarize_archiveresult_output_files(output_files: dict[str, dict[str, Any]]) tuple[int, str][source]
archivebox.api.v1_core._get_snapshot_by_ref(snapshot_id: str)[source]
archivebox.api.v1_core._queue_archiveresult_snapshot_maintenance(snapshot: archivebox.core.models.Snapshot) None[source]

Mark an uploaded ArchiveResult’s Snapshot as dirty without finalizing it.

Upload API handlers are allowed to persist files and ArchiveResult rows, but Snapshot save() side effects, sealing, symlink creation, and index/details rewrites belong to the runner. retry_at is the scheduler signal the runner already watches, so only bump rows that are final or otherwise invisible.

archivebox.api.v1_core._merge_archiveresult_output_file_maps(results: list[archivebox.core.models.ArchiveResult]) dict[str, dict[str, Any]][source]
archivebox.api.v1_core._write_archiveresult_files(request: django.http.HttpRequest, snapshot: archivebox.core.models.Snapshot, plugin_name: str, *, existing_output_files: dict[str, dict[str, Any]] | None = None, allow_empty: bool = False) dict[str, dict[str, Any]][source]
archivebox.api.v1_core.create_archiveresult(request: django.http.HttpRequest, snapshot_id: str = Form(...), plugin: str = Form(...), output_str: str = Form(''), hook_name: str = Form(ARCHIVERESULT_UPLOAD_HOOK_NAME), status: str = Form(str(ArchiveResult.StatusChoices.SUCCEEDED)), output_json: str = Form(''))[source]

Create or update an ArchiveResult with one or more output files.

archivebox.api.v1_core.patch_archiveresult(request: django.http.HttpRequest, archiveresult_id: str)[source]

Append or replace files on an existing ArchiveResult.

class archivebox.api.v1_core.SnapshotSchema[source]

Bases: ninja.Schema

TYPE: str[source]

β€˜core.models.Snapshot’

id: uuid.UUID[source]

None

created_by_id: str[source]

None

created_by_username: str[source]

None

created_at: datetime.datetime[source]

None

modified_at: datetime.datetime[source]

None

status: str[source]

None

retry_at: datetime.datetime | None[source]

None

bookmarked_at: datetime.datetime[source]

None

downloaded_at: datetime.datetime | None[source]

None

url: str[source]

None

tags: list[str][source]

None

title: str | None[source]

None

timestamp: str[source]

None

archive_path: str[source]

None

archive_size: int[source]

None

output_size: int[source]

None

num_archiveresults: int[source]

None

archiveresults: list[archivebox.api.v1_core.MinimalArchiveResultSchema][source]

None

static resolve_created_by_id(obj)[source]
static resolve_created_by_username(obj)[source]
static resolve_tags(obj)[source]
static resolve_archive_size(obj)[source]
static resolve_output_size(obj)[source]
static resolve_num_archiveresults(obj, context)[source]
static resolve_archiveresults(obj, context)[source]
class archivebox.api.v1_core.SnapshotUpdateSchema[source]

Bases: ninja.Schema

action: str | None[source]

None

status: str | None[source]

None

retry_at: datetime.datetime | None[source]

None

tags: list[str] | None[source]

None

class archivebox.api.v1_core.SnapshotCreateSchema[source]

Bases: ninja.Schema

url: str[source]

None

crawl_id: str | None[source]

None

depth: int[source]

0

title: str | None[source]

None

tags: list[str] | None[source]

None

status: str | None[source]

None

class archivebox.api.v1_core.SnapshotDeleteResponseSchema[source]

Bases: ninja.Schema

success: bool[source]

None

snapshot_id: str[source]

None

crawl_id: str[source]

None

deleted_count: int[source]

None

archivebox.api.v1_core.normalize_tag_list(tags: list[str] | None = None) list[str][source]
archivebox.api.v1_core._parse_rss_before(before: str | None) datetime.datetime[source]
archivebox.api.v1_core._filter_snapshots_for_rss(*, crawl_id: str = '', created_by: str = '', before: str | None = None, limit: int = 50)[source]
archivebox.api.v1_core._snapshots_rss_response(request: django.http.HttpRequest, *, snapshots, title: str = 'ArchiveBox Snapshots') django.http.HttpResponse[source]
class archivebox.api.v1_core.SnapshotFilterSchema[source]

Bases: ninja.FilterSchema

id: Annotated[str | None, FilterLookup(['id__istartswith', 'id__iendswith', 'timestamp__startswith'])][source]

None

created_by_id: Annotated[str | None, FilterLookup('crawl__created_by_id')][source]

None

created_by_username: Annotated[str | None, FilterLookup('crawl__created_by__username__icontains')][source]

None

created_at__gte: Annotated[datetime.datetime | None, FilterLookup('created_at__gte')][source]

None

created_at__lt: Annotated[datetime.datetime | None, FilterLookup('created_at__lt')][source]

None

created_at: Annotated[datetime.datetime | None, FilterLookup('created_at')][source]

None

modified_at: Annotated[datetime.datetime | None, FilterLookup('modified_at')][source]

None

modified_at__gte: Annotated[datetime.datetime | None, FilterLookup('modified_at__gte')][source]

None

modified_at__lt: Annotated[datetime.datetime | None, FilterLookup('modified_at__lt')][source]

None

search: str | None[source]

None

search_mode: str | None[source]

None

status: str | None[source]

None

url: Annotated[str | None, FilterLookup('url')][source]

None

tag: Annotated[str | None, FilterLookup('tags__name')][source]

None

title: Annotated[str | None, FilterLookup('title__icontains')][source]

None

timestamp: Annotated[str | None, FilterLookup('timestamp__startswith')][source]

None

bookmarked_at__gte: Annotated[datetime.datetime | None, FilterLookup('bookmarked_at__gte')][source]

None

bookmarked_at__lt: Annotated[datetime.datetime | None, FilterLookup('bookmarked_at__lt')][source]

None

filter_search_mode(value: str | None) django.db.models.Q[source]
filter_status(value: str | None) django.db.models.Q[source]
archivebox.api.v1_core.get_snapshots(request: django.http.HttpRequest, filters: ninja.Query[archivebox.api.v1_core.SnapshotFilterSchema], with_archiveresults: bool = False)[source]

List all Snapshot entries matching these filters.

archivebox.api.v1_core.get_snapshots_rss(request: django.http.HttpRequest, crawl_id: str = '', created_by: str = '', limit: int = 50, before: str | None = None)[source]

Return matching snapshots as an RSS feed, newest first.

archivebox.api.v1_core.get_snapshot(request: django.http.HttpRequest, snapshot_id: str, with_archiveresults: bool = True)[source]

Get a specific Snapshot by id.

archivebox.api.v1_core.create_snapshot(request: django.http.HttpRequest, data: archivebox.api.v1_core.SnapshotCreateSchema)[source]
archivebox.api.v1_core.patch_snapshot(request: django.http.HttpRequest, snapshot_id: str, data: archivebox.api.v1_core.SnapshotUpdateSchema)[source]

Update a snapshot (e.g., set status=sealed to cancel queued work).

archivebox.api.v1_core.delete_snapshot(request: django.http.HttpRequest, snapshot_id: str)[source]
class archivebox.api.v1_core.TagSchema[source]

Bases: ninja.Schema

TYPE: str[source]

β€˜core.models.Tag’

id: int[source]

None

modified_at: datetime.datetime[source]

None

created_at: datetime.datetime[source]

None

created_by_id: str[source]

None

created_by_username: str[source]

None

name: str[source]

None

num_snapshots: int[source]

None

snapshots: list[archivebox.api.v1_core.SnapshotSchema][source]

None

static resolve_created_by_id(obj)[source]
static resolve_created_by_username(obj)[source]
static resolve_num_snapshots(obj, context)[source]
static resolve_snapshots(obj, context)[source]
archivebox.api.v1_core.get_tags(request: django.http.HttpRequest)[source]
archivebox.api.v1_core.get_tag(request: django.http.HttpRequest, tag_id: str, with_snapshots: bool = True)[source]
archivebox.api.v1_core.get_any(request: django.http.HttpRequest, id: str)[source]

Get any object by its ID (e.g. snapshot, archiveresult, tag, crawl, etc.).

class archivebox.api.v1_core.TagAutocompleteSchema[source]

Bases: ninja.Schema

tags: list[dict][source]

None

class archivebox.api.v1_core.TagCreateSchema[source]

Bases: ninja.Schema

name: str[source]

None

class archivebox.api.v1_core.TagCreateResponseSchema[source]

Bases: ninja.Schema

success: bool[source]

None

tag_id: int[source]

None

tag_name: str[source]

None

created: bool[source]

None

class archivebox.api.v1_core.TagSearchSnapshotSchema[source]

Bases: ninja.Schema

id: str[source]

None

title: str[source]

None

url: str[source]

None

favicon_url: str[source]

None

admin_url: str[source]

None

archive_url: str[source]

None

downloaded_at: str | None[source]

None

class archivebox.api.v1_core.TagSearchCardSchema[source]

Bases: ninja.Schema

id: int[source]

None

name: str[source]

None

slug: str[source]

None

num_snapshots: int[source]

None

filter_url: str[source]

None

edit_url: str[source]

None

export_urls_url: str[source]

None

export_jsonl_url: str[source]

None

rename_url: str[source]

None

delete_url: str[source]

None

snapshots: list[archivebox.api.v1_core.TagSearchSnapshotSchema][source]

None

class archivebox.api.v1_core.TagSearchResponseSchema[source]

Bases: ninja.Schema

tags: list[archivebox.api.v1_core.TagSearchCardSchema][source]

None

sort: str[source]

None

created_by: str[source]

None

year: str[source]

None

has_snapshots: str[source]

None

class archivebox.api.v1_core.TagUpdateSchema[source]

Bases: ninja.Schema

name: str[source]

None

class archivebox.api.v1_core.TagUpdateResponseSchema[source]

Bases: ninja.Schema

success: bool[source]

None

tag_id: int[source]

None

tag_name: str[source]

None

class archivebox.api.v1_core.TagDeleteResponseSchema[source]

Bases: ninja.Schema

success: bool[source]

None

tag_id: int[source]

None

deleted_count: int[source]

None

class archivebox.api.v1_core.TagSnapshotRequestSchema[source]

Bases: ninja.Schema

snapshot_id: str[source]

None

tag_name: str | None[source]

None

tag_id: int | None[source]

None

class archivebox.api.v1_core.TagSnapshotResponseSchema[source]

Bases: ninja.Schema

success: bool[source]

None

tag_id: int[source]

None

tag_name: str[source]

None

archivebox.api.v1_core._get_snapshot_for_tag_edit(snapshot_ref: str) archivebox.core.models.Snapshot[source]
archivebox.api.v1_core.search_tags(request: django.http.HttpRequest, q: str = '', sort: str = 'created_desc', created_by: str = '', year: str = '', has_snapshots: str = 'all')[source]

Return detailed tag cards for admin/live-search UIs.

archivebox.api.v1_core._public_tag_listing_enabled() bool[source]
archivebox.api.v1_core._request_has_tag_autocomplete_access(request: django.http.HttpRequest) bool[source]
archivebox.api.v1_core.tags_autocomplete(request: django.http.HttpRequest, q: str = '')[source]

Return tags matching the query for autocomplete.

archivebox.api.v1_core.tags_create(request: django.http.HttpRequest, data: archivebox.api.v1_core.TagCreateSchema)[source]

Create a new tag or return existing one.

archivebox.api.v1_core.rename_tag(request: django.http.HttpRequest, tag_id: int, data: archivebox.api.v1_core.TagUpdateSchema)[source]
archivebox.api.v1_core.delete_tag(request: django.http.HttpRequest, tag_id: int)[source]
archivebox.api.v1_core.tag_urls_export(request: django.http.HttpRequest, tag_id: int)[source]
archivebox.api.v1_core.tag_snapshots_export(request: django.http.HttpRequest, tag_id: int)[source]
archivebox.api.v1_core.tags_add_to_snapshot(request: django.http.HttpRequest, data: archivebox.api.v1_core.TagSnapshotRequestSchema)[source]

Add a tag to a snapshot. Creates the tag if it doesn’t exist.

archivebox.api.v1_core.tags_remove_from_snapshot(request: django.http.HttpRequest, data: archivebox.api.v1_core.TagSnapshotRequestSchema)[source]

Remove a tag from a snapshot.