Sphinx не получает функции из нескольких декораторов функций, если они были импортированы из модуля.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Sphinx не получает функции из нескольких декораторов функций, если они были импортированы из модуля.

Сообщение Anonymous »

Я пытаюсь заставить Sphinx генерировать строки документации для функций, имеющих несколько декораторов. Я создал довольно простой тестовый пример для этой проблемы. У нас есть четыре файла:
server/__init__.py
server/test.py
utils/__init__.py
utils/test_decorators.py
Когда все декораторы находятся в одной локальной папке (то есть, когда структура имеет вид server/__init__.py,server/test.py и server/test_decorators.py) У Sphinx нет проблем с выбором строк документации, когда функция находится под двумя декораторами. Однако, когда эти декораторы перемещаются в отдельный модуль в другой папке, даже при абсолютном импорте, Sphinx внезапно оказывается неспособным найти строки документации, если они имеют глубину более одного уровня.
Код ниже:
server/__init__.py пуст
server/test.py:
from utils.test_decorators import my_decorator_1, my_decorator_2
from flask import Flask

app = Flask(__name__)

@my_decorator_1
def test_func_1(num):
'''
This is a test docstring. This one should appear
'''
print(num)
return

@my_decorator_1
@my_decorator_2
def test_func_2():
'''
This is also a test docstring for chained decorators.
'''
return 0

@app.route('/test_1')
def test_rest():
'''
This is a test docstring for single-level decorators using Flask.
'''
return "Hello, Flask!"

@app.route('/test_2')
@my_decorator_1
def home():
'''
This is a test docstring for chained decorators using Flask.
'''
return "Hello, Flask!"

if __name__ == '__main__':
app.run(debug=True)

utils/__init__.py пуст
utils/test_decorators.py:
import functools
from functools import wraps

def my_decorator_1(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
print("Before calling the function")
result = func(*args, **kwargs)
print("After calling the function")
return result
return wrapper

def my_decorator_2(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
print("Starting execution")
result = func(*args, **kwargs)
print("Execution finished")
return result
return wrapper


Подробнее здесь: https://stackoverflow.com/questions/791 ... f-theyve-b
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Почему версии sphinx-build и sphinx в моей ОС различаются?
    Anonymous » » в форуме Python
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous
  • Импорт локальной программы Python – задания не импортированы
    Anonymous » » в форуме Python
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Некоторые файлы Python не могут быть импортированы как модуль
    Anonymous » » в форуме Python
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Данные были импортированы в базу данных, но данные были потеряны [закрыто]
    Anonymous » » в форуме MySql
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Почему некоторые свойства теряются при двукратном использовании разных декораторов для функции?
    Anonymous » » в форуме Python
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»