Ajouté une action qui met à jour les fils RSS sélectionnés dans l'admin.
authorEric Mc Sween <eric.mcsween@gmail.com>
Mon, 29 Nov 2010 19:31:28 +0000 (14:31 -0500)
committerEric Mc Sween <eric.mcsween@gmail.com>
Thu, 2 Dec 2010 20:37:40 +0000 (15:37 -0500)
auf_savoirs_en_partage/savoirs/admin.py
auf_savoirs_en_partage/savoirs/models.py
auf_savoirs_en_partage/scripts/articles.in

index 345a2e6..850fc34 100644 (file)
@@ -15,8 +15,6 @@ from django.http import HttpResponseRedirect
 from models import SourceActualite, Actualite, Discipline, Evenement, Record, ListSet, HarvestLog, Profile
 from savoirs.globals import META
 
-admin.site.register(SourceActualite)
-
 class ListSetFilterSpec(RelatedFilterSpec):
     """
     Filtre custom automatiquement lié à un field nommé 'listsets'. Il a pour but de s'afficher
@@ -210,6 +208,16 @@ class ActualiteAdmin(admin.ModelAdmin):
 
 admin.site.register(Actualite, ActualiteAdmin)
 
+class SourceActualiteAdmin(admin.ModelAdmin):
+    actions = ['update_sources']
+    list_display = ['nom', 'url']
+
+    def update_sources(self, request, queryset):
+        for source in queryset:
+            source.update()
+    update_sources.short_description = u'Mettre à jour les fils sélectionnés'
+
+admin.site.register(SourceActualite, SourceActualiteAdmin)
 
 class EvenementAdminForm(forms.ModelForm):
     mots_cles = forms.CharField(label='Mots-clés', required=False)
index 82fc289..6f7ee18 100644 (file)
@@ -1,5 +1,13 @@
 # -*- encoding: utf-8 -*-
-import simplejson, uuid, datetime, caldav, vobject, uuid, random, operator, pytz, os
+import caldav
+import datetime
+import feedparser
+import operator
+import os
+import pytz
+import random
+import uuid
+import vobject
 from babel.dates import get_timezone_name
 from django.contrib.auth.models import User
 from django.db import models
@@ -38,11 +46,26 @@ class Discipline(models.Model):
 
 class SourceActualite(models.Model):
     nom = models.CharField(max_length=255)
-    url = models.CharField(max_length=255)
+    url = models.CharField(max_length=255, verbose_name='URL')
     
     def __unicode__(self,):
         return u"%s" % self.nom
 
+    class Meta:
+        verbose_name = u'fil RSS syndiqué'
+        verbose_name_plural = u'fils RSS syndiqués'
+
+    def update(self):
+        """Mise à jour du fil RSS."""
+        feed = feedparser.parse(self.url)
+        for entry in feed.entries:
+            if Actualite.all_objects.filter(url=entry.link).count() == 0:
+                ts = entry.updated_parsed
+                date = datetime.date(ts.tm_year, ts.tm_mon, ts.tm_mday)
+                a = self.actualites.create(titre=entry.title,
+                                           texte=entry.summary_detail.value,
+                                           url=entry.link, date=date)
+
 class ActualiteManager(models.Manager):
     
     def get_query_set(self):
@@ -100,9 +123,9 @@ class Actualite(models.Model):
     texte = models.TextField(db_column='texte_actualite')
     url = models.CharField(max_length=765, db_column='url_actualite')
     date = models.DateField(db_column='date_actualite')
-    visible = models.BooleanField(db_column='visible_actualite', default = False)
-    ancienid = models.IntegerField(db_column='ancienId_actualite', blank = True, null = True)
-    source = models.ForeignKey(SourceActualite, blank = True, null = True)
+    visible = models.BooleanField(db_column='visible_actualite', default=False)
+    ancienid = models.IntegerField(db_column='ancienId_actualite', blank=True, null=True)
+    source = models.ForeignKey(SourceActualite, blank=True, null=True)
     disciplines = models.ManyToManyField(Discipline, blank=True, related_name="actualites")
     regions = models.ManyToManyField(Region, blank=True, related_name="actualites", verbose_name='régions')
 
index 3cc4bd3..527b51a 100644 (file)
@@ -12,24 +12,8 @@ for d in glob.glob("%(directory)s/eggs/*"):
 for d in glob.glob("%(directory)s/parts/*"):
     sys.path[0:0] = [d,]
 
-from django.conf import settings
-from savoirs.models import SourceActualite, Actualite
-import feedparser, datetime
+from savoirs.models import SourceActualite
 
 sources = SourceActualite.objects.all()
 for src in sources:
-    d = feedparser.parse(src.url)
-    for entry in d.entries:
-        if len(Actualite.objects.filter(url = entry.link)) == 0:
-            print entry.updated_parsed
-            ts = entry.updated_parsed
-            date = datetime.date(ts.tm_year, ts.tm_mon, ts.tm_mday)
-            print date
-            a = Actualite(titre = entry.title, 
-                          texte = entry.summary_detail.value,
-                          url = entry.link,
-                          date = date,
-                          visible = False,
-                          source = src,
-                          ancienid = 0)
-            print a.save()
+    src.update()