Do things in a more python way

This commit is contained in:
Gregory Soutade 2014-09-24 20:27:27 +02:00
parent 5e1007e7da
commit 7aa99e0cbe
15 changed files with 108 additions and 177 deletions

4
.gitignore vendored
View File

@ -1,4 +1,6 @@
*~ *~
*.pyc *.pyc
*_* *_*
*.bdd *.bdd
*.gz
*.bak

View File

@ -17,17 +17,11 @@
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Dynastie. If not, see <http://www.gnu.org/licenses/>. along with Dynastie. If not, see <http://www.gnu.org/licenses/>.
""" """
import os
from xml.dom.minidom import parse, parseString
from dynastie.generators.generator import DynastieGenerator
from dynastie.generators.index import Index from dynastie.generators.index import Index
from django.db import models from django.db import models
class AllPosts(Index): class AllPosts(Index):
filename = 'all_posts'
cur_post = 0
def createPosts(self, posts, dom, root, node): def createPosts(self, posts, dom, root, node):
posts_elem = self.createElement(dom, 'posts') posts_elem = self.createElement(dom, 'posts')
@ -46,7 +40,7 @@ class AllPosts(Index):
def createMonth(self, posts, dom, root, node): def createMonth(self, posts, dom, root, node):
date_format = node.getAttribute('format') date_format = node.getAttribute('format')
if date_format == '': if not date_format:
date_format = '%B' date_format = '%B'
self.cur_month = posts[0].creation_date.month self.cur_month = posts[0].creation_date.month
@ -57,11 +51,9 @@ class AllPosts(Index):
prev_month = None prev_month = None
for p in posts: for p in posts:
if p.creation_date.month == self.cur_month: if p.creation_date.month == self.cur_month:
cur_posts.append(p) cur_posts.insert(0, p)
continue continue
cur_posts.reverse()
month_elem = self.createElement(dom, 'month') month_elem = self.createElement(dom, 'month')
month_def = dom.createElement('month') month_def = dom.createElement('month')
month_def.appendChild(dom.createTextNode(cur_posts[0].creation_date.strftime(date_format))) month_def.appendChild(dom.createTextNode(cur_posts[0].creation_date.strftime(date_format)))
@ -81,7 +73,7 @@ class AllPosts(Index):
cur_posts.append(p) cur_posts.append(p)
# Last month # Last month
if len(cur_posts) != 0: if cur_posts:
cur_posts.reverse() cur_posts.reverse()
month_elem = self.createElement(dom, 'month') month_elem = self.createElement(dom, 'month')
month_def = dom.createElement('month') month_def = dom.createElement('month')
@ -161,6 +153,8 @@ class AllPosts(Index):
def generate(self, blog, src, output): def generate(self, blog, src, output):
from dynastie.models import Post, Blog, Category from dynastie.models import Post, Blog, Category
self.filename = 'all_posts'
self.hooks['year'] = self.createYear self.hooks['year'] = self.createYear
self.hooks['month'] = self.createMonth self.hooks['month'] = self.createMonth
self.hooks['posts'] = self.createPosts self.hooks['posts'] = self.createPosts

View File

@ -17,23 +17,12 @@
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Dynastie. If not, see <http://www.gnu.org/licenses/>. along with Dynastie. If not, see <http://www.gnu.org/licenses/>.
""" """
import os
from datetime import datetime from datetime import datetime
from xml.dom.minidom import parse, parseString
from dynastie.generators.generator import DynastieGenerator
from dynastie.generators.index import Index from dynastie.generators.index import Index
from django.db import models from django.db import models
class Archive(Index): class Archive(Index):
cur_page = 0
nb_pages = 0
cur_post = 0
posts_per_page = 0
filename = 'index'
dirname = ''
cur_year = 0
def createArchive(self, posts, dom, root, node): def createArchive(self, posts, dom, root, node):
if node.hasAttribute('year'): if node.hasAttribute('year'):
self.replaceByText(dom, root, node, str(self.cur_year)) self.replaceByText(dom, root, node, str(self.cur_year))
@ -54,7 +43,7 @@ class Archive(Index):
return self.report return self.report
first_post = posts[0] first_post = posts[0]
last_post = Post.objects.filter(published=True, front_page=True).order_by('-creation_date')[0] last_post = posts[len(posts)-1]
start_year = first_post.creation_date.year start_year = first_post.creation_date.year
end_year = last_post.creation_date.year end_year = last_post.creation_date.year
@ -65,11 +54,9 @@ class Archive(Index):
self.cur_year = i self.cur_year = i
posts = Post.objects.filter(published=True, front_page=True, creation_date__gt=datetime(i, 1, 1), creation_date__lt=datetime(i+1, 1, 1)).order_by('-creation_date') posts = Post.objects.filter(published=True, creation_date__gt=datetime(i, 1, 1), creation_date__lt=datetime(i+1, 1, 1)).order_by('-creation_date')
self.nb_pages = 0 self.resetCounters()
self.cur_page = 0
self.cur_post = 0
self.dirname = '/archive/' + str(i) self.dirname = '/archive/' + str(i)

