ArchiveBox/docs/apidocs/archivebox/archivebox.crawls.models.md

24 KiB

{py:mod}archivebox.crawls.models

:allowtitles:

Module Contents

Classes

:class: autosummary longtable
:align: left

* - {py:obj}`CrawlSchedule <archivebox.crawls.models.CrawlSchedule>`
  -
* - {py:obj}`Crawl <archivebox.crawls.models.Crawl>`
  -

API

:canonical: archivebox.crawls.models.CrawlSchedule

Bases: {py:obj}`archivebox.base_models.models.ModelWithUUID`, {py:obj}`archivebox.base_models.models.ModelWithNotes`

````{py:attribute} id
:canonical: archivebox.crawls.models.CrawlSchedule.id
:value: >
   'CompactUUIDField(...)'

```{autodoc2-docstring} archivebox.crawls.models.CrawlSchedule.id
```

````

````{py:attribute} created_at
:canonical: archivebox.crawls.models.CrawlSchedule.created_at
:value: >
   'DateTimeField(...)'

```{autodoc2-docstring} archivebox.crawls.models.CrawlSchedule.created_at
```

````

````{py:attribute} created_by
:canonical: archivebox.crawls.models.CrawlSchedule.created_by
:value: >
   'ForeignKey(...)'

```{autodoc2-docstring} archivebox.crawls.models.CrawlSchedule.created_by
```

````

````{py:attribute} modified_at
:canonical: archivebox.crawls.models.CrawlSchedule.modified_at
:value: >
   'DateTimeField(...)'

```{autodoc2-docstring} archivebox.crawls.models.CrawlSchedule.modified_at
```

````

````{py:attribute} template
:canonical: archivebox.crawls.models.CrawlSchedule.template
:type: Crawl
:value: >
   'ForeignKey(...)'

```{autodoc2-docstring} archivebox.crawls.models.CrawlSchedule.template
```

````

````{py:attribute} schedule
:canonical: archivebox.crawls.models.CrawlSchedule.schedule
:value: >
   'CharField(...)'

```{autodoc2-docstring} archivebox.crawls.models.CrawlSchedule.schedule
```

````

````{py:attribute} is_enabled
:canonical: archivebox.crawls.models.CrawlSchedule.is_enabled
:value: >
   'BooleanField(...)'

```{autodoc2-docstring} archivebox.crawls.models.CrawlSchedule.is_enabled
```

````

````{py:attribute} config
:canonical: archivebox.crawls.models.CrawlSchedule.config
:value: >
   'JSONField(...)'

```{autodoc2-docstring} archivebox.crawls.models.CrawlSchedule.config
```

````

````{py:attribute} label
:canonical: archivebox.crawls.models.CrawlSchedule.label
:value: >
   'CharField(...)'

```{autodoc2-docstring} archivebox.crawls.models.CrawlSchedule.label
```

````

````{py:attribute} notes
:canonical: archivebox.crawls.models.CrawlSchedule.notes
:value: >
   'TextField(...)'

```{autodoc2-docstring} archivebox.crawls.models.CrawlSchedule.notes
```

````

````{py:attribute} crawl_set
:canonical: archivebox.crawls.models.CrawlSchedule.crawl_set
:type: django.db.models.Manager[Crawl]
:value: >
   None

```{autodoc2-docstring} archivebox.crawls.models.CrawlSchedule.crawl_set
```

````

`````{py:class} Meta
:canonical: archivebox.crawls.models.CrawlSchedule.Meta

Bases: {py:obj}`archivebox.base_models.models.ModelWithUUID.Meta`, {py:obj}`archivebox.base_models.models.ModelWithNotes.Meta`

````{py:attribute} app_label
:canonical: archivebox.crawls.models.CrawlSchedule.Meta.app_label
:value: >
   'crawls'

```{autodoc2-docstring} archivebox.crawls.models.CrawlSchedule.Meta.app_label
```

````

````{py:attribute} verbose_name
:canonical: archivebox.crawls.models.CrawlSchedule.Meta.verbose_name
:value: >
   'Scheduled Crawl'

```{autodoc2-docstring} archivebox.crawls.models.CrawlSchedule.Meta.verbose_name
```

````

````{py:attribute} verbose_name_plural
:canonical: archivebox.crawls.models.CrawlSchedule.Meta.verbose_name_plural
:value: >
   'Scheduled Crawls'

```{autodoc2-docstring} archivebox.crawls.models.CrawlSchedule.Meta.verbose_name_plural
```

````

`````

