diff --git a/repoapi/models/jbi.py b/repoapi/models/jbi.py index de7af8f..58dcd29 100644 --- a/repoapi/models/jbi.py +++ b/repoapi/models/jbi.py @@ -137,9 +137,14 @@ class JenkinsBuildInfoManager(models.Manager): def purge_release(self, release, _timedelta=timedelta(weeks=3)): _date = datetime.now() - _timedelta - self.get_queryset().filter( - param_release=release, - date__date__lt=_date).delete() + if release is None: + self.get_queryset().filter( + param_release__isnull=True, + date__date__lt=_date).delete() + else: + self.get_queryset().filter( + param_release=release, + date__date__lt=_date).delete() class JenkinsBuildInfo(models.Model): diff --git a/repoapi/settings/prod.py b/repoapi/settings/prod.py index 998cb99..4822fc5 100644 --- a/repoapi/settings/prod.py +++ b/repoapi/settings/prod.py @@ -85,6 +85,11 @@ CELERYBEAT_SCHEDULE = { 'schedule': crontab(hour=7, minute=30, day_of_week='sunday'), 'args': ('none', 4), }, + 'purge-none': { + 'task': 'repoapi.tasks.jbi_purge', + 'schedule': crontab(hour=7, minute=30, day_of_week='sunday'), + 'args': (None, 1), + }, } CELERY_TIMEZONE = 'UTC' diff --git a/repoapi/test/test_model_queries.py b/repoapi/test/test_model_queries.py index 88107c4..16e9318 100644 --- a/repoapi/test/test_model_queries.py +++ b/repoapi/test/test_model_queries.py @@ -70,3 +70,15 @@ class JBIQueriesTestCase(BaseTest): 'mr3.1-fake', timedelta(weeks=3)) self.assertEquals(JenkinsBuildInfo.objects.count(), 1) + + def test_purge_release_none(self): + jbi = JenkinsBuildInfo.objects.get(pk=1) + jbi.param_release = None + jbi.save() + self.assertEquals(JenkinsBuildInfo.objects.filter( + param_release__isnull=True).count(), 1) + self.assertEquals(JenkinsBuildInfo.objects.count(), 5) + JenkinsBuildInfo.objects.purge_release( + None, + timedelta(weeks=3)) + self.assertEquals(JenkinsBuildInfo.objects.count(), 4) diff --git a/repoapi/test/test_tasks.py b/repoapi/test/test_tasks.py index eea3c95..24f1381 100644 --- a/repoapi/test/test_tasks.py +++ b/repoapi/test/test_tasks.py @@ -30,3 +30,13 @@ class TasksTestCase(BaseTest): self.assertEquals(JenkinsBuildInfo.objects.count(), 5) tasks.jbi_purge.delay('mr3.1-fake', 3) self.assertEquals(JenkinsBuildInfo.objects.count(), 1) + + def test_purge_none(self): + jbi = JenkinsBuildInfo.objects.get(pk=1) + jbi.param_release = None + jbi.save() + self.assertEquals(JenkinsBuildInfo.objects.filter( + param_release__isnull=True).count(), 1) + self.assertEquals(JenkinsBuildInfo.objects.count(), 5) + tasks.jbi_purge.delay(None, 3) + self.assertEquals(JenkinsBuildInfo.objects.count(), 4)