View File

@ -20,7 +20,6 @@
import os import os
import datetime import datetime
import xml import xml
from dynastie.generators.generator import DynastieGenerator
from dynastie.generators.rss import RSS from dynastie.generators.rss import RSS
from xml.dom.minidom import getDOMImplementation from xml.dom.minidom import getDOMImplementation
from django.db import models from django.db import models

View File

@ -17,22 +17,11 @@
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Dynastie. If not, see <http://www.gnu.org/licenses/>. along with Dynastie. If not, see <http://www.gnu.org/licenses/>.
""" """
import os
from xml.dom.minidom import parse, parseString
from dynastie.generators.generator import DynastieGenerator
from dynastie.generators.index import Index from dynastie.generators.index import Index
from django.db import models from django.db import models
class Category(Index): class Category(Index):
cur_page = 0
nb_pages = 0
cur_post = 0
posts_per_page = 0
filename = 'index'
dirname = ''
cur_category = None
def createCategory(self, posts, dom, root, node): def createCategory(self, posts, dom, root, node):
if node.hasAttribute('name'): if node.hasAttribute('name'):
self.replaceByText(dom, root, node, self.cur_category.name) self.replaceByText(dom, root, node, self.cur_category.name)
@ -43,6 +32,8 @@ class Category(Index):
def generate(self, blog, src, output): def generate(self, blog, src, output):
from dynastie.models import Post, Blog, Category from dynastie.models import Post, Blog, Category
self.cur_category = None
self.hooks['category'] = self.createCategory self.hooks['category'] = self.createCategory
dom = self.parseTemplate(blog, src, output, 'category', 'category') dom = self.parseTemplate(blog, src, output, 'category', 'category')
@ -54,9 +45,7 @@ class Category(Index):
self.cur_category = category self.cur_category = category
posts = Post.objects.filter(category__exact=category, published=True).order_by('-creation_date') posts = Post.objects.filter(category__exact=category, published=True).order_by('-creation_date')
self.nb_pages = 0 self.resetCounters()
self.cur_page = 0
self.cur_post = 0
self.dirname = '/category/' + category.name_slug self.dirname = '/category/' + category.name_slug

View File

