[PATCH v19 0/5] DTS API docs generation

Juraj Linkeš juraj.linkes at pantheon.tech
Wed Sep 18 09:38:38 CEST 2024



On 21. 8. 2024 17:02, Juraj Linkeš wrote:
> The generation is done with Sphinx, which DPDK already uses, with
> slightly modified configuration of the sidebar present in an if block.
> 
> DTS dependencies do not need to be installed, but there is the option to
> install doc build dependencies with Poetry:
> poetry install --with docs
> 
> The build itself may be run with:
> meson setup <meson_build_dir> -Denable_docs=true
> ninja -C <meson_build_dir>
> 
> The above will do a full DPDK build with docs. To build just docs:
> meson setup <meson_build_dir>
> ninja -C <meson_build_dir> doc
> 
> Python3.10 is required to build the DTS API docs.
> 
> The patchset contains the .rst sources which Sphinx uses to generate the
> html pages. These were first generated with the sphinx-apidoc utility
> and modified to provide a better look. The documentation just doesn't
> look that good without the modifications and there isn't enough
> configuration options to achieve that without manual changes to the .rst
> files. This introduces extra maintenance which involves adding new .rst
> files when a new Python module is added or changing the .rst structure
> if the Python directory/file structure is changed (moved, renamed
> files). This small maintenance burden is outweighed by the flexibility
> afforded by the ability to make manual changes to the .rst files.
> 
> v10:
> Fix dts doc generation issue: Only copy the custom rss file if it exists.
> 
> v11:
> Added the config option autodoc_mock_imports, which eliminates the need
> for DTS dependencies. Added a script that find out which imports need to
> be added to autodoc_mock_imports. The script also check the required
> Python version for building DTS docs.
> Removed tags from the two affected patches which will need to be
> reviewed again.
> 
> v12:
> Added paramiko to the required dependencies of get-dts-deps.py.
> 
> v13:
> Fixed build error:
> TypeError: unsupported operand type(s) for |: 'NoneType' and 'Transport'
> 
> v14:
> Fixed install error:
> ERROR: File 'dts/doc/html' could not be found
> This required me to put the built docs into dts/doc which is outside the
> DPDK API doc dir, resulting in linking between DPDK and DTS api docs not
> working properly. I addressed this by adding a symlink to the build dir.
> This way the link works after installing the docs and the symlink is
> just one extra file in the build dir.
> 
> v15:
> Moved DTS API sources to doc/api/dts. This simplifies a lot of things in
> the build, but mainly makes a lot of sense. Now the source, build and
> install paths are the same so there isn't any need for any symlinks or
> other workarounds.
> Also added a symlink to the custom.css file so that it works with
> call-sphinx-build.py without any modifications.
> 
> v16:
> Renamed the dependency python file to get-dts-runtime-deps.py a modified
> it to only get runtime dependencies. We don't need to check docs
> dependencies (Sphinx) as we don't need to mock those.
> Also moved all new Sphinx configuration into the DTS if branch to make
> sure it won't ever affect the DPDK doc build.
> 
> v17:
> Removed the dts-doc build target to mirror the functionality of using
> -Denable_docs=true.
> Moved DTS-specific meson build code to doc/api/dts/meson.build.
> Added comments to get_missing_imports() and the top level docstring of
> get-dts-runtime-deps.py to explain the function is there to be imported.
> 
> v18:
> Added PyYAML to get-dts-runtime-deps.py.
> 
> v19:
> Fixed a regression in get-dts-runtime-deps.py introduced in v18:
> AttributeError: 'dict' object has no attribute 'strip'
> 
> Juraj Linkeš (5):
>    dts: update params and parser docstrings
>    dts: replace the or operator in third party types
>    dts: add doc generation dependencies
>    dts: add API doc sources
>    dts: add API doc generation
> 
>   buildtools/call-sphinx-build.py               |   2 +
>   buildtools/get-dts-runtime-deps.py            |  95 ++++
>   buildtools/meson.build                        |   1 +
>   doc/api/doxy-api-index.md                     |   3 +
>   doc/api/doxy-api.conf.in                      |   2 +
>   doc/api/dts/conf_yaml_schema.json             |   1 +
>   doc/api/dts/custom.css                        |   1 +
>   doc/api/dts/framework.config.rst              |  12 +
>   doc/api/dts/framework.config.types.rst        |   6 +
>   doc/api/dts/framework.exception.rst           |   6 +
>   doc/api/dts/framework.logger.rst              |   6 +
>   doc/api/dts/framework.params.eal.rst          |   6 +
>   doc/api/dts/framework.params.rst              |  14 +
>   doc/api/dts/framework.params.testpmd.rst      |   6 +
>   doc/api/dts/framework.params.types.rst        |   6 +
>   doc/api/dts/framework.parser.rst              |   6 +
>   .../framework.remote_session.dpdk_shell.rst   |   6 +
>   ...ote_session.interactive_remote_session.rst |   6 +
>   ...ework.remote_session.interactive_shell.rst |   6 +
>   .../framework.remote_session.python_shell.rst |   6 +
>   ...ramework.remote_session.remote_session.rst |   6 +
>   doc/api/dts/framework.remote_session.rst      |  18 +
>   .../framework.remote_session.ssh_session.rst  |   6 +
>   ...framework.remote_session.testpmd_shell.rst |   6 +
>   doc/api/dts/framework.runner.rst              |   6 +
>   doc/api/dts/framework.settings.rst            |   6 +
>   doc/api/dts/framework.test_result.rst         |   6 +
>   doc/api/dts/framework.test_suite.rst          |   6 +
>   doc/api/dts/framework.testbed_model.cpu.rst   |   6 +
>   .../framework.testbed_model.linux_session.rst |   6 +
>   doc/api/dts/framework.testbed_model.node.rst  |   6 +
>   .../framework.testbed_model.os_session.rst    |   6 +
>   doc/api/dts/framework.testbed_model.port.rst  |   6 +
>   .../framework.testbed_model.posix_session.rst |   6 +
>   doc/api/dts/framework.testbed_model.rst       |  26 +
>   .../dts/framework.testbed_model.sut_node.rst  |   6 +
>   .../dts/framework.testbed_model.tg_node.rst   |   6 +
>   ..._generator.capturing_traffic_generator.rst |   6 +
>   ...mework.testbed_model.traffic_generator.rst |  14 +
>   ....testbed_model.traffic_generator.scapy.rst |   6 +
>   ...el.traffic_generator.traffic_generator.rst |   6 +
>   ...framework.testbed_model.virtual_device.rst |   6 +
>   doc/api/dts/framework.utils.rst               |   6 +
>   doc/api/dts/index.rst                         |  43 ++
>   doc/api/dts/meson.build                       |  31 ++
>   doc/api/meson.build                           |   6 +-
>   doc/guides/conf.py                            |  44 +-
>   doc/guides/contributing/documentation.rst     |   2 +
>   doc/guides/contributing/patches.rst           |   4 +
>   doc/guides/tools/dts.rst                      |  39 +-
>   doc/meson.build                               |   1 +
>   dts/framework/params/__init__.py              |   4 +-
>   dts/framework/params/eal.py                   |   7 +-
>   dts/framework/params/types.py                 |   3 +-
>   dts/framework/parser.py                       |   4 +-
>   .../interactive_remote_session.py             |   3 +-
>   dts/poetry.lock                               | 521 +++++++++++++++++-
>   dts/pyproject.toml                            |   8 +
>   58 files changed, 1072 insertions(+), 23 deletions(-)
>   create mode 100755 buildtools/get-dts-runtime-deps.py
>   create mode 120000 doc/api/dts/conf_yaml_schema.json
>   create mode 120000 doc/api/dts/custom.css
>   create mode 100644 doc/api/dts/framework.config.rst
>   create mode 100644 doc/api/dts/framework.config.types.rst
>   create mode 100644 doc/api/dts/framework.exception.rst
>   create mode 100644 doc/api/dts/framework.logger.rst
>   create mode 100644 doc/api/dts/framework.params.eal.rst
>   create mode 100644 doc/api/dts/framework.params.rst
>   create mode 100644 doc/api/dts/framework.params.testpmd.rst
>   create mode 100644 doc/api/dts/framework.params.types.rst
>   create mode 100644 doc/api/dts/framework.parser.rst
>   create mode 100644 doc/api/dts/framework.remote_session.dpdk_shell.rst
>   create mode 100644 doc/api/dts/framework.remote_session.interactive_remote_session.rst
>   create mode 100644 doc/api/dts/framework.remote_session.interactive_shell.rst
>   create mode 100644 doc/api/dts/framework.remote_session.python_shell.rst
>   create mode 100644 doc/api/dts/framework.remote_session.remote_session.rst
>   create mode 100644 doc/api/dts/framework.remote_session.rst
>   create mode 100644 doc/api/dts/framework.remote_session.ssh_session.rst
>   create mode 100644 doc/api/dts/framework.remote_session.testpmd_shell.rst
>   create mode 100644 doc/api/dts/framework.runner.rst
>   create mode 100644 doc/api/dts/framework.settings.rst
>   create mode 100644 doc/api/dts/framework.test_result.rst
>   create mode 100644 doc/api/dts/framework.test_suite.rst
>   create mode 100644 doc/api/dts/framework.testbed_model.cpu.rst
>   create mode 100644 doc/api/dts/framework.testbed_model.linux_session.rst
>   create mode 100644 doc/api/dts/framework.testbed_model.node.rst
>   create mode 100644 doc/api/dts/framework.testbed_model.os_session.rst
>   create mode 100644 doc/api/dts/framework.testbed_model.port.rst
>   create mode 100644 doc/api/dts/framework.testbed_model.posix_session.rst
>   create mode 100644 doc/api/dts/framework.testbed_model.rst
>   create mode 100644 doc/api/dts/framework.testbed_model.sut_node.rst
>   create mode 100644 doc/api/dts/framework.testbed_model.tg_node.rst
>   create mode 100644 doc/api/dts/framework.testbed_model.traffic_generator.capturing_traffic_generator.rst
>   create mode 100644 doc/api/dts/framework.testbed_model.traffic_generator.rst
>   create mode 100644 doc/api/dts/framework.testbed_model.traffic_generator.scapy.rst
>   create mode 100644 doc/api/dts/framework.testbed_model.traffic_generator.traffic_generator.rst
>   create mode 100644 doc/api/dts/framework.testbed_model.virtual_device.rst
>   create mode 100644 doc/api/dts/framework.utils.rst
>   create mode 100644 doc/api/dts/index.rst
>   create mode 100644 doc/api/dts/meson.build
> 

Applied to dpdk-next-dts with slight modifications suggested by Thomas 
in v19. Thanks everyone for reviews.


More information about the dev mailing list