2011-02-09 10 views
5

Estoy usando reStructuredText para documentar mi código, a fin de obtener buenas páginas HTML fuera de línea mediante epydoc.restructuredText, docstring y python interactive shell

Los resultados son brillantes. El único inconveniente es que cuando uso el shell interactivo Python, la función help() no analiza los metadatos reST en las cadenas de documentación, y en su lugar muestra todo tal como está.

¿Hay alguna manera de tener ayuda() para realizar un análisis mínimo de las cadenas de documentos?

No espero la reproducción de fuentes o hipervínculos en cursiva, pero al menos una limpieza mínima para aumentar la capacidad de lectura.

+0

Creo que puedes escribir tu propia 'ayuda()'. No es tan difícil como pueda parecer; solo un poco de código [inspeccionar] (http://docs.python.org/library/inspect.html) y abrir el buscapersonas. Realmente no sería difícil. – ulidtko

+0

Haciendo que sea más fácil personalizar la ayuda() (por ejemplo, al exponer más funcionalidades en el módulo pydoc) sería una buena solicitud de función en http://bugs.python.org – ncoghlan

+0

Esta pregunta existente también puede ser de interés: http: // stackoverflow.com/questions/1192632/how-to-convert-restructuredtext-to-plain-text (No es exactamente lo mismo, pero está lo suficientemente relacionado como para ser relevante) – ncoghlan

Respuesta

4

La función help() se agrega al espacio de nombres incorporado por el módulo de site, que se puede personalizar mediante la creación de un módulo de sitecustomize.py algún lugar de su trayectoria (al parecer se mantiene habitualmente en site-packages).

Luego, en el archivo sitecustomize.py, agrega las personalizaciones que desee.

Se podía manejar esto un par de maneras:

Si desea cambiar el comportamiento (aparente) de la función help() sí, envolver la función de ayuda de un decorador, algo así como:

def help_wrapper(func): 
    def inner(*args): 
     results = func(*args) 
     return your_cleanup_function_here(results) 
help = help_wrapper(help) 

Yo personalmente preferiría una solución ligeramente diferente, porque no hay forma de saber qué hará su función de limpieza para ayudar a que no esté escrito en RestructuredText.

así que sólo crear una función de contenedor:

def my_help(*args): 
    return your_cleanup_function_here(help(*args)) 

De esta manera usted todavía tiene acceso a la función original help() si lo necesita.

advertencia: tenga cuidado al hacer las cosas en sitecustomize.py, como todo lo que hacemos aquí es probable que afecten toda la sesión intérprete (y cada sesión intérprete), que a veces puede conducir a consecuencias no deseadas.