````{py:method} __str__() -> str
:canonical: archivebox.crawls.models.CrawlSchedule.__str__

````

````{py:property} api_url
:canonical: archivebox.crawls.models.CrawlSchedule.api_url
:type: str

```{autodoc2-docstring} archivebox.crawls.models.CrawlSchedule.api_url
```

````

````{py:method} save(*args, **kwargs)
:canonical: archivebox.crawls.models.CrawlSchedule.save

````

````{py:property} last_run_at
:canonical: archivebox.crawls.models.CrawlSchedule.last_run_at

```{autodoc2-docstring} archivebox.crawls.models.CrawlSchedule.last_run_at
```

````

````{py:property} next_run_at
:canonical: archivebox.crawls.models.CrawlSchedule.next_run_at

```{autodoc2-docstring} archivebox.crawls.models.CrawlSchedule.next_run_at
```

````

````{py:method} is_due(now=None) -> bool
:canonical: archivebox.crawls.models.CrawlSchedule.is_due

```{autodoc2-docstring} archivebox.crawls.models.CrawlSchedule.is_due
```

````

````{py:method} enqueue(queued_at=None) -> archivebox.crawls.models.Crawl
:canonical: archivebox.crawls.models.CrawlSchedule.enqueue

```{autodoc2-docstring} archivebox.crawls.models.CrawlSchedule.enqueue
```

````

:canonical: archivebox.crawls.models.Crawl

Bases: {py:obj}`archivebox.base_models.models.ModelWithDeleteAfter`, {py:obj}`archivebox.base_models.models.ModelWithOutputDir`, {py:obj}`archivebox.base_models.models.ModelWithConfig`, {py:obj}`archivebox.base_models.models.ModelWithHealthStats`, {py:obj}`archivebox.workers.models.ModelWithQueue`

````{py:attribute} id
:canonical: archivebox.crawls.models.Crawl.id
:value: >
   'CompactUUIDField(...)'

```{autodoc2-docstring} archivebox.crawls.models.Crawl.id
```

````

````{py:attribute} created_at
:canonical: archivebox.crawls.models.Crawl.created_at
:value: >
   'DateTimeField(...)'

```{autodoc2-docstring} archivebox.crawls.models.Crawl.created_at
```

````

````{py:attribute} created_by
:canonical: archivebox.crawls.models.Crawl.created_by
:value: >
   'ForeignKey(...)'

```{autodoc2-docstring} archivebox.crawls.models.Crawl.created_by
```

````

````{py:attribute} modified_at
:canonical: archivebox.crawls.models.Crawl.modified_at
:value: >
   'DateTimeField(...)'

```{autodoc2-docstring} archivebox.crawls.models.Crawl.modified_at
```

````

````{py:attribute} urls
:canonical: archivebox.crawls.models.Crawl.urls
:value: >
   'TextField(...)'

```{autodoc2-docstring} archivebox.crawls.models.Crawl.urls
```

````

````{py:attribute} config
:canonical: archivebox.crawls.models.Crawl.config
:value: >
   'JSONField(...)'

```{autodoc2-docstring} archivebox.crawls.models.Crawl.config
```

````

````{py:attribute} permissions
:canonical: archivebox.crawls.models.Crawl.permissions
:value: >
   'GeneratedField(...)'

```{autodoc2-docstring} archivebox.crawls.models.Crawl.permissions
```

````

````{py:attribute} max_depth
:canonical: archivebox.crawls.models.Crawl.max_depth
:value: >
   'PositiveSmallIntegerField(...)'

```{autodoc2-docstring} archivebox.crawls.models.Crawl.max_depth
```

````

````{py:attribute} tags_str
:canonical: archivebox.crawls.models.Crawl.tags_str
:value: >
   'CharField(...)'

