From 6862d9b9e12c0e30fef886d7d2d0b430a11d6f7d Mon Sep 17 00:00:00 2001 From: Evgenii Alekseev Date: Tue, 14 Jul 2026 15:00:57 +0300 Subject: [PATCH] fix docs generation --- docs/ahriman.application.handlers.rst | 25 ++++------- ....application.handlers.triggers_support.rst | 21 +++++++++ docs/ahriman.application.handlers.web.rst | 21 +++++++++ docs/requirements.txt | 39 +++++++++-------- pyproject.toml | 13 ++++++ tox.toml | 15 +++---- toxfile.py | 43 +++++++++---------- 7 files changed, 112 insertions(+), 65 deletions(-) create mode 100644 docs/ahriman.application.handlers.triggers_support.rst create mode 100644 docs/ahriman.application.handlers.web.rst diff --git a/docs/ahriman.application.handlers.rst b/docs/ahriman.application.handlers.rst index a45f0fb9..e4fea4e3 100644 --- a/docs/ahriman.application.handlers.rst +++ b/docs/ahriman.application.handlers.rst @@ -1,6 +1,15 @@ ahriman.application.handlers package ==================================== +Subpackages +----------- + +.. toctree:: + :maxdepth: 4 + + ahriman.application.handlers.triggers_support + ahriman.application.handlers.web + Submodules ---------- @@ -268,14 +277,6 @@ ahriman.application.handlers.triggers module :no-undoc-members: :show-inheritance: -ahriman.application.handlers.triggers\_support module ------------------------------------------------------ - -.. automodule:: ahriman.application.handlers.triggers_support - :members: - :no-undoc-members: - :show-inheritance: - ahriman.application.handlers.unsafe\_commands module ---------------------------------------------------- @@ -316,14 +317,6 @@ ahriman.application.handlers.versions module :no-undoc-members: :show-inheritance: -ahriman.application.handlers.web module ---------------------------------------- - -.. automodule:: ahriman.application.handlers.web - :members: - :no-undoc-members: - :show-inheritance: - Module contents --------------- diff --git a/docs/ahriman.application.handlers.triggers_support.rst b/docs/ahriman.application.handlers.triggers_support.rst new file mode 100644 index 00000000..78a0a795 --- /dev/null +++ b/docs/ahriman.application.handlers.triggers_support.rst @@ -0,0 +1,21 @@ +ahriman.application.handlers.triggers\_support package +====================================================== + +Submodules +---------- + +ahriman.application.handlers.triggers\_support.triggers\_support module +----------------------------------------------------------------------- + +.. automodule:: ahriman.application.handlers.triggers_support.triggers_support + :members: + :no-undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: ahriman.application.handlers.triggers_support + :members: + :no-undoc-members: + :show-inheritance: diff --git a/docs/ahriman.application.handlers.web.rst b/docs/ahriman.application.handlers.web.rst new file mode 100644 index 00000000..d4d39e19 --- /dev/null +++ b/docs/ahriman.application.handlers.web.rst @@ -0,0 +1,21 @@ +ahriman.application.handlers.web package +======================================== + +Submodules +---------- + +ahriman.application.handlers.web.web module +------------------------------------------- + +.. automodule:: ahriman.application.handlers.web.web + :members: + :no-undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: ahriman.application.handlers.web + :members: + :no-undoc-members: + :show-inheritance: diff --git a/docs/requirements.txt b/docs/requirements.txt index 0dc651b3..b29eda63 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,19 +1,19 @@ # This file was autogenerated by uv via the following command: -# uv pip compile --group pyproject.toml:docs --extra s3 --extra validator --extra web --output-file docs/requirements.txt pyproject.toml +# uv pip compile --group pyproject.toml:docs --no-emit-package ahriman-core --no-emit-package ahriman-triggers --no-emit-package ahriman-web --output-file docs/requirements.txt pyproject.toml aiohappyeyeballs==2.6.1 # via aiohttp aiohttp==3.11.18 # via - # ahriman (pyproject.toml) + # ahriman-web # aiohttp-cors # aiohttp-jinja2 # aiohttp-sse aiohttp-cors==0.8.1 - # via ahriman (pyproject.toml) + # via ahriman-web aiohttp-jinja2==1.6 - # via ahriman (pyproject.toml) + # via ahriman-web aiohttp-sse==2.2.0 - # via ahriman (pyproject.toml) + # via ahriman-web aiosignal==1.3.2 # via aiohttp alabaster==1.0.0 @@ -25,15 +25,15 @@ attrs==25.3.0 babel==2.17.0 # via sphinx bcrypt==4.3.0 - # via ahriman (pyproject.toml) -boto3==1.38.11 - # via ahriman (pyproject.toml) -botocore==1.38.11 + # via ahriman-core +boto3==1.43.47 + # via ahriman-core +botocore==1.43.47 # via # boto3 # s3transfer -cerberus==1.3.7 - # via ahriman (pyproject.toml) +cerberus==1.3.8 + # via ahriman-core certifi==2025.4.26 # via requests charset-normalizer==3.4.2 @@ -44,7 +44,7 @@ docutils==0.21.2 # sphinx-argparse # sphinx-rtd-theme filelock==3.24.0 - # via ahriman (pyproject.toml) + # via ahriman-core frozenlist==1.6.0 # via # aiohttp @@ -56,12 +56,12 @@ idna==3.10 imagesize==1.4.1 # via sphinx inflection==0.5.1 - # via ahriman (pyproject.toml) + # via ahriman-core jinja2==3.1.6 # via # aiohttp-jinja2 # sphinx -jmespath==1.0.1 +jmespath==1.1.0 # via # boto3 # botocore @@ -80,18 +80,18 @@ propcache==0.3.1 pydeps==3.0.1 # via ahriman (pyproject.toml:docs) pyelftools==0.32 - # via ahriman (pyproject.toml) + # via ahriman-core pygments==2.19.1 # via sphinx python-dateutil==2.9.0.post0 # via botocore requests==2.32.3 # via - # ahriman (pyproject.toml) + # ahriman-core # sphinx roman-numerals-py==3.1.0 # via sphinx -s3transfer==0.12.0 +s3transfer==0.19.1 # via boto3 shtab==1.7.2 # via ahriman (pyproject.toml:docs) @@ -131,3 +131,8 @@ urllib3==2.4.0 # requests yarl==1.20.0 # via aiohttp + +# The following packages were excluded from the output: +# ahriman-core +# ahriman-triggers +# ahriman-web diff --git a/pyproject.toml b/pyproject.toml index b180ca0e..63e68bae 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -36,6 +36,7 @@ check = [ "pylint", ] docs = [ + "ahriman-core[s3,validator]", "Sphinx", "argparse-manpage", "pydeps", @@ -81,3 +82,15 @@ workspace.members = [ [tool.hatch.version] path = "ahriman-core/src/ahriman/__init__.py" + +[tool.uv.sources] +ahriman-core = {workspace = true} +ahriman-triggers = {workspace = true} +ahriman-web = {workspace = true} + +[tool.uv.workspace] +members = [ + "ahriman-core", + "ahriman-triggers", + "ahriman-web", +] diff --git a/tox.toml b/tox.toml index c9920e28..30015da1 100644 --- a/tox.toml +++ b/tox.toml @@ -160,9 +160,8 @@ deps = [ { replace = "ref", of = ["project", "extras"], extend = true }, "uv", ] -dynamic_version = "{[project]name}.__version__" +dynamic_version = "{[project]name}" pip_pre = true -set_env.PYTHONPATH = "ahriman-core/src:ahriman-triggers/src:ahriman-web/src" set_env.SPHINX_APIDOC_OPTIONS = "members,no-undoc-members,show-inheritance" commands = [ [ @@ -190,16 +189,14 @@ commands = [ "--dot-output", "{tox_root}/docs/_static/architecture.dot", "--no-output", "--show-dot", - "ahriman-core/src/ahriman", + "{envsitepackagesdir}/{[project]name}", ], [ "sphinx-apidoc", "--force", "--no-toc", "--output-dir", "docs", - "ahriman-core/src", - "ahriman-triggers/src", - "ahriman-web/src", + "{envsitepackagesdir}/{[project]name}", ], # compile list of dependencies for rtd.io [ @@ -207,9 +204,9 @@ commands = [ "pip", "compile", "--group", "pyproject.toml:docs", - "--extra", "s3", - "--extra", "validator", - "--extra", "web", + "--no-emit-package", "ahriman-core", + "--no-emit-package", "ahriman-triggers", + "--no-emit-package", "ahriman-web", "--output-file", "docs/requirements.txt", "--quiet", "pyproject.toml", diff --git a/toxfile.py b/toxfile.py index 437d61a1..a8ddda09 100644 --- a/toxfile.py +++ b/toxfile.py @@ -17,8 +17,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . # -import importlib -import sys +from importlib.metadata import Distribution, PackageNotFoundError from tox.config.sets import EnvConfigSet from tox.plugin import impl @@ -26,32 +25,34 @@ from tox.session.state import State from tox.tox_env.api import ToxEnv -def _extract_version(env_conf: EnvConfigSet, python_path: str | None = None) -> dict[str, str]: +def _extract_version(tox_env: ToxEnv) -> dict[str, str]: """ extract version dynamically and set VERSION environment variable Args: - env_conf(EnvConfigSet): the core configuration object - python_path(str | None): python path variable if available + tox_env(ToxEnv): tox environment containing the installed package Returns: dict[str, str]: environment variables which must be inserted + + Raises: + PackageNotFoundError: no installed distribution has been found """ - import_path = env_conf["dynamic_version"] - if not import_path: + distribution = tox_env.conf["dynamic_version"] + if not distribution: return {} - if python_path is not None: - sys.path.append(python_path) + installed = next( + ( + package for package in Distribution.discover(path=[str(tox_env.env_site_package_dir())]) + if package.name == distribution + ), + None, + ) + if installed is None: + raise PackageNotFoundError(distribution) - module_name, variable_name = import_path.rsplit(".", maxsplit=1) - module = importlib.import_module(module_name) - version = getattr(module, variable_name) - - # reset import paths - sys.path.pop() - - return {"VERSION": version} + return {"VERSION": installed.version} @impl @@ -70,7 +71,7 @@ def tox_add_env_config(env_conf: EnvConfigSet, state: State) -> None: keys=["dynamic_version"], of_type=str, default="", - desc="import path for the version variable", + desc="distribution name used to populate the VERSION environment variable", ) @@ -82,8 +83,4 @@ def tox_before_run_commands(tox_env: ToxEnv) -> None: Args: tox_env(ToxEnv): the tox environment being executed """ - env_conf = tox_env.conf - set_env = env_conf["set_env"] - - python_path = set_env.load("PYTHONPATH") if "PYTHONPATH" in set_env else None - set_env.update(_extract_version(env_conf, python_path)) + tox_env.conf["set_env"].update(_extract_version(tox_env))