view pylons_app/controllers/feed.py @ 245:a83a1799480c

Reimplemented way of caching repos list, hg model now get's repos objects right from cached dict, this way we skipp creating instances of MercurialRepository and gain performance. Some import cleanup
author Marcin Kuzminski <marcin@python-works.com>
date Thu, 03 Jun 2010 00:04:48 +0200
parents 8bdec09436cb
children 3782a6d698af
line wrap: on
line source

#!/usr/bin/python
# -*- coding: utf-8 -*-
from pylons import tmpl_context as c, url, response
from pylons_app.lib.base import BaseController, render
from pylons_app.model.hg_model import _full_changelog_cached
from webhelpers.feedgenerator import Atom1Feed, Rss201rev2Feed
import logging
log = logging.getLogger(__name__)

class FeedController(BaseController):
    
    #secure it or not ?
    def __before__(self):
        super(FeedController, self).__before__()
        #common values for feeds
        self.description = 'Changes on %s repository'
        self.title = "%s feed"
        self.language = 'en-us'
        self.ttl = "5"
        self.feed_nr = 10

    def atom(self, repo_name):
        """Produce an atom-1.0 feed via feedgenerator module"""
        feed = Atom1Feed(title=self.title % repo_name,
                         link=url('summary_home', repo_name=repo_name, qualified=True),
                         description=self.description % repo_name,
                         language=self.language,
                         ttl=self.ttl)
        
        
        for cnt, cs in enumerate(_full_changelog_cached(repo_name)):
            if cnt > self.feed_nr:
                break
            feed.add_item(title=cs.message,
                          link=url('changeset_home', repo_name=repo_name,
                                   revision=cs.raw_id, qualified=True),
                                   description=str(cs.date))
        
        response.content_type = feed.mime_type
        return feed.writeString('utf-8')

    
    def rss(self, repo_name):
        """Produce an rss2 feed via feedgenerator module"""
        feed = Rss201rev2Feed(title=self.title % repo_name,
                         link=url('summary_home', repo_name=repo_name, qualified=True),
                         description=self.description % repo_name,
                         language=self.language,
                         ttl=self.ttl)
        
        for cnt, cs in enumerate(_full_changelog_cached(repo_name)):
            if cnt > self.feed_nr:
                break
            feed.add_item(title=cs.message,
                          link=url('changeset_home', repo_name=repo_name, revision=cs.raw_id, qualified=True),
                          description=str(cs.date))
            
        response.content_type = feed.mime_type
        return feed.writeString('utf-8')