Zine

open source content publishing system


Changeset 1374:9dd8173575da


Ignore:
Timestamp:
05/16/10 21:51:10 (2 years ago)
Author:
Mike Crute <mcrute@…>
Branch:
default
Message:

MBH Ticket 7 and MBH Ticket 8: Adding support for RSS and Wordpress style Urls

Location:
zine
Files:
1 added
3 edited

Legend:

Unmodified
Added
Removed
  • zine/urls.py

    r1279 r1374  
    1717        Rule('/', defaults={'page': 1}, endpoint='blog/index'), 
    1818        Rule('/feed.atom', endpoint='blog/atom_feed'), 
     19        Submount('/feed', [ 
     20            Rule('/', endpoint='blog/rss_feed'), 
     21            Rule('/rss', endpoint='blog/rss_feed'), 
     22            Rule('/rss2', endpoint='blog/rss_feed'), 
     23            Rule('/atom', endpoint='blog/atom_feed'), 
     24        ]), 
    1925        Rule('/page/<int:page>', endpoint='blog/index'), 
    2026        Rule('/archive', endpoint='blog/archive'), 
     
    2430            Rule('/<string:username>/page/<int:page>', endpoint='blog/show_author'), 
    2531            Rule('/<string:author>/feed.atom', endpoint='blog/atom_feed'), 
     32            Submount('/<string:author>/feed', [ 
     33                Rule('/', endpoint='blog/rss_feed'), 
     34                Rule('/rss', endpoint='blog/rss_feed'), 
     35                Rule('/rss2', endpoint='blog/rss_feed'), 
     36                Rule('/atom', endpoint='blog/atom_feed'), 
     37            ]), 
    2638        ]), 
    2739        Submount(app.cfg['category_url_prefix'], [ 
    2840            Rule('/<string:slug>', defaults={'page': 1}, endpoint='blog/show_category'), 
    2941            Rule('/<string:slug>/page/<int:page>', endpoint='blog/show_category'), 
    30             Rule('/<string:category>/feed.atom', endpoint='blog/atom_feed') 
     42            Rule('/<string:category>/feed.atom', endpoint='blog/atom_feed'), 
     43            Submount('/<string:category>/feed', [ 
     44                Rule('/', endpoint='blog/rss_feed'), 
     45                Rule('/rss', endpoint='blog/rss_feed'), 
     46                Rule('/rss2', endpoint='blog/rss_feed'), 
     47                Rule('/atom', endpoint='blog/atom_feed'), 
     48            ]), 
    3149        ]), 
    3250        Submount(app.cfg['tags_url_prefix'], [ 
     
    3452            Rule('/<string:slug>', defaults={'page': 1}, endpoint='blog/show_tag'), 
    3553            Rule('/<string:slug>/page/<int:page>', endpoint='blog/show_tag'), 
    36             Rule('/<string:tag>/feed.atom', endpoint='blog/atom_feed') 
     54            Rule('/<string:tag>/feed.atom', endpoint='blog/atom_feed'), 
     55            Submount('/<string:tag>/feed', [ 
     56                Rule('/', endpoint='blog/rss_feed'), 
     57                Rule('/rss', endpoint='blog/rss_feed'), 
     58                Rule('/rss2', endpoint='blog/rss_feed'), 
     59                Rule('/atom', endpoint='blog/atom_feed'), 
     60            ]), 
    3761        ]), 
    3862        Submount(app.cfg['account_url_prefix'], [ 
  • zine/views/__init__.py

    r1279 r1374  
    2929    'blog/xml_service':         blog.xml_service, 
    3030    'blog/atom_feed':           blog.atom_feed, 
     31    'blog/rss_feed':            blog.rss_feed, 
    3132    'blog/serve_translations':  i18n.serve_javascript, 
    3233 
  • zine/views/blog.py

    r1302 r1374  
    1919from zine.utils import dump_json, log 
    2020from zine.utils.text import build_tag_uri 
    21 from zine.utils.xml import generate_rsd, dump_xml, AtomFeed 
     21from zine.utils.xml import generate_rsd, dump_xml 
    2222from zine.utils.http import redirect_to, redirect 
    2323from zine.utils.redirects import lookup_redirect 
    2424from zine.forms import NewCommentForm 
     25from zine.feeds import Rss201rev2Feed as RssFeed, Atom1Feed 
    2526from werkzeug.exceptions import NotFound, Forbidden 
    2627 
     
    336337def atom_feed(req, author=None, year=None, month=None, day=None, 
    337338              category=None, tag=None, post=None): 
     339    feed = Atom1Feed(req.app.cfg['blog_title'], req.app.cfg['blog_url'], 
     340                    "", # Description not supported 
     341                    subtitle=req.app.cfg['blog_tagline'], feed_url=req.url) 
     342 
     343    results = populate_feed(req, feed, author, year, month, day, category, 
     344                         tag, post) 
     345 
     346    return Response(results, mimetype="application/atom+xml") 
     347 
     348 
     349@cache.response(vary=('user',)) 
     350def rss_feed(req, author=None, year=None, month=None, day=None, 
     351              category=None, tag=None, post=None): 
     352    feed = RssFeed(req.app.cfg['blog_title'], req.app.cfg['blog_url'], 
     353                    "", # Description not supported 
     354                    subtitle=req.app.cfg['blog_tagline'], feed_url=req.url) 
     355 
     356    results = populate_feed(req, feed, author, year, month, day, category, 
     357                         tag, post) 
     358 
     359    return Response(results, mimetype="application/rss+xml") 
     360 
     361 
     362def populate_feed(req, feed, author=None, year=None, month=None, day=None, 
     363              category=None, tag=None, post=None): 
    338364    """Renders an atom feed requested. 
    339365 
    340366    :URL endpoint: ``blog/atom_feed`` 
    341367    """ 
    342     feed = AtomFeed(req.app.cfg['blog_title'], feed_url=req.url, 
    343                     url=req.app.cfg['blog_url'], 
    344                     subtitle=req.app.cfg['blog_tagline']) 
    345  
    346368    # the feed only contains published items 
    347369    query = Post.query.lightweight(lazy=('comments',)).published() 
     
    372394        for post in query.for_index().order_by(Post.pub_date.desc()) \ 
    373395                         .limit(15).all(): 
    374             links = [link.as_dict() for link in post.links] 
    375             feed.add(post.title or '%s @ %s' % (post.author.display_name, 
    376                      post.pub_date), unicode(post.body), content_type='html', 
    377                      author=post.author.display_name, links=links, 
    378                      url=url_for(post, _external=True), id=post.uid, 
    379                      updated=post.last_update, published=post.pub_date) 
     396            alt_title = '%s @ %s' % (post.author.display_name, post.pub_date) 
     397            feed.add_item(post.title or alt_title, 
     398                          url_for(post, _external=True), unicode(post.body), 
     399                          author_name=post.author.display_name, 
     400                          pubdate=post.pub_date, unique_id=post.uid) 
    380401 
    381402    # otherwise we create a feed for all the comments of a post. 
     
    395416            if comment.www: 
    396417                author['uri'] = comment.www 
    397             feed.add(title, unicode(comment.body), content_type='html', 
    398                      author=author, url=url_for(comment, _external=True), 
    399                      id=uid, updated=comment.pub_date) 
     418            feed.add_item(title, url_for(comment, _external=True), 
     419                          unicode(comment.body), author_name=author, 
     420                          pubdate=comment.pub_date, unique_id=uid) 
    400421            comment_num += 1 
    401422 
    402     return feed.get_response() 
     423    return feed.writeString('utf-8') 
    403424 
    404425 
Note: See TracChangeset for help on using the changeset viewer.