Archive for November, 2009

Статус проекта pybb

Зимой 08-09 я активно работал над проектом pybb, затем весной я забил на проект и вот последний месяц опять работаю :) В течении года от нескольких человек поступили существенные контрибуции, за что им большое спасибо. Правда некоторые я вырезал уже, потому что понял, что проект начинает превращаться в очередной all-in-one кухонный комбайн. Из существенного — были оторваны личные сообщения, были вырезаны левые поля типа location, site, icq и т.д. из форумного профиля, была вырезана генерация специфических вещей из главных вьюшек типа index, category, topic и перенесена в template tags, было вырезано велосипедное поле для аватарки с ресайзом и заменено на поле из пакета sorl-thumbnail, всего и не припомню. Суть этих изменений в том, что pybb должен содержать лишь базовый функционал форумного движка, который каждый уже сам сможет расширять при желании для нужд конкретного проекта.

Я подумываю также вырезать шаблоны из стандартной поставки pybb и выложить их в виде отдельного пакета. Кстати, один уже такой пакет я создал — это pybb-templates-fluxbb. Шаблоны, имитирующие вид форума fluxbb (punbb в девичестве). Большая часть шаблонов уже сделана, остались правки по мелочи и i18n. Посмотреть на то как выглядят шаблоны можно тут http://pydev.ru

Отсутствие шаблонов в базовой поставке позволит более вдумчиво разносить JS-логику и template тэги. Часть будет специфичной для шаблона, а часть будет общая для всех шаблонов т.е. будет лежать в пакете pybb. Пример общей js логики — скрипт для прорисовывания дополнительных файловых полей в форме для создания сообщения. Ещё один пример: скрипты markitup редактора.

Я не думаю останавливаться на достигнутым и надеюсь вырезать что-нибудь ещё. Возможно, генерацию email извещений — был ведь какой-то стандартный пакет, возможно, им заменю :-)

Также, я думаю, имеет смысл создать проект с именем типа pybb-standalone, который будет представлять из себя готовый django-проекты, который можно будет поднять на сервере с минимальными усилиями. От текущего варианта установки волосы дыбом встают.

Приятно, что на базе pybb работают несколько живых форумов:

Установка satchmo 0.9 в virtualenv

Читаем quickstart и делаем:

lorien@lorien:~$ cd /web
lorien@lorien:/web$ mkdir supershop
lorien@lorien:/web$ cd supershop
lorien@lorien:/web/supershop$ virtualenv .env
New python executable in .env/bin/python
Installing setuptools............done.
lorien@lorien:/web/supershop$ source .env/bin/activate
(.env)lorien@lorien:/web/supershop$ easy_install pip
...
(.env)lorien@lorien:/web/supershop$ pip install -r http://bitbucket.org/chris1610/satchmo/raw/tip/scripts/requirements.txt
...
(.env)lorien@lorien:/web/supershop$ pip install -e hg+http://bitbucket.org/chris1610/satchmo/@v0.9#egg=satchmo
...
(.env)lorien@lorien:/web/supershop$ clonesatchmo.py
...
ImportError: No module named satchmo_skeleton
(.env)lorien@lorien:/web/supershop$ ln -s /web/supershop/.env/src/satchmo/satchmo/projects/skeleton /web/supershop/.env/lib/python2.5/site-packages/satchmo_skeleton
(.env)lorien@lorien:/web/supershop$ clonesatchmo.py
...
Store installation complete.
You may run the server by typying: 
 cd store 
 python manage.py runserver

Библиотека для sape - рефакторинг

Так получилось, что я в очередной раз переписал библиотеку для работы с биржей ссылок sape.ru. В течение нескольких месяцев я пользовался библиотекой linkexchange, про которую уже писал раньше. Плюсы linkexchange — автор оперативно фиксит глюки. Минусы — глюки есть, за время использования я наткнулся на три штуки, о которых прямо или косвенно были посланы багрепорты. Свои глюки роднее — я решил вернуться к использованию самописаного модуля, первую версию которого я разработал ещё год или два назад. Как всегда переписал всё с нуля. Гавное отличие новой версии библиотеки от прежних — я отказался от обновления локальной базы ссылок прямо в коде сайта при обработке чьего-либо запроса. Ноги этого подхода растут из PHP-библиотеки, в которой такой подход оправдан т.к. позволяет использовать библиотеку большому количеству веб-мастеров, даже тем, кто не знает что такое cron и с чем его едят. В моём же случае мне наплевать на людей, которые не умеют использовать cron, поэтому я разделил библиотеку на две части: client и provider. Provider умеет обращаться к серверу sape.ru, забирать оттуда дамп базы данных, парсить его и сохранять локально в формате эффективном для быстрой выборки данных. А client это оочень маленький код, который просто умеет по данному ключу делать выборку данных, по сути, можно обойтись и вовсе без клиента т.к. всё равно всё сводится к вызову функции sape.provider.Provider::read_database_key. Таким образом теперь глюки sape.ru сервера не влияют на работу сайта т.к. базу обновляется скриптом, вызываемым по крону. Другое новшество библиотеки — я храню локально ссылки в DBM-базе, с которой работаю через модуль anydbm. Все говорят, что этот dbm — быстрая штука, если честно, я ещё не проверял :D Но должно быстрее быть старого подхода, когда я каждый раз считывал в память сохранённый дамп, десерилизовывал его с помощью библиотеки phpserialize и только затем уже искал нужный ключ.

Подробности о том, как использовать библиотеку в Django и неDjango проектах, читайте в README

Сорцы как всегда на битбакете. А ещё я научился оформлять distutils-пакеты и регистрировать их на PyPI. Так что либу можно ставить также через easy_install и pip. Обо всех глюках просьба писать на мыло.