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 = '' 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