Changeset 2530

Show
Ignore:
Timestamp:
02/06/10 22:04:05 (6 weeks ago)
Author:
JensDiemer
Message:

New: Update Journal can send RSS/Atom feeds.

Location:
branches/0.9/pylucid_project/pylucid_plugins/update_journal
Files:
3 added
2 modified

Legend:

Unmodified
Added
Removed
  • branches/0.9/pylucid_project/pylucid_plugins/update_journal/models.py

    r2468 r2530  
    44from django.contrib.auth.models import User 
    55from django.contrib.sites.models import Site 
    6 from django.utils.translation import ugettext as _ 
     6from django.utils.translation import ugettext_lazy as _ 
    77from django.contrib.contenttypes.models import ContentType 
    88from django.contrib.sites.managers import CurrentSiteManager 
  • branches/0.9/pylucid_project/pylucid_plugins/update_journal/views.py

    r2330 r2530  
    2020__version__ = "$Rev$" 
    2121 
     22 
    2223from django.conf import settings 
     24from django.contrib.syndication.views import Feed 
     25from django.utils.translation import ugettext_lazy as _ 
     26from django.utils.feedgenerator import Rss201rev2Feed, Atom1Feed 
    2327 
    24 from pylucid.models import Language 
    25 from pylucid.decorators import render_to 
     28from pylucid_project.apps.pylucid.models import Language 
     29from pylucid_project.apps.pylucid.decorators import render_to 
    2630 
    27 from pylucid_project.system.pylucid_plugins import PYLUCID_PLUGINS 
     31from pylucid_project.pylucid_plugins.update_journal.models import UpdateJournal 
    2832 
    29 from models import UpdateJournal 
    3033 
     34def _get_queryset(request, count): 
     35    """ TODO: Move to UpdateJournal.objects ? """ 
     36    queryset = UpdateJournal.on_site.all() 
     37 
     38    accessible_lang = Language.objects.all_accessible(request.user) 
     39    queryset = queryset.filter(language__in=accessible_lang) 
     40 
     41    if not request.user.is_staff: 
     42        queryset = queryset.filter(staff_only=False) 
     43  
     44    return queryset[:count] 
    3145 
    3246 
     
    4054        count = 10 
    4155 
    42     queryset = UpdateJournal.on_site.all() 
    43  
    44     accessible_lang = Language.objects.all_accessible(request.user) 
    45     queryset = queryset.filter(language__in=accessible_lang) 
    46  
    47     if not request.user.is_staff: 
    48         queryset = queryset.filter(staff_only=False) 
    49  
    50     queryset = queryset[:count] 
     56    queryset = _get_queryset(request, count) 
    5157 
    5258    return {"update_list": queryset} 
    5359 
     60 
     61class RssFeed(Feed): 
     62    feed_type = Rss201rev2Feed 
     63    filename = "feed.rss" 
     64     
     65    title = "Update Journal" 
     66    link = "/" 
     67    description = "Updates and changes" 
     68    description_template = "update_journal/feed_description.html" 
     69     
     70    def __init__(self, request): 
     71        self.count = 10 # FIXME: use GET parameter? 
     72        self.request = request 
     73 
     74    def items(self): 
     75        return _get_queryset(self.request, self.count) 
     76 
     77    def item_title(self, item): 
     78        return item.title 
     79     
     80    def item_link(self, item): 
     81        return item.object_url 
     82 
     83 
     84class AtomFeed(RssFeed): 
     85    """ 
     86    http://docs.djangoproject.com/en/dev/ref/contrib/syndication/#publishing-atom-and-rss-feeds-in-tandem 
     87    """ 
     88    feed_type = Atom1Feed 
     89    filename = "feed.atom" 
     90    subtitle = RssFeed.description 
     91 
     92 
     93# The last class is the fallback class, if filename doesn't match 
     94FEEDS = [AtomFeed, RssFeed] 
     95 
     96 
     97@render_to("update_journal/select_feed.html") 
     98def select_feed(request): 
     99    """ 
     100    Display a list with existing feed filenames. 
     101    """ 
     102    context = {"feeds": FEEDS} 
     103    return context 
     104     
     105 
     106def feed(request, filename): 
     107    """ 
     108    return RSS/Atom feed selected by filename. 
     109    """ 
     110    #print filename 
     111    for feed_class in FEEDS: 
     112        if filename == feed_class.filename: 
     113            break 
     114     
     115    #print "feed class:", feed_class 
     116    feed = feed_class(request) 
     117    response = feed(request) 
     118    return response 
     119