我使用sqlalchemy 1.0。
我的项目有几个模型,其中一些有事件监听器,比如
event.listen(Model, 'after_update', Model._after_update)
。
在单元测试的情况下,我需要在模型/会话/等上禁用所有事件监听器。
当特定测试结束时,我需要启用所有听众。
有没有办法实现这个目标?
答案 0 :(得分:1)
您可以从event.registry._key_to_collection
获取模型的所有事件侦听器。这是一个带有键(id(target), identifier, id(function))
的词典。然后使用event.remove
删除它们。
import ctypes
from sqlalchemy import event
def clear_event_listeners(model):
keys = [k for k in event.registry._key_to_collection if k[0] == id(model)]
for key in keys:
target = model
identifier = key[1]
fn = ctypes.cast(key[2], ctypes.py_object).value # get function by id
event.remove(target, identifier, fn)