Building the Documentation ========================== The documentation is built with `Sphinx `_ using the `Read the Docs `_ theme. Prerequisites ------------- Install the development dependencies (includes Sphinx and the theme):: pip install -e .[dev] Building locally ---------------- On **Linux / macOS**:: make -C docs html On **Windows**:: cd docs make.bat html The generated site is written to ``docs/_build/html/``. Open ``docs/_build/html/index.html`` in a browser to view it. To rebuild from scratch (useful after structural changes):: make -C docs clean html Sphinx configuration -------------------- The configuration lives in ``docs/conf.py``. Notable settings: **Extensions:** - ``sphinx.ext.autodoc`` - pulls docstrings from Python source files into the documentation via ``.. autoclass::`` and ``.. autofunction::`` directives. - ``sphinx.ext.intersphinx`` - cross-references to the Python standard library documentation (e.g. ``:class:`~types.SimpleNamespace``` links to the stdlib docs). **``sys.path`` insertion:** ``docs/conf.py`` adds ``src/`` to ``sys.path`` so that autodoc can import the ``pyplanner`` package without requiring it to be installed into the Sphinx build environment. Image mirroring ^^^^^^^^^^^^^^^ ``README.rst`` references images as ``docs/images/*`` (correct when viewed from the repository root on GitHub). When Sphinx includes ``README.rst`` from ``docs/index.rst`` it resolves paths relative to ``docs/``, looking for ``docs/docs/images/*``. To satisfy both contexts, ``conf.py`` mirrors ``docs/images/`` to ``docs/docs/images/`` at build time using ``shutil.copytree()``. The mirror directory is in ``.gitignore``. Documentation structure ----------------------- :: docs/ index.rst Root (includes README.rst) conf.py Sphinx configuration Makefile Unix build targets make.bat Windows build targets designer-guide/ Template design tutorial intro.rst project-structure.rst template-basics.rst ... developer-guide/ Using pyplanner as a library intro.rst calendar-and-days.rst holidays.rst ... internals/ Contributing to pyplanner intro.rst project-layout.rst testing.rst ... Each section has an ``intro.rst`` with a ``toctree`` that chains its sub-pages. The top-level ``index.rst`` links to each section's intro, creating a three-level hierarchy that reads top to bottom. Autodoc conventions ------------------- The documentation follows a "narrative first, API reference at the bottom" pattern. Each chapter in the developer guide opens with explanatory prose and code examples, then ends with an API reference section that uses autodoc directives to pull in docstrings from the source. This means most documentation lives in the source files as docstrings (Sphinx ``:param:``, ``:returns:``, ``:raises:`` fields), while the RST files provide the narrative glue and examples. When adding a new public class or function: 1. Write a docstring in the source file. 2. Add a ``.. autoclass::`` or ``.. autofunction::`` directive in the appropriate RST chapter's API reference section. 3. If the class or function introduces a new concept, add explanatory prose and examples above the API reference. Deploying to GitHub Pages ------------------------- The ``build-sphinx-docs.yml`` workflow runs on every push to ``main``. It builds the HTML documentation and deploys it to GitHub Pages automatically. No manual deployment is needed.