From 4f989d82bb230a59a224ed7befd9736eb491d6c7 Mon Sep 17 00:00:00 2001 From: imperosol Date: Sat, 31 Oct 2026 18:27:57 +0100 Subject: [PATCH] refactor `update_spam_database` --- .../commands/update_spam_database.py | 33 ++++++++++++------- 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/antispam/management/commands/update_spam_database.py b/antispam/management/commands/update_spam_database.py index 2761c649..d4e40d2c 100644 --- a/antispam/management/commands/update_spam_database.py +++ b/antispam/management/commands/update_spam_database.py @@ -38,22 +38,31 @@ class Command(BaseCommand): return domains def _update_domains(self, domains: set[str]): - # Cleanup database - ToxicDomain.objects.filter(is_externally_managed=True).delete() - - # Create database - ToxicDomain.objects.bulk_create( - [ - ToxicDomain(domain=domain, is_externally_managed=True) - for domain in domains - ], - ignore_conflicts=True, - ) + existing = set(ToxicDomain.objects.values_list("domain", flat=True)) + if existing == domains: + self.stdout.write("Domain database was up to date") + return + if to_remove := (existing - domains): + # Cleanup database + ToxicDomain.objects.filter( + domain__in=to_remove, is_externally_managed=True + ).delete() + if to_create := (domains - existing): + # Create database + ToxicDomain.objects.bulk_create( + [ + ToxicDomain(domain=domain, is_externally_managed=True) + for domain in to_create + ], + ignore_conflicts=True, + ) self.stdout.write("Domain database updated") def handle(self, *args, **options): if not self._should_update(force=options["force"]): - self.stdout.write("Domain database is up to date") + self.stdout.write( + "No update required. Use --force if you want to do it anyway." + ) return self.stdout.write("Updating domain database")