Skip to content

Commit

Permalink
Add docstrings for pluginmanager and usercallbackplugin. Enable Sphin…
Browse files Browse the repository at this point in the history
…x for usercallbackplugin. Add Sphinx HOWTO (#1317)

* tools.daemonize(): Improve doc and replace broken link
* Add documentation for pluginmanager and usercallbackplugin
* Enable Sphinx/autodoc for common/plugin folder. Add Sphinx doc HOWTO

Co-authored-by: aryoda <11374410+aryoda@users.noreply.github.com>
  • Loading branch information
aryoda and aryoda authored Oct 3, 2022
1 parent a9d1bb0 commit 0622708
Show file tree
Hide file tree
Showing 7 changed files with 357 additions and 0 deletions.
154 changes: 154 additions & 0 deletions common/doc-dev/1_doc_maintenance_howto.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
This file describes briefly how to
- build and view the source code "API" documentation of Back In Time "common" (CLI)
- add new modules to the documentation
- write docstrings
- known issues with documentation generation


1. Background
=============

The documentation is generated automatically from the docstrings
in the python source code files using the tool

Sphinx (https://www.sphinx-doc.org/en/master/)

together with the Sphinx-Extensions

- autodoc (to automatically generate rst doc files from the python docstrings)
https://www.sphinx-doc.org/en/master/man/sphinx-apidoc.html

- napoleon (to convert google-style docstrings to reStructuredText "rst" format required for autodoc)
https://www.sphinx-doc.org/en/master/usage/extensions/napoleon.html

- viewcode (to create links to browse the highlighted source code)
https://www.sphinx-doc.org/en/master/usage/extensions/napoleon.html

For a brief introduction to Sphinx for Python see:
https://betterprogramming.pub/auto-documenting-a-python-project-using-sphinx-8878f9ddc6e9

For a reference of rst markups see:
https://docutils.sourceforge.io/docs/user/rst/quickref.html

For a description of the Google coding style for python see:
https://google.github.io/styleguide/pyguide.html



2. Why to use Sphinx to generate the documentation?
==================================================

Sphinx has eg. the advantage to

- generate the documentation in different formats
(eg. html, PDF or Linux man pages).

- report invalid markups contained in the documentation

- inject documentation of attributes and methods from parent classes
into sub classes (in case of inheritance)



3. How to build and view the documentation
==========================================

Open a terminal in the "doc-dev" folder and call

make html # to generate the HTML documentation
make htmlOpen # to open the browser showing the generated HTML pages



4. How to add new modules to the documentation
==============================================

There are two scenarios here:



a) The new module files are in a separate folder (not yet included in the doc generation so far)

- Add the python source code folder to the doc-dev/conf.py file
so that autodoc can find the files (navigate "relative" to the "doc-dev" folder)

- Generate the initial rst files for the new modules via "sphinx-apidoc", eg.

sphinx-apidoc -o ./plugins ../plugins

to create a sub folder "doc-dev/plugins" with the rst files (one for each source file
in "doc-dev/../plugins"

- Add the new modules in the sub folder to the top-most "root" index.rst:

# under "modules.rst" add this line add a link to new modules
plugins/modules.rst



b) The new module files are in a folder that already contains other modules contained in the doc

To create the initial version of rst files for new modules eg. in the "common" folder use

sphinx-apidoc -o . ..

TODO: How to remove old rst files with non-existing python files (eg. due to renaming or deletion)
-> probably the -f ("force") argument could do this. Try it with -d ("dry-run")!



5. How to write docstrings for Back In Time
===========================================

"Back In Time" uses the Google style for docstrings:

https://google.github.io/styleguide/pyguide.html

Please stick to this convention



5.1 Commonly used rst markups in the docstring
==============================================

Despite using the Google docstring style rst markups can and should still
be used to format text and cross-reference code.

- Reference a class (with namespace if not in the same):

:py:class:`pluginmanager.PluginManager`

Important: Don't forget to surround the function name with back ticks
otherwise Sphinx will not create a cross reference silently!

- Reference a method/function:

:py:func:`takeSnapshot`

Important: Don't forget to surround the function name with back ticks
otherwise Sphinx will not create a cross reference silently!

- Specify the python type of an method/function argument:

Add the type name (with namespace if not in the same) in parentheses

Args:
cfg (config.Config): Current configuration

- Indicate python keywords (without cross-referencing them)

``True``
``None``

Surround the keyword with two backticks (it will be shown as code then)



6. Known issues with documentation generation

- Sphinx' "make html" does not recreate the html file of a sub class if only
the parent class docstring was changed.

Impact: Inherited documentation in the sub class is not up to date

Work around: Use "make clean" before "make html"
1 change: 1 addition & 0 deletions common/doc-dev/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
#sys.path.insert(0, os.path.abspath('.'))

sys.path.insert(0, os.path.abspath(os.path.join(os.pardir)))
sys.path.insert(0, os.path.abspath(os.path.join(os.pardir, "plugins")))

#import config to solve race conditions between config an mount
import config
Expand Down
2 changes: 2 additions & 0 deletions common/doc-dev/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ Contents:

modules.rst

plugins/modules.rst

Indices and tables
==================

Expand Down
7 changes: 7 additions & 0 deletions common/doc-dev/plugins/modules.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
plugins
=======

.. toctree::
:maxdepth: 4

usercallbackplugin
7 changes: 7 additions & 0 deletions common/doc-dev/plugins/usercallbackplugin.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
usercallbackplugin module
=========================

.. automodule:: usercallbackplugin
:members:
:undoc-members:
:show-inheritance:
Loading

0 comments on commit 0622708

Please sign in to comment.