Dynastie/generators/atom.py

74 lines
3.0 KiB
Python
Raw Normal View History

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