Странный вывод Sphinx-apidoc для приложения django /models.py

Например, я получил пропущенную информацию в сгенерированной документации проекта django. first_name а также last_name, email пропущены (хотя они определены в родительском абстрактном классе). Как контролировать, что добавляется в документацию на основе сканирования sphinx-apidoc? Моя цель состоит в том, чтобы автоматически генерировать документы на основе документации, но кажется, что sphinx-apidoc предполагается использовать только один раз для первоначального создания леса

Я пытался использовать : наследуемые члены: как показано ниже, но он по-прежнему не производил имя_файла, фамилию, адрес электронной почты, которые существуют в AbstractUser учебный класс

.. automodule:: apps.users.models
    :members:
    :inherited-members:
    :show-inheritance:

Я выполняю следующую команду

sphinx-apidoc -f -e -d 2 -M -o docs/code apps '*tests*' '*migrations*'

Выход

введите описание изображения здесь

мои приложения / пользователи /models.py

from django.contrib.auth.models import AbstractUser
from django.contrib.postgres.fields import HStoreField
from imagekit import models as imagekitmodels
from imagekit.processors import ResizeToFill

from libs import utils

# Solution to avoid unique_together for email
AbstractUser._meta.get_field('email')._unique = True


def upload_user_media_to(instance, filename):
    """Upload media files to this folder"""
    return '{}/{}/{}'.format(instance.__class__.__name__.lower(), instance.id,
                             utils.get_random_filename(filename))


__all__ = ['AppUser']


class AppUser(AbstractUser):
    """Custom user model.

    Attributes:
        avatar (file): user's avatar, cropeed to fill 300x300 px
        notifications (dict): settings for notifications to user
    """

    avatar = imagekitmodels.ProcessedImageField(
        upload_to=upload_user_media_to,
        processors=[ResizeToFill(300, 300)],
        format='PNG',
        options={'quality': 100},
        editable=False,
        null=True,
        blank=False)

    notifications = HStoreField(null=True)

    # so authentication happens by email instead of username
    # and username becomes sort of nick
    USERNAME_FIELD = 'email'

    # Make sure to exclude email from required fields if authentication
    # is done by email
    REQUIRED_FIELDS = ['username']

    def __str__(self):
        return self.username

    class Meta:
        verbose_name = 'User'
        verbose_name_plural = 'Users'

Мой сфинкс conf.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
import sys

import django
import sphinx_py3doc_enhanced_theme

sys.path.insert(0, os.path.abspath('../'))
sys.path.insert(0, os.path.abspath('.'))
os.environ.setdefault(
    "DJANGO_SETTINGS_MODULE", "config.settings.local")
django.setup()

# Extensions
extensions = [
    'sphinx.ext.autodoc',
    'sphinx.ext.napoleon',
    'sphinx.ext.viewcode',
    'sphinxcontrib.blockdiag'
]

napoleon_google_docstring = True
napoleon_use_param = True
napoleon_use_ivar = False
napoleon_use_rtype = True
napoleon_include_special_with_doc = False

# RST support
source_suffix = '.rst'

# Name of master doc
master_doc = 'index'

# General information about the project.
project = 'crm'
copyright = '2017, Company'
author = 'Company'


version = '0.1'

release = '0.1'

language = None

exclude_patterns = []

todo_include_todos = False

# Read the docs theme
html_theme = 'sphinx_py3doc_enhanced_theme'
html_theme_path = [sphinx_py3doc_enhanced_theme.get_html_theme_path()]

html_static_path = []

htmlhelp_basename = 'crmdoc'

latex_elements = {}


# One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section).
man_pages = [
    (master_doc, 'crm', 'crm Documentation',
     [author], 1)
]

# Grouping the document tree into Texinfo files. List of tuples
# (source start file, target name, title, author,
#  dir menu entry, description, category)
texinfo_documents = [
    (master_doc, 'crm', 'crm Documentation',
     author, 'crm', 'One line description of project.',
     'Miscellaneous'),
]

html_theme_options = {
    'githuburl': 'https://github.com/ionelmc/sphinx-py3doc-enhanced-theme/',
    'bodyfont': '"Lucida Grande",Arial,sans-serif',
    'headfont': '"Lucida Grande",Arial,sans-serif',
    'codefont': '"Deja Vu Sans Mono",consolas,monospace,sans-serif',
    'linkcolor': '#0072AA',
    'visitedlinkcolor': '#6363bb',
    'extrastyling': False,
    'sidebarwide': True

}
pygments_style = 'friendly'

html_context = {
    'css_files': ['_static/custom.css'],
}

1 ответ

Решение

Ладно оказалось, что я должен был использовать :undoc-members: но это создало беспорядок.

Это необходимо, поскольку класс AbstractUser в django не задокументирован должным образом, и sphinx должен принудительно отображать поля только с заданными элементами undoc. Но undoc-члены вызывают беспорядок, поэтому решение состоит в том, чтобы просто добавить документацию в docstr дочернего класса для атрибутов / методов, которые не были задокументированы в родительском классе, после этого моя документация отобразила эти поля

class AppUser(AbstractUser):
    """Custom user model.

    Attributes:
        avatar (file): user's avatar, cropeed to fill 300x300 px
        notifications (dict): settings for notifications to user
        first_name (str): first name
        last_name (str): last name
    """

Другие вопросы по тегам