@ -56,8 +56,6 @@ class StrictUTF8Writer(codecs.StreamWriter):
class DynastieGenerator: class DynastieGenerator:
URI = "http://indefero.soutade.fr/p/dynastie" URI = "http://indefero.soutade.fr/p/dynastie"
report = ''
somethingWrote = False
def __init__(self, hash_posts=None, hash_posts_content=None): def __init__(self, hash_posts=None, hash_posts_content=None):
self.report = '' self.report = ''
@ -67,11 +65,11 @@ class DynastieGenerator:
def addReport(self, string, color=''): def addReport(self, string, color=''):
if string in self.report: return if string in self.report: return
if color != '': if color:
self.report = self.report + '<span style="color:' + color + '">' self.report = self.report + '<span style="color:' + color + '">'
self.report = self.report + '<b>' + self.__class__.__name__ + '</b> : ' self.report = self.report + '<b>' + self.__class__.__name__ + '</b> : '
self.report = self.report + string self.report = self.report + string
if color != '': if color:
self.report = self.report + '</span>' self.report = self.report + '</span>'
self.report = self.report + '<br/>\n' self.report = self.report + '<br/>\n'
@ -105,8 +103,8 @@ class DynastieGenerator:
else: else:
cache_obj = cache_objs[0] cache_obj = cache_objs[0]
if not cache_obj is None or os.path.exists(filename): if cache_obj or os.path.exists(filename):
if cache_obj is None: if not cache_obj:
src_md5 = hashlib.md5() src_md5 = hashlib.md5()
f = open(filename,'rb') f = open(filename,'rb')
src_md5.update(f.read()) src_md5.update(f.read())
@ -125,7 +123,8 @@ class DynastieGenerator:
f.write(content) f.write(content)
f.close() f.close()
return return
os.unlink(filename) if os.path.exists(filename):
os.unlink(filename)
if cache_obj is None: if cache_obj is None:
cache_obj = FileOutputCache(name=filename, hash=dst_md5.hexdigest()) cache_obj = FileOutputCache(name=filename, hash=dst_md5.hexdigest())
@ -161,20 +160,20 @@ class DynastieGenerator:
def createElement(self, dom, name='', content='', subtree=None): def createElement(self, dom, name='', content='', subtree=None):
div = dom.createElement('div') div = dom.createElement('div')
if name != '': if name:
div.setAttribute('class', name) div.setAttribute('class', name)
if content != '': if content:
div.appendChild(dom.createTextNode(content)) div.appendChild(dom.createTextNode(content))
if not subtree is None: if subtree:
self.cloneSubtree(div, subtree) self.cloneSubtree(div, subtree)
return div return div
def createMeta(self, dom, name='', content=''): def createMeta(self, dom, name='', content=''):
div = dom.createElement('meta') div = dom.createElement('meta')
if name != '': if name:
div.setAttribute('name', name) div.setAttribute('name', name)
if content != '': if content:
div.setAttribute('content', content) div.setAttribute('content', content)
return div return div
@ -185,7 +184,7 @@ class DynastieGenerator:
if node.prefix == 'dyn': if node.prefix == 'dyn':
if node.localName in values: if node.localName in values:
content = values[node.localName] content = values[node.localName]
if type(content) == unicode or type(content) == str: if isinstance(content, basestring):
new_elem = self.createElement(dom, node.localName, content) new_elem = self.createElement(dom, node.localName, content)
else: else:
new_elem = self.createElement(dom, node.localName) new_elem = self.createElement(dom, node.localName)
@ -204,16 +203,15 @@ class DynastieGenerator:
def _parse(self, hooks, posts, dom, root): def _parse(self, hooks, posts, dom, root):
for node in root.childNodes: for node in root.childNodes:
if node.prefix == 'dyn': if node.prefix == 'dyn' and node.localName in hooks:
if node.localName in hooks: node = hooks[node.localName](posts, dom, root, node)
node = hooks[node.localName](posts, dom, root, node) if node and node.hasChildNodes():
if not node is None and node.hasChildNodes():
self._parse(hooks, posts, dom, node) self._parse(hooks, posts, dom, node)
def parse(self, src, hooks, posts, dom, root): def parse(self, src, hooks, posts, dom, root):
bases = dom.getElementsByTagNameNS(self.URI, 'base') bases = dom.getElementsByTagNameNS(self.URI, 'base')
if len(bases) == 0: if not bases:
self._parse(hooks, posts, dom, root) self._parse(hooks, posts, dom, root)
return root return root
@ -233,7 +231,7 @@ class DynastieGenerator:
return root return root
target_blocks = base.getElementsByTagNameNS(self.URI, 'block') target_blocks = base.getElementsByTagNameNS(self.URI, 'block')
if len(target_blocks) == 0: if not target_blocks:
self.addError('No \'block\' defined in ' + src + '/' + filename) self.addError('No \'block\' defined in ' + src + '/' + filename)
return root return root

View File

