diff --git a/backend/apps/github/models/managers/release.py b/backend/apps/github/models/managers/release.py new file mode 100644 index 0000000000..aa124f2b34 --- /dev/null +++ b/backend/apps/github/models/managers/release.py @@ -0,0 +1,23 @@ +"""GitHub app release managers.""" + +from django.db import models + + +class ActiveReleaseManager(models.Manager): + """Active releases manager.""" + + def get_queryset(self): + """Get queryset of active releases. + + Filters out draft and pre-releases, and ensures repository exists. + """ + return ( + super() + .get_queryset() + .select_related("repository") + .filter( + is_draft=False, + is_pre_release=False, + repository__is_empty=False, + ) + ) diff --git a/backend/apps/github/models/release.py b/backend/apps/github/models/release.py index 33d110bc6d..880c445f6e 100644 --- a/backend/apps/github/models/release.py +++ b/backend/apps/github/models/release.py @@ -4,12 +4,16 @@ from apps.common.models import BulkSaveModel, TimestampedModel from apps.github.models.common import NodeModel +from apps.github.models.managers.release import ActiveReleaseManager from apps.github.models.mixins.release import ReleaseIndexMixin class Release(BulkSaveModel, NodeModel, ReleaseIndexMixin, TimestampedModel): """Release model.""" + objects = models.Manager() + active_releases = ActiveReleaseManager() + class Meta: db_table = "github_releases" indexes = [ diff --git a/backend/apps/owasp/management/commands/owasp_process_snapshots.py b/backend/apps/owasp/management/commands/owasp_process_snapshots.py index 74ab574206..badb03e165 100644 --- a/backend/apps/owasp/management/commands/owasp_process_snapshots.py +++ b/backend/apps/owasp/management/commands/owasp_process_snapshots.py @@ -66,32 +66,22 @@ def process_snapshot(self, snapshot: Snapshot) -> None: try: # Fetch new data for each model type - new_chapters = self.get_new_items( - Chapter, - snapshot.start_at, - snapshot.end_at, - ).filter( - is_active=True, + new_chapters = Chapter.active_chapters.filter( + created_at__gte=snapshot.start_at, + created_at__lte=snapshot.end_at, ) new_issues = self.get_new_items( Issue, snapshot.start_at, snapshot.end_at, ) - new_projects = self.get_new_items( - Project, - snapshot.start_at, - snapshot.end_at, - ).filter( - is_active=True, + new_projects = Project.active_projects.filter( + created_at__gte=snapshot.start_at, + created_at__lte=snapshot.end_at, ) - new_releases = self.get_new_items( - Release, - snapshot.start_at, - snapshot.end_at, - ).filter( - is_draft=False, - is_pre_release=False, + new_releases = Release.active_releases.filter( + created_at__gte=snapshot.start_at, + created_at__lte=snapshot.end_at, ) new_users = self.get_new_items( User,