Кажется, начинаю выходить из очередного периода застоя - дошли руки до обустройства дневника. Вести я его взялся в Pyblosxom. Код движка вгоняет в тоску, но это все, что есть. Остальные, либо написаны на языках, разбираться в которых лень, либо требуют базу данных, что мне тоже нисколько не улыбается.
Постоянно наткаюсь на ситуацию: помню, делал недавно запись по теме, а в какой статье, не помню. Так и чешутся руки прикрутить навигацию следующая/предыдущая статья. В ядре блога эти вещи отсутствуют, как класс, из плагинов нашел только pyentrynavi. Все бы хорошо, если бы версия 0.4 2008/06/10 работала с PyBlosxom 1.5,
который сейчас в trunk сидит. Пришлось немного похачить, чтобы заставить хоть как-то работать.
Во-первых, вылез системно зависимый способ работы с путями файлов. Плагин оказался гвоздями прибит к unix путям, а под windows ни найти текущую запись не мог, ни ссылки корректно сформировать. Сравнение путей удалось вылечить с помощью os.path.normpath. Для формирования правильных ссылок переделал translate_file_to_link. Вообще-то, выкинул и заменил на entry_url.
Во-вторых, плагин зачем-то был жестко привязан к расширению .txt файлов с постами. Поскольку мне удобнее писать заметки на reStructuredText (модуль rst и расширение файлов .rst), все мои записи пошли лесом. Такой расклад меня не устравает, так что ограничение выкинул. (Зачем автор парился с ограничением для меня осталось загадкой. Функция tools.walk и так учитывает известные движку расширения файлов, в том числе добавленные плагинами. Может раньше этого не было?)
В результате имеем патч на версию 0.4 2008/06/10. Остается договориться с автором, чтобы пропихнуть в основную ветку.
--- a/pyentrynavi.py Mon Jul 06 14:59:19 2009 +0600
+++ b/pyentrynavi.py Thu Jul 09 14:54:35 2009 +0600
@@ -44,7 +44,7 @@
from Pyblosxom import tools, entries
import time
-import re
+import os.path
def verify_installation(request):
config = request.getConfiguration()
@@ -53,11 +53,6 @@
return 0
return 1
-def translate_file_to_link(filename, datadir, base_url, flavour):
- datadir = datadir.rstrip('/')
- basename = filename[len(datadir):]
- return base_url+basename[:(basename.rfind('.')+1)]+flavour
-
def cb_prepare(args):
request = args['request']
data = request.getData()
@@ -66,14 +61,13 @@
entry = data['entry_list']
flavour = data['flavour']
- filename = entry[0]['filename']
+ filename = os.path.normpath(entry[0]['filename'])
config = request.getConfiguration()
datadir = config['datadir']
base_url = config['base_url']
- r = re.compile('(.*\.txt$)')
- allentries = tools.Walk(request, datadir, pattern=r)
+ allentries = tools.walk(request, datadir)
# cur_time = time.localtime()
@@ -94,19 +88,22 @@
except ValueError:
return
+ def entry_url(e):
+ # FIXME: flavour is not the same as entry extension
+ return "%s/%s.%s" % (base_url, e["file_path"], flavour)
+
navi_str = ''
if num != (len(entrylist)-1):
fname = entrylist[num+1]
e = entries.fileentry.FileEntry(request, fname, datadir)
- prev_link = translate_file_to_link(fname, datadir,base_url, flavour)
+ prev_link = entry_url(e)
navi_str += '< <a href="http://www.blogger.com/%s">%s</a> '%(prev_link,e['title'])
navi_str += '| <a href="http://www.blogger.com/%s">MAIN</a> |'%base_url
-
if num:
fname = entrylist[num-1]
e = entries.fileentry.FileEntry(request, fname, datadir)
- next_link = translate_file_to_link(fname, datadir, base_url, flavour)
+ next_link = entry_url(e)
navi_str += ' <a href="http://www.blogger.com/%s">%s</a> >'%(next_link,e['title'])
data['entry_navi'] = navi_str