[英]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.