@ -19,24 +19,17 @@
""" """
import os import os
import datetime import datetime
import hashlib
import xml import xml
from xml.parsers.expat import * from xml.parsers.expat import *
import xml.parsers.expat import xml.parsers.expat
from xml.dom.minidom import parse, parseString from xml.dom.minidom import parse, parseString
from dynastie.generators.generator import DynastieGenerator, StrictUTF8Writer from dynastie.generators.generator import DynastieGenerator, StrictUTF8Writer
from django.db import models from django.db import models
from dynastie.generators import markdown2
class Index(DynastieGenerator): class Index(DynastieGenerator):
cur_page = 0
nb_pages = 0
cur_post = 0
cur_post_obj = None
posts_per_page = 0
filename = 'index'
dirname = ''
blog = None
def __init__(self, hash_posts=None, hash_posts_content=None): def __init__(self, hash_posts=None, hash_posts_content=None):
DynastieGenerator.__init__(self, hash_posts, hash_posts_content) DynastieGenerator.__init__(self, hash_posts, hash_posts_content)
@ -55,6 +48,19 @@ class Index(DynastieGenerator):
self.first_try = True self.first_try = True
self.posts_per_page = 5
self.filename = 'index'
self.dirname = ''
self.blog = None
self.resetCounters()
def resetCounters(self):
self.nb_pages = 0
self.cur_page = 0
self.cur_post = 0
self.cur_post_obj = None
def createReplace(self, posts, dom, root, replace_elem): def createReplace(self, posts, dom, root, replace_elem):
if not replace_elem.hasAttribute('div_name'): if not replace_elem.hasAttribute('div_name'):
self.addError('No attribute div_name for a replace tag') self.addError('No attribute div_name for a replace tag')
@ -68,7 +74,7 @@ class Index(DynastieGenerator):
value = value.replace('dyn:blog_id', str(self.blog.id)) value = value.replace('dyn:blog_id', str(self.blog.id))
if not self.cur_post_obj is None: if self.cur_post_obj:
url = self.cur_post_obj.getPath() url = self.cur_post_obj.getPath()
full_url = self.cur_post_obj.blog.name + url full_url = self.cur_post_obj.blog.name + url
value = value.replace('dyn:post_url', url) value = value.replace('dyn:post_url', url)
@ -96,10 +102,10 @@ class Index(DynastieGenerator):
self.replaceByText(dom, root, node, category) self.replaceByText(dom, root, node, category)
def createNavigation(self, posts, dom, root, node): def createNavigation(self, posts, dom, root, node):
if self.nb_pages == 0 or self.nb_pages == 1: if 0 <= self.nb_pages <= 1:
return None return None
if self.dirname != '': if self.dirname:
if self.dirname.startswith('/'): if self.dirname.startswith('/'):
href = '<a href="' + self.dirname + '/' + self.filename href = '<a href="' + self.dirname + '/' + self.filename
else: else:
@ -189,13 +195,13 @@ class Index(DynastieGenerator):
end = code.find('</dyn:code>') end = code.find('</dyn:code>')
if end < start: if end < start:
self.addError('Invalid <dyn:code> tags in ' + filename) self.addError('Invalid <dyn:code> tags in ' + self.filename)
break break
try: try:
dom = parseString(code[start:end+11]) dom = parseString(code[start:end+11])
except xml.dom.DOMException as e: except xml.dom.DOMException as e:
self.addError('Error parsing ' + filename) self.addError('Error parsing ' + self.filename)
break break
res = self.createCode(dom, dom.firstChild) res = self.createCode(dom, dom.firstChild)
@ -211,12 +217,11 @@ class Index(DynastieGenerator):
node = self.hash_posts[post.id] node = self.hash_posts[post.id]
return node.cloneNode(0) return node.cloneNode(0)
values = {} values = {'post_content': '', 'author': 'Unknown'}
try: try:
values['author'] = post.author.first_name + ' ' + post.author.last_name values['author'] = post.author.first_name + ' ' + post.author.last_name
except: except:
values['author'] = 'Unknown' pass
values['post_content'] = ''
blog = post.blog blog = post.blog
blog.create_paths() blog.create_paths()
@ -232,7 +237,6 @@ class Index(DynastieGenerator):
post_content = f.read() post_content = f.read()
f.close() f.close()
if post.content_format == Post.CONTENT_TEXT: if post.content_format == Post.CONTENT_TEXT:
from dynastie.generators import markdown2
post_content = markdown2.markdown(post_content) post_content = markdown2.markdown(post_content)
self.hash_posts_content[filename] = post_content self.hash_posts_content[filename] = post_content
else: else:
@ -252,8 +256,6 @@ class Index(DynastieGenerator):
content_node.appendChild(new_node) content_node.appendChild(new_node)
if post.id in self.hash_posts: if post.id in self.hash_posts:
import hashlib
# Here, we are in first_try, check that computed # Here, we are in first_try, check that computed
# post has the same result than the one in cache # post has the same result than the one in cache
self.first_try = False self.first_try = False
@ -276,8 +278,9 @@ class Index(DynastieGenerator):
# If not, clear cache # If not, clear cache
if md5_1.digest() != md5_2.digest(): if md5_1.digest() != md5_2.digest():
self.hash_posts = {} self.hash_posts = {}
self.hash_posts[post.id] = post_elem.cloneNode(0)
self.hash_posts[post.id] = post_elem.cloneNode(0) else:
self.hash_posts[post.id] = post_elem.cloneNode(0)
return post_elem return post_elem
@ -293,11 +296,11 @@ class Index(DynastieGenerator):
else: else:
post_elem = self.createElement(dom, '', '<b>No posts yet</b>') post_elem = self.createElement(dom, '', '<b>No posts yet</b>')
self.cur_post_obj = None self.cur_post_obj = None
if not post_elem is None: if post_elem:
posts_elem.appendChild(post_elem) posts_elem.appendChild(post_elem)
# Parse inner HTML # Parse inner HTML
self._parse(self.hooks, posts, dom, post_elem) self._parse(self.hooks, posts, dom, post_elem)
self.cur_post = self.cur_post + 1 self.cur_post = self.cur_post + 1
if self.cur_post == len(posts): if self.cur_post == len(posts):
@ -347,7 +350,7 @@ class Index(DynastieGenerator):
else: else:
cur_post = None cur_post = None
if not cur_post is None: if cur_post:
for tag in cur_post.tags.all(): for tag in cur_post.tags.all():
if create_link: if create_link:
tag_elem = self.createElement(dom, 'tag') tag_elem = self.createElement(dom, 'tag')
@ -442,18 +445,16 @@ class Index(DynastieGenerator):
self.addError('Error parsing _%s.html : ' + e) self.addError('Error parsing _%s.html : ' + e)
return None return None
if not directory is None and not os.path.exists(output + '/' + directory): if directory and not os.path.exists(output + '/' + directory):
os.mkdir(output + '/' + directory) os.mkdir(output + '/' + directory)
if not parsePostsTag: return dom if not parsePostsTag: return dom
post_nodes = dom.getElementsByTagNameNS(self.URI, "posts") post_nodes = dom.getElementsByTagNameNS(self.URI, "posts")
if not post_nodes is None and len(post_nodes) > 0: if post_nodes:
if post_nodes[0].hasAttribute("limit"): if post_nodes[0].hasAttribute("limit"):
self.posts_per_page = int(post_nodes[0].getAttribute("limit")) self.posts_per_page = int(post_nodes[0].getAttribute("limit"))
else:
self.posts_per_page = 5
else: else:
self.addWarning('No tag dyn:posts found') self.addWarning('No tag dyn:posts found')

