Здравствуйте.
Пишу большое приложение на Flask, используя SQLAlchemy для работы с базой. Причем приложение обслуживает несколько доменов. В связи с этим, весь функционал разделен на пакеты, которые потом регистрируются (мол “пакет - домен - префикс”).
С разделением и роутингом проблем нет, просто включила host_matching и создала новый класс на основе Blueprint. Затем просто переопределила конструктор и метод-декоратор route, чтобы каждый раз не указывать аргумент host (он будет передан конструктору и храниться как свойство класса при регистрации blueprint'ов).
Вся проблема в том, что Blueprint'ы могут регистрироваться несколько раз, причем эта регистрация по факту просто добавляет в таблицу роутинга новые маршруты. Однако импортирование в Python - это не тупой include и модули загружаются один раз и потом используются везде, где были заимпортированы. То есть, запросы у дважды зарегистрированного Blueprint'а будет обрабатывать однажды загрузившийся пакет.
Меня пока не озадачивает, что вьюхи будут одними и теми же функциями, но что делать с моделями? Они должны быть независимы для двух зарегистрированных Blueprint'ов. Мне надо как-то динамически создать для каждого Blueprint'а новую модель, наследуя эталонную? Но тогда еще надо что-то делать и со связями с другими моделями (которые могут быть так же копиями). Есть модуль copy, но это тоже магия.
Я предполагаю, что в SQLAlchemy есть какой-то механизм для решения этих проблем, но гуглинг на тему клонирования моделей особо ничего не дал. Так же может моя идея построения приложения не так хороша (по идее можно для каждого домена использовать свой экземпляр application, но пока проект не на столько большой - как-то проще не заморачиваться с их взаимодействием и использовать один).