56 lines
1.7 KiB
Python
56 lines
1.7 KiB
Python
# Copyright The IETF Trust 2011-2020, All Rights Reserved
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
|
from django.contrib.syndication.views import Feed, FeedDoesNotExist
|
|
from django.utils.feedgenerator import Atom1Feed
|
|
from django.urls import reverse as urlreverse
|
|
from django.utils.html import strip_tags
|
|
from django.template.defaultfilters import truncatewords
|
|
|
|
from ietf.group.models import Group, GroupEvent
|
|
from ietf.doc.models import DocEvent
|
|
|
|
class GroupChangesFeed(Feed):
|
|
feed_type = Atom1Feed
|
|
description_template = "group/feed_item_description.html"
|
|
|
|
def get_object(self, request, acronym):
|
|
return Group.objects.get(acronym=acronym)
|
|
|
|
def title(self, obj):
|
|
return "Changes for %s %s" % (obj.acronym, obj.type)
|
|
|
|
def link(self, obj):
|
|
if not obj:
|
|
raise FeedDoesNotExist
|
|
return obj.about_url()
|
|
|
|
def description(self, obj):
|
|
return self.title(obj)
|
|
|
|
def items(self, obj):
|
|
events = list(obj.groupevent_set.all().select_related("group"))
|
|
if obj.charter:
|
|
events += list(obj.charter.docevent_set.all())
|
|
|
|
events.sort(key=lambda e: (e.time, e.id), reverse=True)
|
|
|
|
return events
|
|
|
|
def item_link(self, obj):
|
|
if isinstance(obj, DocEvent):
|
|
return urlreverse("ietf.doc.views_doc.document_main", kwargs={'name': obj.doc.name })
|
|
elif isinstance(obj, GroupEvent):
|
|
return obj.group.about_url()
|
|
|
|
def item_pubdate(self, obj):
|
|
return obj.time
|
|
|
|
def item_title(self, obj):
|
|
title = "%s - %s" % (truncatewords(strip_tags(obj.desc), 10), obj.by)
|
|
if isinstance(obj, DocEvent):
|
|
title = "Chartering: %s" % title
|
|
|
|
return title
|