mirror of
https://github.com/boostorg/website-v2.git
synced 2026-01-19 04:42:17 +00:00
77 lines
2.8 KiB
Python
77 lines
2.8 KiB
Python
from django.contrib import admin
|
|
|
|
|
|
class FilterByReleaseDates(admin.SimpleListFilter):
|
|
"""Filter slack activity by Boost version release periods.
|
|
|
|
The release date is considered the END of the development period for that version.
|
|
Messages are attributed to the version they were leading up to, not the one just released.
|
|
"""
|
|
|
|
title = "release"
|
|
parameter_name = "release"
|
|
|
|
def lookups(self, request, model_admin):
|
|
from versions.models import Version
|
|
|
|
versions = Version.objects.filter(
|
|
release_date__isnull=False, active=True, full_release=True
|
|
).order_by("-release_date")[:20]
|
|
|
|
# Add special entries for ongoing development
|
|
choices = [
|
|
("master", "master (after latest release)"),
|
|
("develop", "develop (after latest release)"),
|
|
]
|
|
|
|
# Add version entries
|
|
choices.extend([(v.id, f"{v.name} ({v.release_date})") for v in versions])
|
|
|
|
return choices
|
|
|
|
def queryset(self, request, queryset):
|
|
if self.value() in ("master", "develop"):
|
|
# Get messages after the latest release
|
|
from versions.models import Version
|
|
|
|
latest_version = (
|
|
Version.objects.filter(
|
|
release_date__isnull=False, active=True, full_release=True
|
|
)
|
|
.order_by("-release_date")
|
|
.first()
|
|
)
|
|
|
|
if latest_version and latest_version.release_date:
|
|
return queryset.filter(day__gt=latest_version.release_date)
|
|
|
|
elif self.value():
|
|
from versions.models import Version
|
|
|
|
try:
|
|
version = Version.objects.get(id=self.value())
|
|
if version.release_date:
|
|
# Get the previous version's release date (this is the start of the period)
|
|
previous_version = (
|
|
Version.objects.filter(
|
|
release_date__lt=version.release_date,
|
|
active=True,
|
|
full_release=True,
|
|
)
|
|
.order_by("-release_date")
|
|
.first()
|
|
)
|
|
|
|
if previous_version and previous_version.release_date:
|
|
# Filter messages between previous release and current release
|
|
return queryset.filter(
|
|
day__gt=previous_version.release_date,
|
|
day__lte=version.release_date,
|
|
)
|
|
else:
|
|
# No previous version, so filter up to this release
|
|
return queryset.filter(day__lte=version.release_date)
|
|
except Version.DoesNotExist:
|
|
pass
|
|
return queryset
|