changeset 7981:f9b1c7d12beb

journal: refactor to reduce feed code duplication
author Mads Kiilerich <mads@kiilerich.com>
date Mon, 11 Nov 2019 00:20:43 +0100
parents 19e046dd9771
children 4b7909501c5c
files kallithea/controllers/journal.py
diffstat 1 files changed, 26 insertions(+), 52 deletions(-) [+]
line wrap: on
line diff
--- a/kallithea/controllers/journal.py	Mon Nov 11 00:27:49 2019 +0100
+++ b/kallithea/controllers/journal.py	Mon Nov 11 00:20:43 2019 +0100
@@ -104,21 +104,16 @@
 
         return journal
 
-    def _atom_feed(self, repos, public=True):
+    def _feed(self, repos, feed_factory, link, desc):
         journal = self._get_journal_data(repos)
-        if public:
-            _link = h.canonical_url('public_journal_atom')
-            _desc = '%s %s %s' % (c.site_name, _('Public Journal'),
-                                  'atom feed')
-        else:
-            _link = h.canonical_url('journal_atom')
-            _desc = '%s %s %s' % (c.site_name, _('Journal'), 'atom feed')
 
-        feed = Atom1Feed(title=_desc,
-                         link=_link,
-                         description=_desc,
-                         language=language,
-                         ttl=ttl)
+        feed = feed_factory(
+            title=desc,
+            link=link,
+            description=desc,
+            language=language,
+            ttl=ttl,
+        )
 
         for entry in journal[:feed_nr]:
             user = entry.user
@@ -130,7 +125,6 @@
             action, action_extra, ico = h.action_parser(entry, feed=True)
             title = "%s - %s %s" % (user.short_contact, action(),
                                     entry.repository.repo_name)
-            desc = action_extra()
             _url = None
             if entry.repository is not None:
                 _url = h.canonical_url('changelog_home',
@@ -141,52 +135,32 @@
                           link=_url or h.canonical_url(''),
                           author_email=user.email,
                           author_name=user.full_contact,
-                          description=desc)
+                          description=action_extra())
 
         response.content_type = feed.mime_type
         return feed.writeString('utf-8')
 
-    def _rss_feed(self, repos, public=True):
-        journal = self._get_journal_data(repos)
+    def _atom_feed(self, repos, public=True):
         if public:
-            _link = h.canonical_url('public_journal_atom')
-            _desc = '%s %s %s' % (c.site_name, _('Public Journal'),
+            link = h.canonical_url('public_journal_atom')
+            desc = '%s %s %s' % (c.site_name, _('Public Journal'),
+                                  'atom feed')
+        else:
+            link = h.canonical_url('journal_atom')
+            desc = '%s %s %s' % (c.site_name, _('Journal'), 'atom feed')
+
+        return self._feed(repos, Atom1Feed, link, desc)
+
+    def _rss_feed(self, repos, public=True):
+        if public:
+            link = h.canonical_url('public_journal_atom')
+            desc = '%s %s %s' % (c.site_name, _('Public Journal'),
                                   'rss feed')
         else:
-            _link = h.canonical_url('journal_atom')
-            _desc = '%s %s %s' % (c.site_name, _('Journal'), 'rss feed')
-
-        feed = Rss201rev2Feed(title=_desc,
-                         link=_link,
-                         description=_desc,
-                         language=language,
-                         ttl=ttl)
+            link = h.canonical_url('journal_atom')
+            desc = '%s %s %s' % (c.site_name, _('Journal'), 'rss feed')
 
-        for entry in journal[:feed_nr]:
-            user = entry.user
-            if user is None:
-                # fix deleted users
-                user = AttributeDict({'short_contact': entry.username,
-                                      'email': '',
-                                      'full_contact': ''})
-            action, action_extra, ico = h.action_parser(entry, feed=True)
-            title = "%s - %s %s" % (user.short_contact, action(),
-                                    entry.repository.repo_name)
-            desc = action_extra()
-            _url = None
-            if entry.repository is not None:
-                _url = h.canonical_url('changelog_home',
-                           repo_name=entry.repository.repo_name)
-
-            feed.add_item(title=title,
-                          pubdate=entry.action_date,
-                          link=_url or h.canonical_url(''),
-                          author_email=user.email,
-                          author_name=user.full_contact,
-                          description=desc)
-
-        response.content_type = feed.mime_type
-        return feed.writeString('utf-8')
+        return self._feed(repos, Rss201rev2Feed, link, desc)
 
     @LoginRequired()
     def index(self):