2012-07-28 21 views
5

me estoy documentando código en Sphinx que se parece a esto:Ha esfinge replace docstring texto

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() 

he añadido el :inherited-members la documentación ChildClass, así que tengo declaraciones allí como "Llama a esta función utilizando/run/ParentClass/generic_fun() ".

¿Hay alguna manera de que pueda poner algo en las cadenas de documentos como esa esfinge reemplazará con la clase real que está documentando?

me gustaría tener la mirada código como clase ParentClass (objeto):

def __init__(self): 
     pass 

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

Así, en la sección ChildClass, la documentación Sphinx leerían ... utilizando/run/ChildClass/generic_fun() ... y la sección ParentClass leería ... using/run/ParentClass/generic_fun() ...?

Idealmente me gustaría tener la documentación en la misma página, por lo que la cadena de reemplazo sería diferente para las diferentes secciones.

Respuesta

7

Descubrí una forma de hacerlo mientras miraba otra cosa.

Hay funciones que autodoc llamará antes de imprimir el mensaje. Agregué este código a mi archivo 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) 

Quiero usar | token, pero están reservados para sustituciones globales. Lo solucioné poniendo la siguiente línea en mi primer archivo (para que el código sustituya | clase | por | clase |):

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

¿Dónde se define 'get_class_name'? – mzjn

+0

Se agregó en. Mismo archivo, simplemente se separó de este bloque de código. –