| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- 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())
|