Sanitize command extension

* adds proper removing of related entries for compensation and intervention models
* adds sanitizing of intervention, compensation, ecoaccount and ema to sanitize_db
This commit is contained in:
mpeltriaux 2022-12-12 14:32:30 +01:00
parent 66f7341cb5
commit bbe1b24d4c
4 changed files with 114 additions and 2 deletions

View File

@ -52,6 +52,28 @@ class AbstractCompensation(BaseObject,
class Meta:
abstract = True
def delete(self, *args, **kwargs):
"""
Custom delete logic.
Make sure no artefacts are left on the database
Args:
Returns:
"""
self.before_states.all().delete()
self.after_states.all().delete()
self.actions.all().delete()
self.resubmissions.all().delete()
self.deadlines.all().delete()
self.log.all().delete()
if self.geometry:
self.geometry.delete()
if self.responsible:
self.responsible.delete()
super().delete(*args, **kwargs)
def add_deadline(self, form) -> Deadline:
""" Adds a new deadline to the abstract compensation

View File

@ -89,7 +89,10 @@ class Intervention(BaseObject,
self.legal,
self.responsible,
self.geometry,
self.log.all()
self.recorded,
self.checked,
self.log.all(),
self.resubmissions.all(),
]
for entry in to_delete:
try:

View File

@ -5,6 +5,10 @@ Contact: michel.peltriaux@sgdnord.rlp.de
Created on: 16.11.21
"""
import datetime
from django.utils.timezone import now
from compensation.models import CompensationState, Compensation, EcoAccount, CompensationAction
from ema.models import Ema
from intervention.models import Intervention
@ -16,8 +20,13 @@ from user.models import UserActionLogEntry, UserAction
class Command(BaseKonovaCommand):
help = "Checks the database' sanity and removes unused entries"
__DELETE_AFTER_DAYS = 30
def handle(self, *args, **options):
try:
self.sanitize_deleted_interventions()
self.sanitize_deleted_eco_accounts()
self.sanitize_deleted_ema()
self.sanitize_log_entries()
self.sanitize_compensation_states()
self.sanitize_actions()
@ -310,4 +319,81 @@ class Command(BaseKonovaCommand):
for sub_type in sub_types:
self.__sanitize_parcel_sub_type(sub_type)
self._break_line()
self._break_line()
def sanitize_deleted_interventions(self):
""" Removes as deleted marked interventions
Also deletes compensations
Returns:
"""
self._write_warning("=== Sanitize deleted marked interventions ===")
_today = now()
_today_month_ago = _today - datetime.timedelta(days=self.__DELETE_AFTER_DAYS)
deleted_entries = Intervention.objects.filter(
deleted__timestamp__lte=_today_month_ago
)
deleted_interventions_c = deleted_entries.count()
deleted_compensations_c = 0
for entry in deleted_entries:
comps = entry.compensations.all()
deleted_compensations_c += comps.count()
for comp in comps:
comp.delete()
entry.delete()
if deleted_interventions_c > 0:
self._write_error(f"Found {deleted_interventions_c} interventions and {deleted_compensations_c} compensations.")
self._write_success("As deleted marked interventions deleted.")
else:
self._write_success("No such entries found.")
self._break_line()
def sanitize_deleted_eco_accounts(self):
""" Removes as deleted marked eco accounts
Returns:
"""
self._write_warning("=== Sanitize deleted marked eco accounts ===")
_today = now()
_today_month_ago = _today - datetime.timedelta(days=self.__DELETE_AFTER_DAYS)
deleted_entries = EcoAccount.objects.filter(
deleted__timestamp__lte=_today_month_ago
)
deleted_entries_c = deleted_entries.count()
for entry in deleted_entries:
entry.delete()
if deleted_entries_c > 0:
self._write_error(f"Found {deleted_entries_c} eco accounts.")
self._write_success("As deleted marked eco accounts deleted.")
else:
self._write_success("No such entries found.")
self._break_line()
def sanitize_deleted_ema(self):
""" Removes as deleted marked EMA
Returns:
"""
self._write_warning("=== Sanitize deleted marked EMA ===")
_today = now()
_today_month_ago = _today - datetime.timedelta(days=self.__DELETE_AFTER_DAYS)
deleted_entries = Ema.objects.filter(
deleted__timestamp__lte=_today_month_ago
)
deleted_entries_c = deleted_entries.count()
for entry in deleted_entries:
entry.delete()
if deleted_entries_c > 0:
self._write_error(f"Found {deleted_entries_c} EMA.")
self._write_success("As deleted marked EMA deleted.")
else:
self._write_success("No such entries found.")
self._break_line()

View File

@ -81,6 +81,7 @@ class BaseResource(UuidModel):
"""
try:
self.created.delete()
self.modified.delete()
except (ObjectDoesNotExist, AttributeError):
# Object does not exist anymore - we can skip this
pass