2012-07-28 17 views
5

sto documentando codice nella Sfinge che assomiglia a questo:Avete sfinge replace docstring testo

class ParentClass(object): 

    def __init__(self): 
     pass 

    def generic_fun(self): 
     """Call this function using /run/ParentClass/generic_fun()""" 
     do_stuff() 

class ChildClass(ParentClass): 

    def specific_fun(self): 
     """Call this function using /run/ChildClass/specific_fun()""" 
     do_other_stuff() 

ho aggiunto il :inherited-members alla documentazione ChildClass, quindi non ho dichiarazioni in là come "Chiama questa funzione utilizzando/run/ParentClass/generic_fun()".

C'è un modo per mettere qualcosa nelle docstring come quella sfinge sostituirà con la classe effettiva che sta documentando?

Vorrei avere il look codice come classe ParentClass (oggetto):

def __init__(self): 
     pass 

    def generic_fun(self): 
     """Call this function using /run/<class_name>/generic_fun()""" 
     do_stuff() 

Così nella sezione ChildClass, la documentazione Sfinge sarebbe leggere ... usando/eseguire/ChildClass/generic_fun() ... e la sezione ParentClass leggerebbe ... usando/run/ParentClass/generic_fun() ...?

Idealmente mi piacerebbe avere la documentazione sulla stessa pagina, quindi la stringa di sostituzione sarebbe diversa per le diverse sezioni.

risposta

7

Ho trovato un modo per farlo mentre guardavo qualcos'altro.

Ci sono funzioni che l'autodoc chiamerà prima di stampare il messaggio. Ho aggiunto questo codice al mio file conf.py:

def get_class_name(full_module_name): 
    """ 
    Pull out the class name from the full_module_name 
    """ 
    #split the full_module_name by "."'s 
    return full_module_name.split('.')[-1] 

def process_docstring(app, what, name, obj, options, lines): 
    classname = get_class_name(name) 

    # loop through each line in the docstring and replace |class| with 
    # the classname 
    for i in xrange(len(lines)): 
     lines[i] = lines[i].replace('|class|', classname) 

def setup(app): 
    app.connect('autodoc-process-docstring', process_docstring) 

Desidero utilizzare | token, ma sono riservati alle sostituzioni globali. Ho risolto il problema inserendo la seguente riga come primo file (quindi il codice sostituisce | class | per | class |):

.. |class| replace:: `|class|` 
+0

Dove è definito 'get_class_name'? – mzjn

+0

Aggiunto. Lo stesso file, era appena separato da questo blocco di codice. –

Problemi correlati