From d6820eadd12ec4ffcfeb72faf655b861a6ddf806 Mon Sep 17 00:00:00 2001 From: yomguy Date: Sun, 19 Jun 2011 23:22:27 +0200 Subject: [PATCH] Last changes RSS feed inherits now from a django Feed object --- telemeta/urls.py | 4 +- telemeta/web/base.py | 98 ++++++++++++++++++++++++++++++++------------ 2 files changed, 74 insertions(+), 28 deletions(-) diff --git a/telemeta/urls.py b/telemeta/urls.py index de90329a..4dff609e 100644 --- a/telemeta/urls.py +++ b/telemeta/urls.py @@ -36,7 +36,7 @@ from django.conf.urls.defaults import * from telemeta.models import MediaItem, MediaCollection, MediaItemMarker -from telemeta.web.base import WebView +from telemeta.web.base import WebView, LastestChangesFeed from jsonrpc import jsonrpc_site import os.path import telemeta.config @@ -256,7 +256,7 @@ urlpatterns = patterns('', url(r'^playlists/(?P[a-zA-Z0-9]+)/(?P[a-zA-Z0-9]+)/csv/$', web_view.playlist_csv_export, name="telemeta-playlist-csv-export"), # RSS feeds - url(r'^rss/$', web_view.rss, name="telemeta-rss"), + url(r'^rss/$', LastestChangesFeed(), name="telemeta-rss"), # Not allowed url(r'/*/(?P[A-Za-z0-9._-]+)/not_allowed/$', web_view.not_allowed, name="telemeta-not-allowed"), diff --git a/telemeta/web/base.py b/telemeta/web/base.py index 37544fa4..6a27c399 100644 --- a/telemeta/web/base.py +++ b/telemeta/web/base.py @@ -62,6 +62,7 @@ from django.contrib.auth.models import User from django.utils.translation import ugettext from django.contrib.auth.forms import UserChangeForm from django.core.exceptions import ObjectDoesNotExist +from django.contrib.syndication.views import Feed from telemeta.models import * import telemeta.models @@ -116,7 +117,7 @@ class WebView(object): template = loader.get_template('telemeta/index.html') ids = [id for id in MediaItem.objects.all().values_list('id', flat=True).order_by('?')[0:3]] items = MediaItem.objects.enriched().filter(pk__in=ids) - revisions = self.get_revisions(request, 3) + revisions = get_revisions(3) context = RequestContext(request, { 'page_content': pages.get_page_content(request, 'home', ignore_slash_issue=True), 'items': items, 'revisions': revisions}) @@ -124,33 +125,10 @@ class WebView(object): else: template='telemeta/home.html' playlists = self.get_playlists(request) - revisions = self.get_revisions(request, 15) + revisions = get_revisions(15) searches = Search.objects.filter(username=request.user) return render(request, template, {'playlists': playlists, 'searches': searches, 'revisions': revisions,}) - - def get_revisions(self, request, nb): - last_revisions = Revision.objects.all().order_by('-time')[0:nb] - revisions = [] - for revision in last_revisions: - if revision.element_type == 'item': - try: - element = MediaItem.objects.get(pk=revision.element_id) - except: - element = None - if revision.element_type == 'collection': - try: - element = MediaCollection.objects.get(pk=revision.element_id) - except: - element = None - if revision.element_type == 'marker': - try: - element = MediaItemMarker.objects.get(pk=revision.element_id) - except: - element = None - revisions.append({'revision': revision, 'element': element}) - - return revisions def collection_detail(self, request, public_id, template='telemeta/collection_detail.html'): collection = MediaCollection.objects.get(public_id=public_id) @@ -1070,7 +1048,7 @@ class WebView(object): subjects = settings.TELEMETA_SUBJECTS rss_host = request.META['HTTP_HOST'] date_now = datetime.datetime.now() - revisions = self.get_revisions(request, 50) + revisions = self.get_revisions(50) tags = ['title', 'description', 'comment'] for r in revisions: @@ -1185,3 +1163,71 @@ class WebView(object): formset = FormSet(instance=item) return render(request, template, {'item': item, 'formset': formset,}) + +def get_revisions(nb): + last_revisions = Revision.objects.order_by('-time')[0:nb] + revisions = [] + for revision in last_revisions: + if revision.element_type == 'item': + try: + element = MediaItem.objects.get(pk=revision.element_id) + except: + element = None + if revision.element_type == 'collection': + try: + element = MediaCollection.objects.get(pk=revision.element_id) + except: + element = None + if revision.element_type == 'marker': + try: + element = MediaItemMarker.objects.get(pk=revision.element_id) + except: + element = None + if not element == None: + revisions.append({'revision': revision, 'element': element}) + return revisions + + +class LastestChangesFeed(Feed): + "Render the RSS feed of last revisions" + + organization = settings.TELEMETA_ORGANIZATION + subjects = settings.TELEMETA_SUBJECTS + tags = ['title', 'description', 'comment'] + title = organization + ' - Telemeta - ' + ugettext('Last changes') + link = "" + description = ' '.join([subject.decode('utf-8') for subject in subjects]) + + def items(self): + return get_revisions(25) + + def item_title(self, r): + revision = r['revision'] + element = r['element'] + if element.title == '': + title = str(element.public_id) + else: + title = element.title + return element.element_type + ' : ' + title + + def item_description(self, r): + revision = r['revision'] + element = r['element'] + description = 'modified by ' + revision.user.username + ' on ' + unicode(revision.time) + '

' + dict = element.to_dict() + for tag in dict.keys(): + try: + value = dict[tag] + if value != '': + description += tag + ' : ' + value + '
' + except: + continue + return description.encode('utf-8') + + def item_link(self, r): + revision = r['revision'] + element = r['element'] + link = '/' + revision.element_type + 's/' + str(element.public_id) + return link + + -- 2.39.5