你怎么能只在一个地方为工厂男孩全局设置sqlalchemy_session_persistence?

How can you globally set sqlalchemy_session_persistence for factory boy in only one place?

如果不添加 MyFlushingModelFactory 作为我所有工厂 class 的基础 class,我如何设置 sqlalchemy_session_persistence 的 Meta class 值

我是 运行 pytest,当机器负载很重时,我的一些测试因完整性错误而失败。大多数这些问题都可以通过简单地向围绕工厂模型创建的代码添加刷新来解决。但我不想将它添加到我所有的工厂 classes。有什么方法可以设置 Meta class 值一次并让它影响我所有的工厂而不需要额外的工作吗?

# encoding: utf-8
import factory

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

我想设置 SQLAlchemyModelFactory 的默认行为,以将创建的对象刷新到磁盘,作为 .create 调用的一部分。

对我们来说,具有覆盖选项的基础 class 似乎可行:

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