#python #python-sphinx #python-decorators #autodoc
#python #python-sphinx #python-декораторы #автодокументирование
Вопрос:
Я искал и искал решение, в котором я могу использовать Sphinx autodoc
, чтобы найти все функции, обернутые декоратором, в моем скрипте / файле Python. Скрипт содержит ряд функций, вызываемых step_impl
с разными параметрами, но каждая из которых обернута другим уникальным декоратором. Я хочу иметь возможность документировать их как отдельные функции. В настоящее время он выбирает только последнюю функцию в скрипте.
Вот как выглядит скрипт:
@given(u'I am testing a browser')
def step_impl(context):
"""STEP: I am testing a browser
:param context: webdriver context
:type context: dictionary
"""
<stuff here>
@when(u'I visit "{browser_page}"')
def step_impl(context, browser_page):
<other stuff here>
@then(u'I see the Top Rail')
def step_impl(context):
context.page.assert_element_display("id", "adv_header")
<still other stuff here>
Итак, у меня есть .rst
файл с automodule
форматированием:
.. automodule:: features.steps.general
:members:
:undoc-members:
:show-inheritance:
И в документации указана только одна функция как:
features.steps.general.step_impl(context, title_text, element_type, element_name)
это последняя функция в скрипте.
Как я могу указать декоратор для каждой функции и перечислить все функции, даже если они имеют одно и то же имя. Я пытался понять functools.wraps
, но не мог «обернуть» голову вокруг этого (посмотрите, что я там сделал !!).
Заранее благодарю вас за любые рекомендации….
Комментарии:
1. ИМХО, у вас не должно быть нескольких функций с одинаковым именем, и я сомневаюсь, что Sphinx сможет справиться с этим «корректно». Если ваши функции выполняют разные функции, у них должны быть разные имена. Если они выполняют одно и то же, у вас не должно быть нескольких функций.
2. Я использую Behaviour, то есть то, как он настраивает шаги в рамках фреймворка.
3. Я только что просмотрел документацию по поведению, и все примеры используют «step_impl» в качестве имени функции, однако я не думаю, что это требование. Я думаю, вы можете вызывать функцию по своему усмотрению. Вы должны попробовать.
4. @Tryph Хммм …. никогда не думал об этом. Я попробую это, спасибо.
5. В Behave вам не нужно использовать ‘step_impl’ в качестве имени функции. Просто используйте обычное соглашение об именовании функций. Для лучшей поддержки в любой среде разработки просто используйте префиксы и описательное имя, например: «@given(я тестирую браузер»)» используйте «def given_i_am_testing_a_browser».