Как ввести параметры декоратора в строку документа?

#python #python-sphinx #python-decorators #docstring

#python #python-sphinx #python-декораторы #строка документа

Вопрос:

Я использую определенный шаблон декоратора в своем API, который выглядит примерно так (упрощенно):

 @api(
    path='/double',
    method='GET',
    input={'x': int},
    output={'x_double': int}
)
def double(x):
    """
    This endpoint doubles the number you give it.

    Args:
        x: (int) the number you want to double

    Returns:
        x_double: (int) x * 2

    """
    return jsonify({'x_double': x*2})
  

Я использую Sphinx для создания своих документов. Я хочу ввести параметры декоратора в строку документа функции, которую он украшает. Для приведенного выше примера я бы ожидал, что документация будет выглядеть следующим образом:

     mypackage.something module

    mypackage.something.double(x)

    This endpoint doubles the number you give it.

    Attributes:
        path: /double
        method: GET

    Args:
        x: (int) the number you want to double

    Returns:
        x_double: (int) x * 2

  

Как я могу этого добиться? Я думал о написании сценария, который вводит их в сгенерированные документы, но мне было интересно, есть ли, возможно, более простой способ?

Кроме того, да, декоратор использует functools.wraps .

Комментарии:

1. Сложной частью здесь будет вставка атрибутов между описанием и аргументами. Но разве декоратор не может сгенерировать раздел Args and` Returns из параметров input and output ? Тогда вы могли бы просто добавить сгенерированную строку в double.__doc__ , которая просто содержала "This endpoint doubles the number you give it" бы .

2. (Я предполагаю, что вы написали api() ; если нет, вы могли бы написать свой собственный декоратор, который вызывает api() .)

3. @chepner да, я написал api()

4. @chepner Я понимаю, о чем вы говорите, это должно сработать!