2010-11-10 5 views
3

J'ai fait un flux Atom dans Django en utilisant une classe qui ressemble à quelque chose comme ceci:Pourquoi l'Atom1Feed de Django utilise-t-il atom: mis à jour au lieu de atom: published?

class AtomFeed(Feed): 

    feed_type = feedgenerator.Atom1Feed 

    # ... 

    def item_pubdate(self, post): 
     return datetime.datetime(post.date.year, post.date.month, post.date.day) 

Le XML résultant d'un élément:

<entry> 
    <title>..</title> 
    <link href="..." rel="alternate"></link> 
    <updated>2010-10-18T00:00:00+02:00</updated> 
    <author><name>...</name></author> 
    <id>...</id> 
    <summary type="html">...</summary> 
</entry> 

La chose à noter ici est que la date va dans l'élément atom:updated, pas l'élément atom:published.

Le RFC suggère clairement pour moi que ce n'est pas l'usage prévu:

Le « atome: mis à jour » élément est une construction Date indiquant l'instant le plus récent dans le temps où une entrée ou un fil a été modifiée un moyen que l'éditeur considère comme significatif. Par conséquent, toutes les modifications n'aboutissent pas nécessairement à un atome modifié: valeur mise à jour.

Attendu que:

Le « atom: published » élément est une construction Date indiquant un instant dans le temps associé à un événement au début du cycle de vie de l'entrée.

Ceci est plus qu'un simple problème théorique. Google Reader, par exemple, ne semble pas utiliser l'élément updated et utilise la date de première apparition de l'élément. Par conséquent, il n'ordonne pas correctement les éléments lors de la première importation du flux.

Le code de Django responsable de ceci:

django/utils/feedgenerator.py:331

if item['pubdate'] is not None: 
    handler.addQuickElement(u"updated", rfc3339_date(item['pubdate']).decode('utf-8')) 

Il semble y avoir aucune mention de l'élément published.

Est-ce un bug dans Django? Est-ce que je me méprends sur l'Atom RFC? Est-ce que je manque quelque chose d'autre?

+0

Je dirais que c'est un bug défini dans django. Quand je dis "quand je l'ai publié", je ne veux pas que mon traducteur dise "la dernière fois que je l'ai changé". Je vois que vous avez déjà [rapporté] (http://code.djangoproject.com/ticket/14656), donc je suppose que le temps nous le dira. – eternicode

+0

Cela ne semble pas être une fonctionnalité "manquante". dans Django 1.2 et 1.3, vous pouvez ajouter des attributs au flux. Si je me souviens bien dans 1.3 il est juste nécessaire d'ajouter la méthode item_extra_kwargs de la classe Feed. "return {'published': self.get_object(). created}", cela fonctionnerait aussi pour créer des flux de podcast et autres types de flux avec des éléments spéciaux ou des attributs –

+0

C'est une bonne nouvelle, mais cela ne tient pas compte du fait que le L'élément 'atom: updated' est mal utilisé, et l'important élément' atom: published' n'est pas utilisé du tout. – Thomas

Répondre

0

Vous ne manquez rien. Le RFC Atom est correct, et c'est un bug connu dans Django; voir this Django bug.

Cela ressemble à une solution relativement simple, alors n'hésitez pas à y aller et à la patcher!^_^

+0

Hmm ... maintenant que j'ai lu les commentaires à votre question, quel est le pari que vous êtes celui qui a déposé le bug? ~ _ ~ – pythonian4000

+0

Oui, c'était moi;) Il a changé de statut pour "accepté", donc il a au moins un certain degré de validité. – Thomas

+0

Eh bien, voici les premières réponses de Stack Overflow - apprendre à lire toute la question en premier! =) – pythonian4000

Questions connexes