Skip to content

Commit 020bdeb

Browse files
feat: purge_personal_api_key_events() task (ietf-tools#7485)
* feat: purge_personal_api_key_events() task * feat: log number of events purged * test: test new task * fix: name task properly * chore: create daily PeriodicTask * chore: remove old management command * chore: remove tests of old command * test: finish removing now-empty tests.py
1 parent 607a5c8 commit 020bdeb

6 files changed

Lines changed: 48 additions & 191 deletions

File tree

bin/daily

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,3 @@ $DTDIR/ietf/manage.py populate_yang_model_dirs -v0
3636

3737
# Re-run yang checks on active documents
3838
$DTDIR/ietf/manage.py run_yang_model_checks -v0
39-
40-
# Purge older PersonApiKeyEvents
41-
$DTDIR/ietf/manage.py purge_old_personal_api_key_events 14

ietf/person/management/commands/purge_old_personal_api_key_events.py

Lines changed: 0 additions & 64 deletions
This file was deleted.

ietf/person/management/commands/tests.py

Lines changed: 0 additions & 122 deletions
This file was deleted.

ietf/person/tasks.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# Copyright The IETF Trust 2024, All Rights Reserved
2+
#
3+
# Celery task definitions
4+
#
5+
import datetime
6+
7+
from celery import shared_task
8+
from django.utils import timezone
9+
10+
from ietf.utils import log
11+
from .models import PersonApiKeyEvent
12+
13+
14+
@shared_task
15+
def purge_personal_api_key_events_task(keep_days):
16+
keep_since = timezone.now() - datetime.timedelta(days=keep_days)
17+
old_events = PersonApiKeyEvent.objects.filter(time__lt=keep_since)
18+
count = len(old_events)
19+
old_events.delete()
20+
log.log(f"Deleted {count} PersonApiKeyEvents older than {keep_since}")

ietf/person/tests.py

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import datetime
66
import json
7+
import mock
78

89
from io import StringIO, BytesIO
910
from PIL import Image
@@ -25,8 +26,9 @@
2526
from ietf.nomcom.models import NomCom
2627
from ietf.nomcom.test_data import nomcom_test_data
2728
from ietf.nomcom.factories import NomComFactory, NomineeFactory, NominationFactory, FeedbackFactory, PositionFactory
28-
from ietf.person.factories import EmailFactory, PersonFactory
29-
from ietf.person.models import Person, Alias
29+
from ietf.person.factories import EmailFactory, PersonFactory, PersonApiKeyEventFactory
30+
from ietf.person.models import Person, Alias, PersonApiKeyEvent
31+
from ietf.person.tasks import purge_personal_api_key_events_task
3032
from ietf.person.utils import (merge_persons, determine_merge_order, send_merge_notification,
3133
handle_users, get_extra_primary, dedupe_aliases, move_related_objects, merge_nominees,
3234
handle_reviewer_settings, get_dots)
@@ -450,3 +452,16 @@ def test_dots(self):
450452
self.assertEqual(get_dots(ncmember),['nomcom'])
451453
ncchair = RoleFactory(group__acronym='nomcom2020',group__type_id='nomcom',name_id='chair').person
452454
self.assertEqual(get_dots(ncchair),['nomcom'])
455+
456+
457+
class TaskTests(TestCase):
458+
@mock.patch("ietf.person.tasks.log.log")
459+
def test_purge_personal_api_key_events_task(self, mock_log):
460+
now = timezone.now()
461+
old_event = PersonApiKeyEventFactory(time=now - datetime.timedelta(days=1, minutes=1))
462+
young_event = PersonApiKeyEventFactory(time=now - datetime.timedelta(days=1, minutes=-1))
463+
purge_personal_api_key_events_task(keep_days=1)
464+
self.assertFalse(PersonApiKeyEvent.objects.filter(pk=old_event.pk).exists())
465+
self.assertTrue(PersonApiKeyEvent.objects.filter(pk=young_event.pk).exists())
466+
self.assertTrue(mock_log.called)
467+
self.assertIn("Deleted 1", mock_log.call_args[0][0])

ietf/utils/management/commands/periodic_tasks.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,17 @@ def create_default_tasks(self):
241241
),
242242
)
243243

244+
PeriodicTask.objects.get_or_create(
245+
name="Purge old personal API key events",
246+
task="ietf.person.tasks.purge_personal_api_key_events_task",
247+
kwargs=json.dumps(dict(keep_days=14)),
248+
defaults=dict(
249+
enabled=False,
250+
crontab=self.crontabs["daily"],
251+
description="Purge PersonApiKeyEvent instances older than 14 days",
252+
),
253+
)
254+
244255
def show_tasks(self):
245256
for label, crontab in self.crontabs.items():
246257
tasks = PeriodicTask.objects.filter(crontab=crontab).order_by(

0 commit comments

Comments
 (0)