代码之家  ›  专栏  ›  技术社区  ›  bstpierre Edgar Aviles

将Sphinx autodoc skip成员连接到我的函数

  •  29
  • bstpierre Edgar Aviles  · 技术社区  · 14 年前

    我想用 sphinx's autodoc-skip-member 事件来选择某个python类上的一部分成员以用于文档。

    但是从sphinx文档中还不清楚,我也找不到任何例子来说明:我应该把代码放在哪里来连接这个呢?我懂了 Sphinx.connect

    def maybe_skip_member(app, what, name, obj, skip,
                                      options):
        print app, what, name, obj, skip, options
        return False
    
    # This is not even close to correct:
    #from sphinx.application import Sphinx
    #Sphinx().connect('autodoc-skip-member', maybe_skip_member)
    

    一个指向简单示例的指针是理想的。

    2 回复  |  直到 5 年前
        1
  •  43
  •   bstpierre Edgar Aviles    14 年前

    啊哈,最后一次谷歌搜索结果出来了 this example ,向下滚动至底部。显然是一个setup()函数形态py会被应用程序调用。我能够在我的内心深处定义以下几点形态py:

    def maybe_skip_member(app, what, name, obj, skip, options):
        print app, what, name, obj, skip, options
        return True
    
    def setup(app):
        app.connect('autodoc-skip-member', maybe_skip_member)
    

    这显然是无用的(它跳过一切),但这是最小的例子,我正在寻找,但找不到。。。

        2
  •  15
  •   Community CDub    8 年前

    这个答案扩展到 answer by bstpierre . 下面是我的文章的相关部分 conf.py

    autodoc_default_flags = ['members', 'private-members', 'special-members',
                             #'undoc-members',
                             'show-inheritance']
    
    def autodoc_skip_member(app, what, name, obj, skip, options):
        exclusions = ('__weakref__',  # special-members
                      '__doc__', '__module__', '__dict__',  # undoc-members
                      )
        exclude = name in exclusions
        return skip or exclude
    
    def setup(app):
        app.connect('autodoc-skip-member', autodoc_skip_member)
    
        3
  •  1
  •   gem7318    4 年前

    如果有人来找同一个问题 下面的代码段不是autodoc,而是成功地从AutoAPI生成的以 _ ;这在实践中并不是一个好主意,但我想从一些极端的东西开始,以便于检测。

    def autoapi_skip_member(app, what, name, obj, skip, options):
        """Exclude all private attributes, methods, and dunder methods from Sphinx."""
        import re
        exclude = (
            re.findall('\._.*', str(obj))
            or 'stdout' in str(obj).lower()
        )
        return skip or exclude
    
    
    def setup(app):
        """Add autoapi-skip-member."""
        app.connect('autoapi-skip-member', autoapi_skip_member)
    

    name 而不是 str(obj) autoapi_skip_member 功能似乎不起作用,我(显然)误以为是同一件事 fully qualified name of the object

    这包括在抛出类似下面的内容时检测以 _

    or (hasattr(obj, '__name__') and str(obj.__name__).startswith('_'))