View File

@ -18,22 +18,13 @@
along with Dynastie. If not, see <http://www.gnu.org/licenses/>. along with Dynastie. If not, see <http://www.gnu.org/licenses/>.
""" """
import os import os
from xml.dom.minidom import parse, parseString from xml.dom.minidom import parse
import xml.parsers.expat import xml.parsers.expat
from dynastie.generators.generator import DynastieGenerator
from dynastie.generators.index import Index from dynastie.generators.index import Index
from django.db import models from django.db import models
class LJDC(Index): class LJDC(Index):
cur_page = 0
nb_pages = 0
cur_post = 0
posts_per_page = 20
filename = 'index'
dirname = '/ljdc'
cur_category = None
def createPost(self, posts, dom, post_elem, root): def createPost(self, posts, dom, post_elem, root):
new_elem = self.createElement(dom, 'ljdc') new_elem = self.createElement(dom, 'ljdc')
@ -73,6 +64,9 @@ class LJDC(Index):
return srcdom return srcdom
def generate(self, blog, src, output): def generate(self, blog, src, output):
self.posts_per_page = 20
self.dirname = '/ljdc'
srcdom = self._load_references(src) srcdom = self._load_references(src)
if srcdom is None: return None if srcdom is None: return None

View File

@ -19,6 +19,7 @@
""" """
import datetime import datetime
import os import os
import xml
from xml.dom.minidom import parse, parseString from xml.dom.minidom import parse, parseString
from dynastie.generators.generator import DynastieGenerator, StrictUTF8Writer from dynastie.generators.generator import DynastieGenerator, StrictUTF8Writer
from dynastie.generators.index import Index from dynastie.generators.index import Index
@ -27,9 +28,6 @@ from dynastie.tree import TreeNode
class Post(Index): class Post(Index):
cur_comment = None
comment_index = {}
def createReplace(self, post, dom, root, replace_elem): def createReplace(self, post, dom, root, replace_elem):
if not replace_elem.hasAttribute('div_name'): if not replace_elem.hasAttribute('div_name'):
self.addError('No attribute div_name for a replace tag') self.addError('No attribute div_name for a replace tag')
@ -43,13 +41,10 @@ class Post(Index):
value = value.replace('dyn:post_id', str(post.id)) value = value.replace('dyn:post_id', str(post.id))
if self.cur_comment is None: if self.cur_comment is None:
value = value.replace('dyn:comment_index', '0') value = value.replace('dyn:comment_index', '0')
else:
value = value.replace('dyn:comment_index', str(self.comment_index[self.cur_comment.id]))
if self.cur_comment is None:
value = value.replace('dyn:comment_id', '0') value = value.replace('dyn:comment_id', '0')
else: else:
value = value.replace('dyn:comment_index', str(self.comment_index[self.cur_comment.id]))
value = value.replace('dyn:comment_id', str(self.cur_comment.id)) value = value.replace('dyn:comment_id', str(self.cur_comment.id))
value = value.replace('dyn:blog_id', str(self.blog.id)) value = value.replace('dyn:blog_id', str(self.blog.id))
url = post.getPath() url = post.getPath()
full_url = post.blog.name + url full_url = post.blog.name + url
@ -86,8 +81,8 @@ class Post(Index):
comments = Comment.objects.filter(post=post).order_by('date') comments = Comment.objects.filter(post=post).order_by('date')
cur_comment = None self.cur_comment = None
comment_index = {} self.comment_index = {}
index = 1 index = 1
rootNode = TreeNode('', '') rootNode = TreeNode('', '')
@ -146,9 +141,12 @@ class Post(Index):
self.addError('name attribute \'' + name + '\' unknown for dyn:meta' ) self.addError('name attribute \'' + name + '\' unknown for dyn:meta' )
return None return None
def _createPost(self, post, dom, post_elem, root): def createPostTitle(self, post, dom, root, node):
import sys, traceback value = post.title.replace('"', '&ldquo;')
self.replaceByText(dom, root, node, value)
return None
def _createPost(self, post, dom, post_elem, root):
self.cur_post_obj = post self.cur_post_obj = post
posts = [post] posts = [post]
self.createPost(posts, dom, post_elem, root) self.createPost(posts, dom, post_elem, root)
@ -169,12 +167,16 @@ class Post(Index):
return node return node
def _generate(self, blog, src, output, posts): def _generate(self, blog, src, output, posts):
import xml from dynastie.search import Search
self.cur_comment = None
self.comment_index = {}
self.hooks['post'] = self._createPost self.hooks['post'] = self._createPost
self.hooks['meta'] = self.createMetas self.hooks['meta'] = self.createMetas
self.hooks['comments'] = self.createComments self.hooks['comments'] = self.createComments
self.hooks['replace'] = self.createReplace self.hooks['replace'] = self.createReplace
self.hooks['post_title'] = self.createPostTitle
del self.hooks['navigation'] del self.hooks['navigation']
del self.hooks['recents'] del self.hooks['recents']
del self.hooks['posts'] del self.hooks['posts']
@ -183,6 +185,7 @@ class Post(Index):
if dom is None: return self.report if dom is None: return self.report
impl = xml.dom.getDOMImplementation() impl = xml.dom.getDOMImplementation()
s = Search()
for post in posts: for post in posts:
filename = output + '/post/' filename = output + '/post/'
filename = filename + post.creation_date.strftime("%Y") + '/' + post.creation_date.strftime("%m") + '/' filename = filename + post.creation_date.strftime("%Y") + '/' + post.creation_date.strftime("%m") + '/'
@ -192,11 +195,9 @@ class Post(Index):
if not post.published: if not post.published:
if os.path.exists(filename): if os.path.exists(filename):
from dynastie.search import *
os.unlink(filename) os.unlink(filename)
os.unlink(filename + '.gz') os.unlink(filename + '.gz')
self.addReport('Remove ' + filename) self.addReport('Remove ' + filename)
s = Search()
s.delete_post(blog, post.id) s.delete_post(blog, post.id)
continue continue
#print 'Generate ' + filename #print 'Generate ' + filename

