From ec71083d1d7d26c3e22afa5a911d8b7b97172147 Mon Sep 17 00:00:00 2001 From: Robert Sparks Date: Fri, 18 Feb 2022 22:46:40 +0000 Subject: [PATCH] Only keep the first and most recent yang validator SubmissionCheck for any given submission. Fixes #3542. Commit ready for merge. - Legacy-Id: 19952 --- .../management/commands/purge_yang_checks.py | 29 +++++++++++++++++++ .../commands/run_yang_model_checks.py | 4 ++- 2 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 ietf/submit/management/commands/purge_yang_checks.py diff --git a/ietf/submit/management/commands/purge_yang_checks.py b/ietf/submit/management/commands/purge_yang_checks.py new file mode 100644 index 000000000..ecd60c398 --- /dev/null +++ b/ietf/submit/management/commands/purge_yang_checks.py @@ -0,0 +1,29 @@ +# Copyright The IETF Trust 2022 All Rights Reserved + +from tqdm import tqdm + +from django.core.management.base import BaseCommand +from django.db import migrations + +from ietf.submit.models import Submission, SubmissionCheck + +class Command(BaseCommand): + help = ("Remove all but the first and last yangchecks for each Submission") + + def handle(self, *args, **options): + print("Identifying purgeable SubmissionChecks") + keep = set() + for submission in tqdm(Submission.objects.all()): + qs = submission.checks.filter(checker="yang validation") + if qs.count() == 0: + continue + qs = qs.order_by("time") + keep.add(qs.first().pk) + keep.add(qs.last().pk) + keep.discard(None) + print("Purging SubmissionChecks") + print( + SubmissionCheck.objects.filter(checker="yang validation") + .exclude(pk__in=list(keep)) + .delete() + ) diff --git a/ietf/utils/management/commands/run_yang_model_checks.py b/ietf/utils/management/commands/run_yang_model_checks.py index ad053746b..bca2d2d7a 100644 --- a/ietf/utils/management/commands/run_yang_model_checks.py +++ b/ietf/utils/management/commands/run_yang_model_checks.py @@ -55,7 +55,9 @@ class Command(BaseCommand): if new_res != old_res: if self.verbosity > 1: self.stdout.write(" Saving new yang checker results for %s-%s" % (draft.name, draft.rev)) - SubmissionCheck.objects.create(submission=submission, checker=checker.name, passed=passed, + qs = submission.checks.filter(checker=checker.name).order_by('time') + submission.checks.filter(checker=checker.name).exclude(pk=qs.first().pk).delete() + submission.checks.create(submission=submission, checker=checker.name, passed=passed, message=message, errors=errors, warnings=warnings, items=items, symbol=checker.symbol) else: