首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sphinx autodoc跳过从mock继承的类

sphinx autodoc跳过从mock继承的类
EN

Stack Overflow用户
提问于 2015-05-02 02:07:10
回答 1查看 503关注 0票数 0

我正在使用sphinx来记录我的python项目,并且我有几个Qt/PySide小部件子类。因此,当我运行sphinx时,我需要模拟PySide,因为运行文档脚本的机器没有安装qt或pyside。autodoc无法对这些子类执行任何操作。

我尝试添加一个autodoc-skip-member函数,该函数检查对象是否是mock的实例并返回false,但仍未记录在案。不模拟和安装pyside可以解决这个问题。

代码语言:javascript
复制
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上的设置来让它飞起来吗?

EN

回答 1

Stack Overflow用户

发布于 2015-05-09 02:04:34

因此,让sphinx在不需要额外扩展的情况下飞行的主要解决方案是像这样模拟它们:

代码语言:javascript
复制
class Mock(MagicMock):
    @classmethod
    def __getattr__(cls, name):
        return Mock()


MOCKS = ['bar']
sys.modules.update((mod_name, Mock()) for mod_name in MOCKS)

一个示例here和sphinx autodoc模块使用了similar approach。但是,如果您尝试对这些模拟导入进行子类化,则继承的是实例化的类,而不是类本身,因为模块被设置为一个实例。更改为这个对我来说很有效:

代码语言:javascript
复制
sys.modules.update((mod_name, Mock) for mod_name in MOCKS)

注意,它只是一个类Mock,而不是一个实例Mock()。我不确定这会有什么影响,但它会按预期工作

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29992444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档