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>
Mon, 29 Nov 2010 19:31:28 +0000 (14:31 -0500)
auf_savoirs_en_partage/savoirs/admin.py
auf_savoirs_en_partage/savoirs/models.py
auf_savoirs_en_partage/scripts/articles.in

index 10dae3b..73b6019 100644 (file)
@@ -16,8 +16,6 @@ from django.http import HttpResponseRedirect
 from savoirs.globals import META
 from savoirs.models import SourceActualite, Actualite, Discipline, Evenement, Record, ListSet, HarvestLog, Profile
 
-admin.site.register(SourceActualite)
-
 class ListSetFilterSpec(RelatedFilterSpec):
     """
     Filtre custom automatiquement lié à un field nommé 'listsets'. Il a pour but de s'afficher
@@ -249,6 +247,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 fe06ec3..ac112aa 100644 (file)
@@ -1,6 +1,7 @@
 # -*- encoding: utf-8 -*-
 import caldav
 import datetime
+import feedparser
 import operator
 import os
 import pytz
@@ -106,11 +107,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')
     
+    class Meta:
+        verbose_name = u'fil RSS syndiqué'
+        verbose_name_plural = u'fils RSS syndiqués'
+
     def __unicode__(self,):
         return u"%s" % self.nom
 
+    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 ActualiteQuerySet(SEPQuerySet):
 
     def filter_date(self, min=None, max=None):
@@ -152,9 +168,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, related_name='actualites')
     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()