From 8f8b4817be203a9566c372fa8b2f993dc5b9ff69 Mon Sep 17 00:00:00 2001
From: Tanner Prestegard <tanner.prestegard@ligo.org>
Date: Tue, 12 Jun 2018 12:17:48 -0500
Subject: [PATCH] Adding custom delete method for superevents

Adding an optional "purge" for superevent deletion which removes
GroupObjectPermissions and deletes the data.
---
 gracedb/superevents/models.py | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/gracedb/superevents/models.py b/gracedb/superevents/models.py
index 423e2bfc9..37cbdc70e 100644
--- a/gracedb/superevents/models.py
+++ b/gracedb/superevents/models.py
@@ -1,6 +1,7 @@
 from django.db import models, IntegrityError
 from django.urls import reverse
 from django.contrib.auth import get_user_model
+from django.contrib.contenttypes.models import ContentType
 from django.conf import settings
 from django.core.exceptions import ValidationError
 from django.utils.translation import ugettext_lazy as _
@@ -12,14 +13,14 @@ from core.time_utils import posixToGpsTime, gpsToUtc
 from core.utils import int_to_letters, letters_to_int
 from events.models import Event, SignoffBase, VOEventBase, EMObservationBase, \
     EMFootprintBase
-from core.utils import int_to_letters
+from guardian.models import GroupObjectPermission
 
 import datetime
 from cStringIO import StringIO
 from hashlib import sha1
 import os
 import re
-
+import shutil
 import logging
 
 # Other setup
@@ -147,6 +148,21 @@ class Superevent(CleanSaveModel, ModelToDictMixin, AutoIncrementModel):
             self.preferred_event not in self.events.all()):
             self.events.add(self.preferred_event)
 
+    def delete(self, purge=False, *args, **kwargs):
+        if purge:
+            # Delete data directory
+            if os.path.isdir(self.datadir):
+                shutil.rmtree(self.datadir)
+
+            # Delete GroupObjectPermissions
+            ctype = ContentType.objects.get_for_model(self.__class__)
+            gops = GroupObjectPermission.objects.filter(object_pk=self.pk,
+                content_type=ctype)
+            gops.delete()
+
+        # Call base class delete
+        super(Superevent, self).delete(*args, **kwargs)
+
     def confirm_as_gw(self):
         """
         Sets is_gw to True, calculates the gw_date_number in the database, and
-- 
GitLab