From 1d146e9311d0b98bea0a31218b1f235069462a0d Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 26 Jan 2026 13:56:24 -0800 Subject: [PATCH] Actually, doesnt even need to be a softdeletemodel --- .../migrations/0007_sharelinkbundle.py | 12 ----------- src/documents/models.py | 16 ++++++-------- src/documents/tasks.py | 3 +-- .../tests/test_share_link_bundles.py | 21 ++----------------- 4 files changed, 9 insertions(+), 43 deletions(-) diff --git a/src/documents/migrations/0007_sharelinkbundle.py b/src/documents/migrations/0007_sharelinkbundle.py index 7efc197a4..b0f60f36f 100644 --- a/src/documents/migrations/0007_sharelinkbundle.py +++ b/src/documents/migrations/0007_sharelinkbundle.py @@ -154,18 +154,6 @@ class Migration(migrations.Migration): verbose_name="owner", ), ), - ( - "deleted_at", - models.DateTimeField(blank=True, null=True), - ), - ( - "restored_at", - models.DateTimeField(blank=True, null=True), - ), - ( - "transaction_id", - models.UUIDField(blank=True, null=True), - ), ], options={ "ordering": ("-created",), diff --git a/src/documents/models.py b/src/documents/models.py index a9f4f7a72..65529a661 100644 --- a/src/documents/models.py +++ b/src/documents/models.py @@ -755,18 +755,13 @@ class ShareLink(SoftDeleteModel): return f"Share Link for {self.document.title}" -class ShareLinkBundle(SoftDeleteModel): +class ShareLinkBundle(models.Model): class Status(models.TextChoices): PENDING = ("pending", _("Pending")) PROCESSING = ("processing", _("Processing")) READY = ("ready", _("Ready")) FAILED = ("failed", _("Failed")) - class Meta: - ordering = ("-created",) - verbose_name = _("share link bundle") - verbose_name_plural = _("share link bundles") - created = models.DateTimeField( _("created"), default=timezone.now, @@ -842,6 +837,11 @@ class ShareLinkBundle(SoftDeleteModel): verbose_name=_("documents"), ) + class Meta: + ordering = ("-created",) + verbose_name = _("share link bundle") + verbose_name_plural = _("share link bundles") + def __str__(self): return _("Share link bundle %(slug)s") % {"slug": self.slug} @@ -866,10 +866,6 @@ class ShareLinkBundle(SoftDeleteModel): self.remove_file() return super().delete(using=using, keep_parents=keep_parents) - def hard_delete(self, using=None, *, keep_parents=False): - self.remove_file() - return super().hard_delete(using=using, keep_parents=keep_parents) - class CustomField(models.Model): """ diff --git a/src/documents/tasks.py b/src/documents/tasks.py index c5c8146de..2dd767667 100644 --- a/src/documents/tasks.py +++ b/src/documents/tasks.py @@ -736,7 +736,6 @@ def build_share_link_bundle(bundle_id: int): def cleanup_expired_share_link_bundles(): now = timezone.now() expired_qs = ShareLinkBundle.objects.filter( - deleted_at__isnull=True, expiration__isnull=False, expiration__lt=now, ) @@ -744,7 +743,7 @@ def cleanup_expired_share_link_bundles(): for bundle in expired_qs.iterator(): count += 1 try: - bundle.hard_delete() + bundle.delete() except Exception as exc: logger.warning( "Failed to delete expired share link bundle %s: %s", diff --git a/src/documents/tests/test_share_link_bundles.py b/src/documents/tests/test_share_link_bundles.py index 62b815ec5..56848bbca 100644 --- a/src/documents/tests/test_share_link_bundles.py +++ b/src/documents/tests/test_share_link_bundles.py @@ -278,7 +278,7 @@ class ShareLinkBundleTaskTests(DirectoriesMixin, APITestCase): with mock.patch.object( ShareLinkBundle, - "hard_delete", + "delete", side_effect=RuntimeError("fail"), ): with self.assertLogs("paperless.tasks", level="WARNING") as logs: @@ -536,7 +536,7 @@ class ShareLinkBundleModelTests(DirectoriesMixin, APITestCase): self.assertTrue(bundle_path.exists()) - def test_delete_and_hard_delete_call_remove_file(self): + def test_delete_calls_remove_file(self): bundle_path = ( Path(settings.MEDIA_ROOT) / "documents" @@ -554,23 +554,6 @@ class ShareLinkBundleModelTests(DirectoriesMixin, APITestCase): bundle.delete() self.assertFalse(bundle_path.exists()) - bundle2_path = ( - Path(settings.MEDIA_ROOT) - / "documents" - / "share_link_bundles" - / "harddelete.zip" - ) - bundle2_path.parent.mkdir(parents=True, exist_ok=True) - bundle2_path.write_bytes(b"remove-me") - bundle2 = ShareLinkBundle.objects.create( - slug="harddelete-bundle", - file_version=ShareLink.FileVersion.ORIGINAL, - file_path=str(bundle2_path.relative_to(settings.MEDIA_ROOT)), - ) - - bundle2.hard_delete() - self.assertFalse(bundle2_path.exists()) - class ShareLinkBundleSerializerTests(DirectoriesMixin, APITestCase): def setUp(self):