Marcin Kuzminski avatar Marcin Kuzminski committed 8bdec09

bumped version to 0.7.1 added atom and rss feeds. Moved https Fixud middleware before error middleware to proper generate debug page (static imports)

Comments (0)

Files changed (3)

pylons_app/__init__.py

 Hg app, a web based mercurial repository managment based on pylons
 """
 
-VERSION = (0, 7, 0, 'beta')
+VERSION = (0, 7, 1, 'beta')
 
 __version__ = '.'.join((str(each) for each in VERSION[:4]))
 

pylons_app/config/middleware.py

     
     # CUSTOM MIDDLEWARE HERE (filtered by error handling middlewares)
     #set the https based on HTTP_X_URL_SCHEME
-    app = HttpsFixup(app)
+    
     app = SimpleHg(app, config)
     
     if asbool(full_stack):
         else:
             app = StatusCodeRedirect(app, [400, 401, 403, 404, 500])
     
+    app = HttpsFixup(app)
     # Establish the Registry for this application
     app = RegistryManager(app)
 

pylons_app/controllers/feed.py

 # -*- coding: utf-8 -*-
 import logging
 from operator import itemgetter
-from pylons import tmpl_context as c, request, config
-from pylons_app.lib.base import BaseController, render
+from pylons import tmpl_context as c, request, config, url, response
+from pylons_app.lib.base import BaseController, render, _full_changelog_cached
 from pylons_app.lib.utils import get_repo_slug
 from pylons_app.model.hg_model import HgModel
 from pylons_app.lib.auth import LoginRequired
+from webhelpers.feedgenerator import Atom1Feed, Rss201rev2Feed
 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)
         
-    def atom(self):
-        return 'Hello Atom'
+        
+        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):
-        return 'Hello rss'
+    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')
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.