aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mediagoblin/templates/mediagoblin/base.html2
-rw-r--r--mediagoblin/templates/mediagoblin/user_pages/user.html11
-rw-r--r--mediagoblin/user_pages/routing.py4
-rw-r--r--mediagoblin/user_pages/views.py34
4 files changed, 50 insertions, 1 deletions
diff --git a/mediagoblin/templates/mediagoblin/base.html b/mediagoblin/templates/mediagoblin/base.html
index 4b634cf1..c4bc1364 100644
--- a/mediagoblin/templates/mediagoblin/base.html
+++ b/mediagoblin/templates/mediagoblin/base.html
@@ -20,6 +20,8 @@
<title>{% block title %}MediaGoblin{% endblock title %}</title>
<link rel="stylesheet" type="text/css"
href="{{ request.staticdirect('/css/base.css') }}"/>
+ {% block mediagoblin_head %}
+ {% endblock mediagoblin_head %}
</head>
<body>
diff --git a/mediagoblin/templates/mediagoblin/user_pages/user.html b/mediagoblin/templates/mediagoblin/user_pages/user.html
index d1809e80..2d09f685 100644
--- a/mediagoblin/templates/mediagoblin/user_pages/user.html
+++ b/mediagoblin/templates/mediagoblin/user_pages/user.html
@@ -16,6 +16,14 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#}
{% extends "mediagoblin/base.html" %}
+
+{% block mediagoblin_head %}
+ <link rel="alternate" type="application/atom+xml"
+ href="{{ request.urlgen(
+ 'mediagoblin.user_pages.atom_feed',
+ user=user.username) }}">
+{% endblock mediagoblin_head %}
+
{% block mediagoblin_content -%}
{% if user %}
<h1>User page for '{{ user.username }}'</h1>
@@ -25,6 +33,9 @@
{% include "mediagoblin/utils/object_gallery.html" %}
</ul>
+ <a href={{ request.urlgen(
+ 'mediagoblin.user_pages.atom_feed',
+ user=user.username) }}> atom feed</a>
{% else %}
{# This *should* not occur as the view makes sure we pass in a user. #}
<p>Sorry, no such user found.<p/>
diff --git a/mediagoblin/user_pages/routing.py b/mediagoblin/user_pages/routing.py
index 8b535d13..96f97427 100644
--- a/mediagoblin/user_pages/routing.py
+++ b/mediagoblin/user_pages/routing.py
@@ -21,4 +21,6 @@ user_routes = [
controller="mediagoblin.user_pages.views:user_home"),
Route('mediagoblin.user_pages.media_home', '/{user}/m/{media}/',
requirements=dict(m_id="[0-9a-fA-F]{24}"),
- controller="mediagoblin.user_pages.views:media_home")]
+ controller="mediagoblin.user_pages.views:media_home"),
+ Route('mediagoblin.user_pages.atom_feed', '/{user}/atom/',
+ controller="mediagoblin.user_pages.views:atom_feed")]
diff --git a/mediagoblin/user_pages/views.py b/mediagoblin/user_pages/views.py
index 41bdb402..cc9c7b21 100644
--- a/mediagoblin/user_pages/views.py
+++ b/mediagoblin/user_pages/views.py
@@ -20,6 +20,7 @@ from mediagoblin.util import Pagination
from mediagoblin.decorators import uses_pagination, get_user_media_entry
+from werkzeug.contrib.atom import AtomFeed
@uses_pagination
def user_home(request, page):
@@ -61,3 +62,36 @@ def media_home(request, media):
template.render(
{'request': request,
'media': media}))
+
+ATOM_DEFAULT_NR_OF_UPDATED_ITEMS = 5
+
+def atom_feed(request):
+ """
+ generates the atom feed with the newest images
+ """
+
+ user = request.db.User.find_one({
+ 'username': request.matchdict['user'],
+ 'status': 'active'})
+ if not user:
+ return exc.HTTPNotFound()
+
+ cursor = request.db.MediaEntry.find({
+ 'uploader': user['_id'],
+ 'state': 'processed'}) \
+ .sort('created', DESCENDING) \
+ .limit(ATOM_DEFAULT_NR_OF_UPDATED_ITEMS)
+
+ feed = AtomFeed(request.matchdict['user'],
+ feed_url=request.url,
+ url=request.host_url)
+
+ for entry in cursor:
+ feed.add(entry.get('title'),
+ entry.get('description'),
+ content_type='html',
+ author=request.matchdict['user'],
+ updated=entry.get('created'),
+ url=entry.url_for_self(request.urlgen))
+
+ return feed.get_response()