```{autodoc2-docstring} archivebox.crawls.models.Crawl.tags_str
```

````

````{py:attribute} persona
:canonical: archivebox.crawls.models.Crawl.persona
:value: >
   'ForeignKey(...)'

```{autodoc2-docstring} archivebox.crawls.models.Crawl.persona
```

````

````{py:attribute} label
:canonical: archivebox.crawls.models.Crawl.label
:value: >
   'CharField(...)'

```{autodoc2-docstring} archivebox.crawls.models.Crawl.label
```

````

````{py:attribute} notes
:canonical: archivebox.crawls.models.Crawl.notes
:value: >
   'TextField(...)'

```{autodoc2-docstring} archivebox.crawls.models.Crawl.notes
```

````

````{py:attribute} schedule
:canonical: archivebox.crawls.models.Crawl.schedule
:value: >
   'ForeignKey(...)'

```{autodoc2-docstring} archivebox.crawls.models.Crawl.schedule
```

````

````{py:attribute} status
:canonical: archivebox.crawls.models.Crawl.status
:value: >
   'StatusField(...)'

```{autodoc2-docstring} archivebox.crawls.models.Crawl.status
```

````

````{py:attribute} retry_at
:canonical: archivebox.crawls.models.Crawl.retry_at
:value: >
   'RetryAtField(...)'

```{autodoc2-docstring} archivebox.crawls.models.Crawl.retry_at
```

````

````{py:attribute} retry_at_field_name
:canonical: archivebox.crawls.models.Crawl.retry_at_field_name
:value: >
   'retry_at'

```{autodoc2-docstring} archivebox.crawls.models.Crawl.retry_at_field_name
```

````

````{py:attribute} state_field_name
:canonical: archivebox.crawls.models.Crawl.state_field_name
:value: >
   'status'

```{autodoc2-docstring} archivebox.crawls.models.Crawl.state_field_name
```

````

````{py:attribute} StatusChoices
:canonical: archivebox.crawls.models.Crawl.StatusChoices
:value: >
   None

```{autodoc2-docstring} archivebox.crawls.models.Crawl.StatusChoices
```

````

````{py:attribute} INITIAL_STATE
:canonical: archivebox.crawls.models.Crawl.INITIAL_STATE
:value: >
   None

```{autodoc2-docstring} archivebox.crawls.models.Crawl.INITIAL_STATE
```

````

````{py:attribute} ACTIVE_STATE
:canonical: archivebox.crawls.models.Crawl.ACTIVE_STATE
:value: >
   None

```{autodoc2-docstring} archivebox.crawls.models.Crawl.ACTIVE_STATE
```

````

````{py:attribute} FINAL_STATES
:canonical: archivebox.crawls.models.Crawl.FINAL_STATES
:value: >
   ()

```{autodoc2-docstring} archivebox.crawls.models.Crawl.FINAL_STATES
```

````

````{py:attribute} FINAL_OR_ACTIVE_STATES
:canonical: archivebox.crawls.models.Crawl.FINAL_OR_ACTIVE_STATES
:value: >
   ()

```{autodoc2-docstring} archivebox.crawls.models.Crawl.FINAL_OR_ACTIVE_STATES
```

````

````{py:attribute} active_state
:canonical: archivebox.crawls.models.Crawl.active_state
:value: >
   None

```{autodoc2-docstring} archivebox.crawls.models.Crawl.active_state
```

````

````{py:attribute} delete_after_final_statuses
:canonical: archivebox.crawls.models.Crawl.delete_after_final_statuses
:value: >
   ()

```{autodoc2-docstring} archivebox.crawls.models.Crawl.delete_after_final_statuses
```

````

````{py:attribute} RUNNABLE_STATES
:canonical: archivebox.crawls.models.Crawl.RUNNABLE_STATES
:value: >
   ()

```{autodoc2-docstring} archivebox.crawls.models.Crawl.RUNNABLE_STATES
```

````

````{py:attribute} INACTIVE_STATES
:canonical: archivebox.crawls.models.Crawl.INACTIVE_STATES
:value: >
   ()

```{autodoc2-docstring} archivebox.crawls.models.Crawl.INACTIVE_STATES
```

