From 93d345021364264ebaee440a5269b9767f90ae51 Mon Sep 17 00:00:00 2001 From: Magnus Hagander Date: Thu, 10 Jun 2010 20:43:54 +0200 Subject: [PATCH] Add app to store and view the PostgreSQL Weekly News, including generation of the RSS feed. (Which will receive a new URL now that it lives in the actual app and not in with the static files, so a redirect will be needed there). --- pgweb/pwn/__init__.py | 0 pgweb/pwn/admin.py | 4 ++++ pgweb/pwn/feeds.py | 22 ++++++++++++++++++++++ pgweb/pwn/models.py | 24 ++++++++++++++++++++++++ pgweb/pwn/views.py | 23 +++++++++++++++++++++++ pgweb/settings.py | 1 + pgweb/urls.py | 6 +++++- templates/pwn/list.html | 22 ++++++++++++++++++++++ templates/pwn/rss_description.html | 2 ++ templates/pwn/rss_title.html | 1 + templates/pwn/view.html | 11 +++++++++++ 11 files changed, 115 insertions(+), 1 deletion(-) create mode 100644 pgweb/pwn/__init__.py create mode 100644 pgweb/pwn/admin.py create mode 100644 pgweb/pwn/feeds.py create mode 100644 pgweb/pwn/models.py create mode 100644 pgweb/pwn/views.py create mode 100644 templates/pwn/list.html create mode 100644 templates/pwn/rss_description.html create mode 100644 templates/pwn/rss_title.html create mode 100644 templates/pwn/view.html diff --git a/pgweb/pwn/__init__.py b/pgweb/pwn/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/pgweb/pwn/admin.py b/pgweb/pwn/admin.py new file mode 100644 index 00000000..08434cf6 --- /dev/null +++ b/pgweb/pwn/admin.py @@ -0,0 +1,4 @@ +from util.admin import register_markdown +from models import * + +register_markdown(PwnPost) diff --git a/pgweb/pwn/feeds.py b/pgweb/pwn/feeds.py new file mode 100644 index 00000000..d8e6eee2 --- /dev/null +++ b/pgweb/pwn/feeds.py @@ -0,0 +1,22 @@ +from django.contrib.syndication.feeds import Feed + +from models import PwnPost + +from datetime import datetime, time + +class PwnFeed(Feed): + title = description = "PostgreSQL Weekly News" + link = "http://www.postgresql.org/community/weeklynews/" + + description_template = 'pwn/rss_description.html' + title_template = 'pwn/rss_title.html' + + def items(self): + return PwnPost.objects.all()[:5] + + def item_link(self, obj): + return "http://www.postgresql.org/community/weeklynews/pwn%s/" % obj.linkdate + + def item_pubdate(self, obj): + return datetime.combine(obj.date,time.min) + diff --git a/pgweb/pwn/models.py b/pgweb/pwn/models.py new file mode 100644 index 00000000..1d06d90b --- /dev/null +++ b/pgweb/pwn/models.py @@ -0,0 +1,24 @@ +from django.db import models + +from datetime import date + +class PwnPost(models.Model): + date = models.DateField(null=False, blank=False, default=date.today, unique=True) + intro = models.TextField(null=False, blank=False) + content = models.TextField(null=False, blank=False) + + markdown_fields = ('intro', 'content',) + + def __unicode__(self): + return "PostgreSQL Weekly News %s" % self.date + + @property + def linkdate(self): + return self.date.strftime("%Y%m%d") + + @property + def nicedate(self): + return self.date.strftime("%B %d, %Y") + + class Meta: + ordering = ('-date',) diff --git a/pgweb/pwn/views.py b/pgweb/pwn/views.py new file mode 100644 index 00000000..4dc69265 --- /dev/null +++ b/pgweb/pwn/views.py @@ -0,0 +1,23 @@ +from django.shortcuts import render_to_response, get_object_or_404 +from django.http import HttpResponse, Http404, HttpResponseRedirect + +from pgweb.util.contexts import NavContext + +from datetime import date + +from models import * + +def index(request): + posts = PwnPost.objects.all() + + return render_to_response('pwn/list.html', { + 'posts': posts, + }, NavContext(request, 'community')) + +def post(request, year, month, day): + d = date(int(year), int(month), int(day)) + post = get_object_or_404(PwnPost, date=d) + + return render_to_response('pwn/view.html', { + 'post': post, + }, NavContext(request, 'community')) diff --git a/pgweb/settings.py b/pgweb/settings.py index 6dff9edc..a34b64cc 100644 --- a/pgweb/settings.py +++ b/pgweb/settings.py @@ -105,6 +105,7 @@ INSTALLED_APPS = [ 'pgweb.survey', 'pgweb.misc', 'pgweb.featurematrix', + 'pgweb.pwn', ] diff --git a/pgweb/urls.py b/pgweb/urls.py index 18b47537..f3b6ff8c 100644 --- a/pgweb/urls.py +++ b/pgweb/urls.py @@ -13,10 +13,12 @@ admin.autodiscover() from core.feeds import VersionFeed from news.feeds import NewsFeed from events.feeds import EventFeed +from pwn.feeds import PwnFeed feeds = { 'versions': VersionFeed, 'news': NewsFeed, 'events': EventFeed, + 'weeklynews': PwnFeed, } urlpatterns = patterns('', @@ -48,6 +50,8 @@ urlpatterns = patterns('', (r'^community/lists/subscribe/$', 'lists.views.subscribe'), (r'^community/survey/vote/(\d+)/$', 'survey.views.vote'), (r'^community/survey[/\.](\d+)(-.*)?/$', 'survey.views.results'), + (r'^community/weeklynews/$', 'pwn.views.index'), + (r'^community/weeklynews/pwn(\d{4})(\d{2})(\d{2})/$', 'pwn.views.post'), (r'^support/professional_(support|hosting)/$', 'profserv.views.root'), (r'^support/professional_(support|hosting)[/_](.*)/$', 'profserv.views.region'), @@ -59,7 +63,7 @@ urlpatterns = patterns('', ### # RSS feeds ### - (r'^(versions|news|events).rss$', 'django.contrib.syndication.views.feed', {'feed_dict':feeds}), + (r'^(versions|news|events|weeklynews).rss$', 'django.contrib.syndication.views.feed', {'feed_dict':feeds}), ### # Special secttions diff --git a/templates/pwn/list.html b/templates/pwn/list.html new file mode 100644 index 00000000..f93e2ce4 --- /dev/null +++ b/templates/pwn/list.html @@ -0,0 +1,22 @@ +{%extends "base/page.html"%} +{%block title%}Weekly News{%endblock%} +{%block contents%} +

Weekly News

+

+The PostgreSQL Weekly News is a community newsletter, summarising the news and events +of the past week, focussing primarily on the development of PostgreSQL. +

+

+To receive the Weekly News in your inbox, please subscribe to the +pgsql-announce@postgresql.org +mailing list. +

+ + + +{%endblock%} + diff --git a/templates/pwn/rss_description.html b/templates/pwn/rss_description.html new file mode 100644 index 00000000..5deb7f90 --- /dev/null +++ b/templates/pwn/rss_description.html @@ -0,0 +1,2 @@ +{%load markup%} +{{obj.intro|markdown}} diff --git a/templates/pwn/rss_title.html b/templates/pwn/rss_title.html new file mode 100644 index 00000000..78fe2ca1 --- /dev/null +++ b/templates/pwn/rss_title.html @@ -0,0 +1 @@ +PostgreSQL Weekly News - {{obj.date}} diff --git a/templates/pwn/view.html b/templates/pwn/view.html new file mode 100644 index 00000000..8fad373d --- /dev/null +++ b/templates/pwn/view.html @@ -0,0 +1,11 @@ +{%extends "base/page.html"%} +{%load markup%} +{%block title%}PostgreSQL Weekly News - {{post.nicedate}}{%endblock%} +{%block contents%} +

PostgreSQL Weekly News - {{post.nicedate}}

+

+{{post.intro|markdown}} +

+{{post.content|markdown}} +{%endblock%} +