Форум сайта python.su
Думаю, что многие сталкивались с таким вопросом. Итак, есть приложение, являющееся ядром большой системы. Мы пытаемся расширять ядро путем разработки дополнительных приложений. Ядро использует реляционную базу в качестве хранилища и ORM. Новые приложения могут вносить изменения в БД (создавать таблицы, модифицировать данные и тд.). Новые приложения могут устанавливаться с PyPi или похожих. Каким образом реализовать инсталятор, чтобы автоматически во время установки вносить изменения в БД?
Офлайн
Устанавливаете то как?
Если setup.py install, то банально setuptools.command.install переопределить и пробросить в cmdclass параметр setup(), но если всё это ставится через pypi и pip (а не свои пакеты), то никаких хуков и всяких post-install скриптов (аля deb/rpm) там увы нет.
Но не проще и добавить свою команду в Makefile тотже и дёргать руками регистрацию модуля? Или же paver/buildout глянуть.
А вообще, желания порочные В)
Отредактировано slav0nic (Сен. 16, 2012 23:56:56)
Офлайн
slav0nicУстанавливаем через easy_install или setup.py, это не столь важно. Приложение ставится и подключаем его в *.ini файл. Проблема именно в populate базы. Во время установки стандартно создается скрипт populate_имя_приложения. Этот скрипт нужно запускать ручками натравливая ini файл. Задача обойтись без этого скрипта, чтобы populate происходил автоматом во время setup.
Устанавливаете то как?
Если setup.py install, то банально setuptools.command.install переопределить и пробросить в cmdclass параметр setup(), но если всё это ставится через pypi и pip (а не свои пакеты), то никаких хуков и всяких post-install скриптов (аля deb/rpm) там увы нет.
Но не проще и добавить свою команду в Makefile тотже и дёргать руками регистрацию модуля? Или же paver/buildout глянуть.
А вообще, желания порочные В)
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
Офлайн