Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 16, 2012 19:40:44

dorian
От:
Зарегистрирован: 2006-05-18
Сообщения: 79
Репутация: +  0  -
Профиль   Отправить e-mail  

Populate приложений

Думаю, что многие сталкивались с таким вопросом. Итак, есть приложение, являющееся ядром большой системы. Мы пытаемся расширять ядро путем разработки дополнительных приложений. Ядро использует реляционную базу в качестве хранилища и ORM. Новые приложения могут вносить изменения в БД (создавать таблицы, модифицировать данные и тд.). Новые приложения могут устанавливаться с PyPi или похожих. Каким образом реализовать инсталятор, чтобы автоматически во время установки вносить изменения в БД?



Офлайн

#2 Сен. 16, 2012 23:27:49

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2260
Репутация: +  41  -
Профиль   Отправить e-mail  

Populate приложений

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

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

А вообще, желания порочные В)

Отредактировано slav0nic (Сен. 16, 2012 23:56:56)

Офлайн

#3 Сен. 17, 2012 11:31:24

dorian
От:
Зарегистрирован: 2006-05-18
Сообщения: 79
Репутация: +  0  -
Профиль   Отправить e-mail  

Populate приложений

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

то есть база обновляется после рестарта приложения, а не вовремя установки. Работет конечно, но сие решение кажется не красивым.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version