mirror of
https://github.com/boostorg/website-v2.git
synced 2026-01-19 04:42:17 +00:00
49 lines
1.5 KiB
Python
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
|