==========================
About Python Documentation
==========================

This directory, ``py/docs``, is the source for the API Reference Documentation
and basic Python documentation as well as the main README for the GitHub and
PyPI package.


How to build docs
=================

One can build the Python documentation without doing a full bazel build. The
following instructions will build the setup a virtual environment and installs tox,
clones the selenium repo and then runs ``tox -c py/tox.ini -e docs``, building the
Python documentation.

.. code-block:: console

    python3 -m venv venv
    source venv/bin/activate
    pip install tox
    git clone git@github.com:SeleniumHQ/selenium.git
    cd selenium/
    # uncomment and switch to your development branch if needed 
    #git switch -c feature-branch origin/feature-branch
    tox -c py/tox.ini -e docs

This works in a similar manner as the larger selenium bazel build, but does just the Python
documentation portion.


What is happening under the covers of tox, sphinx
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

tox is essentially a build tool for Python. Here it sets up its own virtual env and installs
the documentation packages (sphinx and jinja2) as well as the required selenium python
dependencies. Then tox runs the ``sphinx-autogen`` command to generate autodoc stub pages.
Then it runs ``sphinx-build`` to build the HTML docs.

Sphinx is .. well a much larger topic then what we could cover here. Most important to say
here is that the docs are using the "sphinx-material" theme (AKA "Material for Sphinx" theme)
and the the majority of the api documentation is autogenerated. There is plenty of information
available and currently the documentation is fairly small and not complex. So some basic
understanding of reStructuredText and the Sphinx tool chain should be sufficient to contribute
and develop the Python docs.


To clean up the build assets and tox cache
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

After using the tox environment above, you can clean up the build assets by deleting the ``build``
directory in the root of the repo. Note that tox caches parts of the build and recognizes changes
to speed up the build. To start fresh, delete the ``py/.tox`` directory to clean the tox environment.


Known documentation issues
==========================

We are working through the Sphinx build warnings and errors, trying to clean up both the syntax and
the build.


Contributing to Python docs
===========================

First it is recommended that you read the main `CONTRIBUTING.md <https://github.com/SeleniumHQ/selenium/blob/trunk/CONTRIBUTING.md>`_.

Some steps for contibuting to the Python documentation ...

- Check out changes locally using instructions above.
- Try to resolve any warnings/errors.
  - If too arduous, either ask for help or add to the list of known issues.
- If this process is updated, please update this doc as well to help the next person.
