Renyare framework

Feb 19, 2008 09:35

Сегодня я хочу рассказать о ещё одном своём проекте, о котором уже давно надо было рассказать, но не доходили руки.
Проект называется Renyare, что по эльфийски предположительно означает странник. Является он web-фреймворком, написан на python  и преследует следующие цели:
  1. Использование WSGI и только WSGI везде, где это возможно.
  2. Шаблонизация при помощи XSLT и только XSLT.
  3. Как следствие из п. 2 вывод данных в виде XML с конвертацией в HTML, причём как на стороне сервера, так и на стороне клиента.
  4. Поддержка разных СУБД за счет использования SQLAlchemy.
  5. Поддержка мультиязычности за счёт использования gettext и XML.
  6. Высокая степень модульности - возможность быстро и просто подключать новые модули и/или писать новые приложения.
Пока не реализовано, но очень хочется:
  1. Поддержка AJAX. Поскольку вывод в XML, то реализуется достаточно несложно. Основная проблема - сделать так, чтобы поддериживался AJAX и не-AJAX режим.
  2. Сделать-таки URL-диспетчер, основанный на предыдущих постах. Сейчас есть диспетчер layers, читающий структуру из XML-файла, содержащего карту сайта в виде WSGI-цепочек.
  3. Сделать возможность запуска нескольких WSGI-цепочек на 1 запрос, чтобы запускать каждый из "кусков" сайта как отдельный WSGI (частично сделано в модуле includer, вроде даже работает).
Немного о внутреннем устройстве. Каждая часть фреймворка реализована в виде маленького WSGI-приложения, которое старается быть как можно более независимым от остальных. Среди этих приложений имеются:

  • config - читает и доводит до ума опции из конфиг-файла
  • styler - отвечает за присоединение xsl-шаблонов и css-стилей (css недоделан)
  • combiner - отвечает за формирование базовой структуры XML-документа и включение в него контента, сгенерённого приложенями
  • runner - позволяет запускать модули по имени и добавляет доп. информацию о запускаемом приложении в XML, чем очень помогает combiner-у. Самое глаывное - различает типы приложений. Сейчас поддерживаются: WSGI - соответствующие стандарту, CGI - олд-стайл приложения, с чисто текстовым выводом, XML - статический XML+XSLT-контент, HTML - статический HTML.
  • xml_convertor - обработчик, отвечающий за обработку готового XML (решает применять ли XSLT на клиенте или на сервере)
  • forms -отдельный модуль для работы с формами. Как только в браузерах появится(если появится) адекватная поддержка XForms, модуль будет выдавать формы либо в виде классических форм, либо в виде XForms.
  • разнообразные XML-утилиты: (де)сериализатор, sax-парсер на основе имени тега и проч.
  • XSLT-шаблон с некоторыми базовыми функциями, функциями мультиязычности.
  • XSLT-шаблон для работы с формами
  • XSLT-шаблоны для большинства пакетов.
  • другие модули - недоделанные, неработающие или работающие после небольших доработок и поэтому пока  не заслуживающие внимания.
Данные между приложениями передаются через environ либо через БД. В общем и целом, до Джанго/Пилонс мне конечно ещё далеко и не факт, что я не изобретаю велосипед, но поскольку я пишу для себя, мне интересно работать именно с собственной концепцией, попутно разбираясь с низкоуровневыми пробемами.

renyare, python, wsgi

Previous post Next post
Up