hackspace/mhackspace/blog/feeds.py

150 lines
4.5 KiB
Python

from collections import OrderedDict
from django.contrib.syndication.views import Feed, add_domain
from django.contrib.sites.shortcuts import get_current_site
from django.utils import timezone
from mhackspace.base.feeds import MediaRssFeed
from mhackspace.blog.models import Category, Post
from mhackspace.feeds.models import Article # as ArticleFeed
class RssFeed(Feed):
title = "Maidstone Hackspace News"
link = "/"
feed_type = MediaRssFeed
description = "The latest blog posts and news from the Maidstone Hackspace site"
def get_feed(self, obj, request):
self.current_site = get_current_site(request)
return super(RssFeed, self).get_feed(obj, request)
def items(self, category):
items = []
# for item in Post.objects.all():
for item in Post.objects.select_related('author').filter(
active=True,
members_only=False):
img = '/static/images/card.png'
if item.image:
img = item.image.home.url
items.append({
'title': item.title,
'description': item.description,
'author': item.author,
'pubdate': item.published_date,
'updated': item.updated_date,
'image': img})
for item in Article.objects.select_related('feed').all():
img = '/static/images/card.png'
if item.image:
img = item.image.home.url
items.append({
'title': item.title,
'description': item.description,
'author': item.feed.author,
'pubdate': item.date,
'updated': item.date,
'image': img})
items.sort(key=lambda r: r.get('pubdate'))
return items
def item_title(self, post):
return post.get('title')
def item_description(self, post):
return post.get('description')
def item_author_name(self, post):
return post.get('author')
def item_link(self, post):
return 'link'
def item_categories(self, post):
return ''
def item_pubdate(self, post):
return post.get('pubdate')
def item_updateddate(self, post):
return post.get('updated')
def item_extra_kwargs(self, post):
return {
'thumbnail_url': add_domain(
domain=self.current_site.domain,
url=post.get('image'),
secure=True),
'thumbnail_width': 100,
'thumbnail_height': 100,
}
class BlogFeed(Feed):
title = "Mss.xmlaidstone Hackspace Blog"
link = "/blog/"
feed_type = MediaRssFeed
description = "The latest blog posts and news from the Maidstone Hackspace site"
def get_feed(self, obj, request):
self.current_site = get_current_site(request)
return super(BlogFeed, self).get_feed(obj, request)
def items(self, category):
return Post.objects.select_related('author').filter(
active=True,
members_only=False,
published_date__lte=timezone.now())[:20]
def item_title(self, post):
return post.title
def item_description(self, post):
return post.description
def item_author_name(self, post):
return post.author.name
def item_author_email(self, post):
if post.author.public:
return post.author.email
def item_categories(self, post):
return post.categories.all()
def item_pubdate(self, post):
return post.published_date
def item_updateddate(self, post):
return post.updated_date
def item_extra_kwargs(self, post):
return {
'thumbnail_url': add_domain(
domain=self.current_site.domain,
url=post.image.full.url,
secure=True),
'thumbnail_width': post.image.full.width,
'thumbnail_height': post.image.full.height,
}
class BlogCategoryFeed(BlogFeed):
def get_object(self, request, category):
return Category.objects.filter(slug=category).first()
def items(self, category):
return Post.objects.select_related('author').filter(
active=True,
members_only=False,
categories=category,
published_date__lte=timezone.now())[:20]
def title(self, category):
return "Maidstone Hackspace Blog: %s" % category.name
def description(self, category):
return category.description