Найти - Пользователи
Полная версия: Populate приложений
Начало » Pyramid / Pylons / TurboGears » Populate приложений
1
dorian
Думаю, что многие сталкивались с таким вопросом. Итак, есть приложение, являющееся ядром большой системы. Мы пытаемся расширять ядро путем разработки дополнительных приложений. Ядро использует реляционную базу в качестве хранилища и ORM. Новые приложения могут вносить изменения в БД (создавать таблицы, модифицировать данные и тд.). Новые приложения могут устанавливаться с PyPi или похожих. Каким образом реализовать инсталятор, чтобы автоматически во время установки вносить изменения в БД?
slav0nic
Устанавливаете то как?
Если setup.py install, то банально setuptools.command.install переопределить и пробросить в cmdclass параметр setup(), но если всё это ставится через pypi и pip (а не свои пакеты), то никаких хуков и всяких post-install скриптов (аля deb/rpm) там увы нет.

Но не проще и добавить свою команду в Makefile тотже и дёргать руками регистрацию модуля? Или же paver/buildout глянуть.

А вообще, желания порочные В)
dorian
slav0nic
Устанавливаете то как?
Если setup.py install, то банально setuptools.command.install переопределить и пробросить в cmdclass параметр setup(), но если всё это ставится через pypi и pip (а не свои пакеты), то никаких хуков и всяких post-install скриптов (аля deb/rpm) там увы нет.

Но не проще и добавить свою команду в Makefile тотже и дёргать руками регистрацию модуля? Или же paver/buildout глянуть.

А вообще, желания порочные В)
Устанавливаем через easy_install или setup.py, это не столь важно. Приложение ставится и подключаем его в *.ini файл. Проблема именно в populate базы. Во время установки стандартно создается скрипт populate_имя_приложения. Этот скрипт нужно запускать ручками натравливая ini файл. Задача обойтись без этого скрипта, чтобы populate происходил автоматом во время setup.
Сейчас populate базы происходит в includeme приложений, вот так:
from app_core.models import DBSession, Base
from sub_app.models import * 
def includeme(config):
    #{ populate db
    Base.metadata.create_all(DBSession.get_bind(), tables=[Model1.__table__, Model2.__table__])
    #} populate db

то есть база обновляется после рестарта приложения, а не вовремя установки. Работет конечно, но сие решение кажется не красивым.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB