Dynastie/generators/index.py

88 lines
3.1 KiB
Python
Raw Normal View History

2012-07-18 11:30:54 +02:00
import datetime
2012-07-15 18:21:26 +02:00
from xml.dom.minidom import parse
from dynastie.generators.generator import DynastieGenerator
from django.db import models
2012-07-18 11:30:54 +02:00
# TODO : links between indexes
# TODO : gzip
2012-07-15 18:21:26 +02:00
class Index(DynastieGenerator):
2012-07-18 11:30:54 +02:00
cur_page = 0
cur_article = 0
articles_per_page = 0
def createArticle(self, article, dom, article_elem, root):
values = {}
values['title'] = article.title
values['author'] = article.author.first_name
values['date'] = article.creation_date.strftime("%d/%m/%Y")
values['content'] = ''
self.simpleTransform(values, dom, article_elem, root)
def parse(self, articles, dom, root):
for node in root.childNodes:
if node.prefix == 'dyn':
if node.localName == 'articles':
articles_elem = dom.createElement("articles")
for i in range(0, self.articles_per_page):
article_elem = dom.createElementNS(self.URI, "article")
self.createArticle(articles[self.cur_article], dom, article_elem, node)
articles_elem.appendChild(article_elem)
self.cur_article = self.cur_article + 1
if self.cur_article == articles.count():
break
root.replaceChild(articles_elem, node)
continue
if node.hasChildNodes():
self.parse(articles, dom, node)
return
2012-07-15 18:21:26 +02:00
def generate(self, blog, src, output):
from dynastie.models import *
2012-07-18 11:30:54 +02:00
self.report = ''
2012-07-15 18:21:26 +02:00
2012-07-18 11:30:54 +02:00
if not os.path.exists(src + '/_index.html'):
self.addError('No _index.html found, exiting')
return self.report
try:
dom = parse(src + '/_index.html')
except xml.dom.DOMException as e:
self.addError('Error parsing _index.html : ' + e)
return self.report
article_nodes = dom.getElementsByTagNameNS(self.URI, "articles")
if not article_nodes is None:
self.articles_per_page = int(article_nodes[0].getAttribute("limit"))
else:
self.addError('No tag dyn:articles found')
now = datetime.datetime.now()
cur_year = now.year
articles = Article.objects.filter(creation_date__year=cur_year)
if articles.count() < self.articles_per_page:
articles = Article.objects.all()[:self.articles_per_page]
filename = 'index.html'
while self.cur_article < articles.count():
nodes = dom.getElementsByTagName("*")
self.parse(articles, dom, nodes[0])
self.writeIfNotTheSame(output + '/' + filename, nodes[0].toxml('utf8'))
self.cur_page = self.cur_page + 1
filename = 'index' + str(self.cur_page) + '.html'
while os.path.exists(filename):
self.addReport('Removing unused ' + filename)
os.unlink(filename)
self.cur_page = self.cur_page + 1
filename = 'index' + str(self.cur_page) + '.html'
return self.report
2012-07-15 18:21:26 +02:00