Files
website-v2/versions/feeds.py
2025-10-22 13:24:26 -07:00

49 lines
1.5 KiB
Python

from datetime import datetime, timezone
from django.contrib.syndication.views import Feed
from django.utils.feedgenerator import Atom1Feed
from django.utils.timezone import make_aware
from core.models import RenderedContent
from .models import Version
class RSSVersionFeed(Feed):
"""An RSS feed for Boost releases"""
title = "Downloads"
link = "/releases/"
description = "Recent downloads for Boost C++ Libraries."
def items(self):
return (
Version.objects.active().filter(full_release=True).order_by("-name")[:100]
)
def item_pubdate(self, item):
"""Returns the release date as a timezone-aware datetime object"""
release_date = item.release_date
if release_date:
datetime_obj = datetime.combine(release_date, datetime.min.time())
aware_datetime_obj = make_aware(datetime_obj, timezone=timezone.utc)
return aware_datetime_obj
def item_description(self, item):
"""Return the Release Notes in the description field if they are present."""
release_notes = RenderedContent.objects.filter(
cache_key=item.release_notes_cache_key
).first()
if release_notes:
return release_notes.content_html
return
def item_title(self, item):
return f"Version {item.display_name}"
class AtomVersionFeed(RSSVersionFeed):
"""The Atom feed version of the main feed, which enables
the extra fields like `pubdate`
"""
feed_type = Atom1Feed