Added tags atom feed and linked it in the appropriate places
This commit is contained in:
parent
a5303e4791
commit
1a89706872
@ -21,5 +21,8 @@ tag_routes = [
|
||||
# Route('mediagoblin.listings.tags_home', "/",
|
||||
# controller="mediagoblin.listings.views:tags_home"),
|
||||
Route('mediagoblin.listings.tags_listing', "/{tag}/",
|
||||
controller="mediagoblin.listings.views:tag_listing")]
|
||||
controller="mediagoblin.listings.views:tag_listing"),
|
||||
Route('mediagoblin.listings.tag_atom_feed', "/{tag}/atom/",
|
||||
controller="mediagoblin.listings.views:tag_atom_feed"),
|
||||
]
|
||||
|
||||
|
@ -19,6 +19,23 @@ from mediagoblin.db.util import DESCENDING
|
||||
from mediagoblin.util import Pagination, render_to_response
|
||||
from mediagoblin.decorators import uses_pagination
|
||||
|
||||
from werkzeug.contrib.atom import AtomFeed
|
||||
|
||||
|
||||
def _get_tag_name_from_entries(media_entries, tag_slug):
|
||||
"""
|
||||
Get a tag name from the first entry by looking it up via its slug.
|
||||
"""
|
||||
# ... this is slightly hacky looking :\
|
||||
tag_name = tag_slug
|
||||
if media_entries.count():
|
||||
for tag in media_entries[0]['tags']:
|
||||
if tag['slug'] == tag_slug:
|
||||
tag_name == tag['name']
|
||||
break
|
||||
|
||||
return tag_name
|
||||
|
||||
|
||||
@uses_pagination
|
||||
def tag_listing(request, page):
|
||||
@ -33,21 +50,42 @@ def tag_listing(request, page):
|
||||
pagination = Pagination(page, cursor)
|
||||
media_entries = pagination()
|
||||
|
||||
# Take the tag "name" from the first MediaEntry's non-normalized
|
||||
# tag naming.
|
||||
# ... this is slightly hacky looking :\
|
||||
tag_name = tag_slug
|
||||
if media_entries.count():
|
||||
for tag in media_entries[0]['tags']:
|
||||
if tag['slug'] == tag_slug:
|
||||
tag_name == tag['name']
|
||||
break
|
||||
else:
|
||||
tag_name = tag_slug
|
||||
tag_name = _get_tag_name_from_entries(media_entries, tag_slug)
|
||||
|
||||
return render_to_response(
|
||||
request,
|
||||
'mediagoblin/listings/tag.html',
|
||||
{'tag_name': tag_name,
|
||||
{'tag_slug': tag_slug,
|
||||
'tag_name': tag_name,
|
||||
'media_entries': media_entries,
|
||||
'pagination': pagination})
|
||||
|
||||
|
||||
ATOM_DEFAULT_NR_OF_UPDATED_ITEMS = 15
|
||||
|
||||
def tag_atom_feed(request):
|
||||
"""
|
||||
generates the atom feed with the tag images
|
||||
"""
|
||||
tag_slug = request.matchdict[u'tag']
|
||||
|
||||
cursor = request.db.MediaEntry.find(
|
||||
{u'state': u'processed',
|
||||
u'tags.slug': tag_slug})
|
||||
cursor = cursor.sort('created', DESCENDING)
|
||||
cursor = cursor.limit(ATOM_DEFAULT_NR_OF_UPDATED_ITEMS)
|
||||
|
||||
feed = AtomFeed(
|
||||
"MediaGoblin: Feed for tag '%s'" % tag_slug,
|
||||
feed_url=request.url,
|
||||
url=request.host_url)
|
||||
|
||||
for entry in cursor:
|
||||
feed.add(entry.get('title'),
|
||||
entry.get('description_html'),
|
||||
content_type='html',
|
||||
author=entry.uploader()['username'],
|
||||
updated=entry.get('created'),
|
||||
url=entry.url_for_self(request.urlgen))
|
||||
|
||||
return feed.get_response()
|
||||
|
@ -17,6 +17,13 @@
|
||||
#}
|
||||
{% extends "mediagoblin/base.html" %}
|
||||
|
||||
{% block mediagoblin_head %}
|
||||
<link rel="alternate" type="application/atom+xml"
|
||||
href="{{ request.urlgen(
|
||||
'mediagoblin.listings.tag_atom_feed',
|
||||
tag=tag_slug) }}">
|
||||
{% endblock mediagoblin_head %}
|
||||
|
||||
{% block mediagoblin_content -%}
|
||||
<h1>
|
||||
Media tagged with: {{ tag_name }}
|
||||
@ -25,4 +32,10 @@
|
||||
<div class="container_16 media_gallery">
|
||||
{% include "mediagoblin/utils/object_gallery.html" %}
|
||||
</div>
|
||||
|
||||
<div class="grid_16">
|
||||
<a href="{{ request.urlgen(
|
||||
'mediagoblin.listings.tag_atom_feed',
|
||||
tag=tag_slug) }}">atom feed</a>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
Loading…
x
Reference in New Issue
Block a user