Iは、decorator
モジュールのdecorator_apply
レシピfound in the documentationを使用して保存機能シグネチャとの完全なドキュメントを生成することができました。
.. automodule:: myfabfile
:members:
いくつかのコメント:
""" 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ソースがある
shahjapanが提出した答えは、一般的なケースでのドキュメンテーション文字列を保存する方法について説明しますが、それはありません@task
デコレータが外部ライブラリで定義されているという事実には触れません。
とにかく、で装飾された機能のためにdocstringが自動的に保存されていることが分かります。以下は、ファブリックのtasks.WrappedCallableTask
クラスの__init__
方法である:
if hasattr(callable, '__doc__'):
self.__doc__ = callable.__doc__
それは(明示的.. autofunction::
が必要とされている)であるとして、すでに動作するように。ファンクションシグニチャも同様に保持されるように、上記のようにdecorator
モジュールを使用できます。
更新
decorator
モジュールの使用は、生地の働きで物事を壊し(コメントを参照してください)。結局のところ実行可能ではないかもしれません。代わりに、次の修正されたreSTマークアップをお勧めします。
.. automodule:: myfabfile2
:members:
.. autofunction:: setup_development(remote='origin', branch='development')
つまり、完全な関数シグネチャを含める必要があります。これはSphinxのドキュメントにも示唆されています("This is useful if the signature from the method is hidden by a decorator.")を参照してください。
'.. automodule ::'と 'fabfile'の間にスペースがありません。また、' ..autofunction :: ' – mzjn
ありがとう、それはトリックでした! '':members: ''のように見えるのは、ラップされた関数(shahjapanによって与えられた答えによる)を受け取っていません。ですので、 '' wraps'を使うか、 '' @ task''デコレータで動作する '' autofunction :: ''を使うことができます。 –