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