32

sphinxのautodoc-skip-memberイベントを使用して、ドキュメント用に特定のpythonクラスのメンバーの一部を選択したいと思います。

しかし、それはスフィンクスのドキュメントからは明らかではなく、私はそれを説明する例を見つけることができません:これを接続するためのコードをどこに置くのですか?Sphinx.connectが表示され、conf.pyに含まれていると思われますが、conf.pyでこのコードのバリエーションを試してみると、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)

簡単な例へのポインタが理想的です。

4

3 に答える 3

46

ああ、少しグーグルで最後の溝の努力がこの例を上に向けて、一番下までスクロールします。どうやらconf.pyのsetup()関数がアプリで呼び出されるようです。conf.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)

これは明らかに役に立たない(すべてをスキップする)が、それは私が探していて見つけられなかった最小限の例です...

于 2010-09-21T05:28:07.170 に答える
16

この答えは、bstpierreによる答えを拡張したものです。を実装しautodoc-skip-memberます。以下は私の関連部分ですconf.py

autodoc_default_flags = ['members', 'private-members', 'special-members',
                         #'undoc-members',
                         'show-inheritance']

def autodoc_skip_member(app, what, name, obj, skip, options):
    # Ref: https://stackoverflow.com/a/21449475/
    exclusions = ('__weakref__',  # special-members
                  '__doc__', '__module__', '__dict__',  # undoc-members
                  )
    exclude = name in exclusions
    # return True if (skip or exclude) else None  # Can interfere with subsequent skip functions.
    return True if exclude else None
 
def setup(app):
    app.connect('autodoc-skip-member', autodoc_skip_member)
于 2014-01-30T06:36:51.893 に答える
2

誰かが同じ質問を検索しているが、autodoc_ではなくAutoAPIを検索している場合、以下のスニペットは、 ;で始まる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))
    return skip or exclude


def setup(app):
    """Add autoapi-skip-member."""
    app.connect('autoapi-skip-member', autoapi_skip_member)

気になる癖/奇妙な点の1つは、関数nameの代わりに適用された同じ関数が機能していないように見えることです。これは、(明らかに)誤って同じものであるという印象を受けました(「オブジェクトの完全修飾名」 AutoAPIドキュメントによる)。str(obj)autoapi_skip_member

これには、以下で始まるメソッドを検出するために以下のようなものを投入する場合も含まれます_

or (hasattr(obj, '__name__') and str(obj.__name__).startswith('_'))
于 2020-12-31T04:15:02.110 に答える