mirror of
https://github.com/ArchiveBox/ArchiveBox
synced 2025-02-18 06:18:25 +00:00
Merge branch 'dev' into feature/is_staff-is_superuser-flags-defaults
This commit is contained in:
commit
914df75ee7
10 changed files with 103 additions and 46 deletions
|
@ -6,6 +6,7 @@ labels: ''
|
||||||
assignees: ''
|
assignees: ''
|
||||||
|
|
||||||
---
|
---
|
||||||
|
<!-- If you perfer, you can make a PR to https://github.com/ArchiveBox/docs instead of opening an issue -->
|
||||||
|
|
||||||
## Wiki Page URL
|
## Wiki Page URL
|
||||||
<!-- e.g. https://github.com/pirate/ArchiveBox/wiki/Configuration#use_color -->
|
<!-- e.g. https://github.com/pirate/ArchiveBox/wiki/Configuration#use_color -->
|
||||||
|
|
34
README.md
34
README.md
|
@ -10,7 +10,7 @@
|
||||||
|
|
||||||
<!--<a href="http://webchat.freenode.net?channels=ArchiveBox&uio=d4"><img src="https://img.shields.io/badge/Community_chat-IRC-%2328A745.svg"/></a>-->
|
<!--<a href="http://webchat.freenode.net?channels=ArchiveBox&uio=d4"><img src="https://img.shields.io/badge/Community_chat-IRC-%2328A745.svg"/></a>-->
|
||||||
|
|
||||||
<a href="https://github.com/ArchiveBox/ArchiveBox/blob/dev/LICENSE"><img src="https://img.shields.io/badge/Open_source-MIT-green.svg?logo=git&logoColor=green"/></a> <a href="https://github.com/ArchiveBox/ArchiveBox/commits/dev"><img src="https://img.shields.io/github/last-commit/ArchiveBox/ArchiveBox.svg?logo=Sublime+Text&logoColor=green&label=Active"/></a> <a href="https://github.com/ArchiveBox/ArchiveBox"><img src="https://img.shields.io/github/stars/ArchiveBox/ArchiveBox.svg?logo=github&label=Stars&logoColor=blue"/></a> <a href="https://pypi.org/project/archivebox/"><img src="https://img.shields.io/pypi/dm/archivebox?label=PyPI%20Installs&labelColor=orange&color=yellow"/></a> <a href="https://chromewebstore.google.com/detail/archivebox-exporter/habonpimjphpdnmcfkaockjnffodikoj"><img src="https://img.shields.io/chrome-web-store/users/habonpimjphpdnmcfkaockjnffodikoj?label=Chrome%20Web%20Store&color=%231973e8"/></a> <a href="https://hub.docker.com/r/archivebox/archivebox"><img src="https://img.shields.io/docker/pulls/archivebox/archivebox.svg?label=Docker+Pulls"/></a>
|
<a href="https://github.com/ArchiveBox/ArchiveBox/blob/dev/LICENSE"><img src="https://img.shields.io/badge/Open_source-MIT-green.svg?logo=git&logoColor=green"/></a> <a href="https://github.com/ArchiveBox/ArchiveBox/commits/dev"><img src="https://img.shields.io/github/last-commit/ArchiveBox/ArchiveBox.svg?logo=Sublime+Text&logoColor=green&label=Active"/></a> <a href="https://github.com/ArchiveBox/ArchiveBox"><img src="https://img.shields.io/github/stars/ArchiveBox/ArchiveBox.svg?logo=github&label=Stars&logoColor=blue"/></a> <a href="https://pypi.org/project/archivebox/"><img src="https://img.shields.io/pypi/dm/archivebox?label=PyPI%20Installs&color=%235f7dae"/></a> <a href="https://chromewebstore.google.com/detail/archivebox-exporter/habonpimjphpdnmcfkaockjnffodikoj"><img src="https://img.shields.io/chrome-web-store/users/habonpimjphpdnmcfkaockjnffodikoj?label=Chrome%20Web%20Store&color=%231973e8"/></a> <a href="https://hub.docker.com/r/archivebox/archivebox"><img src="https://img.shields.io/docker/pulls/archivebox/archivebox.svg?label=Docker+Pulls"/></a>
|
||||||
|
|
||||||
<!--<pre lang="bash" align="left"><code style="white-space: pre-line; text-align: left" align="left">
|
<!--<pre lang="bash" align="left"><code style="white-space: pre-line; text-align: left" align="left">
|
||||||
curl -sSL 'https://get.archivebox.io' | sh # (or see pip/brew/Docker instructions below)
|
curl -sSL 'https://get.archivebox.io' | sh # (or see pip/brew/Docker instructions below)
|
||||||
|
@ -122,13 +122,12 @@ ls ./archive/*/index.json # or browse directly via the filesyste
|
||||||
|
|
||||||
## 🤝 Professional Integration
|
## 🤝 Professional Integration
|
||||||
|
|
||||||
*[Contact us](https://zulip.archivebox.io/#narrow/stream/167-enterprise/topic/welcome/near/1191102) if your non-profit institution/org wants to use ArchiveBox professionally.*
|
*[Contact us](https://zulip.archivebox.io/#narrow/stream/167-enterprise/topic/welcome/near/1191102) if your institution/org wants to use ArchiveBox professionally.*
|
||||||
|
|
||||||
- setup & support, team permissioning, hashing, audit logging, backups, custom archiving etc.
|
- setup & support, team permissioning, hashing, audit logging, backups, custom archiving etc.
|
||||||
- for **individuals**, **NGOs**, **academia**, **governments**, **journalism**, **law**, and more...
|
- for **individuals**, **NGOs**, **academia**, **governments**, **journalism**, **law**, and more...
|
||||||
|
|
||||||
*All our work is open-source and primarily geared towards non-profits.*
|
*We are a 501(c)(3) nonprofit and all our work goes towards supporting open-source development.*
|
||||||
*Support/consulting pays for hosting and funds new ArchiveBox open-source development.*
|
|
||||||
|
|
||||||
<br/>
|
<br/>
|
||||||
|
|
||||||
|
@ -146,13 +145,13 @@ ls ./archive/*/index.json # or browse directly via the filesyste
|
||||||
|
|
||||||
#### ✳️ Easy Setup
|
#### ✳️ Easy Setup
|
||||||
|
|
||||||
<details>
|
<details open>
|
||||||
<summary><b><img src="https://user-images.githubusercontent.com/511499/117447182-29758200-af0b-11eb-97bd-58723fee62ab.png" alt="Docker" height="28px" align="top"/> <code>docker-compose</code></b> (macOS/Linux/Windows) <b>👈 recommended</b> <i>(click to expand)</i></summary>
|
<summary><b><img src="https://user-images.githubusercontent.com/511499/117447182-29758200-af0b-11eb-97bd-58723fee62ab.png" alt="Docker" height="28px" align="top"/> <code>docker-compose</code></b> (macOS/Linux/Windows) <b>👈 recommended</b> <i>(click to expand)</i></summary>
|
||||||
<br/>
|
<br/>
|
||||||
<i>👍 Docker Compose is recommended for the easiest install/update UX + best security + all the <a href="#dependencies">extras</a> out-of-the-box.</i>
|
<i>👍 Docker Compose is recommended for the easiest install/update UX + best security + all the <a href="#dependencies">extras</a> out-of-the-box.</i>
|
||||||
<br/><br/>
|
<br/><br/>
|
||||||
<ol>
|
<ol>
|
||||||
<li>Install <a href="https://docs.docker.com/get-docker/">Docker</a> and <a href="https://docs.docker.com/compose/install/#install-using-pip">Docker Compose</a> on your system (if not already installed).</li>
|
<li>Install <a href="https://docs.docker.com/get-docker/">Docker</a> on your system (if not already installed).</li>
|
||||||
<li>Download the <a href="https://raw.githubusercontent.com/ArchiveBox/ArchiveBox/dev/docker-compose.yml" download><code>docker-compose.yml</code></a> file into a new empty directory (can be anywhere).
|
<li>Download the <a href="https://raw.githubusercontent.com/ArchiveBox/ArchiveBox/dev/docker-compose.yml" download><code>docker-compose.yml</code></a> file into a new empty directory (can be anywhere).
|
||||||
<pre lang="bash"><code style="white-space: pre-line">mkdir ~/archivebox && cd ~/archivebox
|
<pre lang="bash"><code style="white-space: pre-line">mkdir ~/archivebox && cd ~/archivebox
|
||||||
curl -O 'https://raw.githubusercontent.com/ArchiveBox/ArchiveBox/dev/docker-compose.yml'
|
curl -O 'https://raw.githubusercontent.com/ArchiveBox/ArchiveBox/dev/docker-compose.yml'
|
||||||
|
@ -160,10 +159,11 @@ curl -O 'https://raw.githubusercontent.com/ArchiveBox/ArchiveBox/dev/docker-comp
|
||||||
<li>Run the initial setup and create an admin user.
|
<li>Run the initial setup and create an admin user.
|
||||||
<pre lang="bash"><code style="white-space: pre-line">docker compose run archivebox init --setup
|
<pre lang="bash"><code style="white-space: pre-line">docker compose run archivebox init --setup
|
||||||
</code></pre></li>
|
</code></pre></li>
|
||||||
<li>Optional: Start the server then login to the Web UI <a href="http://127.0.0.1:8000">http://127.0.0.1:8000</a> ⇢ Admin.
|
<li>Next steps: Start the server then login to the Web UI <a href="http://127.0.0.1:8000">http://127.0.0.1:8000</a> ⇢ Admin.
|
||||||
<pre lang="bash"><code style="white-space: pre-line">docker compose up
|
<pre lang="bash"><code style="white-space: pre-line">docker compose up
|
||||||
# completely optional, CLI can always be used without running a server
|
# completely optional, CLI can always be used without running a server
|
||||||
# docker compose run [-T] archivebox [subcommand] [--args]
|
# docker compose run [-T] archivebox [subcommand] [--args]
|
||||||
|
docker compose run archivebox add 'https://example.com'
|
||||||
</code></pre></li>
|
</code></pre></li>
|
||||||
</ol>
|
</ol>
|
||||||
|
|
||||||
|
@ -486,8 +486,10 @@ ArchiveBox supports many input formats for URLs, including Pocket & Pinboard exp
|
||||||
|
|
||||||
- <img src="https://github.com/ArchiveBox/ArchiveBox/assets/511499/64078483-21d7-4eb1-aa6e-9ad55afe45b8" height="22px"/> TXT, RSS, XML, JSON, CSV, SQL, HTML, Markdown, or [any other text-based format...](https://github.com/ArchiveBox/ArchiveBox/wiki/Usage#Import-a-list-of-URLs-from-a-text-file)
|
- <img src="https://github.com/ArchiveBox/ArchiveBox/assets/511499/64078483-21d7-4eb1-aa6e-9ad55afe45b8" height="22px"/> TXT, RSS, XML, JSON, CSV, SQL, HTML, Markdown, or [any other text-based format...](https://github.com/ArchiveBox/ArchiveBox/wiki/Usage#Import-a-list-of-URLs-from-a-text-file)
|
||||||
- <img src="https://github.com/ArchiveBox/ArchiveBox/assets/511499/32b494e6-4de1-4984-8d88-dc02f18e5c34" height="22px"/> [Browser history](https://github.com/ArchiveBox/ArchiveBox/wiki/Quickstart#2-get-your-list-of-urls-to-archive) or [browser bookmarks](https://github.com/ArchiveBox/ArchiveBox/wiki/Quickstart#2-get-your-list-of-urls-to-archive) (see instructions for: [Chrome](https://support.google.com/chrome/answer/96816?hl=en), [Firefox](https://support.mozilla.org/en-US/kb/export-firefox-bookmarks-to-backup-or-transfer), [Safari](https://github.com/ArchiveBox/ArchiveBox/assets/511499/24ad068e-0fa6-41f4-a7ff-4c26fc91f71a), [IE](https://support.microsoft.com/en-us/help/211089/how-to-import-and-export-the-internet-explorer-favorites-folder-to-a-32-bit-version-of-windows), [Opera](https://help.opera.com/en/latest/features/#bookmarks:~:text=Click%20the%20import/-,export%20button,-on%20the%20bottom), [and more...](https://github.com/ArchiveBox/ArchiveBox/wiki/Quickstart#2-get-your-list-of-urls-to-archive))
|
- <img src="https://github.com/ArchiveBox/ArchiveBox/assets/511499/32b494e6-4de1-4984-8d88-dc02f18e5c34" height="22px"/> [Browser history](https://github.com/ArchiveBox/ArchiveBox/wiki/Quickstart#2-get-your-list-of-urls-to-archive) or [browser bookmarks](https://github.com/ArchiveBox/ArchiveBox/wiki/Quickstart#2-get-your-list-of-urls-to-archive) (see instructions for: [Chrome](https://support.google.com/chrome/answer/96816?hl=en), [Firefox](https://support.mozilla.org/en-US/kb/export-firefox-bookmarks-to-backup-or-transfer), [Safari](https://github.com/ArchiveBox/ArchiveBox/assets/511499/24ad068e-0fa6-41f4-a7ff-4c26fc91f71a), [IE](https://support.microsoft.com/en-us/help/211089/how-to-import-and-export-the-internet-explorer-favorites-folder-to-a-32-bit-version-of-windows), [Opera](https://help.opera.com/en/latest/features/#bookmarks:~:text=Click%20the%20import/-,export%20button,-on%20the%20bottom), [and more...](https://github.com/ArchiveBox/ArchiveBox/wiki/Quickstart#2-get-your-list-of-urls-to-archive))
|
||||||
- <img src="https://github.com/ArchiveBox/ArchiveBox/assets/511499/ff20d251-5347-4b85-ae9b-83037d0ac01e" height="22px"/> Browser extension [`archivebox-exporter`](https://github.com/tjhorner/archivebox-exporter) (realtime archiving from Chrome/Chromium/Firefox)
|
- <img src="https://github.com/ArchiveBox/ArchiveBox/assets/511499/ff20d251-5347-4b85-ae9b-83037d0ac01e" height="22px"/> Browser extension [`archivebox-exporter`](https://github.com/ArchiveBox/archivebox-extension) (realtime archiving from Chrome/Chromium/Firefox)
|
||||||
- <img src="https://getpocket.com/favicon.ico" height="22px"/> [Pocket](https://getpocket.com/export), [Pinboard](https://pinboard.in/export/), [Instapaper](https://www.instapaper.com/user), [Shaarli](https://shaarli.readthedocs.io/en/master/Usage/#importexport), [Delicious](https://www.groovypost.com/howto/howto/export-delicious-bookmarks-xml/), [Reddit Saved](https://github.com/csu/export-saved-reddit), [Wallabag](https://doc.wallabag.org/en/user/import/wallabagv2.html), [Unmark.it](http://help.unmark.it/import-export), [OneTab](https://www.addictivetips.com/web/onetab-save-close-all-chrome-tabs-to-restore-export-or-import/), [Firefox Sync](https://github.com/ArchiveBox/ArchiveBox/issues/648), [and more...](https://github.com/ArchiveBox/ArchiveBox/wiki/Quickstart#2-get-your-list-of-urls-to-archive)
|
- <img src="https://getpocket.com/favicon.ico" height="22px"/> [Pocket](https://getpocket.com/export), [Pinboard](https://pinboard.in/export/), [Instapaper](https://www.instapaper.com/user), [Shaarli](https://shaarli.readthedocs.io/en/master/Usage/#importexport), [Delicious](https://www.groovypost.com/howto/howto/export-delicious-bookmarks-xml/), [Reddit Saved](https://github.com/csu/export-saved-reddit), [Wallabag](https://doc.wallabag.org/en/user/import/wallabagv2.html), [Unmark.it](http://help.unmark.it/import-export), [OneTab](https://www.addictivetips.com/web/onetab-save-close-all-chrome-tabs-to-restore-export-or-import/), [Firefox Sync](https://github.com/ArchiveBox/ArchiveBox/issues/648), [and more...](https://github.com/ArchiveBox/ArchiveBox/wiki/Quickstart#2-get-your-list-of-urls-to-archive)
|
||||||
|
- <img src="https://github.com/ArchiveBox/ArchiveBox/assets/511499/4f7bd318-265c-4235-ad25-38be89946b12" height="22px"/> Proxy archiving with [`archivebox-proxy`](https://github.com/ArchiveBox/archivebox-proxy) ([realtime archiving](https://github.com/ArchiveBox/ArchiveBox/issues/577) of all traffic from any browser or device)
|
||||||
|
|
||||||
|
|
||||||
<img src="https://github.com/ArchiveBox/ArchiveBox/assets/511499/e1e5bd78-b0b6-45dc-914c-e1046fee4bc4" width="330px" align="right" style="float: right"/>
|
<img src="https://github.com/ArchiveBox/ArchiveBox/assets/511499/e1e5bd78-b0b6-45dc-914c-e1046fee4bc4" width="330px" align="right" style="float: right"/>
|
||||||
|
|
||||||
|
@ -498,7 +500,7 @@ archivebox add 'https://example.com/some/page'
|
||||||
archivebox add < ~/Downloads/firefox_bookmarks_export.html
|
archivebox add < ~/Downloads/firefox_bookmarks_export.html
|
||||||
archivebox add --depth=1 'https://news.ycombinator.com#2020-12-12'
|
archivebox add --depth=1 'https://news.ycombinator.com#2020-12-12'
|
||||||
echo 'http://example.com' | archivebox add
|
echo 'http://example.com' | archivebox add
|
||||||
echo 'any_text_with [urls](https://example.com) in it' | archivebox add
|
echo 'any text with <a href="https://example.com">urls</a> in it' | archivebox add
|
||||||
|
|
||||||
# if using Docker, add -i when piping stdin:
|
# if using Docker, add -i when piping stdin:
|
||||||
# echo 'https://example.com' | docker run -v $PWD:/data -i archivebox/archivebox add
|
# echo 'https://example.com' | docker run -v $PWD:/data -i archivebox/archivebox add
|
||||||
|
@ -1378,17 +1380,21 @@ Extractors take the URL of a page to archive, write their output to the filesyst
|
||||||
<img src="https://raw.githubusercontent.com/Monadical-SAS/redux-time/HEAD/examples/static/jeremy.jpg" height="40px"/>
|
<img src="https://raw.githubusercontent.com/Monadical-SAS/redux-time/HEAD/examples/static/jeremy.jpg" height="40px"/>
|
||||||
<br/>
|
<br/>
|
||||||
<i><sub>
|
<i><sub>
|
||||||
This project is maintained mostly in <a href="https://docs.sweeting.me/s/blog#About">my spare time</a> with the help from generous <a href="https://github.com/ArchiveBox/ArchiveBox/graphs/contributors">contributors</a> and <a href="https://monadical.com">Monadical Consulting</a>.
|
This project is maintained mostly in <a href="https://docs.sweeting.me/s/blog#About">my spare time</a> with the help from generous <a href="https://github.com/ArchiveBox/ArchiveBox/graphs/contributors">contributors</a>.
|
||||||
</sub>
|
</sub>
|
||||||
</i>
|
</i>
|
||||||
<br/><br/>
|
<br/><br/>
|
||||||
|
|
||||||
|
**🏛️ [Contact us for professional support](https://docs.sweeting.me/s/archivebox-consulting-services) 💬**
|
||||||
|
|
||||||
<br/>
|
<br/>
|
||||||
<a href="https://github.com/sponsors/pirate">Sponsor this project on GitHub</a>
|
|
||||||
<br>
|
<a href="https://hcb.hackclub.com/donations/start/archivebox"><img src="https://img.shields.io/badge/Donate-Directly-%13DE5D26.svg"/></a>
|
||||||
<br>
|
<a href="https://github.com/sponsors/pirate"><img src="https://img.shields.io/badge/Github_Sponsors-%23B7CDFE.svg"/></a>
|
||||||
<a href="https://www.patreon.com/theSquashSH"><img src="https://img.shields.io/badge/Donate_to_support_development-via_Patreon-%23DD5D76.svg?style=flat"/></a>
|
<a href="https://www.patreon.com/theSquashSH"><img src="https://img.shields.io/badge/Patreon-%23DD5D76.svg"/></a>
|
||||||
|
|
||||||
<br/>
|
<br/>
|
||||||
|
<sup>ArchiveBox operates as a US 501(c)(3) nonprofit, <a href="https://hcb.hackclub.com/donations/start/archivebox">donations</a> are tax-deductible.<br/>(fiscally sponsored by <a href="https://hackclub.com/hcb?ref=donation">HCB</a> <code>EIN: 81-2908499</code>)</sup><br/>
|
||||||
|
|
||||||
<b><sub>(网站存档 / 爬虫)</sub></b>
|
<b><sub>(网站存档 / 爬虫)</sub></b>
|
||||||
|
|
||||||
|
|
|
@ -137,8 +137,8 @@ CONFIG_SCHEMA: Dict[str, ConfigDefaultDict] = {
|
||||||
},
|
},
|
||||||
|
|
||||||
'ARCHIVE_METHOD_OPTIONS': {
|
'ARCHIVE_METHOD_OPTIONS': {
|
||||||
'RESOLUTION': {'type': str, 'default': '1440,2000', 'aliases': ('SCREENSHOT_RESOLUTION',)},
|
'RESOLUTION': {'type': str, 'default': '1440,2000', 'aliases': ('SCREENSHOT_RESOLUTION','WINDOW_SIZE')},
|
||||||
'GIT_DOMAINS': {'type': str, 'default': 'github.com,bitbucket.org,gitlab.com,gist.github.com'},
|
'GIT_DOMAINS': {'type': str, 'default': 'github.com,bitbucket.org,gitlab.com,gist.github.com,codeberg.org,gitea.com,git.sr.ht'},
|
||||||
'CHECK_SSL_VALIDITY': {'type': bool, 'default': True},
|
'CHECK_SSL_VALIDITY': {'type': bool, 'default': True},
|
||||||
'MEDIA_MAX_SIZE': {'type': str, 'default': '750m'},
|
'MEDIA_MAX_SIZE': {'type': str, 'default': '750m'},
|
||||||
|
|
||||||
|
@ -153,6 +153,8 @@ CONFIG_SCHEMA: Dict[str, ConfigDefaultDict] = {
|
||||||
'CHROME_HEADLESS': {'type': bool, 'default': True},
|
'CHROME_HEADLESS': {'type': bool, 'default': True},
|
||||||
'CHROME_SANDBOX': {'type': bool, 'default': lambda c: not c['IN_DOCKER']},
|
'CHROME_SANDBOX': {'type': bool, 'default': lambda c: not c['IN_DOCKER']},
|
||||||
'YOUTUBEDL_ARGS': {'type': list, 'default': lambda c: [
|
'YOUTUBEDL_ARGS': {'type': list, 'default': lambda c: [
|
||||||
|
'--restrict-filenames',
|
||||||
|
'--trim-filenames',
|
||||||
'--write-description',
|
'--write-description',
|
||||||
'--write-info-json',
|
'--write-info-json',
|
||||||
'--write-annotations',
|
'--write-annotations',
|
||||||
|
|
|
@ -6,6 +6,7 @@ from contextlib import redirect_stdout
|
||||||
from datetime import datetime, timezone
|
from datetime import datetime, timezone
|
||||||
|
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
|
from django.db.models import Count
|
||||||
from django.urls import path
|
from django.urls import path
|
||||||
from django.utils.html import format_html
|
from django.utils.html import format_html
|
||||||
from django.utils.safestring import mark_safe
|
from django.utils.safestring import mark_safe
|
||||||
|
@ -23,8 +24,16 @@ from core.mixins import SearchResultsAdminMixin
|
||||||
from index.html import snapshot_icons
|
from index.html import snapshot_icons
|
||||||
from logging_util import printable_filesize
|
from logging_util import printable_filesize
|
||||||
from main import add, remove
|
from main import add, remove
|
||||||
from config import OUTPUT_DIR, SNAPSHOTS_PER_PAGE
|
|
||||||
from extractors import archive_links
|
from extractors import archive_links
|
||||||
|
from config import (
|
||||||
|
OUTPUT_DIR,
|
||||||
|
SNAPSHOTS_PER_PAGE,
|
||||||
|
VERSION,
|
||||||
|
VERSIONS_AVAILABLE,
|
||||||
|
CAN_UPGRADE
|
||||||
|
)
|
||||||
|
|
||||||
|
GLOBAL_CONTEXT = {'VERSION': VERSION, 'VERSIONS_AVAILABLE': VERSIONS_AVAILABLE, 'CAN_UPGRADE': CAN_UPGRADE}
|
||||||
|
|
||||||
# Admin URLs
|
# Admin URLs
|
||||||
# /admin/
|
# /admin/
|
||||||
|
@ -96,6 +105,10 @@ class SnapshotAdmin(SearchResultsAdminMixin, admin.ModelAdmin):
|
||||||
|
|
||||||
action_form = SnapshotActionForm
|
action_form = SnapshotActionForm
|
||||||
|
|
||||||
|
def changelist_view(self, request, extra_context=None):
|
||||||
|
extra_context = extra_context or {}
|
||||||
|
return super().changelist_view(request, extra_context | GLOBAL_CONTEXT)
|
||||||
|
|
||||||
def get_urls(self):
|
def get_urls(self):
|
||||||
urls = super().get_urls()
|
urls = super().get_urls()
|
||||||
custom_urls = [
|
custom_urls = [
|
||||||
|
@ -105,7 +118,7 @@ class SnapshotAdmin(SearchResultsAdminMixin, admin.ModelAdmin):
|
||||||
|
|
||||||
def get_queryset(self, request):
|
def get_queryset(self, request):
|
||||||
self.request = request
|
self.request = request
|
||||||
return super().get_queryset(request).prefetch_related('tags')
|
return super().get_queryset(request).prefetch_related('tags').annotate(archiveresult_count=Count('archiveresult'))
|
||||||
|
|
||||||
def tag_list(self, obj):
|
def tag_list(self, obj):
|
||||||
return ', '.join(obj.tags.values_list('name', flat=True))
|
return ', '.join(obj.tags.values_list('name', flat=True))
|
||||||
|
@ -187,7 +200,7 @@ class SnapshotAdmin(SearchResultsAdminMixin, admin.ModelAdmin):
|
||||||
def files(self, obj):
|
def files(self, obj):
|
||||||
return snapshot_icons(obj)
|
return snapshot_icons(obj)
|
||||||
|
|
||||||
files.admin_order_field = 'updated'
|
files.admin_order_field = 'archiveresult_count'
|
||||||
files.short_description = 'Files Saved'
|
files.short_description = 'Files Saved'
|
||||||
|
|
||||||
def size(self, obj):
|
def size(self, obj):
|
||||||
|
@ -204,7 +217,7 @@ class SnapshotAdmin(SearchResultsAdminMixin, admin.ModelAdmin):
|
||||||
size_txt,
|
size_txt,
|
||||||
)
|
)
|
||||||
|
|
||||||
size.admin_order_field = 'archiveresult__count'
|
size.admin_order_field = 'archiveresult_count'
|
||||||
|
|
||||||
def url_str(self, obj):
|
def url_str(self, obj):
|
||||||
return format_html(
|
return format_html(
|
||||||
|
|
|
@ -18,4 +18,4 @@ class SearchResultsAdminMixin:
|
||||||
print(f'[!] Error while using search backend: {err.__class__.__name__} {err}')
|
print(f'[!] Error while using search backend: {err.__class__.__name__} {err}')
|
||||||
messages.add_message(request, messages.WARNING, f'Error from the search backend, only showing results from default admin search fields - Error: {err}')
|
messages.add_message(request, messages.WARNING, f'Error from the search backend, only showing results from default admin search fields - Error: {err}')
|
||||||
|
|
||||||
return qs, use_distinct
|
return qs.distinct(), use_distinct
|
||||||
|
|
|
@ -8,11 +8,6 @@ from django.views.generic.base import RedirectView
|
||||||
|
|
||||||
from core.views import HomepageView, SnapshotView, PublicIndexView, AddView, HealthCheckView
|
from core.views import HomepageView, SnapshotView, PublicIndexView, AddView, HealthCheckView
|
||||||
|
|
||||||
# GLOBAL_CONTEXT doesn't work as-is, disabled for now: https://github.com/ArchiveBox/ArchiveBox/discussions/1306
|
|
||||||
# from config import VERSION, VERSIONS_AVAILABLE, CAN_UPGRADE
|
|
||||||
# GLOBAL_CONTEXT = {'VERSION': VERSION, 'VERSIONS_AVAILABLE': VERSIONS_AVAILABLE, 'CAN_UPGRADE': CAN_UPGRADE}
|
|
||||||
|
|
||||||
|
|
||||||
# print('DEBUG', settings.DEBUG)
|
# print('DEBUG', settings.DEBUG)
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
|
@ -36,9 +31,6 @@ urlpatterns = [
|
||||||
path('accounts/', include('django.contrib.auth.urls')),
|
path('accounts/', include('django.contrib.auth.urls')),
|
||||||
path('admin/', admin.site.urls),
|
path('admin/', admin.site.urls),
|
||||||
|
|
||||||
# do not add extra_context like this as not all admin views (e.g. ModelAdmin.autocomplete_view accept extra kwargs)
|
|
||||||
# path('admin/', admin.site.urls, {'extra_context': GLOBAL_CONTEXT}),
|
|
||||||
|
|
||||||
path('health/', HealthCheckView.as_view(), name='healthcheck'),
|
path('health/', HealthCheckView.as_view(), name='healthcheck'),
|
||||||
path('error/', lambda _: 1/0),
|
path('error/', lambda _: 1/0),
|
||||||
|
|
||||||
|
|
|
@ -231,7 +231,7 @@ class PublicIndexView(ListView):
|
||||||
qs = qs | query_search_index(query)
|
qs = qs | query_search_index(query)
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
print(f'[!] Error while using search backend: {err.__class__.__name__} {err}')
|
print(f'[!] Error while using search backend: {err.__class__.__name__} {err}')
|
||||||
return qs
|
return qs.distinct()
|
||||||
|
|
||||||
def get(self, *args, **kwargs):
|
def get(self, *args, **kwargs):
|
||||||
if PUBLIC_INDEX or self.request.user.is_authenticated:
|
if PUBLIC_INDEX or self.request.user.is_authenticated:
|
||||||
|
|
|
@ -202,4 +202,9 @@ def wget_output_path(link: Link) -> Optional[str]:
|
||||||
if search_dir.is_dir():
|
if search_dir.is_dir():
|
||||||
return domain(link.url).replace(":", "+")
|
return domain(link.url).replace(":", "+")
|
||||||
|
|
||||||
|
# fallback to just the domain dir without port
|
||||||
|
search_dir = Path(link.link_dir) / domain(link.url).split(":", 1)[0]
|
||||||
|
if search_dir.is_dir():
|
||||||
|
return domain(link.url).split(":", 1)[0]
|
||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
|
@ -379,11 +379,15 @@ class Link:
|
||||||
|
|
||||||
output_paths = (
|
output_paths = (
|
||||||
domain(self.url),
|
domain(self.url),
|
||||||
|
'output.html',
|
||||||
'output.pdf',
|
'output.pdf',
|
||||||
'screenshot.png',
|
'screenshot.png',
|
||||||
'output.html',
|
'singlefile.html',
|
||||||
|
'readability/content.html',
|
||||||
|
'mercury/content.html',
|
||||||
|
'htmltotext.txt',
|
||||||
'media',
|
'media',
|
||||||
'singlefile.html'
|
'git',
|
||||||
)
|
)
|
||||||
|
|
||||||
return any(
|
return any(
|
||||||
|
|
File diff suppressed because one or more lines are too long
Loading…
Add table
Reference in a new issue