````

````{py:attribute} schedule_id
:canonical: archivebox.crawls.models.Crawl.schedule_id
:type: uuid.UUID | None
:value: >
   None

```{autodoc2-docstring} archivebox.crawls.models.Crawl.schedule_id
```

````

````{py:attribute} snapshot_set
:canonical: archivebox.crawls.models.Crawl.snapshot_set
:type: django.db.models.Manager[archivebox.core.models.Snapshot]
:value: >
   None

```{autodoc2-docstring} archivebox.crawls.models.Crawl.snapshot_set
```

````

`````{py:class} Meta
:canonical: archivebox.crawls.models.Crawl.Meta

Bases: {py:obj}`archivebox.base_models.models.ModelWithDeleteAfter.Meta`, {py:obj}`archivebox.base_models.models.ModelWithOutputDir.Meta`, {py:obj}`archivebox.base_models.models.ModelWithConfig.Meta`, {py:obj}`archivebox.base_models.models.ModelWithHealthStats.Meta`, {py:obj}`archivebox.workers.models.ModelWithQueue.Meta`

````{py:attribute} app_label
:canonical: archivebox.crawls.models.Crawl.Meta.app_label
:value: >
   'crawls'

```{autodoc2-docstring} archivebox.crawls.models.Crawl.Meta.app_label
```

````

````{py:attribute} verbose_name
:canonical: archivebox.crawls.models.Crawl.Meta.verbose_name
:value: >
   'Crawl'

```{autodoc2-docstring} archivebox.crawls.models.Crawl.Meta.verbose_name
```

````

````{py:attribute} verbose_name_plural
:canonical: archivebox.crawls.models.Crawl.Meta.verbose_name_plural
:value: >
   'Crawls'

```{autodoc2-docstring} archivebox.crawls.models.Crawl.Meta.verbose_name_plural
```

````

````{py:attribute} indexes
:canonical: archivebox.crawls.models.Crawl.Meta.indexes
:value: >
   None

```{autodoc2-docstring} archivebox.crawls.models.Crawl.Meta.indexes
```

````

`````

````{py:method} __str__()
:canonical: archivebox.crawls.models.Crawl.__str__

````

````{py:method} get_delete_after_config_value()
:canonical: archivebox.crawls.models.Crawl.get_delete_after_config_value

```{autodoc2-docstring} archivebox.crawls.models.Crawl.get_delete_after_config_value
```

````

````{py:method} pause(*, save: bool = True) -> bool
:canonical: archivebox.crawls.models.Crawl.pause

```{autodoc2-docstring} archivebox.crawls.models.Crawl.pause
```

````

````{py:method} resume(*, when=None, save: bool = True) -> bool
:canonical: archivebox.crawls.models.Crawl.resume

```{autodoc2-docstring} archivebox.crawls.models.Crawl.resume
```

````

````{py:method} cancel() -> None
:canonical: archivebox.crawls.models.Crawl.cancel

```{autodoc2-docstring} archivebox.crawls.models.Crawl.cancel
```

````

````{py:method} schedule_child_snapshots_for_sealing() -> int
:canonical: archivebox.crawls.models.Crawl.schedule_child_snapshots_for_sealing

```{autodoc2-docstring} archivebox.crawls.models.Crawl.schedule_child_snapshots_for_sealing
```

````

````{py:method} schedule_child_snapshots_for_pause() -> int
:canonical: archivebox.crawls.models.Crawl.schedule_child_snapshots_for_pause

```{autodoc2-docstring} archivebox.crawls.models.Crawl.schedule_child_snapshots_for_pause
```

````

````{py:method} missing_delete_at_candidates()
:canonical: archivebox.crawls.models.Crawl.missing_delete_at_candidates
:classmethod:

```{autodoc2-docstring} archivebox.crawls.models.Crawl.missing_delete_at_candidates
```

````

````{py:method} save(*args, **kwargs)
:canonical: archivebox.crawls.models.Crawl.save

````

````{py:method} update_child_snapshot_permissions(old_permissions: str | None, new_permissions: str | None) -> int
:canonical: archivebox.crawls.models.Crawl.update_child_snapshot_permissions

