Как вы можете глобально установить sqlalchemy_session_persistence для фабричного мальчика только в одном месте?

Без добавления MyFlushingModelFactory как базовый класс всех моих классов Factory, как я могу установить значение Meta class sqlalchemy_session_persistence

Я использую pytest, и когда машина находится под большой нагрузкой, некоторые из моих тестов не выполняются с ошибками целостности. Большинство из этих проблем можно устранить, просто добавив в код сбросы при создании фабричной модели. Но я не хочу добавлять это ко всем своим фабричным классам. Есть ли способ установить значение мета-класса один раз и повлиять на все мои фабрики без дополнительной работы?

# encoding: utf-8
import factory

class MyFlushingModelFactory(factory.alchemy.SQLAlchemyModelFactory):
    class Meta:
        sqlalchemy_session_persistence = factory.alchemy.SESSION_PERSISTENCE_FLUSH

Я хочу установить поведение по умолчанию SQLAlchemyModelFactory записать созданный объект на диск как часть .create вызов.

1 ответ

Решение

Нам кажется, что базовый класс с переопределенными параметрами работает:

from factory.alchemy import SQLAlchemyModelFactory

class BaseSQLAlchemyModelFactory(SQLAlchemyModelFactory):
    """Always inherit from here"""

    class Meta:
        abstract = True  # Cannot initialize
        sqlalchemy_session = db.session  # The session object. In our case, this is the flask-sqlalchemy `db` object
        sqlalchemy_session_persistence = 'flush'


class WorkflowFactory(BaseSQLAlchemyModelFactory):
    """Subclass that actually is the factory"""

    class Meta:
        model = MyModel
Другие вопросы по тегам