mirror of
https://github.com/sissbruecker/linkding.git
synced 2025-08-07 10:58:25 +02:00
Remove preview image when bookmark is deleted (#989)
This commit is contained in:
@@ -93,6 +93,19 @@ class Bookmark(models.Model):
|
||||
return self.resolved_title + " (" + self.url[:30] + "...)"
|
||||
|
||||
|
||||
@receiver(post_delete, sender=Bookmark)
|
||||
def bookmark_deleted(sender, instance, **kwargs):
|
||||
if instance.preview_image_file:
|
||||
filepath = os.path.join(settings.LD_PREVIEW_FOLDER, instance.preview_image_file)
|
||||
if os.path.isfile(filepath):
|
||||
try:
|
||||
os.remove(filepath)
|
||||
except Exception as error:
|
||||
logger.error(
|
||||
f"Failed to delete preview image: {filepath}", exc_info=error
|
||||
)
|
||||
|
||||
|
||||
class BookmarkAsset(models.Model):
|
||||
TYPE_SNAPSHOT = "snapshot"
|
||||
TYPE_UPLOAD = "upload"
|
||||
|
@@ -1,25 +1,25 @@
|
||||
import os
|
||||
import shutil
|
||||
import tempfile
|
||||
|
||||
from django.conf import settings
|
||||
from django.test import TestCase
|
||||
from django.test import TestCase, override_settings
|
||||
|
||||
from bookmarks.tests.helpers import (
|
||||
BookmarkFactoryMixin,
|
||||
)
|
||||
from bookmarks.services import bookmarks
|
||||
from bookmarks.tests.helpers import BookmarkFactoryMixin
|
||||
|
||||
|
||||
class BookmarkAssetsTestCase(TestCase, BookmarkFactoryMixin):
|
||||
def setUp(self):
|
||||
self.temp_dir = tempfile.mkdtemp()
|
||||
self.override = override_settings(LD_ASSET_FOLDER=self.temp_dir)
|
||||
self.override.enable()
|
||||
|
||||
def tearDown(self):
|
||||
temp_files = [
|
||||
f for f in os.listdir(settings.LD_ASSET_FOLDER) if f.startswith("temp")
|
||||
]
|
||||
for temp_file in temp_files:
|
||||
os.remove(os.path.join(settings.LD_ASSET_FOLDER, temp_file))
|
||||
self.override.disable()
|
||||
shutil.rmtree(self.temp_dir)
|
||||
|
||||
def setup_asset_file(self, filename):
|
||||
if not os.path.exists(settings.LD_ASSET_FOLDER):
|
||||
os.makedirs(settings.LD_ASSET_FOLDER)
|
||||
filepath = os.path.join(settings.LD_ASSET_FOLDER, filename)
|
||||
with open(filepath, "w") as f:
|
||||
f.write("test")
|
||||
|
70
bookmarks/tests/test_bookmark_previews.py
Normal file
70
bookmarks/tests/test_bookmark_previews.py
Normal file
@@ -0,0 +1,70 @@
|
||||
import os
|
||||
import shutil
|
||||
import tempfile
|
||||
|
||||
from django.conf import settings
|
||||
from django.test import TestCase, override_settings
|
||||
|
||||
from bookmarks.services import bookmarks
|
||||
from bookmarks.tests.helpers import BookmarkFactoryMixin
|
||||
|
||||
|
||||
class BookmarkPreviewsTestCase(TestCase, BookmarkFactoryMixin):
|
||||
def setUp(self):
|
||||
self.temp_dir = tempfile.mkdtemp()
|
||||
self.override = override_settings(LD_PREVIEW_FOLDER=self.temp_dir)
|
||||
self.override.enable()
|
||||
|
||||
def tearDown(self):
|
||||
self.override.disable()
|
||||
shutil.rmtree(self.temp_dir)
|
||||
|
||||
def setup_preview_file(self, filename):
|
||||
filepath = os.path.join(settings.LD_PREVIEW_FOLDER, filename)
|
||||
with open(filepath, "w") as f:
|
||||
f.write("test")
|
||||
|
||||
def setup_bookmark_with_preview(self):
|
||||
bookmark = self.setup_bookmark()
|
||||
bookmark.preview_image_file = f"preview_{bookmark.id}.jpg"
|
||||
bookmark.save()
|
||||
self.setup_preview_file(bookmark.preview_image_file)
|
||||
return bookmark
|
||||
|
||||
def assertPreviewImageExists(self, bookmark):
|
||||
self.assertTrue(
|
||||
os.path.exists(
|
||||
os.path.join(settings.LD_PREVIEW_FOLDER, bookmark.preview_image_file)
|
||||
)
|
||||
)
|
||||
|
||||
def assertPreviewImageDoesNotExist(self, bookmark):
|
||||
self.assertFalse(
|
||||
os.path.exists(
|
||||
os.path.join(settings.LD_PREVIEW_FOLDER, bookmark.preview_image_file)
|
||||
)
|
||||
)
|
||||
|
||||
def test_delete_bookmark_deletes_preview_image(self):
|
||||
bookmark = self.setup_bookmark_with_preview()
|
||||
self.assertPreviewImageExists(bookmark)
|
||||
|
||||
bookmark.delete()
|
||||
self.assertPreviewImageDoesNotExist(bookmark)
|
||||
|
||||
def test_bulk_delete_bookmarks_deletes_preview_images(self):
|
||||
bookmark1 = self.setup_bookmark_with_preview()
|
||||
bookmark2 = self.setup_bookmark_with_preview()
|
||||
bookmark3 = self.setup_bookmark_with_preview()
|
||||
|
||||
self.assertPreviewImageExists(bookmark1)
|
||||
self.assertPreviewImageExists(bookmark2)
|
||||
self.assertPreviewImageExists(bookmark3)
|
||||
|
||||
bookmarks.delete_bookmarks(
|
||||
[bookmark1.id, bookmark2.id, bookmark3.id], self.get_or_create_test_user()
|
||||
)
|
||||
|
||||
self.assertPreviewImageDoesNotExist(bookmark1)
|
||||
self.assertPreviewImageDoesNotExist(bookmark2)
|
||||
self.assertPreviewImageDoesNotExist(bookmark3)
|
Reference in New Issue
Block a user