aboutsummaryrefslogtreecommitdiffstats
path: root/mediagoblin/listings
diff options
context:
space:
mode:
authorBen Sturmfels <ben@sturm.com.au>2021-03-15 23:24:44 +1100
committerBen Sturmfels <ben@sturm.com.au>2021-03-16 12:17:57 +1100
commit2d941d21e131a4cd228b436706ded084d537b9c8 (patch)
tree2f0a9ea4dd33727ce4f9cc889baafe14ef3c0a34 /mediagoblin/listings
parent6d3d8667aec55fa18e6c2c92224ec02a42f3521d (diff)
downloadmediagoblin-2d941d21e131a4cd228b436706ded084d537b9c8.tar.lz
mediagoblin-2d941d21e131a4cd228b436706ded084d537b9c8.tar.xz
mediagoblin-2d941d21e131a4cd228b436706ded084d537b9c8.zip
Convert atom feeds to use feedgenerator library.
Issue is that Werkzeug > 1.0.0 has removed werkzeug.contrib.atom.AtomFeed, making it difficult to use a distribution-packaged version of werkzeug. To solve this, I've replaced use of werkzeug.contrib.atom.AtomFeed with feedgenerator.Atom1Feed. After the change, the only major difference between the feeds before and after is that they use <summary> instead of <content>. Minor differences include no longer adding 'type="text/html"' on some <link> elements and no "xml:base" attribute on <entry> elements. I don't think these differences will have any noticable effect. Tested on Liferea feed reader.
Diffstat (limited to 'mediagoblin/listings')
-rw-r--r--mediagoblin/listings/views.py60
1 files changed, 29 insertions, 31 deletions
diff --git a/mediagoblin/listings/views.py b/mediagoblin/listings/views.py
index 11d480d3..8e55d7d0 100644
--- a/mediagoblin/listings/views.py
+++ b/mediagoblin/listings/views.py
@@ -19,11 +19,12 @@ from mediagoblin.db.models import MediaEntry
from mediagoblin.db.util import media_entries_for_tag_slug
from mediagoblin.decorators import uses_pagination
from mediagoblin.plugins.api.tools import get_media_file_paths
+from mediagoblin.tools.feeds import AtomFeedWithLinks
from mediagoblin.tools.pagination import Pagination
from mediagoblin.tools.response import render_to_response
from mediagoblin.tools.translate import pass_to_ugettext as _
-from werkzeug.contrib.atom import AtomFeed
+from werkzeug.wrappers import Response
def _get_tag_name_from_entries(media_entries, tag_slug):
@@ -76,35 +77,32 @@ def atom_feed(request):
if tag_slug:
feed_title += " for tag '%s'" % tag_slug
link = request.urlgen('mediagoblin.listings.tags_listing',
- qualified=True, tag=tag_slug )
+ qualified=True, tag=tag_slug)
cursor = media_entries_for_tag_slug(request.db, tag_slug)
- else: # all recent item feed
+ else: # all recent item feed
feed_title += " for all recent items"
link = request.urlgen('index', qualified=True)
cursor = MediaEntry.query.filter_by(state='processed')
cursor = cursor.order_by(MediaEntry.created.desc())
cursor = cursor.limit(ATOM_DEFAULT_NR_OF_UPDATED_ITEMS)
-
"""
ATOM feed id is a tag URI (see http://en.wikipedia.org/wiki/Tag_URI)
"""
- atomlinks = [{
- 'href': link,
- 'rel': 'alternate',
- 'type': 'text/html'}]
-
+ atomlinks = []
if mg_globals.app_config["push_urls"]:
for push_url in mg_globals.app_config["push_urls"]:
atomlinks.append({
'rel': 'hub',
'href': push_url})
- feed = AtomFeed(
- feed_title,
+ feed = AtomFeedWithLinks(
+ title=feed_title,
+ link=link,
+ description='',
feed_url=request.url,
- id=link,
- links=atomlinks)
+ links=atomlinks,
+ )
for entry in cursor:
# Include a thumbnail image in content.
@@ -115,25 +113,25 @@ def atom_feed(request):
else:
content = entry.description_html
- feed.add(
+ feed.add_item(
# AtomFeed requires a non-blank title. This situation can occur if
# you edit a media item and blank out the existing title.
- entry.get('title') or _('Untitled'),
- content,
- id=entry.url_for_self(request.urlgen, qualified=True),
- content_type='html',
- author={
- 'name': entry.get_actor.username,
- 'uri': request.urlgen(
+ title=entry.get('title') or _('Untitled'),
+ link=entry.url_for_self(
+ request.urlgen,
+ qualified=True),
+ description=content,
+ unique_id=entry.url_for_self(request.urlgen, qualified=True),
+ author_name=entry.get_actor.username,
+ author_link=request.urlgen(
'mediagoblin.user_pages.user_home',
qualified=True,
- user=entry.get_actor.username)},
- updated=entry.get('created'),
- links=[{
- 'href': entry.url_for_self(
- request.urlgen,
- qualified=True),
- 'rel': 'alternate',
- 'type': 'text/html'}])
-
- return feed.get_response()
+ user=entry.get_actor.username),
+ updateddate=entry.get('created'),
+ )
+
+ response = Response(
+ feed.writeString(encoding='utf-8'),
+ mimetype='application/atom+xml'
+ )
+ return response