A lot of modifications
This commit is contained in:
parent
cc29c0a9d7
commit
6fb23e62fb
|
@ -12,6 +12,7 @@ class Archive(Index):
|
|||
cur_article = 0
|
||||
articles_per_page = 0
|
||||
filename = 'index'
|
||||
dirname = ''
|
||||
cur_year = 0
|
||||
|
||||
def createArchive(self, articles, dom, root, node):
|
||||
|
@ -27,14 +28,16 @@ class Archive(Index):
|
|||
if len(articles) > self.articles_per_page:
|
||||
self.nb_pages = len(articles) / self.articles_per_page
|
||||
|
||||
if not os.path.exists(output + '/archive/' + str(self.cur_year)):
|
||||
os.mkdir(output + '/archive/' + str(self.cur_year))
|
||||
self.dirname = '/archive/' + str(self.cur_year)
|
||||
|
||||
if not os.path.exists(output + self.dirname):
|
||||
os.mkdir(output + self.dirname)
|
||||
|
||||
while self.cur_page <= self.nb_pages:
|
||||
#print 'Generate ' + filename
|
||||
nodes = dom.getElementsByTagName("*")
|
||||
self.parse(hooks, articles, dom, nodes[0])
|
||||
self.writeIfNotTheSame(output + '/archive/' + str(self.cur_year) + '/' + filename, nodes[0].toxml('utf8'))
|
||||
nodes[0] = self.parse(src, hooks, articles, dom, nodes[0])
|
||||
self.writeIfNotTheSame(output + self.dirname + '/' + filename, nodes[0].toxml('utf8'))
|
||||
self.cur_page = self.cur_page + 1
|
||||
filename = self.filename + str(self.cur_page) + '.html'
|
||||
dom = parse(src + '/_archive.html')
|
||||
|
@ -47,7 +50,7 @@ class Archive(Index):
|
|||
self.addReport('Removing unused ' + filename)
|
||||
os.unlink(filename)
|
||||
self.cur_page = self.cur_page + 1
|
||||
filename = output + '/archive/' + str(self.cur_year) + '/' + self.filename + str(self.cur_page) + '.html'
|
||||
filename = output + self.dirname + '/' + self.filename + str(self.cur_page) + '.html'
|
||||
|
||||
def generate(self, blog, src, output):
|
||||
from dynastie.models import Article, Blog
|
||||
|
@ -78,7 +81,7 @@ class Archive(Index):
|
|||
else:
|
||||
self.addError('No tag dyn:articles found')
|
||||
|
||||
articles = Article.objects.all().order_by('creation_date')
|
||||
articles = Article.objects.filter(published=True, front_page=True).order_by('creation_date')
|
||||
|
||||
if articles.count() != 0:
|
||||
self.cur_year = int(articles[0].creation_date.year)
|
||||
|
@ -93,6 +96,7 @@ class Archive(Index):
|
|||
if i < nb_articles-1:
|
||||
if articles[i].creation_date.year != articles[i+1].creation_date.year:
|
||||
dom = parse(src + '/_archive.html')
|
||||
my_articles.reverse()
|
||||
self.createArchives(src, output, dom, hooks, my_articles)
|
||||
self.cur_year = int(articles[i+1].creation_date.year)
|
||||
#print 'New year ' + str(self.cur_year)
|
||||
|
|
|
@ -1,38 +1,22 @@
|
|||
import os
|
||||
from xml.dom.minidom import parse, parseString
|
||||
from dynastie.generators.generator import DynastieGenerator
|
||||
from dynastie.generators.index import Index
|
||||
from django.db import models
|
||||
|
||||
# TODO : content
|
||||
class Article(Index):
|
||||
|
||||
class Article(DynastieGenerator):
|
||||
|
||||
def createArticle(self, article, dom, article_elem, root):
|
||||
values = {}
|
||||
values['title'] = article.title
|
||||
values['author'] = article.author.first_name
|
||||
if article.creation_date != None:
|
||||
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 _createArticle(self, article, dom, article_elem, root):
|
||||
self.createArticle(article, dom, article_elem, root)
|
||||
article_nodes = dom.getElementsByTagNameNS(self.URI, "article")
|
||||
article_elem = article_nodes[0]
|
||||
article_elem.parentNode.removeChild(article_elem)
|
||||
|
||||
def generate(self, blog, src, output):
|
||||
from dynastie.models import Article, Blog
|
||||
|
||||
hooks = {'article' : self._createArticle}
|
||||
|
||||
if not os.path.exists(src + '/_article.html'):
|
||||
self.addError('No _article.html found, exiting')
|
||||
return self.report
|
||||
|
@ -51,7 +35,7 @@ class Article(DynastieGenerator):
|
|||
for article in articles:
|
||||
#print 'Generate ' + filename
|
||||
nodes = dom.getElementsByTagName("*")
|
||||
self.parse(article, dom, nodes[0])
|
||||
nodes[0] = self.parse(src, hooks, article, dom, nodes[0])
|
||||
filename = output + '/article/'
|
||||
filename = filename + article.creation_date.strftime("%Y") + '/' + article.creation_date.strftime("%m") + '/'
|
||||
if not os.path.exists(filename):
|
||||
|
|
|
@ -11,6 +11,7 @@ class Category(Index):
|
|||
cur_article = 0
|
||||
articles_per_page = 0
|
||||
filename = 'index'
|
||||
dirname = ''
|
||||
cur_category = None
|
||||
|
||||
def createCategory(self, articles, dom, root, node):
|
||||
|
@ -53,23 +54,26 @@ class Category(Index):
|
|||
for category in categories:
|
||||
self.cur_category = category
|
||||
filename = self.filename + '.html'
|
||||
articles = Article.objects.filter(category__exact=category).order_by('-creation_date')
|
||||
articles = Article.objects.filter(category__exact=category, published=True).order_by('-creation_date')
|
||||
|
||||
self.nb_pages = 0
|
||||
self.cur_page = 0
|
||||
self.cur_article = 0
|
||||
|
||||
self.dirname = '/category/' + category.name_slug
|
||||
|
||||
if articles.count() > self.articles_per_page:
|
||||
self.nb_pages = articles.count() / self.articles_per_page
|
||||
|
||||
if not os.path.exists(output + '/category/' + category.name_slug):
|
||||
os.mkdir(output + '/category/' + category.name_slug)
|
||||
if not os.path.exists(output + self.dirname):
|
||||
os.mkdir(output + self.dirname)
|
||||
|
||||
|
||||
while self.cur_page <= self.nb_pages:
|
||||
#print 'Generate ' + filename
|
||||
nodes = dom.getElementsByTagName("*")
|
||||
self.parse(hooks, articles, dom, nodes[0])
|
||||
self.writeIfNotTheSame(output + '/category/' + category.name_slug + '/' + filename, nodes[0].toxml('utf8'))
|
||||
nodes[0] = self.parse(src, hooks, articles, dom, nodes[0])
|
||||
self.writeIfNotTheSame(output + self.dirname + '/' + filename, nodes[0].toxml('utf8'))
|
||||
self.cur_page = self.cur_page + 1
|
||||
filename = self.filename + str(self.cur_page) + '.html'
|
||||
dom = parse(src + '/_category.html')
|
||||
|
@ -82,7 +86,7 @@ class Category(Index):
|
|||
self.addReport('Removing unused ' + filename)
|
||||
os.unlink(filename)
|
||||
self.cur_page = self.cur_page + 1
|
||||
filename = output + '/category/' + category.name_slug + '/' + self.filename + str(self.cur_page) + '.html'
|
||||
filename = output + self.dirname + '/' + self.filename + str(self.cur_page) + '.html'
|
||||
|
||||
if not self.somethingWrote:
|
||||
self.addReport('Nothing changed')
|
||||
|
|
|
@ -2,6 +2,8 @@ import os
|
|||
import hashlib
|
||||
import gzip
|
||||
from xml.dom import *
|
||||
from xml.dom.minidom import parse
|
||||
from xml.parsers.expat import *
|
||||
|
||||
class DynastieGenerator:
|
||||
|
||||
|
@ -31,7 +33,14 @@ class DynastieGenerator:
|
|||
def generate(self, blog, src, output):
|
||||
return
|
||||
|
||||
def removeCDATA(self, content):
|
||||
content = content.replace('<pre><![CDATA[', '<pre>')
|
||||
content = content.replace(']]></pre>', '</pre>')
|
||||
|
||||
return content
|
||||
|
||||
def writeIfNotTheSame(self, filename, content):
|
||||
content = self.removeCDATA(content)
|
||||
if os.path.exists(filename):
|
||||
src_md5 = hashlib.md5()
|
||||
f = open(filename,'rb')
|
||||
|
@ -100,12 +109,70 @@ class DynastieGenerator:
|
|||
new_node = dom.createTextNode(content)
|
||||
root.replaceChild(new_node, node)
|
||||
|
||||
def parse(self, hooks, articles, dom, root):
|
||||
def _parse(self, hooks, articles, dom, root):
|
||||
for node in root.childNodes:
|
||||
if node.prefix == 'dyn':
|
||||
if node.localName in hooks:
|
||||
hooks[node.localName](articles, dom, root, node)
|
||||
|
||||
if node.hasChildNodes():
|
||||
self.parse(hooks, articles, dom, node)
|
||||
self._parse(hooks, articles, dom, node)
|
||||
return
|
||||
|
||||
def parse(self, src, hooks, articles, dom, root):
|
||||
bases = dom.getElementsByTagNameNS(self.URI, 'base')
|
||||
|
||||
if len(bases) == 0:
|
||||
self._parse(hooks, articles, dom, root)
|
||||
return root
|
||||
|
||||
if len(bases) != 1:
|
||||
addError('More than one base defined')
|
||||
return root
|
||||
|
||||
base = bases[0]
|
||||
|
||||
if not base.hasAttribute('file'):
|
||||
addError('No \'file\' attribute defined')
|
||||
return root
|
||||
filename = base.getAttribute('file')
|
||||
|
||||
if not base.hasAttribute('block'):
|
||||
addError('No \'block\' attribute defined')
|
||||
return root
|
||||
target_block = base.getAttribute('block')
|
||||
|
||||
if not os.path.exists(src + '/' + filename):
|
||||
addError('Base ' + filename + ' doesn\'t exists')
|
||||
return root
|
||||
|
||||
dom2 = root
|
||||
try:
|
||||
dom2 = parse(src + '/' + filename)
|
||||
except ExpatError, e:
|
||||
self.addError('Error parsing ' + src + '/' + filename)
|
||||
return root
|
||||
|
||||
blocks = dom2.getElementsByTagNameNS(self.URI, 'block')
|
||||
block_found = False
|
||||
for block in blocks:
|
||||
if not block.hasAttribute('name'):
|
||||
addError('block has no attribute \'name\' in ' + filename)
|
||||
return root
|
||||
blockname = block.getAttribute('name')
|
||||
if blockname != target_block:
|
||||
continue
|
||||
|
||||
for child in root.childNodes:
|
||||
block.parentNode.appendChild(child.cloneNode(True))
|
||||
block.parentNode.removeChild(block)
|
||||
block_found = True
|
||||
|
||||
if not block_found:
|
||||
addError('Block ' + target_block + ' not found in ' + src + '/' + filename)
|
||||
return root
|
||||
|
||||
root = dom2.firstChild
|
||||
|
||||
self.parse(src, hooks, articles, dom2, root)
|
||||
|
||||
return root
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import os
|
||||
import datetime
|
||||
import xml
|
||||
from xml.parsers.expat import *
|
||||
from xml.dom.minidom import parse, parseString
|
||||
from dynastie.generators.generator import DynastieGenerator
|
||||
|
@ -12,24 +13,33 @@ class Index(DynastieGenerator):
|
|||
cur_article = 0
|
||||
articles_per_page = 0
|
||||
filename = 'index'
|
||||
dirname = ''
|
||||
|
||||
def createNavigation(self, articles, dom, root, node):
|
||||
if self.nb_pages == 0 or self.nb_pages == 1:
|
||||
return ''
|
||||
|
||||
if self.dirname != '':
|
||||
if self.dirname.startswith('/'):
|
||||
href = '<a href="' + self.dirname + '/' + self.filename
|
||||
else:
|
||||
href = '<a href="/' + self.dirname + '/' + self.filename
|
||||
else:
|
||||
href = '<a href="/' + self.filename
|
||||
|
||||
nav = ''
|
||||
if self.cur_page != 0:
|
||||
nav = nav + '<a href="/' + self.filename + '.html"><<</a> '
|
||||
nav = nav + href + '.html"><< First</a> '
|
||||
if self.cur_page == 1:
|
||||
nav = nav + '<a href="/' + self.filename + '.html"><</a> '
|
||||
nav = nav + href + '.html">< Prev</a> '
|
||||
else:
|
||||
nav = nav + '<a href="/' + self.filename + str(self.cur_page) + '.html"><</a> '
|
||||
nav = nav + href + str(self.cur_page-1) + '.html">< Prev</a> '
|
||||
|
||||
start = (self.cur_page/5)*5
|
||||
start = int(self.cur_page/self.articles_per_page)
|
||||
end = start + 10
|
||||
|
||||
if end > self.nb_pages+1:
|
||||
end = self.nb_pages+1
|
||||
end = self.nb_pages
|
||||
|
||||
if (end-start) < 10:
|
||||
start = end - 10
|
||||
|
@ -41,13 +51,13 @@ class Index(DynastieGenerator):
|
|||
nav = nav + str(i+1) + ' '
|
||||
else:
|
||||
if i == 0:
|
||||
nav = nav + '<a href="/' + self.filename + '.html">1</a> '
|
||||
nav = nav + href + '.html">1</a> '
|
||||
else:
|
||||
nav = nav + '<a href="/' + self.filename + str(i) + '.html">' + str(i+1) + '</a> '
|
||||
nav = nav + href + str(i) + '.html">' + str(i+1) + '</a> '
|
||||
|
||||
if self.cur_page != self.nb_pages:
|
||||
nav = nav + '<a href="/' + self.filename + str(self.cur_page+1) + '.html">></a> '
|
||||
nav = nav + '<a href="/' + self.filename + str(self.nb_pages) + '.html">>></a>'
|
||||
nav = nav + href + str(self.cur_page+1) + '.html">Next ></a> '
|
||||
nav = nav + href + str(self.nb_pages) + '.html">Last >></a>'
|
||||
|
||||
new_dom = parseString('<div class="navigation">' + nav + '</div>')
|
||||
new_node = new_dom.getElementsByTagName('div')[0]
|
||||
|
@ -77,6 +87,8 @@ class Index(DynastieGenerator):
|
|||
dom2 = parseString(content)
|
||||
except ExpatError, e:
|
||||
self.addError('Error parsing ' + filename)
|
||||
print filename
|
||||
print e
|
||||
pass
|
||||
|
||||
self.simpleTransform(values, dom, article_elem, root)
|
||||
|
@ -112,6 +124,8 @@ class Index(DynastieGenerator):
|
|||
else:
|
||||
nb_recents = 5
|
||||
recents_elem = self.createElement(dom, 'recents')
|
||||
for child in node.childNodes:
|
||||
recents_elem.appendChild(child.cloneNode(True))
|
||||
list_elem = dom.createElement('ul')
|
||||
for i in range(0, nb_recents):
|
||||
article_elem = dom.createElement('li')
|
||||
|
@ -155,19 +169,18 @@ class Index(DynastieGenerator):
|
|||
|
||||
now = datetime.datetime.now()
|
||||
cur_year = now.year
|
||||
articles = Article.objects.filter(creation_date__year=cur_year).order_by('-creation_date')
|
||||
articles = Article.objects.filter(creation_date__year=cur_year, published=True, front_page=True).order_by('-creation_date')
|
||||
|
||||
if articles.count() < self.articles_per_page:
|
||||
articles = Article.objects.all()[:self.articles_per_page]
|
||||
|
||||
if articles.count() > self.articles_per_page:
|
||||
self.nb_pages = articles.count() / self.articles_per_page
|
||||
|
||||
filename = 'index.html'
|
||||
while self.cur_page <= self.nb_pages:
|
||||
#print 'Generate ' + filename
|
||||
nodes = dom.getElementsByTagName("*")
|
||||
self.parse(hooks, articles, dom, nodes[0])
|
||||
nodes[0] = self.parse(src, hooks, articles, dom, nodes[0])
|
||||
self.writeIfNotTheSame(output + '/' + filename, nodes[0].toxml(encoding='utf-8'))
|
||||
self.cur_page = self.cur_page + 1
|
||||
filename = 'index' + str(self.cur_page) + '.html'
|
||||
|
|
|
@ -25,8 +25,8 @@ class Blog(models.Model):
|
|||
report = ''
|
||||
|
||||
def create_paths(self):
|
||||
self.src_path = 'sites/' + self.name
|
||||
self.output_path = 'sites/' + self.name + '_output'
|
||||
self.src_path = '/home/soutade/Projets_Perso/dynastie2/dynastie/dynastie/' + 'sites/' + self.name
|
||||
self.output_path = '/home/soutade/Projets_Perso/dynastie2/dynastie/dynastie/' + 'sites/' + self.name + '_output'
|
||||
|
||||
def create(self):
|
||||
self.create_paths()
|
||||
|
|
|
@ -4,7 +4,7 @@ DEBUG = True
|
|||
TEMPLATE_DEBUG = DEBUG
|
||||
|
||||
ADMINS = (
|
||||
# ('Your Name', 'your_email@example.com'),
|
||||
('Gregory Soutade', 'gregory@soutade.fr'),
|
||||
)
|
||||
|
||||
MANAGERS = ADMINS
|
||||
|
@ -27,7 +27,7 @@ DATABASES = {
|
|||
# timezone as the operating system.
|
||||
# If running in a Windows environment this must be set to the same as your
|
||||
# system time zone.
|
||||
TIME_ZONE = 'America/Chicago'
|
||||
TIME_ZONE = 'Europe/Paris'
|
||||
|
||||
# Language code for this installation. All choices can be found here:
|
||||
# http://www.i18nguy.com/unicode/language-identifiers.html
|
||||
|
@ -105,7 +105,7 @@ ROOT_URLCONF = 'dynastie.urls'
|
|||
WSGI_APPLICATION = 'dynastie.wsgi.application'
|
||||
|
||||
TEMPLATE_DIRS = (
|
||||
"/home/soutade/Projets_Perso/dynastie2/dynastie/dynastie"
|
||||
"/home/soutade/Projets_Perso/dynastie2/dynastie/dynastie/"
|
||||
# Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
|
||||
# Always use forward slashes, even on Windows.
|
||||
# Don't forget to use absolute paths, not relative paths.
|
||||
|
|
Loading…
Reference in New Issue
Block a user