Как стать автором
Обновить

Шаблоны проектов на основе PasteScript

Время на прочтение3 мин
Количество просмотров1.6K
С увеличением количества проектов встала проблема автоматизации создания каркаса под новые приложения. До недавнего времени новые проекты мы создавали путем копирования заготовленного шаблонного проекта и изменения различных настроек в разных местах проекта. Само собой это убивало достаточно много времени.

Попытки решить эту проблему вывели меня на проект под названием Python Paste. В общих чертах — это набор утилит для создания веб-приложений, к примеру можно создать свой фреймворк (в Pylons используют именно его). Помимо утилит для веба Python Paste содержит модуль Paste Script, с помощью которого можно создавать шаблоны-заготовки и на основе них генерировать проекты.

Как это все работает?


  • Создаем проект, в котором будут содержаться заготовки, указываем пути до каталогов с заготовками и делаем другие настройки.
  • В каталоге шаблона создаем файловую структуру, с учетом того что файлы и имена каталогов будут пропускаться через шаблонизотор Cheetah (внутри файлов можно использовать различные переменные, такие как название проекта и любые другие как сами настроите).
  • Устанавливаем наш проект, содержащий заготовки.
  • Командой генерации создаем новый проект на основе шаблона. Перед генерацией спросят название проекта и различные параметры, которые были указаны в настройках шаблона

Создадим простой шаблон для проектов на Django


Устанавливаем PasteScript pip install PasteScript,

Создаем примерно такую структуру проекта:

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

Теперь определим расположение шаблонов и настроек к ним:
from setuptools import setup, find_packages
 
setup(
    name='paster-templates',
    version = "0.1",
    packages = find_packages(),
    install_requires=[
        'setuptools',
        'PasteScript',
        'Cheetah',
    ],
    include_package_data=True,
    zip_safe=False,
    # Здесь описываем наши шаблоны
    entry_points="""
        [paste.paster_create_template]
        simple=templates.pastertemplates:SimpleTemplate
    """

)

где simple — название шаблона, SimpleTemplate — класс с настройками.

В классе SimpleTemplate настроим сам шаблон, укажем каталог с файлами, краткое описание и параметр «название базы», который попросим ввести пользователя:
from paste.script.templates import Template
from paste.script.templates import var
 
class SimpleTemplate(Template):
    _template_dir = 'simple'
    summary = "Simple project"
    use_cheetah = True
 
    vars = [
        var('database',
            'Database name.',
            default="test_db"),
    ]

Зайдем в templates/ и сгенерим новый джанговский проект django-admin.py startproject simple который и будет шаблоном.

Переходим к настройке файлов шаблона. Параметры, указанные при генерации можно использовать внутри файлов шаблона, предварительно добавив к названию файла _tmpl. Эти переменные имеют вид $(property_name), названия каталогов для пропускания через шаблонизатор такие: +property_name+. Для примера кусок файла settings.py_tmpl:

# Project name - $(project)
DATABASES = {
    'default'{
        'ENGINE''django.db.backends.sqlite3',
        'NAME''$(database)',
    }
}
...

И еще пара замечаний по шаблонным файлам:
  • Если в шаблоне пишем по русски, в начало файла надо вставить #encoding UTF-8
  • Если в шаблоне надо использовать символ $ и чтобы cheetah его не принял за свой, его надо обернуть в #raw ... $content...   #end raw

Заключение


На этом все. Устанавливаем пакет с шаблоном python setup.py install

Командой paster create --list-templates смотрим список шаблонов в системе (шаблоны ищутся, на сколько я понимаю, сканом установленных в системе egg's на предмет шаблонных плагинов, что описывали в entry_points).

Командой paster create --template=simple SimpleProject создаем новый проект на основе шаблона simple.

Осталось создать шаблоны на все случаи жизни.

Исходники проекта на GitHub

Ссылки:
Теги:
Хабы:
Всего голосов 32: ↑29 и ↓3+26
Комментарии5

Публикации

Истории

Работа

Python разработчик
135 вакансий

Ближайшие события