Ei kuvausta

feeds.py 2.1KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. from django.contrib.syndication.views import Feed
  2. from django.shortcuts import get_object_or_404
  3. from django.urls import reverse
  4. from django.utils.timezone import utc
  5. from datetime import datetime
  6. from feed_content.models import FeedCategory, FeedItem
  7. from models import DailyFeedItemLogEntry
  8. class DailyFeed(Feed):
  9. def get_object(self, request, feed_category_id):
  10. return get_object_or_404(FeedCategory, pk=feed_category_id)
  11. def title(self, obj):
  12. return obj.name
  13. def link(self, obj):
  14. return reverse('rss:daily', kwargs={'feed_category_id': obj.pk})
  15. def description(self, obj):
  16. return obj.description
  17. def items(self, obj):
  18. now = datetime.now()
  19. now_tuple = now.timetuple()
  20. item_count = FeedItem.objects.filter(feed_category=obj).count()
  21. if item_count > 0:
  22. 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)
  23. offset = (now - starting_date).days % item_count
  24. feed_item = list(FeedItem.objects.filter(feed_category=obj).order_by('day_number')[offset:offset + 1])[0]
  25. else:
  26. feed_item = None
  27. if feed_item is None:
  28. return []
  29. log_entry, created = DailyFeedItemLogEntry.objects.get_or_create(
  30. request_date=now.date(),
  31. feed_category=obj,
  32. feed_item=feed_item,
  33. defaults={
  34. 'category_name': obj.name,
  35. 'message_text': feed_item.message_text,
  36. 'request_count': 1
  37. }
  38. )
  39. if not created:
  40. log_entry.request_count += 1
  41. log_entry.save()
  42. return [log_entry]
  43. def item_title(self, item):
  44. return 'Content'
  45. def item_description(self, item):
  46. return item.message_text
  47. def item_guid(self, item):
  48. return str(item.pk)
  49. def item_link(self, item):
  50. return reverse('rss:daily', kwargs={'feed_category_id': item.feed_category.pk})
  51. def item_pubdate(self, item):
  52. return datetime.combine(item.request_date, datetime.min.time())