11 November 2010

Pylons и repoze.bfg объединяются в проект Pyramid

Python
From Sandbox
Информация всплыла благодаря бурно развернувшейся дискуссии в в официальной группе проекта. Конкретно стало известно, что:
  • веб-фреймворк Pylons, не так давно добравшийся до релиза 1.0, в нынешнем виде прекращает своё развитие. Несмотря на то, что полная поддержка ветки 1.x будет осуществляться на протяжении ещё нескольких лет, никаких архитектурных изменений и новшеств в проект вноситься не будет;
  • имя «Pylons» теперь следует связывать с зонтичным брендом «проект «Pylons», который будет охватывать разработку всех технологий, пожелавших примкнуть к сообществу (по похожему пути идёт развитие проектов под зонтом «Pocoo», среди которых можно отдельно отметить WSGI-стек Werkzeug, шаблонный движок Jinja 2 и систему документирования python-проектов Sphinx);
  • главной технологией в рамках проекта Pylons на сегодняшний день является веб-фреймворк Pyramid, распространяемый по лицензии, производной от BSD.


Данным сообщением мне хотелось бы уведомить всех разработчиков, использующих или планировавших использовать Pylons в своих проектах о сложившейся ситуации вокруг этого веб-фреймворка. Официального объявления от мейнтейнеров ещё не поступило, но его стоит ожидать в ближайшем будущем.
Убедительно рекомендуется пересмотреть свои планы по использованию Pylons-1.x.
С точки зрения новых проектов, очевидно стоит уже сейчас приобщаться к Pyramid, или выбирать любую другую альтернативную технологию — тот же Werkzeug, Django и прочие, непроизводные от Pylons фреймворки.
Для тех же, кто в данный момент уже ведёт разработку на Pylons, вариантов дальнейших действий не так много:
  • оставаться на ветке 1.x и спокойно вести свои проекты до тех пор, пока этого позволяет функциональность фреймворка.
    Всё же в текущем состоянии Pylons очень стабилен, минималистичен (состоит всего из чуть более 2000 (двух тысяч) строк кода), а все взаимозаменяемые сторонние модули продолжают активно развиваться. В случае необходимости, доработать фреймворк до своих возросших потребностей не составит большого труда;
  • попытаться перенести свой проект на новые рельсы (ну… да, если смелость и мотивация позволяют, то можно и сразу на RoR), пока он ещё не разросся в масштабах и не «прилип» намертво к замороженной платформе.

Для тех, кого в принципе заинтересовал второй вариант, далее представлен очень сжатый пересказ того, что удалось почерпнуть после первого знакомства с официальной документацией к новому проекту.

О сущности пирамид

Pyramid вырос из веб-фреймворка BFG (известного также под именем repoze.bfg), который в свою очередь является потомком платформы Zope, но разрабатывался под сильным впечатлением от Django и Pylons. В этом году разработчики BFG и Pylons решили объединить свои усилия и имеющиеся наработки в рамках обоих проектов, в результати чего появился новый фреймворк (занятно, но в имеющейся документации используется прошедшее время — «Until the end of 2010, Pyramid was known as repoze.bfg; it was merged into the Pylons project at the end of 2010»). В качестве ключевых характеристик проекта, которым уделялось максимум внимания, разработчики отмечают:
  • низкий порог вхождения;
  • минимализм;
  • скорость (производительность);
  • максимально полная и актуальная документация (разработчики отмечают, что благодаря небольшой кодовой базе им отлично удаётся поддерживать документацию в полном и актуальном состоянии);
  • надёжность (каждый релиз имеет 100% покрытие кода юнит-тестами);
  • открытость.