```{autodoc2-docstring} archivebox.crawls.models.Crawl.update_child_snapshot_permissions
```

````

````{py:property} api_url
:canonical: archivebox.crawls.models.Crawl.api_url
:type: str

```{autodoc2-docstring} archivebox.crawls.models.Crawl.api_url
```

````

````{py:method} parse_tag_names(tags: collections.abc.Iterable[str] | str, *, pattern: str = ',') -> list[str]
:canonical: archivebox.crawls.models.Crawl.parse_tag_names
:staticmethod:

```{autodoc2-docstring} archivebox.crawls.models.Crawl.parse_tag_names
```

````

````{py:method} current_tag_names() -> list[str]
:canonical: archivebox.crawls.models.Crawl.current_tag_names

```{autodoc2-docstring} archivebox.crawls.models.Crawl.current_tag_names
```

````

````{py:method} apply_snapshot_tag_diff(*, added_tag_names: collections.abc.Iterable[str], removed_tag_names: collections.abc.Iterable[str]) -> None
:canonical: archivebox.crawls.models.Crawl.apply_snapshot_tag_diff

```{autodoc2-docstring} archivebox.crawls.models.Crawl.apply_snapshot_tag_diff
```

````

````{py:method} to_json() -> dict
:canonical: archivebox.crawls.models.Crawl.to_json

```{autodoc2-docstring} archivebox.crawls.models.Crawl.to_json
```

````

````{py:method} from_json(record: dict, overrides: dict | None = None)
:canonical: archivebox.crawls.models.Crawl.from_json
:staticmethod:

```{autodoc2-docstring} archivebox.crawls.models.Crawl.from_json
```

````

````{py:property} output_dir
:canonical: archivebox.crawls.models.Crawl.output_dir
:type: pathlib.Path

```{autodoc2-docstring} archivebox.crawls.models.Crawl.output_dir
```

````

````{py:method} get_urls_list() -> list[str]
:canonical: archivebox.crawls.models.Crawl.get_urls_list

```{autodoc2-docstring} archivebox.crawls.models.Crawl.get_urls_list
```

````

````{py:method} has_internal_input_root() -> bool
:canonical: archivebox.crawls.models.Crawl.has_internal_input_root

```{autodoc2-docstring} archivebox.crawls.models.Crawl.has_internal_input_root
```

````

````{py:method} normalize_domain(value: str) -> str
:canonical: archivebox.crawls.models.Crawl.normalize_domain
:staticmethod:

```{autodoc2-docstring} archivebox.crawls.models.Crawl.normalize_domain
```

````

````{py:method} split_filter_patterns(value) -> list[str]
:canonical: archivebox.crawls.models.Crawl.split_filter_patterns
:staticmethod:

```{autodoc2-docstring} archivebox.crawls.models.Crawl.split_filter_patterns
```

````

````{py:method} _pattern_matches_url(url: str, pattern: str) -> bool
:canonical: archivebox.crawls.models.Crawl._pattern_matches_url
:classmethod:

```{autodoc2-docstring} archivebox.crawls.models.Crawl._pattern_matches_url
```

````

````{py:method} get_current_config(*, refresh: bool = False) -> dict[str, typing.Any]
:canonical: archivebox.crawls.models.Crawl.get_current_config

```{autodoc2-docstring} archivebox.crawls.models.Crawl.get_current_config
```

````

````{py:method} get_url_allowlist(*, use_effective_config: bool = False, snapshot=None) -> list[str]
:canonical: archivebox.crawls.models.Crawl.get_url_allowlist

```{autodoc2-docstring} archivebox.crawls.models.Crawl.get_url_allowlist
```

````

````{py:method} get_url_denylist(*, use_effective_config: bool = False, snapshot=None) -> list[str]
:canonical: archivebox.crawls.models.Crawl.get_url_denylist

```{autodoc2-docstring} archivebox.crawls.models.Crawl.get_url_denylist
```

````

````{py:method} url_passes_filters(url: str, *, snapshot=None, use_effective_config: bool = True) -> bool
:canonical: archivebox.crawls.models.Crawl.url_passes_filters

