Введение

TurboGears — это веб-фреймворк на Python, состоящий из нескольких компонентов WSGI, таких как WebOb, SQLAlchemy, шаблонизатор Kajiki и Repoze. TurboGears разработан на основе архитектуры «модель — представление — контроллер» (MVC), подобно Struts или Ruby on Rails, с целью упрощения и повышения поддерживаемости быстрой разработки веб-приложений на Python. Начиная с версии 2.3, фреймворк также предоставляет «минимальный режим», позволяющий использовать его как микрофреймворк в средах, где полный набор компонентов не требуется или нежелателен.

Компоненты TurboGears

TurboGears создан на базе множества различных библиотек и промежуточного программного обеспечения. Инструменты по умолчанию менялись между версиями 1.x, 2.x и 2.3+, но большинство этих компонентов можно использовать в любой из них, благодаря поддержке множества альтернативных конфигураций. Далее перечислены основные компоненты, с которыми работает разработчик.

Компоненты TurboGears 2.x

SQLAlchemy (Model) определяет структуры таблиц пользовательской базы данных и способы их связывания с объектами Python, с которыми может взаимодействовать контроллер пользователя. Ming (Model) обеспечивает уровень доступа к данным для MongoDB, аналогично тому, как SQLAlchemy определяет связывание коллекций MongoDB с объектами Python, с которыми может взаимодействовать контроллер пользователя. Kajiki (ранее Genshi) (View) определяет шаблоны для HTML или XHTML, которые будет генерировать пользователь. Здесь пользователь определяет фронтенд, с которым будет взаимодействовать клиент. Repoze.who используется для обработки безопасности (идентификации и аутентификации). Пользователи могут определять правила авторизации на основе предикатов, прикрепленных к контроллерам; фреймворк уже предоставляет некоторые встроенные предикаты, но можно создавать и собственные. ToscaWidgets – это основная библиотека виджетов для создания форм и сложных графических интерфейсов. Tosca по умолчанию генерирует простые HTML-формы, но также может использоваться как промежуточное ПО для подключения к более продвинутым виджетам и инструментам JavaScript. В отличие от TurboGears 1.x, больше нет предпочтительной/интегрированной библиотеки JavaScript. Gearbox – это инструментарий, используемый TurboGears для управления проектами, создания новых и обслуживания приложений TurboGears, но пользователь также может подключаться к Apache, Nginx или любому другому веб-серверу, совместимому с WSGI. Версии до 2.3 также использовали: Pylons (Controller) – это промежуточное ПО, обрабатывающее всю логику бэкенда пользователя и подключающееся к веб-серверу пользователя для предоставления данных в сеть. Paster был командным инструментарием и веб-сервером, использовавшимся вместо Gearbox. Repoze.what использовался для обработки авторизации. При определении элементов контроллера пользователя, которые должны быть доступны через веб, предикаты repoze.what определяют, кто может получить к ним доступ и при каких условиях.

Компоненты TurboGears 1.x

SQLObject (Model) – программный бэкенд данных, способный создавать базу данных или взаимодействовать с существующими данными на множестве серверов баз данных. SQLAlchemy планируется сделать стандартным в TurboGears версии 1.1 и выше. Kid (View) – движок шаблонов XHTML, в котором все шаблоны являются корректными XHTML или XML файлами, обычно создаваемыми таким образом, чтобы их можно было открывать как обычные XHTML файлы для проверки дизайна. При этом предусмотрена возможность встраивания фрагментов Python в XML-подобном формате. Genshi является преемником Kid и заменит его в качестве движка шаблонов по умолчанию в TurboGears версии 1.1 и выше. Он практически на 100% совместим с Kid по синтаксису. CherryPy (Controller) – промежуточное программное обеспечение, позволяющее разрабатывать веб-приложения путем написания обработчиков событий, возвращающих данные (в случае TurboGears) шаблонам. Те же данные могут быть получены и в формате Ajax как поток данных JSON. MochiKit – предпочтительная, но необязательная библиотека JavaScript для TurboGears 1.x. Она разработана для того, чтобы сделать программирование на JavaScript более похожим на Python. В основном используется для реализации функций и виджетов Ajax, поскольку предоставляет интерфейс для асинхронного получения потоков данных JSON.

Плагины шаблонов

Другие языки шаблонов, отличные от Genshi, могут быть использованы через файл конфигурации приложения пользователя. В настоящее время в версии 2.1 поддерживаются плагины Myghty, Jinja2, Mako, Cheetah и Kajiki. Поддержка Kid в настоящее время не планируется, поскольку Genshi практически идентичен ему. Этот список может изменяться в будущих версиях.

История проекта

