diff options
| -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")  | 