```{autodoc2-docstring} archivebox.crawls.models.Crawl.url_passes_filters
```

````

````{py:method} url_passes_compiled_filters(url: str, *, allowlist: list[str], denylist: list[str]) -> bool
:canonical: archivebox.crawls.models.Crawl.url_passes_compiled_filters

```{autodoc2-docstring} archivebox.crawls.models.Crawl.url_passes_compiled_filters
```

````

````{py:method} set_url_filters(allowlist, denylist) -> None
:canonical: archivebox.crawls.models.Crawl.set_url_filters

```{autodoc2-docstring} archivebox.crawls.models.Crawl.set_url_filters
```

````

````{py:method} apply_crawl_config_filters() -> dict[str, int]
:canonical: archivebox.crawls.models.Crawl.apply_crawl_config_filters

```{autodoc2-docstring} archivebox.crawls.models.Crawl.apply_crawl_config_filters
```

````

````{py:method} _iter_url_lines() -> list[tuple[str, str]]
:canonical: archivebox.crawls.models.Crawl._iter_url_lines

```{autodoc2-docstring} archivebox.crawls.models.Crawl._iter_url_lines
```

````

````{py:method} count_urls_for_limit() -> int
:canonical: archivebox.crawls.models.Crawl.count_urls_for_limit

```{autodoc2-docstring} archivebox.crawls.models.Crawl.count_urls_for_limit
```

````

````{py:method} remaining_url_capacity() -> int | None
:canonical: archivebox.crawls.models.Crawl.remaining_url_capacity

```{autodoc2-docstring} archivebox.crawls.models.Crawl.remaining_url_capacity
```

````

````{py:method} has_remaining_url_capacity() -> bool
:canonical: archivebox.crawls.models.Crawl.has_remaining_url_capacity

```{autodoc2-docstring} archivebox.crawls.models.Crawl.has_remaining_url_capacity
```

````

````{py:method} remaining_snapshot_capacity() -> int | None
:canonical: archivebox.crawls.models.Crawl.remaining_snapshot_capacity

```{autodoc2-docstring} archivebox.crawls.models.Crawl.remaining_snapshot_capacity
```

````

````{py:method} has_remaining_snapshot_capacity() -> bool
:canonical: archivebox.crawls.models.Crawl.has_remaining_snapshot_capacity

```{autodoc2-docstring} archivebox.crawls.models.Crawl.has_remaining_snapshot_capacity
```

````

````{py:method} prune_urls(predicate) -> list[str]
:canonical: archivebox.crawls.models.Crawl.prune_urls

```{autodoc2-docstring} archivebox.crawls.models.Crawl.prune_urls
```

````

````{py:method} prune_url(url: str) -> int
:canonical: archivebox.crawls.models.Crawl.prune_url

```{autodoc2-docstring} archivebox.crawls.models.Crawl.prune_url
```

````

````{py:method} exclude_domain(domain: str) -> dict[str, int | str | bool]
:canonical: archivebox.crawls.models.Crawl.exclude_domain

```{autodoc2-docstring} archivebox.crawls.models.Crawl.exclude_domain
```

````

````{py:method} get_system_task() -> str | None
:canonical: archivebox.crawls.models.Crawl.get_system_task

```{autodoc2-docstring} archivebox.crawls.models.Crawl.get_system_task
```

````

````{py:method} resolve_persona()
:canonical: archivebox.crawls.models.Crawl.resolve_persona

```{autodoc2-docstring} archivebox.crawls.models.Crawl.resolve_persona
```

````

````{py:method} _config_value(config: collections.abc.Mapping[str, typing.Any] | typing.Any, key: str, default: typing.Any = None) -> typing.Any
:canonical: archivebox.crawls.models.Crawl._config_value
:staticmethod:

```{autodoc2-docstring} archivebox.crawls.models.Crawl._config_value
```

````

````{py:method} create_scheduler_row(**kwargs) -> archivebox.crawls.models.Crawl
:canonical: archivebox.crawls.models.Crawl.create_scheduler_row
:classmethod:

```{autodoc2-docstring} archivebox.crawls.models.Crawl.create_scheduler_row
```

