Как исключить функции pytest test_* из автодока Sphinx?

У меня есть несколько модулей в моем файле package.

package/
|--mod1.py
|--mod2.py

Каждый модуль содержит несколько functions и test_function для тестирования модуля.

Я использую sphinx-apidoc для создания файлов .rst для каждого module в package. Моя проблема в том, что когда я создаю документацию для своего пакета, функции test также включаются в документацию. Я знаю, что можно пропускать функции, используя: :exclude members: function. Но я ищу решение, которое позволит мне сделать это для всех модулей, используя шаблон, похожий на test_*.

Мой файл package.rst выглядит так:

package package
===============

Submodules
----------

.. toctree::

   package.mod1
   package.mod2

Module contents
---------------

.. automodule:: package
    :members:
    :undoc-members:
    :show-inheritance:

И мой файл mod1.rst выглядит так:

package.mod1 module
===================

.. automodule:: package.mod1
    :members:
    :undoc-members:
    :show-inheritance:

Заранее спасибо.


person Shubham Vasaikar    schedule 31.08.2016    source источник
comment
Обычно ваши тесты размещаются в каталоге test или tests, тогда вы можете исключить весь каталог.   -  person loganasherjones    schedule 31.08.2016
comment
@ L-Jones9 Да, но было бы слишком сложно переместить все тесты в другой каталог в данный момент времени. Тем не менее, большое спасибо, я учту это в будущем.   -  person Shubham Vasaikar    schedule 31.08.2016
comment
Вы можете пропустить функции, имена которых начинаются с test_, определив обработчик (функция в conf.py), который возвращает True при вызове из события autodoc-skip-member. См. sphinx-doc.org/en /стабильный/добавочный/.   -  person mzjn    schedule 31.08.2016


Ответы (1)


Хотя комментарий @mzjn был определенно хорошим указателем, я все еще некоторое время боролся с этим.

Решение состоит в том, чтобы написать обработчик для autodoc-skip-member и соедините его с событием autodoc-skip-member в файле conf.py.

Итак, вот как будет выглядеть последний:

# conf.py

# Loads of configuration settings

# This is the expected signature of the handler for this event, cf doc
def autodoc_skip_member_handler(app, what, name, obj, skip, options):
    # Basic approach; you might want a regex instead
    return name.startswith("test_")

# Automatically called by sphinx at startup
def setup(app):
    # Connect the autodoc-skip-member event from apidoc to the callback
    app.connect('autodoc-skip-member', autodoc_skip_member_handler)
person Right leg    schedule 21.12.2018
comment
Я установил для своего метода autodoc_skip_member_handler значение return True для каждого файла, и моя установка все еще зависает. - person NuclearPeon; 05.06.2020
comment
@NuclearPeon Он зависает, как будто работает вечно? Это на самом деле не выглядит связанным... Может быть, вы могли бы добавить print(name) в функцию autodoc_skip_member_handler, чтобы увидеть, как она называется? - person Right leg; 05.06.2020
comment
Я распечатал каждый атрибут и вижу, как он проходит. Есть файл с командой уровня модуля для подключения к базе данных, поэтому каждый раз, когда он достигает этой точки, он зависает. Я пытался игнорировать имя вызова метода, содержащий модуль, содержащий модуль модуля, я пытался немедленно вернуть True и False, чтобы он пропустил все, но он все еще зависает. Может быть ошибка в сфинксе. - person NuclearPeon; 05.06.2020
comment
Это зацепка, которая привела меня к источнику зависания. stackoverflow .com/questions/37818923/ - person NuclearPeon; 05.06.2020