2010-09-21 10 views
27

Ich möchte sphinx's autodoc-skip-member Ereignis verwenden, um einen Teil der Mitglieder für eine bestimmte Python-Klasse für die Dokumentation auszuwählen.Verbinden Sie Sphinx autodoc-skip-Mitglied mit meiner Funktion

Aber es ist nicht klar aus der Sphinx-Dokumentation, und ich kann keine Beispiele finden, die veranschaulichen: Wo stelle ich den Code, um dies zu verbinden? Ich sehe Sphinx.connect und ich vermute, dass es in meinem conf.py geht, aber wenn ich Variationen dieser Code in conf.py versuchen kann ich die App nicht Objekt finden, dass ich eine Verbindung herstellen soll():

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) 

Ein Zeiger zu einem einfachen Beispiel wäre ideal.

Antwort

39

Aha, letzte Graben Anstrengung auf ein wenig googeln drehte this example, scrollen Sie bis zum Ende. Scheinbar wird eine setup() Funktion in conf.py mit der App aufgerufen. Ich konnte die folgende an der Unterseite meines conf.py definieren:

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) 

die offensichtlich nutzlos ist (überspringt es alles), aber das ist das minimale Beispiel die ich suchte und konnte nicht finden ...

11

Diese Antwort erweitert sich auf die answer by bstpierre. Unten ist der relevante Teil von meinem 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) 
Verwandte Themen