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() now_tuple = now.timetuple() item_count = FeedItem.objects.filter(feed_category=obj).count() if item_count > 0: starting_date = datetime(now_tuple.tm_year if now_tuple.tm_mon >= obj.starting_month else now_tuple.tm_year - 1, obj.starting_month, 1) offset = (now - starting_date).days % item_count feed_item = list(FeedItem.objects.filter(feed_category=obj).order_by('day_number')[offset:offset + 1])[0] else: 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())