Мне удалось создать полную документацию с сохраненной сигнатурой функции с помощью рецепта decorator_apply
, найденного в документации для модуля decorator
.
""" myfabfile.py """
from fabric.api import task as origtask
from decorator import FunctionMaker
def decorator_apply(dec, func):
return FunctionMaker.create(
func, 'return decorated(%(signature)s)',
dict(decorated=dec(func)), __wrapped__=func)
def task(func):
return decorator_apply(origtask, func)
@task
def setup_development(remote='origin', branch='development'):
"""Setup your development environment.
* Checkout development branch & pull updates from remote
* Install required python packages
* Symlink development settings
* Sync and migrate database
* Build HTML Documentation and open in web browser
:param remote: Name of remote git repository.
:param branch: Name of your development branch.
"""
pass
Это простой источник ReST, который я использовал:
.. automodule:: myfabfile
:members:
Некоторые комментарии:
Ответ, представленный shahjapan, объясняет, как сохранить строку документации в общем случае, но он делаетне учитывать тот факт, что декоратор @task
определен во внешней библиотеке.
В любом случае получается, что строка документации автоматически сохраняется для функций, украшенных @task
.Ниже приведен метод __init__
класса Fabric tasks.WrappedCallableTask
:
if hasattr(callable, '__doc__'):
self.__doc__ = callable.__doc__
Так что это уже работает как есть (необходим явный .. autofunction::
).Чтобы гарантировать сохранение сигнатуры функции, можно использовать модуль decorator
, как показано выше.
Обновление
Использование модуля decorator
нарушает работу Fabric (см. Комментарий).Так что это может быть невозможным в конце концов.В качестве альтернативы я предлагаю следующую модифицированную разметку reST:
.. automodule:: myfabfile2
:members:
.. autofunction:: setup_development(remote='origin', branch='development')
То есть вам придется включить полную сигнатуру функции.Это также то, что предлагается в документации Sphinx (см. «Это полезно, если подпись метода скрыта декоратором.») .