Поддельные объекты

Apr 12, 2017 18:35


Недавно пришлось озадачиться следующим вопросом - доступом к базе данных (postgres) для слива оттуда определённого рода интересных данных. В сущности, это решается одним sql-запросом, но с каких пор мы ищем лёгкие пути?

Поэтому было решено использовать уже имеющиеся orm-модели.

Проблема заключалась в следующем. Эти модели были получены класса SQLAlchemy пакета flask.ext.sqlalchemy, и потому имела место быть зависимость от flask. А объективно говоря, для подключения к БД и выполнения на нём запросов запуск веб-сервера не требуется.

Пожалуй, единственное что требовалось от фласка - его конфигурация, содержащая необходимые сведения для собственно подключения к БД.

Путём проб и ошибок, а также чтения кода был получен минимально необходимый объект, изображающий из себя сервер flask

class FakeApp(object): from flask.config import Config config = Config('.', {}) extensions = {} debug = True import_name = 'fake' @staticmethod def teardown_request(func): return func
Инициализация его производится с помощью занесения в него конфигурации методом Config.from_object(), а связь с БД - вызовом на объекте SQLAlchemy его метода init_app, после чего фальшивый объект заносится в поле app экземпляра SQLAlchemy.

Можно только предположить что в нормальных условиях эту регистрацию проводит сам веб-сервер, проверив подключенные к нему расширения (одним из которых является и flask.ext.SQLAlchemy).

python, чёрная магия

Previous post Next post
Up