Dynastie/generators/atom.py
Grégory Soutadé e270a52e41 Add RSS and Atom generators
Compress some static files when copy (and not only when generate)
Fix a visual bug with articles table
2012-08-25 22:33:34 +02:00

74 lines
3.0 KiB
Python

import os
import datetime
import xml
from dynastie.generators.generator import DynastieGenerator
from dynastie.generators.rss import RSS
from xml.dom.minidom import getDOMImplementation
from django.db import models
class Atom(RSS):
def generate(self, blog, src, output):
from dynastie.models import Article, Blog
now = datetime.datetime.now()
impl = getDOMImplementation()
dom = impl.createDocument(None, "feed", None)
root = dom.documentElement
root.setAttributeNS('xml', 'xml:lang', 'en-gb')
root.setAttribute('xmlns', 'http://www.w3.org/2005/Atom')
self.appendElement(dom, root, 'title', blog.title, {'type':'text'})
self.appendElement(dom, root, 'subtitle', blog.description, {'type':'text'})
address = 'http://' + blog.name
self.appendElement(dom, root, 'link', '', {'rel':'alternate', 'type':'text/html', 'href' : address})
self.appendElement(dom, root, 'id', address)
builddate = now.strftime('%Y-%m-%dT%H:%M:%SZ')
self.appendElement(dom, root, 'updated', builddate)
self.appendElement(dom, root, 'generator', 'The Dynastie project', {'uri':'http://indefero.soutade.fr/p/dynastie', 'version':'0.1'})
self.appendElement(dom, root, 'link', '', {'rel':'self', 'type':'application/atom+xml', 'href':address + '/atom.xml'})
articles = Article.objects.filter(published=True).order_by('-creation_date')[:10]
for article in articles:
item = dom.createElement('entry')
self.appendElement(dom, item, 'title', article.title)
path = 'http://' + blog.name + article.getPath()
self.appendElement(dom, item, 'link', '', {'rel':'alternate', 'type':'text/html', 'href':path})
creationDate = article.creation_date.strftime('%Y-%m-%dT%H:%M:%SZ')
self.appendElement(dom, item, 'published', creationDate)
self.appendElement(dom, item, 'updated', creationDate)
self.appendElement(dom, item, 'id', path)
author = dom.createElement('author')
self.appendElement(dom, author, 'name', article.author.first_name + ' ' + article.author.last_name)
self.appendElement(dom, author, 'email', article.author.email)
item.appendChild(author)
filename = blog.src_path + '/_articles/' + str(article.id)
if not os.path.exists(filename):
self.addError('File does not exists ' + filename)
return
f = open(filename, 'rb')
article_content = '<![CDATA[' + f.read() + ']]>'
f.close()
self.appendElement(dom, item, 'summary', article_content, {'type':'html'})
self.appendElement(dom, item, 'content', article_content, {'type':'html'})
root.appendChild(item)
filename = 'atom.xml'
self.writeIfNotTheSame(output + '/' + filename, root)
if not self.somethingWrote:
self.addReport('Nothing changed')
return self.report