````

````{py:method} limit_stop_reason(*, config: collections.abc.Mapping[str, typing.Any] | typing.Any | None = None, output_dir: pathlib.Path | None = None, num_snapshots: int | None = None) -> str
:canonical: archivebox.crawls.models.Crawl.limit_stop_reason

```{autodoc2-docstring} archivebox.crawls.models.Crawl.limit_stop_reason
```

````

````{py:method} lifecycle_stop_reason(*, num_snapshots: int | None = None, num_sealed_snapshots: int | None = None) -> str
:canonical: archivebox.crawls.models.Crawl.lifecycle_stop_reason

```{autodoc2-docstring} archivebox.crawls.models.Crawl.lifecycle_stop_reason
```

````

````{py:method} stop_reason(*, config: collections.abc.Mapping[str, typing.Any] | typing.Any | None = None, output_dir: pathlib.Path | None = None, num_snapshots: int | None = None, num_sealed_snapshots: int | None = None) -> str
:canonical: archivebox.crawls.models.Crawl.stop_reason

```{autodoc2-docstring} archivebox.crawls.models.Crawl.stop_reason
```

````

````{py:method} add_url(entry: dict) -> bool
:canonical: archivebox.crawls.models.Crawl.add_url

```{autodoc2-docstring} archivebox.crawls.models.Crawl.add_url
```

````

````{py:method} create_snapshots_from_urls() -> list[archivebox.core.models.Snapshot]
:canonical: archivebox.crawls.models.Crawl.create_snapshots_from_urls

```{autodoc2-docstring} archivebox.crawls.models.Crawl.create_snapshots_from_urls
```

````

````{py:method} create_discovered_snapshot(parent_snapshot, *, url: str, depth: int, title: str = '', tags: str = '', created_by_id: int | None = None)
:canonical: archivebox.crawls.models.Crawl.create_discovered_snapshot

```{autodoc2-docstring} archivebox.crawls.models.Crawl.create_discovered_snapshot
```

````

````{py:method} create_discovered_snapshots(parent_snapshot, records: collections.abc.Iterable[collections.abc.Mapping[str, typing.Any]], *, depth: int, created_by_id: int | None = None) -> list[archivebox.core.models.Snapshot]
:canonical: archivebox.crawls.models.Crawl.create_discovered_snapshots

```{autodoc2-docstring} archivebox.crawls.models.Crawl.create_discovered_snapshots
```

````

````{py:method} install_declared_binaries(binary_names: set[str], machine=None) -> None
:canonical: archivebox.crawls.models.Crawl.install_declared_binaries

```{autodoc2-docstring} archivebox.crawls.models.Crawl.install_declared_binaries
```

````

````{py:method} is_finished() -> bool
:canonical: archivebox.crawls.models.Crawl.is_finished

```{autodoc2-docstring} archivebox.crawls.models.Crawl.is_finished
```

````

````{py:method} can_start() -> bool
:canonical: archivebox.crawls.models.Crawl.can_start

```{autodoc2-docstring} archivebox.crawls.models.Crawl.can_start
```

````

````{py:method} has_finished_snapshots() -> bool
:canonical: archivebox.crawls.models.Crawl.has_finished_snapshots

```{autodoc2-docstring} archivebox.crawls.models.Crawl.has_finished_snapshots
```

````

````{py:method} mark_started() -> bool
:canonical: archivebox.crawls.models.Crawl.mark_started

```{autodoc2-docstring} archivebox.crawls.models.Crawl.mark_started
```

````

````{py:method} seal() -> bool
:canonical: archivebox.crawls.models.Crawl.seal

```{autodoc2-docstring} archivebox.crawls.models.Crawl.seal
```

````

````{py:method} advance_lifecycle() -> bool
:canonical: archivebox.crawls.models.Crawl.advance_lifecycle

```{autodoc2-docstring} archivebox.crawls.models.Crawl.advance_lifecycle
```

````

````{py:method} cleanup_runtime() -> None
:canonical: archivebox.crawls.models.Crawl.cleanup_runtime

```{autodoc2-docstring} archivebox.crawls.models.Crawl.cleanup_runtime
```

````