ZBoiler: «варим» python-проекты по порядку

ZBoiler - это совокупность средств для генерации базового кода с помощью Boiler для запуска Python проектов.

ZBoiler состоит из трех основных частей: Web-приложение/сервис  (http://prealpha.zboiler.com), программа командной строки  boil , и несколько библиотек кодовых генераторов.

Краткая Архитектура

Главная проблема с генераторами базового кода Boiler, используемых сегодня в Python, состоит в том, что они работают полностью из файловых шаблонов. Если Вы хотите изменить и улучшить шаблон, то Ваша единственная возможность - это размножить шаблон. А они по своей сути не являются изменяемыми или гибкими.

ZBoiler улучшает шаблон генераторов базового кода, предоставляя абстрактное и изменяемое преставление кодовых фрагментов, называемых "строителями" (builders), которые обрабатывают генерацию кода во время предоставления чистого API для модификации. Вместо того, чтобы писать в файл  “class Foo:\n pass”, Вы создаете builder класс, но можете изменить его по Вашему желанию, и затем передаете его в файл.

ZBoiler предоставляет дополнительный слой на вершине builder-ов, который превращает совокупность builder-ов в "возможности" высокого уровня, таких как: документация, распространение пакетов - "яиц" (eggs), тестирование элементов, или еще что-нибудь, что Вы хотите, чтобы сделал Python проект. Так как мы не используем шаблоны, многочисленные "возможности" могут изменять одну и ту же совокупность builders безошибочно, позволяя вам смешивать и сопоставлять возможности высокого уровня так, как Вам хочется. Как только Вы выбрали ваши возможности, Вы генерируете весь базовый код в один шаг.

Как завершающий уровень абстракции, мы группируем возможности в шаблоны проекта. Шаблоны проекта полезны для того, чтобы начать работу над большим проектом, который использует фреймворк. Например, если Вы хотите запустить проект Zope 3, или Grok, или Django, или  PyGame. Каждый из этих проектов будет типично иметь их собственные решения для испытания, разработки, и т.д., что соответствует различным возможностям.

Web-сайт zboiler.com

Web-сайт zboiler.com предоставляет изменяемый Web-интерфейс ко всем проектным шаблонам и доступным индивидуальным возможностям. Вы можете настроить любую возможность через web и, если Вас все устроит, Вы можете загрузить tar-файл произведенного кода. В настоящее время мы имеем проектные шаблоны для создания python пакетов-"яиц", программ командной строки python, и полностью подготовленные Zope 3 приложения. Вы можете посмотреть ранний screencast того, как это работает здесь: http://zboiler.com/demo.html

Команда boil

Для тех, кому не интересно щелкать по всему Web-сайту, существует также относительно умный интерфейс командной строки к тем же проектным шаблонам и доступным возможностям на Web-сайте zboiler.com. Самый легкий способ использования команды boil - это команда с предопределенными шаблонами. Здесь приведен пример, как может выглядеть типичная сессия:

Мы можем начать со списка доступных проектных шаблонов.

$ boil -l
Available Templates:

zope-project "Zope 3 Web Application"
Includes all the features you would want for a Zope 3 Web Application.
command-line "Command Line Program"
Includes all the features you would want for a command line program.
python-package "Python Package"
Just a simple python package with few bells and whistles.

 

ZBoiler  можно полностью изменить, используя инструменты установки точек входа, таким образом,  добавить дополнительные шаблоны к этому списку относительно легко.

Вы можете затем boil шаблон в интерактивном режиме, при этом у вас спросят данные, отсутствующие в шаблоне:

$ boil -t python-package
Enter the name for this project: z3c.foobar

Шаблон проекта python-package будет запрашивать много данных, используемых инструментами установки.

Options for: z3c.feature.core:meta-data
---------------------------------------
Project Description (? for help): The Foo Bar Project License [GNU General Public License (GPL)]: using default value: GNU General Public License (GPL) Author(s) (? for help): Paul Carduner Author Email (? for help): URL (? for help): Version [0.1.0] (? for help): 0.5.0 Namespace Packages (? for help): ? A list of namespace packages that should be created, one per line (i.e. zope or zc or z3c or collective) Namespace Packages (? for help): z3c Namespace Packages (? for help):

 

The interactive editor handles validation and complex data types like list entry automatically.

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

Keywords (? for help): simple Keywords (? for help): zboiler Keywords (? for help): example Keywords (? for help): Install Requires (? for help):   Finished creating xml definition. 

 

Once you finish going through the interactive wizard, you can see the xml project definition, which is what the features use to configure themselves. Notice that each feature has a type that points to an entry point.

Как только Вы заполнили диалоговый мастер, Вы увидите определение проекта xml, который используют возможности для самонастройки. Обратите внимание на то, что каждая возможность имеет тот тип, который указывает на точку входа.

Do you want to see the generated xml definition? (y/[n]): y   
<project name="z3c.foobar">
  <feature type="z3c.feature.core:meta-data">
    <author>Paul Carduner</author>
    <author-email></author-email>
    <description>The Foo Bar Project</description>
    <version>0.5.0</version>
    <license>GNU General Public License (GPL)</license>
    <url></url>
    <keywords><item>simple</item><item>zboiler</item><item>example</item></keywords>
    <namespace-packages><item>z3c</item></namespace-packages>
    <install-requires/>
  </feature>
  <feature type="z3c.feature.core:python-interpreter"/>
  <feature type="z3c.feature.core:unit-testing"/>
  <feature type="z3c.feature.core:documentation"/>
</project>

В конечном итоге будет произведен базовый код boiler для нового python пакета на основе пакетов -"яиц".

Does this look right? ([y]/n): y
INFO - Creating directory ./z3c.foobar
INFO - Creating file ./z3c.foobar/bootstrap.py
INFO - Creating file ./z3c.foobar/setup.py
INFO - Creating file ./z3c.foobar/buildout.cfg
INFO - Creating directory ./z3c.foobar/src
INFO - Creating directory ./z3c.foobar/src/z3c
INFO - Creating directory ./z3c.foobar/src/z3c/foobar
INFO - Creating directory ./z3c.foobar/src/z3c/foobar/tests
INFO - Creating file ./z3c.foobar/src/z3c/foobar/tests/test_doc.py
INFO - Creating file ./z3c.foobar/src/z3c/foobar/tests/__init__.py
INFO - Creating file ./z3c.foobar/src/z3c/foobar/README.txt
INFO - Creating file ./z3c.foobar/src/z3c/foobar/index.txt
INFO - Creating file ./z3c.foobar/src/z3c/foobar/__init__.py
INFO - Creating file ./z3c.foobar/src/z3c/__init__.py
INFO - Creating file ./z3c.foobar/ZBOILER.txt
INFO - Build finished

 

Python API

И наконец, существует также Python API. Вместо того, чтобы описывать его весь здесь, я предложу Вам прочитать doctests, которые были любезно предоставлены здесь: http://docs.carduner.net/. Один из вероятно более подходящих разделов - python code builders: http://carduner.net/docs/z3c.builder.core/python.html. Есть также длинный пример, который описывает конфигурацию всех "строителей", необходимых для приложения zope 3: http://carduner.net/docs/z3c.builder.core/example.html.

Получение Кода

Весь код для ZBoiler, включая Web приложение, сохраняется в хранилище Zope. Проверьте:

$ svn co svn://svn.zope.org/repos/main/z3c.builder.core/trunk z3c.builder.core
$ svn co svn://svn.zope.org/repos/main/z3c.feature.core/trunk z3c.feature.core
$ svn co svn://svn.zope.org/repos/main/z3c.feature.zope/trunk z3c.feature.zope
$ svn co svn://svn.zope.org/repos/main/z3c.boiler/trunk z3c.boiler
$ svn co svn://svn.zope.org/repos/main/z3c.boilerweb/trunk z3c.boilerweb

Исходные версии доступны на pypi. Чтобы получить команду boil, Вы можете использовать easy_install:

$ easy_install z3c.boiler

 

ZBoiler является новой разработкой и пока еще не достаточно проверенной. Но к ее основе любой желающий может начать вносить свой вклад через новые возможности и проектные шаблоны.

Оригинальный текст статьи на zope.org

Перевод КОМТЕТ komtet.ru

Вам также может помочь