TurboGears был первоначально создан в 2005 году Кевином Дангором как основа для еще не выпущенного продукта Zesty News. Когда он выпустил его в качестве фреймворка с открытым исходным кодом в конце сентября 2005 года, он получил более 30 000 скачиваний скринкастов в первые 3 месяца. В январе 2007 года Кевин Дангоор ушел в отставку с поста руководителя проекта, а Альберто Вальверде возглавил проект в качестве его преемника, но впоследствии ушел в отставку из-за других личных обязательств. Альберто по-прежнему участвует в сообществе TurboGears через свой проект ToscaWidgets. Проект TurboGears в настоящее время управляется совместно группой из примерно полудюжины основных разработчиков под руководством Марка Рамма (в качестве руководителя разработки TurboGears 2) и Флорента Эйде (в качестве менеджера по выпуску Turbogears 1.x). В июне 2007 года сообщество начало эксперименты по размещению API TurboGears поверх компонентов и протоколов, используемых в Pylons, и появились предположения, что два фреймворка могут наконец объединиться. Однако в официальной документации TurboGears 2 говорится, что это вряд ли произойдет из-за "различных, но совместимых приоритетов" обоих проектов. Pylons хотел сосредоточиться на низкоуровневом, расширяемом дизайне, в то время как TurboGears была сосредоточена на предоставлении полного, удобного для пользователя пакета, и поэтому они работают вместе так же, как Debian и Ubuntu сейчас. Новая ветвь 2.x имела свой первый стабильный релиз в мае 2009 года. По состоянию на осень 2008 года, TurboGears имеет большое и активное сообщество с более чем 3000 пользователей в списке рассылки TurboGears, книгу от Prentice Hall, опубликованную в ноябре 2006 года, и ряд приложений TurboGears с открытым и проприетарным кодом, развернутых в реальных проектах. Разработка продвигается умеренными, но устойчивыми темпами и была вновь стимулирована успешным участием проекта в качестве организации-ментора в Google Summer of Code в 2008 и 2009 годах. TurboGears 1.1, предназначенный для помощи устаревшим сайтам в переходе на 2.x, был выпущен в октябре 2009 года. В настоящее время ведется работа над новым изданием книги, чтобы обновить ее в соответствии с изменениями, внесенными TurboGears 2. В 2010 году проект несколько замедлился. Ведущие разработчики были вынуждены отвлечься из-за личных проблем. Однако к концу января 2011 года проект начал реорганизацию и работу над возвращением к прежнему темпу. После нескольких месяцев работы над инфраструктурой и устранения проблем с кодом, TurboGears удалось выпустить новые версии (2.0.4 и 2.1.2). В 2013 году, сохраняя обратную совместимость, проект отошел от кодовой базы Pylons для поддержки Python 3, повышения производительности и упрощения процесса установки. Это привело к выпуску версии 2.3.0 в августе 2013 года. Также был объявлен более быстрый цикл выпуска, который должен обеспечивать выпуск обновлений обслуживания каждые ~3 месяца.

Будущее турбоприводов

Разработка TurboGears в настоящее время сосредоточена главным образом на новой ветви 2.x, при этом версия 2.3 является основной, обеспечивающей поддержку Python 3. Переход с ветви 1.x на ветвь 2.x осуществляется через релизы 1.1 и 1.5, которые привели языки ORM и шаблонизации по умолчанию в соответствие с теми, что используются в серии 2.x. Команда TurboGears чётко дала понять новым пользователям, что будущее за 2.x, а 1.x поддерживается лишь для удобства существующих пользователей. В течение 2011 года ведущие разработчики TurboGears вели переговоры с проектом Pylons об объединении усилий с ними и Repoze. Разработчики BFG предложили создать новый объединённый проект под названием Pyramid. Однако, из-за проблем обратной совместимости, которые бы возникли в результате этого шага, и гарантии того, что TurboGears останется надёжной платформой в долгосрочной перспективе, текущая команда решила сотрудничать с проектом Pylons во всём возможном, но не строить ядро TurboGears на основе Pyramid. Дальнейшая разработка, поддержка Python 3 и повышение производительности осуществлялись в ветви 2.3, которая включала полную переработку ядра TurboGears с сохранением обратной совместимости с существующими приложениями. С этого релиза TurboGears имеет собственное ядро, а не базируется на фреймворке Pylons. В серии 2.3 фреймворк экспериментировал с так называемым "минимальным режимом", который позволяет ему фактически функционировать как микрофреймворк, сокращая количество зависимостей с десятков до всего трёх и позиционируя TurboGears между Flask и Django в ряду Python-фреймворков, поскольку он стремится масштабироваться от микрофреймворка до полноценного фреймворка, в зависимости от использования TurboGears2 или пакета tg.devtools. Начиная с версии 2.4, фреймворк имеет модульную архитектуру, основанную на компонентах, которая позволяет пользователям включать и заменять компоненты по своему усмотрению, тем самым позволяя TurboGears в полной мере соответствовать своей миссии – быть веб-фреймворком, масштабируемым в соответствии с потребностями пользователей.