From 76508ef3fd9198a990b29411f9c30daffa48636d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9gory=20Soutad=C3=A9?= Date: Sat, 10 Nov 2012 11:35:48 +0100 Subject: [PATCH] Forgot Tag generator --- generators/tag.py | 97 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 generators/tag.py diff --git a/generators/tag.py b/generators/tag.py new file mode 100644 index 0000000..3dcd73b --- /dev/null +++ b/generators/tag.py @@ -0,0 +1,97 @@ +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 + +class Tag(Index): + + cur_page = 0 + nb_pages = 0 + cur_post = 0 + posts_per_page = 0 + filename = 'index' + dirname = '' + cur_tag = None + + def createTag(self, posts, dom, root, node): + if node.hasAttribute('name'): + self.replaceByText(dom, root, node, self.cur_tag.name) + if node.hasAttribute('description'): + self.replaceByText(dom, root, node, self.cur_tag.description) + return None + + def generate(self, blog, src, output): + from dynastie.models import Post, Blog, Tag + + self.hooks = {'posts' : self.createPosts, + 'navigation' : self.createNavigation, + 'tag' : self.createTag, + 'tags' : self.createTags} + + if not os.path.exists(src + '/_tag.html'): + self.addError('No _tag.html found, exiting') + return self.report + + try: + dom = parse(src + '/_tag.html') + except xml.dom.DOMException as e: + self.addError('Error parsing _tag.html : ' + e) + return self.report + + if not os.path.exists(output + '/tag'): + os.mkdir(output + '/tag') + + post_nodes = dom.getElementsByTagNameNS(self.URI, "posts") + if not post_nodes is None: + if post_nodes[0].hasAttribute("limit"): + self.posts_per_page = int(post_nodes[0].getAttribute("limit")) + else: + self.posts_per_page = 5 + else: + self.addError('No tag dyn:posts found') + + tags = Tag.objects.all() + + for tag in tags: + self.cur_tag = tag + filename = self.filename + '.html' + posts = Post.objects.filter(tags__in=[tag.id], published=True).order_by('-creation_date') + + self.nb_pages = 0 + self.cur_page = 0 + self.cur_post = 0 + + self.dirname = '/tag/' + tag.name_slug + + if posts.count() > self.posts_per_page: + self.nb_pages = self.computeNbPages(posts.count(), self.posts_per_page) + + 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("*") + nodes[0] = self.parse(src, self.hooks, posts, dom, nodes[0]) + self.writeIfNotTheSame(output + self.dirname + '/' + filename, nodes[0]) + self.cur_page = self.cur_page + 1 + filename = self.filename + str(self.cur_page) + '.html' + dom = parse(src + '/_tag.html') + + while os.path.exists(filename): + self.addReport('Removing unused ' + filename) + os.unlink(filename) + filename = filename + '.gz' + if os.path.exists(filename): + self.addReport('Removing unused ' + filename) + os.unlink(filename) + self.cur_page = self.cur_page + 1 + filename = output + self.dirname + '/' + self.filename + str(self.cur_page) + '.html' + + if not self.somethingWrote: + self.addReport('Nothing changed') + + return self.report +