mirror of
https://github.com/sissbruecker/linkding.git
synced 2025-08-07 18:58:30 +02:00
Archive snapshots of websites locally (#672)
* Add basic HTML snapshots * Implement asset list * Add snapshot creation tests * Add deletion tests * Show file size * Remove snapshots * Create new snapshots * Switch to single-file * CSS tweak * Remove auto refresh * Show delete link when there is no file yet * Add current date to display name * Add flag for snapshot support * Add option for disabling automatic snapshots * Make snapshots sharable * Document image variants * Update README.md * Add migrations * Fix tests
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import random
|
||||
import logging
|
||||
import datetime
|
||||
from datetime import datetime
|
||||
from typing import List
|
||||
|
||||
from bs4 import BeautifulSoup
|
||||
@@ -10,7 +10,7 @@ from django.utils.crypto import get_random_string
|
||||
from rest_framework import status
|
||||
from rest_framework.test import APITestCase
|
||||
|
||||
from bookmarks.models import Bookmark, Tag
|
||||
from bookmarks.models import Bookmark, BookmarkAsset, Tag
|
||||
|
||||
|
||||
class BookmarkFactoryMixin:
|
||||
@@ -133,6 +133,38 @@ class BookmarkFactoryMixin:
|
||||
def get_numbered_bookmark(self, title: str):
|
||||
return Bookmark.objects.get(title=title)
|
||||
|
||||
def setup_asset(
|
||||
self,
|
||||
bookmark: Bookmark,
|
||||
date_created: datetime = None,
|
||||
file: str = None,
|
||||
file_size: int = None,
|
||||
asset_type: str = BookmarkAsset.TYPE_SNAPSHOT,
|
||||
content_type: str = "image/html",
|
||||
display_name: str = None,
|
||||
status: str = BookmarkAsset.STATUS_COMPLETE,
|
||||
gzip: bool = False,
|
||||
):
|
||||
if date_created is None:
|
||||
date_created = timezone.now()
|
||||
if not file:
|
||||
file = get_random_string(length=32)
|
||||
if not display_name:
|
||||
display_name = file
|
||||
asset = BookmarkAsset(
|
||||
bookmark=bookmark,
|
||||
date_created=date_created,
|
||||
file=file,
|
||||
file_size=file_size,
|
||||
asset_type=asset_type,
|
||||
content_type=content_type,
|
||||
display_name=display_name,
|
||||
status=status,
|
||||
gzip=gzip,
|
||||
)
|
||||
asset.save()
|
||||
return asset
|
||||
|
||||
def setup_tag(self, user: User = None, name: str = ""):
|
||||
if user is None:
|
||||
user = self.get_or_create_test_user()
|
||||
|
Reference in New Issue
Block a user