View File

@ -30,7 +30,7 @@ class RSS(DynastieGenerator):
def appendElement(self, dom, root, name='', content='', attributes=None): def appendElement(self, dom, root, name='', content='', attributes=None):
elem = dom.createElement(name) elem = dom.createElement(name)
if not attributes is None: if attributes:
for k, v in attributes.iteritems(): for k, v in attributes.iteritems():
elem.setAttribute(k, v) elem.setAttribute(k, v)
if content != '': if content != '':

View File

@ -18,7 +18,6 @@
along with Dynastie. If not, see <http://www.gnu.org/licenses/>. along with Dynastie. If not, see <http://www.gnu.org/licenses/>.
""" """
import os import os
from datetime import datetime
from xml.dom.minidom import parse, parseString from xml.dom.minidom import parse, parseString
from dynastie.generators.generator import DynastieGenerator, StrictUTF8Writer from dynastie.generators.generator import DynastieGenerator, StrictUTF8Writer
from dynastie.generators.index import Index from dynastie.generators.index import Index
@ -47,7 +46,7 @@ class Search(Index):
return self.report return self.report
post_nodes = dom.getElementsByTagNameNS(self.URI, "posts") post_nodes = dom.getElementsByTagNameNS(self.URI, "posts")
if not post_nodes is None: if post_nodes:
if post_nodes[0].hasAttribute("limit"): if post_nodes[0].hasAttribute("limit"):
self.posts_per_page = int(post_nodes[0].getAttribute("limit")) self.posts_per_page = int(post_nodes[0].getAttribute("limit"))
else: else:
@ -64,7 +63,7 @@ class Search(Index):
post = Post.objects.get(pk=post_id) post = Post.objects.get(pk=post_id)
except: except:
continue continue
if not post is None: if post:
posts.append(post) posts.append(post)
nodes = dom.getElementsByTagName("*") nodes = dom.getElementsByTagName("*")