По архитектуре, Pyramid находится где-то посередине между Django/Pylons/любого другого WSGI-тулкита и Zope-платформой, в результате чего у разработчика появляется свобода выбора в подходах к настройке некоторых компонентов системы:
  • поддерживается декларативный стиль настройки веб-приложений через конфигурационные файлы Zope (ZCML, формат на базе XML)...
  • … в то же время, фреймворк позволяет использовать чисто императивный подход Pylons с его INI-конфигами (создание объектов вручную, их настройка в соответствии с параметрами INI-конфига и последующий вызов методов этих объектов в нужных местах);
  • поддерживается traversal-алгоритм для поиска и вызова обработчика запросов (спуск «от корневого объекта — к — вложенным» по графу model-объектов в строгом соответствии с иерархией, отраженной в запрошенном URL). Подобный подход также применяется в фреймворке CherryPy...
  • … в то же время, разрешается использовать стандартный метод маршрутизации URL по шаблону (URL Dispatch), как это сделано в Pylons и Django, а также допустим смешанный подход из traversal-алгоритма и маршрутизации по шаблону;
  • Pyramid использует архитектурный шаблон MVC, однако в несколько видоизменённом виде. Так, компоненты «View» и «Controller» объединены в одну сущность «View», которая отвечает за представление хранимых в «Model» данных, но имеет два различных контекста — «View Callable» и «View Handler».
  • View Callable — это callable-объект (функция, или класс с определённым методом __call__), который отвечает за обработку поступившего запроса. Его ближайшим аналогом в Pylons-приложении является action-метод внутри класса-контроллера. Соответственно сам класс-контроллер является ближайшим аналогом того, что в Pyramid зовётся View Handler;
  • как и Pylons, фреймворк не навязывает разработчику никаких конкретных технологий для хранения и управления данными.

Собственная кодовая база Pyramid состоит примерно из 5000 (пяти тысяч) строк кода, против чуть больше 2000 строк в Pylons-1.0. Вся остальная функциональность реализуется за счёт сторонних пакетов, входящих в список зависимостей проекта.

Ниже представлен список пакетов, которые поставляются вместе с Pylons-1.0 и Pyramid-1.0a1. Вывод получен с помощью утилит virtualenv и pip.

Станадртная комплектация Pylons

Beaker==1.5.4
FormEncode==1.2.3dev
Mako==0.3.5
MarkupSafe==0.11
Paste==1.7.5.1
PasteDeploy==1.3.4
PasteScript==1.7.3
Pygments==1.3.1
Pylons==1.0
Routes==1.12.3
Tempita==0.5dev
WebError==0.10.2
WebHelpers==1.2
WebOb==1.0
WebTest==1.2.3
decorator==3.2.0
nose==0.11.4
simplejson==2.1.2
wsgiref==0.1.2

Станадртная комплектация Pyramid

Beaker==1.5.4
Chameleon==1.2.13
Mako==0.3.5
MarkupSafe==0.11
Paste==1.7.5.1
PasteDeploy==1.3.4
PasteScript==1.7.3
WebOb==1.0
pyramid==1.0a1
repoze.lru==0.3
translationstring==0.3
venusian==0.4
wsgiref==0.1.2
zope.component==3.10.0
zope.configuration==3.7.2
zope.deprecation==3.4.0
zope.event==3.5.0-1
zope.i18nmessageid==3.5.3
zope.interface==3.6.1
zope.schema==3.7.0
— Pylons: 19.
Pyramid: 20.

В количественном отношении ситуация практически не изменилась — Pyramid так же как и Pylons активно опирается на сторонние технологии и WSGI-стек, — однако налицо структурные изменения. Насколько сильно они повлияют на сложность портирования готового Pylons-приложения — сказать трудно. Пока разработчики только лишь упоминают о причинах, побудивших их пойти на столь радикальные изменения (тут более подробно) и обещают со временем предоставить пользователям Pylons 1.x план по миграции на Pyramid без потери функциональности в уже созданных приложениях.

UPD: В сети появился неофициальный гид по миграции с Pylons-1.0. Но целостность и работоспособность данного решения автором топика ещё не проверялась.

UPD: Сферические тесты в вакууме.
Tags: python pylons pylonshq repoze.bfg django zope pyramid wsgi web-разработка
Hubs: Python
+16
1.8k 18
Comments 54
Ads