Add article generator

This commit is contained in:
2012-07-22 10:47:24 +02:00
parent fa07825546
commit be306c6643
11 changed files with 237 additions and 34 deletions

View File

@@ -1 +1 @@
__all__ = ["generator", "index"]
__all__ = ["generator", "index", "article"]

62
generators/article.py Normal file
View File

@@ -0,0 +1,62 @@
import os
import datetime
from xml.dom.minidom import parse, parseString
from dynastie.generators.generator import DynastieGenerator
from django.db import models
# TODO : content
class Article(DynastieGenerator):
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, article, dom, root):
for node in root.childNodes:
if node.prefix == 'dyn':
if node.localName == 'content':
article_elem = self.createElement(dom, 'article')
self.createArticle(article, dom, article_elem, node)
root.replaceChild(article_elem, node)
continue
if node.hasChildNodes():
self.parse(article, dom, node)
return
def generate(self, blog, src, output):
from dynastie.models import Article, Blog
if not os.path.exists(src + '/_article.html'):
self.addError('No _article.html found, exiting')
return self.report
try:
dom = parse(src + '/_article.html')
except xml.dom.DOMException as e:
self.addError('Error parsing _article.html : ' + e)
return self.report
if not os.path.exists(output + '/articles'):
os.mkdir(output + '/articles')
articles = Article.objects.all()
for article in articles:
#print 'Generate ' + filename
nodes = dom.getElementsByTagName("*")
self.parse(article, dom, nodes[0])
self.writeIfNotTheSame(output + '/articles/' + article.title_slug + '.html', nodes[0].toxml('utf8'))
dom = parse(src + '/_article.html')
if not self.somethingWrote:
self.addReport('Nothing changed')
return self.report

View File

@@ -7,9 +7,11 @@ class DynastieGenerator:
URI = "http://indefero.soutade.fr/p/dynastie"
report = ''
somethingWrote = False
def __init__(self):
self.report = ''
self.somethingWrote = False
def addReport(self, string, color=''):
if color != '':
@@ -40,10 +42,8 @@ class DynastieGenerator:
dst_md5.update(content)
if src_md5.digest() == dst_md5.digest():
self.addReport(filename + ' regenerated with the same content, skipping...')
filename = filename + '.gz'
if not os.path.exists(filename):
self.addReport(filename + ' was not previously compressed')
f = gzip.open(filename, 'wb')
f.write(content)
f.close()
@@ -60,6 +60,8 @@ class DynastieGenerator:
f = gzip.open(filename, 'wb')
f.write(content)
f.close()
self.somethingWrote = True
def createElement(self, dom, name='', content=''):
div = dom.createElement('div')

View File

@@ -135,5 +135,8 @@ class Index(DynastieGenerator):
self.cur_page = self.cur_page + 1
filename = output + '/index' + str(self.cur_page) + '.html'
if not self.somethingWrote:
self.addReport('Nothing changed')
return self.report