View File

@ -17,22 +17,11 @@
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Dynastie. If not, see <http://www.gnu.org/licenses/>. along with Dynastie. If not, see <http://www.gnu.org/licenses/>.
""" """
import os
from xml.dom.minidom import parse, parseString
from dynastie.generators.generator import DynastieGenerator
from dynastie.generators.index import Index from dynastie.generators.index import Index
from django.db import models from django.db import models
class Tag(Index): 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): def createTag(self, posts, dom, root, node):
if node.hasAttribute('name'): if node.hasAttribute('name'):
self.replaceByText(dom, root, node, self.cur_tag.name) self.replaceByText(dom, root, node, self.cur_tag.name)
@ -43,6 +32,7 @@ class Tag(Index):
def generate(self, blog, src, output): def generate(self, blog, src, output):
from dynastie.models import Post, Blog, Tag from dynastie.models import Post, Blog, Tag
self.cur_tag = None
self.hooks['tag'] = self.createTag self.hooks['tag'] = self.createTag
dom = self.parseTemplate(blog, src, output, 'tag', 'tag') dom = self.parseTemplate(blog, src, output, 'tag', 'tag')
@ -54,9 +44,7 @@ class Tag(Index):
self.cur_tag = tag self.cur_tag = tag
posts = Post.objects.filter(tags__in=[tag.id], published=True).order_by('-creation_date') posts = Post.objects.filter(tags__in=[tag.id], published=True).order_by('-creation_date')
self.nb_pages = 0 self.resetCounters()
self.cur_page = 0
self.cur_post = 0
self.dirname = '/tag/' + tag.name_slug self.dirname = '/tag/' + tag.name_slug

View File

@ -84,7 +84,8 @@ class Blog(models.Model):
engine = line.strip() engine = line.strip()
if not engine in globals(): if not engine in globals():
print 'Engine ' + engine + ' doesn\'t exists' print 'Engine ' + engine + ' doesn\'t exists'
self.engines.append(globals()[engine]) else:
self.engines.append(globals()[engine])
f.close() f.close()
else: else:
self.engines.append(globals()['post']) self.engines.append(globals()['post'])

View File

@ -205,15 +205,11 @@ class Search:
for key in hashtable.keys(): for key in hashtable.keys():
if reg.match(key): if reg.match(key):
for post in hashtable[key]: for post in hashtable[key]:
if not post[0] in res: res[post[0]] = res.get(post[0],0) + post[1]
res[post[0]] = post[1]
else:
res[post[0]] += post[1]
sorted_res = sorted(res.iteritems(), key=operator.itemgetter(1)) sorted_res = sorted(res.iteritems(), key=operator.itemgetter(1))
sorted_res.reverse() sorted_res.reverse()
res = [] res = [sorted_res[i][0] for i in range(len(sorted_res))]
for i in range(len(sorted_res)):
res .append(sorted_res[i][0])
return res return res

View File

