annotate forums/feeds.py @ 1200:b9514abc2a67

Initial commit of ssg101.
author Brian Neal <bgneal@gmail.com>
date Sat, 24 Jun 2023 16:06:51 -0500
parents ee87ea74d46b
children
rev   line source
bgneal@509 1 """
bgneal@509 2 This file contains the feed class for the forums application.
bgneal@170 3
bgneal@509 4 """
bgneal@176 5 from django.contrib.syndication.views import Feed
bgneal@170 6 from django.core.exceptions import ObjectDoesNotExist
bgneal@176 7 from django.shortcuts import get_object_or_404
bgneal@170 8
bgneal@393 9 from forums.models import Forum, Topic, Post
bgneal@176 10 from core.functions import copyright_str
bgneal@509 11 from forums.latest import get_latest_posts
bgneal@170 12
bgneal@170 13
bgneal@170 14 class ForumsFeed(Feed):
bgneal@176 15 """The Feed class for a specific forum"""
bgneal@170 16
bgneal@385 17 ttl = '60'
bgneal@176 18 author_name = 'Brian Neal'
bgneal@176 19 author_email = 'admin@surfguitar101.com'
bgneal@176 20
bgneal@176 21 def get_object(self, request, forum_slug):
bgneal@509 22
bgneal@176 23 if forum_slug:
bgneal@509 24 forum = Forum.objects.get(slug=forum_slug)
bgneal@509 25 # only return public forums
bgneal@387 26 if forum.id not in Forum.objects.public_forum_ids():
bgneal@170 27 raise ObjectDoesNotExist
bgneal@170 28 return forum
bgneal@170 29
bgneal@176 30 else:
bgneal@170 31 # return None to indicate we want a combined feed
bgneal@170 32 return None
bgneal@170 33
bgneal@170 34 def title(self, obj):
bgneal@170 35 if obj is None:
bgneal@170 36 forum_name = 'Combined'
bgneal@170 37 else:
bgneal@170 38 forum_name = obj.name
bgneal@170 39
bgneal@170 40 return 'SurfGuitar101.com %s Forum Feed' % forum_name
bgneal@170 41
bgneal@170 42 def link(self, obj):
bgneal@170 43 if obj is None:
bgneal@170 44 bits = ''
bgneal@170 45 else:
bgneal@170 46 bits = obj.slug + '/'
bgneal@170 47
bgneal@170 48 return '/feeds/forums/' + bits
bgneal@170 49
bgneal@170 50 def description(self, obj):
bgneal@170 51 if obj is None:
bgneal@170 52 return "User posts to SurfGuitar101.com forums."
bgneal@170 53 return obj.description
bgneal@170 54
bgneal@176 55 def feed_copyright(self):
bgneal@176 56 return copyright_str()
bgneal@170 57
bgneal@170 58 def items(self, obj):
bgneal@509 59 forum_id = obj.id if obj else None
bgneal@509 60 return get_latest_posts(forum_id=forum_id)
bgneal@170 61
bgneal@176 62 def item_title(self, item):
bgneal@509 63 return item['title']
bgneal@176 64
bgneal@176 65 def item_description(self, item):
bgneal@509 66 return item['content']
bgneal@176 67
bgneal@176 68 def item_author_name(self, item):
bgneal@509 69 return item['author']
bgneal@176 70
bgneal@170 71 def item_pubdate(self, item):
bgneal@509 72 return item['pubdate']
bgneal@170 73
bgneal@170 74 def item_categories(self, item):
bgneal@509 75 return [item['forum_name']]
bgneal@509 76
bgneal@509 77 def item_link(self, item):
bgneal@509 78 return item['url']