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:
|
class Meta:
|
||||||
abstract = True
|
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:
|
def add_deadline(self, form) -> Deadline:
|
||||||
""" Adds a new deadline to the abstract compensation
|
""" Adds a new deadline to the abstract compensation
|
||||||
|
|
||||||
|
@ -89,7 +89,10 @@ class Intervention(BaseObject,
|
|||||||
self.legal,
|
self.legal,
|
||||||
self.responsible,
|
self.responsible,
|
||||||
self.geometry,
|
self.geometry,
|
||||||
self.log.all()
|
self.recorded,
|
||||||
|
self.checked,
|
||||||
|
self.log.all(),
|
||||||
|
self.resubmissions.all(),
|
||||||
]
|
]
|
||||||
for entry in to_delete:
|
for entry in to_delete:
|
||||||
try:
|
try:
|
||||||
|
@ -5,6 +5,10 @@ Contact: michel.peltriaux@sgdnord.rlp.de
|
|||||||
Created on: 16.11.21
|
Created on: 16.11.21
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
import datetime
|
||||||
|
|
||||||
|
from django.utils.timezone import now
|
||||||
|
|
||||||
from compensation.models import CompensationState, Compensation, EcoAccount, CompensationAction
|
from compensation.models import CompensationState, Compensation, EcoAccount, CompensationAction
|
||||||
from ema.models import Ema
|
from ema.models import Ema
|
||||||
from intervention.models import Intervention
|
from intervention.models import Intervention
|
||||||
@ -16,8 +20,13 @@ from user.models import UserActionLogEntry, UserAction
|
|||||||
class Command(BaseKonovaCommand):
|
class Command(BaseKonovaCommand):
|
||||||
help = "Checks the database' sanity and removes unused entries"
|
help = "Checks the database' sanity and removes unused entries"
|
||||||
|
|
||||||
|
__DELETE_AFTER_DAYS = 30
|
||||||
|
|
||||||
def handle(self, *args, **options):
|
def handle(self, *args, **options):
|
||||||
try:
|
try:
|
||||||
|
self.sanitize_deleted_interventions()
|
||||||
|
self.sanitize_deleted_eco_accounts()
|
||||||
|
self.sanitize_deleted_ema()
|
||||||
self.sanitize_log_entries()
|
self.sanitize_log_entries()
|
||||||
self.sanitize_compensation_states()
|
self.sanitize_compensation_states()
|
||||||
self.sanitize_actions()
|
self.sanitize_actions()
|
||||||
@ -311,3 +320,80 @@ class Command(BaseKonovaCommand):
|
|||||||
self.__sanitize_parcel_sub_type(sub_type)
|
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()
|
||||||
|
|
||||||
|
@ -81,6 +81,7 @@ class BaseResource(UuidModel):
|
|||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
self.created.delete()
|
self.created.delete()
|
||||||
|
self.modified.delete()
|
||||||
except (ObjectDoesNotExist, AttributeError):
|
except (ObjectDoesNotExist, AttributeError):
|
||||||
# Object does not exist anymore - we can skip this
|
# Object does not exist anymore - we can skip this
|
||||||
pass
|
pass
|
||||||
|
Loading…
Reference in New Issue
Block a user