Sphinx sürüm 3.1'den (Haziran 2020), sphinx.ext.autosummary
(nihayet!) Yineleme var.
Bu nedenle, artık otomatik paket algılamaları için modül adlarını sabit kodlamaya veya Sphinx AutoAPI veya Sphinx AutoPackageSummary gibi 3. taraf kitaplıklara güvenmeye gerek yok .
Belgelenecek Python 3.7 paketi örneği ( Github'daki koda bakın ve ReadTheDocs'taki sonuca bakın ):
mytoolbox
|-- mypackage
| |-- __init__.py
| |-- foo.py
| |-- mysubpackage
| |-- __init__.py
| |-- bar.py
|-- doc
| |-- source
| |--index.rst
| |--conf.py
| |-- _templates
| |-- custom-module-template.rst
| |-- custom-class-template.rst
conf.py
:
import os
import sys
sys.path.insert(0, os.path.abspath('../..'))
extensions = [
'sphinx.ext.autodoc',
'sphinx.ext.autosummary',
]
autosummary_generate = True
templates_path = ['_templates']
index.rst
(yeni :recursive:
seçeneğe dikkat edin ):
Welcome to My Toolbox
=====================
Some words.
.. autosummary::
:toctree: _autosummary
:template: custom-module-template.rst
:recursive:
mypackage
Bu, derinlemesine iç içe geçmiş olmasına rağmen paketteki her modülü otomatik olarak özetlemek için yeterlidir. Her modül için, o modüldeki her öznitelik, işlev, sınıf ve istisnayı özetler.
Garip bir şekilde, varsayılan sphinx.ext.autosummary
şablonlar her bir öznitelik, işlev, sınıf ve istisna için ayrı dokümantasyon sayfaları oluşturmaz ve bunlara özet tablolarından bağlantı verir. Şablonları aşağıda gösterildiği gibi genişletmek mümkündür, ancak bunun neden varsayılan davranış olmadığını anlayamıyorum - elbette çoğu insanın isteyeceği şey budur ..? Bunu bir özellik isteği olarak dile getirdim .
Varsayılan şablonları yerel olarak kopyalayıp onlara eklemem gerekiyordu:
- Kopya
site-packages/sphinx/ext/autosummary/templates/autosummary/module.rst
içinmytoolbox/doc/source/_templates/custom-module-template.rst
- Kopya
site-packages/sphinx/ext/autosummary/templates/autosummary/class.rst
içinmytoolbox/doc/source/_templates/custom-class-template.rst
İçine kanca custom-module-template.rst
içindedir index.rst
kullanılarak yukarıda :template:
seçeneği. (Varsayılan site paketleri şablonlarını kullanarak ne olduğunu görmek için bu satırı silin.)
custom-module-template.rst
(sağda belirtilen ek satırlar):
{{ fullname | escape | underline}}
.. automodule:: {{ fullname }}
{% block attributes %}
{% if attributes %}
.. rubric:: Module Attributes
.. autosummary::
:toctree: <-- add this line
{% for item in attributes %}
{{ item }}
{%- endfor %}
{% endif %}
{% endblock %}
{% block functions %}
{% if functions %}
.. rubric:: {{ _('Functions') }}
.. autosummary::
:toctree: <-- add this line
{% for item in functions %}
{{ item }}
{%- endfor %}
{% endif %}
{% endblock %}
{% block classes %}
{% if classes %}
.. rubric:: {{ _('Classes') }}
.. autosummary::
:toctree: <-- add this line
:template: custom-class-template.rst <-- add this line
{% for item in classes %}
{{ item }}
{%- endfor %}
{% endif %}
{% endblock %}
{% block exceptions %}
{% if exceptions %}
.. rubric:: {{ _('Exceptions') }}
.. autosummary::
:toctree: <-- add this line
{% for item in exceptions %}
{{ item }}
{%- endfor %}
{% endif %}
{% endblock %}
{% block modules %}
{% if modules %}
.. rubric:: Modules
.. autosummary::
:toctree:
:template: custom-module-template.rst <-- add this line
:recursive:
{% for item in modules %}
{{ item }}
{%- endfor %}
{% endif %}
{% endblock %}
custom-class-template.rst
(sağda belirtilen ek satırlar):
{{ fullname | escape | underline}}
.. currentmodule:: {{ module }}
.. autoclass:: {{ objname }}
:members: <-- add at least this line
:show-inheritance: <-- plus I want to show inheritance...
:inherited-members: <-- ...and inherited members too
{% block methods %}
.. automethod:: __init__
{% if methods %}
.. rubric:: {{ _('Methods') }}
.. autosummary::
{% for item in methods %}
~{{ name }}.{{ item }}
{%- endfor %}
{% endif %}
{% endblock %}
{% block attributes %}
{% if attributes %}
.. rubric:: {{ _('Attributes') }}
.. autosummary::
{% for item in attributes %}
~{{ name }}.{{ item }}
{%- endfor %}
{% endif %}
{% endblock %}
ls
Bir dosyaya yönlendirmek ve onu düzenlemek ne kadar zor olabilir ?