aboutsummaryrefslogtreecommitdiffstats
path: root/mediagoblin/user_pages/views.py
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/user_pages/views.py
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/user_pages/views.py')
-rw-r--r--mediagoblin/user_pages/views.py56
1 files changed, 27 insertions, 29 deletions
diff --git a/mediagoblin/user_pages/views.py b/mediagoblin/user_pages/views.py
index 2993c6e6..f50d52f1 100644
--- a/mediagoblin/user_pages/views.py
+++ b/mediagoblin/user_pages/views.py
@@ -29,6 +29,7 @@ from mediagoblin.tools.text import cleaned_markdown_conversion
from mediagoblin.tools.translate import pass_to_ugettext as _
from mediagoblin.tools.pagination import Pagination
from mediagoblin.tools.federation import create_activity
+from mediagoblin.tools.feeds import AtomFeedWithLinks
from mediagoblin.user_pages import forms as user_forms
from mediagoblin.user_pages.lib import (send_comment_email,
add_media_to_collection, build_report_object)
@@ -42,7 +43,6 @@ from mediagoblin.decorators import (uses_pagination, get_user_media_entry,
get_user_collection, get_user_collection_item, active_user_from_url,
get_optional_media_comment_by_id, allow_reporting)
-from werkzeug.contrib.atom import AtomFeed
from werkzeug.exceptions import MethodNotAllowed
from werkzeug.wrappers import Response
@@ -541,7 +541,7 @@ def atom_feed(request):
generates the atom feed with the newest images
"""
user = LocalUser.query.filter_by(
- username = request.matchdict['user']).first()
+ username=request.matchdict['user']).first()
if not user or not user.has_privilege('active'):
return render_404(request)
feed_title = "MediaGoblin Feed for user '%s'" % request.matchdict['user']
@@ -551,29 +551,27 @@ def atom_feed(request):
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_url=request.url,
+ feed = AtomFeedWithLinks(
+ title=feed_title,
+ link=link,
+ description='',
id='tag:{host},{year}:gallery.user-{user}'.format(
host=request.host,
year=datetime.datetime.today().strftime('%Y'),
user=request.matchdict['user']),
- links=atomlinks)
+ feed_url=request.url,
+ links=atomlinks,
+ )
for entry in cursor:
# Include a thumbnail image in content.
@@ -584,26 +582,26 @@ def atom_feed(request):
else:
content = entry.description_html
- feed.add(
- entry.get('title'),
- content,
- id=entry.url_for_self(request.urlgen, qualified=True),
- content_type='html',
- author={
- 'name': entry.get_actor.username,
- 'uri': request.urlgen(
- 'mediagoblin.user_pages.user_home',
- qualified=True,
- user=entry.get_actor.username)},
- updated=entry.get('created'),
- links=[{
- 'href': entry.url_for_self(
+ feed.add_item(
+ title=entry.get('title'),
+ link=entry.url_for_self(
request.urlgen,
qualified=True),
- 'rel': 'alternate',
- 'type': 'text/html'}])
+ 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),
+ updateddate=entry.get('created'),
+ )
- return feed.get_response()
+ response = Response(
+ feed.writeString(encoding='utf-8'),
+ mimetype='application/atom+xml'
+ )
+ return response
def collection_atom_feed(request):