[英]sphinx autodoc skips classes inherited from mock
我正在使用sphinx记录我的python项目,并且我有几个Qt / PySide小部件子类。 因此,当我运行sphinx时,我需要模拟PySide,因为运行doc脚本的计算机未安装qt或pyside。 autodoc无法对这些子类执行任何操作。
我尝试添加一个autodoc-skip-member函数,该函数检查对象是否为模拟实例并返回false,但仍未得到记录。 不模拟并安装pyside可解决此问题。
def skip(app, what, name, obj, skip, options):
if isinstance(obj, unittest.mock.Mock):
print('not skipping {0}'.format(name))
return False
return skip
def setup(app):
app.connect("autodoc-skip-member", skip)
我可以使用autodoc上的设置来使它运行吗?
因此,不需要额外的扩展就可以使狮身人面像飞起来的主要解决方案是像这样模拟它们:
class Mock(MagicMock):
@classmethod
def __getattr__(cls, name):
return Mock()
MOCKS = ['bar']
sys.modules.update((mod_name, Mock()) for mod_name in MOCKS)
这里的例子和sphinx autodoc模块使用了类似的方法 。 但是,如果尝试对这些模拟的导入进行子类化,则将继承实例化的类,而不是类本身,因为该模块已设置为实例。 更改为对我有用:
sys.modules.update((mod_name, Mock) for mod_name in MOCKS)
注意它只是类Mock
而不是实例Mock()
。 我不确定这有什么影响,但可以按预期工作
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.