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:
parent
66f7341cb5
commit
bbe1b24d4c
@ -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
|
||||
|
||||
|
@ -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:
|
||||
|
@ -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()
|
||||
@ -311,3 +320,80 @@ class Command(BaseKonovaCommand):
|
||||
self.__sanitize_parcel_sub_type(sub_type)
|
||||
|
||||
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()
|
||||
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user