#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
andoutput
? Тогда вы могли бы просто добавить сгенерированную строку вdouble.__doc__
, которая просто содержала"This endpoint doubles the number you give it"
бы .2. (Я предполагаю, что вы написали
api()
; если нет, вы могли бы написать свой собственный декоратор, который вызываетapi()
.)3. @chepner да, я написал
api()
4. @chepner Я понимаю, о чем вы говорите, это должно сработать!