changeset 7980:19e046dd9771

feed: refactor to reduce code duplication
author Mads Kiilerich <mads@kiilerich.com>
date Mon, 11 Nov 2019 00:27:49 +0100
parents feb90eac2e79
children f9b1c7d12beb
files kallithea/controllers/feed.py
diffstat 1 files changed, 9 insertions(+), 31 deletions(-) [+]
line wrap: on
line diff
--- a/kallithea/controllers/feed.py	Thu Nov 07 23:53:35 2019 +0100
+++ b/kallithea/controllers/feed.py	Mon Nov 11 00:27:49 2019 +0100
@@ -102,17 +102,17 @@
         desc_msg.append('</pre>')
         return map(safe_unicode, desc_msg)
 
-    def atom(self, repo_name):
-        """Produce an atom-1.0 feed via feedgenerator module"""
+    def _feed(self, repo_name, kind, feed_factory):
+        """Produce a simple feed"""
 
         @cache_region('long_term', '_get_feed_from_cache')
         def _get_feed_from_cache(*_cache_keys):  # parameters are not really used - only as caching key
-            feed = Atom1Feed(
+            feed = feed_factory(
                 title=_('%s %s feed') % (c.site_name, repo_name),
                 link=h.canonical_url('summary_home', repo_name=repo_name),
                 description=_('Changes on %s repository') % repo_name,
                 language=language,
-                ttl=ttl
+                ttl=ttl,  # rss only
             )
 
             rss_items_per_page = safe_int(CONFIG.get('rss_items_per_page', 20))
@@ -128,34 +128,12 @@
             response.content_type = feed.mime_type
             return feed.writeString('utf-8')
 
-        kind = 'ATOM'
         return _get_feed_from_cache(repo_name, kind, c.db_repo.changeset_cache.get('raw_id'))
 
+    def atom(self, repo_name):
+        """Produce a simple atom-1.0 feed"""
+        return self._feed(repo_name, 'ATOM', Atom1Feed)
+
     def rss(self, repo_name):
         """Produce an rss2 feed via feedgenerator module"""
-
-        @cache_region('long_term', '_get_feed_from_cache')
-        def _get_feed_from_cache(*_cache_keys):  # parameters are not really used - only as caching key
-            feed = Rss201rev2Feed(
-                title=_('%s %s feed') % (c.site_name, repo_name),
-                link=h.canonical_url('summary_home', repo_name=repo_name),
-                description=_('Changes on %s repository') % repo_name,
-                language=language,
-                ttl=ttl
-            )
-
-            rss_items_per_page = safe_int(CONFIG.get('rss_items_per_page', 20))
-            for cs in reversed(list(c.db_repo_scm_instance[-rss_items_per_page:])):
-                feed.add_item(title=self._get_title(cs),
-                              link=h.canonical_url('changeset_home', repo_name=repo_name,
-                                       revision=cs.raw_id),
-                              author_name=cs.author,
-                              description=''.join(self.__get_desc(cs)),
-                              pubdate=cs.date,
-                             )
-
-            response.content_type = feed.mime_type
-            return feed.writeString('utf-8')
-
-        kind = 'RSS'
-        return _get_feed_from_cache(repo_name, kind, c.db_repo.changeset_cache.get('raw_id'))
+        return self._feed(repo_name, 'RSS', Rss201rev2Feed)