Files
i2p.www/i2p2www/blog/views.py
2015-09-09 01:19:14 +00:00

74 lines
2.7 KiB
Python

from flask import abort, g, redirect, render_template, request, url_for
from werkzeug.contrib.atom import AtomFeed
from i2p2www import BLOG_DIR, BLOG_POSTS_PER_FEED, BLOG_POSTS_PER_PAGE, cache
from i2p2www.blog.helpers import get_blog_posts, get_blog_feed_items, get_date_from_slug, get_metadata_from_meta, render_blog_post
from i2p2www.blog.shortlinks import BLOG_SHORTLINKS
from i2p2www.helpers import Pagination, get_for_page
############
# Blog views
@cache.memoize(600)
def blog_index(page, category=None):
all_posts = get_blog_posts(category=category)
posts = get_for_page(all_posts, page, BLOG_POSTS_PER_PAGE)
if not posts and page != 1:
abort(404)
pagination = Pagination(page, BLOG_POSTS_PER_PAGE, len(all_posts))
if category:
return render_template('blog/category.html', pagination=pagination, posts=posts, category=category)
else:
return render_template('blog/index.html', pagination=pagination, posts=posts)
@cache.memoize(600)
def blog_post(slug):
# try to render that blog post.. throws 404 if it does not exist
parts = render_blog_post(slug)
if parts:
meta = get_metadata_from_meta(parts['meta'])
meta['date'] = meta['date'] if meta['date'] else get_date_from_slug(slug)
# add notification to any error messages
parts['fragment'] = parts['fragment'].replace('Docutils System Messages', 'There are errors in this translation. Please comment on <a href="https://trac.i2p2.de/ticket/1396">this ticket</a> with the URL of this page.')
# remove BLOG_DIR from any error messages
parts['fragment'] = parts['fragment'].replace(BLOG_DIR, 'Blog')
# now just pass to simple template file and we are done
return render_template('blog/post.html', parts=parts, title=parts['title'], body=parts['fragment'], slug=slug, meta=meta)
else:
abort(404)
@cache.memoize(600)
def blog_post_shortlink(shortlink):
lang = 'en'
if hasattr(g, 'lang') and g.lang:
lang = g.lang
try:
slug = BLOG_SHORTLINKS[shortlink]
except KeyError:
abort(404)
return redirect(url_for('blog_post', lang=lang, slug=slug))
def blog_rss():
# TODO: implement
pass
@cache.cached(600)
def blog_atom(category=None):
feed_title = 'I2P Blog'
if category:
feed_title = 'I2P Blog Category: %s' % category
feed = AtomFeed(feed_title, feed_url=request.url, url=request.url_root)
items = get_blog_feed_items(BLOG_POSTS_PER_FEED, category=category)
for item in items:
feed.add(item['title'],
item['content'],
author=item['author'],
content_type='html',
url=item['url'],
updated=item['updated'])
return feed.get_response()