From eac7ee92116a47db3c3b721caf72e4176a581b02 Mon Sep 17 00:00:00 2001 From: Oliver Marks Date: Thu, 1 Jun 2017 20:30:40 +0100 Subject: [PATCH] Initial version of home page rss.xml feed --- config/urls.py | 5 +- .../management/commands/generate_test_data.py | 17 ++-- mhackspace/blog/feeds.py | 78 ++++++++++++++++++- 3 files changed, 92 insertions(+), 8 deletions(-) diff --git a/config/urls.py b/config/urls.py index 7fa9b03..e03462a 100644 --- a/config/urls.py +++ b/config/urls.py @@ -15,7 +15,7 @@ from mhackspace.contact.views import contact from mhackspace.members.views import MemberListView from mhackspace.subscriptions import views as subscription from mhackspace.base.feeds import LatestEntriesFeed -from mhackspace.blog.feeds import BlogFeed, BlogCategoryFeed +from mhackspace.blog.feeds import RssFeed, BlogFeed, BlogCategoryFeed from mhackspace.base.views import markdown_uploader from mhackspace.blog.views import PostViewSet, CategoryViewSet, BlogPost, PostList from mhackspace.blog.sitemaps import PostSitemap, CategorySitemap @@ -48,7 +48,8 @@ urlpatterns = [ ), url(r'^blog/$', PostList.as_view(), name='blog'), url(r'^blog/rss/$', BlogFeed(), name='blog-rss'), - url(r'^blog/(?P[0-9A-Za-z_\-]+)/$', BlogPost.as_view(), name='blog-item'), + url(r'^rss.xml$', RssFeed(), name='main-rss'), + url(r'^blog/(?P[0-9A-Za-z_\-]+)/$', BlogPost.as_view, name='blog-item'), url(r'^blog/category/(?P[0-9A-Za-z_\-]+)/$', PostList.as_view(), name='blog-category'), url(r'^blog/category/(?P[0-9A-Za-z_\-]+)/rss/$', BlogCategoryFeed(), name='blog-category-feed'), url(r'^sitemap\.xml$', sitemap, {'sitemaps': sitemaps}, diff --git a/mhackspace/base/management/commands/generate_test_data.py b/mhackspace/base/management/commands/generate_test_data.py index b634e7c..6a531b9 100644 --- a/mhackspace/base/management/commands/generate_test_data.py +++ b/mhackspace/base/management/commands/generate_test_data.py @@ -5,6 +5,7 @@ from django.core.management import call_command from mhackspace.base.models import BannerImage from mhackspace.feeds.models import Article, Feed from mhackspace.users.models import User +from mhackspace.blog.models import Category, Post class ImageFixture(AutoFixture): class Values: @@ -14,6 +15,17 @@ class Command(BaseCommand): help = 'Build test data for development environment' def handle(self, *args, **options): + feeds = AutoFixture(Article) + feeds.create(10) + feed = AutoFixture(Feed) + feed.create(10) + + post = AutoFixture(Post) + post.create(10) + + categorys = AutoFixture(Category) + categorys.create(10) + # load known data call_command('loaddata', 'mhackspace/users/fixtures/groups.json', verbose=0) @@ -21,11 +33,6 @@ class Command(BaseCommand): users = AutoFixture(User) users.create(10) - feed = AutoFixture(Feed) - feed.create(10) - - feeds = AutoFixture(Article) - feeds.create(10) banners = ImageFixture(BannerImage) banners.create(10) diff --git a/mhackspace/blog/feeds.py b/mhackspace/blog/feeds.py index a1f71fa..ba6097f 100644 --- a/mhackspace/blog/feeds.py +++ b/mhackspace/blog/feeds.py @@ -1,13 +1,89 @@ +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 = "Maidstone Hackspace Blog" + title = "Mss.xmlaidstone Hackspace Blog" link = "/blog/" feed_type = MediaRssFeed description = "The latest blog posts and news from the Maidstone Hackspace site"