автодокументирование функций декоратора python, обернутых в файл

#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».