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', "/",
|
# Route('mediagoblin.listings.tags_home', "/",
|
||||||
# controller="mediagoblin.listings.views:tags_home"),
|
# controller="mediagoblin.listings.views:tags_home"),
|
||||||
Route('mediagoblin.listings.tags_listing', "/{tag}/",
|
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.util import Pagination, render_to_response
|
||||||
from mediagoblin.decorators import uses_pagination
|
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
|
@uses_pagination
|
||||||
def tag_listing(request, page):
|
def tag_listing(request, page):
|
||||||
@ -33,21 +50,42 @@ def tag_listing(request, page):
|
|||||||
pagination = Pagination(page, cursor)
|
pagination = Pagination(page, cursor)
|
||||||
media_entries = pagination()
|
media_entries = pagination()
|
||||||
|
|
||||||
# Take the tag "name" from the first MediaEntry's non-normalized
|
tag_name = _get_tag_name_from_entries(media_entries, tag_slug)
|
||||||
# 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
|
|
||||||
|
|
||||||
return render_to_response(
|
return render_to_response(
|
||||||
request,
|
request,
|
||||||
'mediagoblin/listings/tag.html',
|
'mediagoblin/listings/tag.html',
|
||||||
{'tag_name': tag_name,
|
{'tag_slug': tag_slug,
|
||||||
|
'tag_name': tag_name,
|
||||||
'media_entries': media_entries,
|
'media_entries': media_entries,
|
||||||
'pagination': pagination})
|
'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" %}
|
{% 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 -%}
|
{% block mediagoblin_content -%}
|
||||||
<h1>
|
<h1>
|
||||||
Media tagged with: {{ tag_name }}
|
Media tagged with: {{ tag_name }}
|
||||||
@ -25,4 +32,10 @@
|
|||||||
<div class="container_16 media_gallery">
|
<div class="container_16 media_gallery">
|
||||||
{% include "mediagoblin/utils/object_gallery.html" %}
|
{% include "mediagoblin/utils/object_gallery.html" %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="grid_16">
|
||||||
|
<a href="{{ request.urlgen(
|
||||||
|
'mediagoblin.listings.tag_atom_feed',
|
||||||
|
tag=tag_slug) }}">atom feed</a>
|
||||||
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user