from django.contrib.syndication.views import Feed from django.shortcuts import get_object_or_404 from django.urls import reverse from django.utils.timezone import utc from datetime import datetime from feed_content.models import FeedCategory, FeedItem from models import DailyFeedItemLogEntry class DailyFeed(Feed): def get_object(self, request, feed_category_id): return get_object_or_404(FeedCategory, pk=feed_category_id) def title(self, obj): return obj.name def link(self, obj): return reverse('rss:daily', kwargs={'feed_category_id': obj.pk}) def description(self, obj): return obj.description def items(self, obj): now = datetime.now() day_of_year = now.timetuple().tm_yday try: feed_item = FeedItem.objects.get(feed_category=obj, day_number=day_of_year) except FeedItem.DoesNotExist: feed_item = None if feed_item is None: return [] log_entry, created = DailyFeedItemLogEntry.objects.get_or_create( request_date=now.date(), feed_category=obj, feed_item=feed_item, defaults={ 'category_name': obj.name, 'message_text': feed_item.message_text, 'request_count': 1 } ) if not created: log_entry.request_count += 1 log_entry.save() return [log_entry] def item_title(self, item): return 'Content' def item_description(self, item): return item.message_text def item_guid(self, item): return str(item.pk) def item_link(self, item): return reverse('rss:daily', kwargs={'feed_category_id': item.feed_category.pk}) def item_pubdate(self, item): return datetime.combine(item.request_date, datetime.min.time())