@ -53,7 +53,7 @@ def have_I_right(request, blog_id=None, post_id=None, must_be_superuser=False, c
if must_be_superuser and not request.user.is_superuser: if must_be_superuser and not request.user.is_superuser:
raise Http404 raise Http404
if not post_id is None: if post_id:
p = cls.objects.get(pk=post_id) p = cls.objects.get(pk=post_id)
if p is None: if p is None:
@ -61,10 +61,10 @@ def have_I_right(request, blog_id=None, post_id=None, must_be_superuser=False, c
blog_id = p.blog.id blog_id = p.blog.id
if not blog_id is None: if blog_id:
if not request.user.is_superuser: if not request.user.is_superuser:
b = Blog.objects.filter(pk=blog_id, writers=request.user.id) b = Blog.objects.filter(pk=blog_id, writers=request.user.id)
if len(b) == 0: if not b:
raise Http404 raise Http404
b = b[0] b = b[0]
else: else:
@ -128,14 +128,11 @@ def index(request):
def disconnect(request): def disconnect(request):
logout(request) logout(request)
c = {'login_failed' : False}
return HttpResponseRedirect('/') return HttpResponseRedirect('/')
@login_required @login_required
def user(request): def user(request):
users = User.objects.all() c = {'users' : User.objects.all()}
c = {'users' : users}
return render(request, 'user.html', c) return render(request, 'user.html', c)
@ -286,6 +283,7 @@ def edit_tag(request, tag_id):
return HttpResponseRedirect('/tag/' + str(b.id)) return HttpResponseRedirect('/tag/' + str(b.id))
if 'edit' in request.POST: if 'edit' in request.POST:
name = tag.name name = tag.name
name = name.strip()
form = TagForm(request.POST, instance=tag) form = TagForm(request.POST, instance=tag)
if form.is_valid(): if form.is_valid():
if request.POST['name'] != name: if request.POST['name'] != name:
@ -351,10 +349,7 @@ def view_blog(request, blog_id):
if 'page' in request.GET: if 'page' in request.GET:
cur_page = int(request.GET['page']) cur_page = int(request.GET['page'])
else: else:
if 'cur_page' in request.session: cur_page = request.session.get('cur_page',0)
cur_page = request.session['cur_page']
else:
cur_page = 0
if cur_page <= 0: if cur_page <= 0:
drafts = Draft.objects.filter(blog=b).order_by('-creation_date') drafts = Draft.objects.filter(blog=b).order_by('-creation_date')
@ -374,15 +369,13 @@ def view_blog(request, blog_id):
end = start + 50 + drafts.count() end = start + 50 + drafts.count()
orig_posts = orig_posts.order_by('-creation_date')[start:end] orig_posts = orig_posts.order_by('-creation_date')[start:end]
posts = []
for p in orig_posts: # Select post without drafts
found = False if drafts:
for d in drafts: drafts_id = [draft.id for draft in drafts]
if d.id == p.id: posts = [p for p in orig_posts if not p.id in drafts_id]
found = True else:
break posts = orig_posts
if not found:
posts.append(p)
form = BlogForm(instance=b) form = BlogForm(instance=b)
@ -390,10 +383,7 @@ def view_blog(request, blog_id):
dict_comments = {} dict_comments = {}
for comment in comments: for comment in comments:
key = comment.post.id key = comment.post.id
if not key in dict_comments: dict_comments[key] = dict_comments.get(key, 0) + 1
dict_comments[key] = 1
else:
dict_comments[key] = dict_comments[key] + 1
navigation_bar = createNavigationBar(b.id, cur_page, nb_pages) navigation_bar = createNavigationBar(b.id, cur_page, nb_pages)
@ -461,10 +451,7 @@ def search_blog(request, blog_id):
dict_comments = {} dict_comments = {}
for comment in comments: for comment in comments:
key = comment.post.id key = comment.post.id
if not key in dict_comments: dict_comments[key] = dict_comments.get(key, 0) + 1
dict_comments[key] = 1
else:
dict_comments[key] = dict_comments[key] + 1
c = {'blog' : b, 'posts' : posts, 'comments' : dict_comments} c = {'blog' : b, 'posts' : posts, 'comments' : dict_comments}
@ -552,9 +539,7 @@ def edit_post(request, post_id):
content = 'Empty post' content = 'Empty post'
comments = Comment.objects.filter(post=post).order_by('date') comments = Comment.objects.filter(post=post).order_by('date')
comment_list = [] comment_list = [comment for comment in comments]
for comment in comments:
comment_list.append(comment)
return render(request, 'edit_post.html', { return render(request, 'edit_post.html', {
'form': form, 'post_id' : post_id, 'content' : content, 'form': form, 'post_id' : post_id, 'content' : content,
@ -652,10 +637,7 @@ def _generate(request, blog_id, report):
dict_comments = {} dict_comments = {}
for comment in comments: for comment in comments:
key = comment.post.id key = comment.post.id
if not key in dict_comments: dict_comments[key] = dict_comments.get(key, 0) + 1
dict_comments[key] = 1
else:
dict_comments[key] = dict_comments[key] + 1
navigation_bar = createNavigationBar(b.id, 0, nb_pages) navigation_bar = createNavigationBar(b.id, 0, nb_pages)