Как вы можете глобально установить 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