diff options
Diffstat (limited to 'ishtar_common')
-rw-r--r-- | ishtar_common/management/commands/gdpr_clean.py | 45 | ||||
-rw-r--r-- | ishtar_common/models.py | 5 |
2 files changed, 49 insertions, 1 deletions
diff --git a/ishtar_common/management/commands/gdpr_clean.py b/ishtar_common/management/commands/gdpr_clean.py new file mode 100644 index 000000000..1f3f413f6 --- /dev/null +++ b/ishtar_common/management/commands/gdpr_clean.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +import datetime +from django.conf import settings +from django.core.management.base import BaseCommand +import sys + +from ishtar_common.models import GDPRLog, GDPRPerson +from ishtar_common.utils import BColors + + +def get_time(): + return datetime.datetime.now().isoformat().split(".")[0] + + +def clean_gdpr(): + date = datetime.datetime.now() - ( + datetime.timedelta(days=settings.GDPR_RETENTION_PERIOD) + ) + q = GDPRLog.objects.filter(date__lte=date) + nb = q.count() + q.delete() + q = GDPRPerson.objects.filter(logs=None) + q.delete() + return nb + + +class Command(BaseCommand): + help = "Cleaning up obsolete gdpr data" + + def add_arguments(self, parser): + parser.add_argument( + "--quiet", dest="quiet", action="store_true", help="Quiet output" + ) + + def handle(self, *args, **options): + quiet = options["quiet"] + if not quiet: + msg = BColors.format("HEADER", f"[{get_time()}] Processing DGPR cleansing\n") + sys.stdout.write(msg) + nb = clean_gdpr() + if not quiet: + sys.stdout.write(f"{nb} dgpr logs cleaned\n") + sys.exit(1) diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 1ba1de7ec..a7c7626dd 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -3410,7 +3410,10 @@ class GDPRLog(models.Model): ip = models.GenericIPAddressField(verbose_name=_("IP"), blank=True, null=True) routable_ip = models.BooleanField(verbose_name=_("Routable IP"), default=False) activity = models.CharField(_("Activity"), max_length=2, choices=GDPR_ACTIVITY) - persons = models.ManyToManyField(GDPRPerson, verbose_name=_("Persons"), blank=True) + persons = models.ManyToManyField( + GDPRPerson, verbose_name=_("Persons"), blank=True, + related_name="logs" + ) class Meta: verbose_name = _("GDPR - Log") |