Add article generator
This commit is contained in:
@@ -1 +1 @@
|
||||
__all__ = ["generator", "index"]
|
||||
__all__ = ["generator", "index", "article"]
|
||||
|
||||
62
generators/article.py
Normal file
62
generators/article.py
Normal 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
|
||||
|
||||
@@ -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')
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user