Compare commits

..
1 Commits
Author SHA1 Message Date
arcanis e2e013a33b straight forward conftest 2026-07-13 16:33:45 +03:00
13 changed files with 73 additions and 118 deletions
+2
View File
@@ -1,3 +1,5 @@
"""Shared pytest fixtures."""
import argparse import argparse
import datetime import datetime
import pytest import pytest
+2 -2
View File
@@ -68,8 +68,8 @@ COPY --chown=build . "/home/build/ahriman"
## create package archive and install it ## create package archive and install it
RUN cd "/home/build/ahriman" && \ RUN cd "/home/build/ahriman" && \
tox -e archive && \ tox -e archive && \
cp ./dist/*.tar.gz "archlinux" && \ cp ./dist/*.tar.gz "package/archlinux" && \
cd "archlinux" && \ cd "package/archlinux" && \
runuser -u build -- makepkg --noconfirm --skipchecksums && \ runuser -u build -- makepkg --noconfirm --skipchecksums && \
cd / && rm -r "/home/build/ahriman" cd / && rm -r "/home/build/ahriman"
+16 -9
View File
@@ -1,15 +1,6 @@
ahriman.application.handlers package ahriman.application.handlers package
==================================== ====================================
Subpackages
-----------
.. toctree::
:maxdepth: 4
ahriman.application.handlers.triggers_support
ahriman.application.handlers.web
Submodules Submodules
---------- ----------
@@ -277,6 +268,14 @@ ahriman.application.handlers.triggers module
:no-undoc-members: :no-undoc-members:
:show-inheritance: :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 ahriman.application.handlers.unsafe\_commands module
---------------------------------------------------- ----------------------------------------------------
@@ -317,6 +316,14 @@ ahriman.application.handlers.versions module
:no-undoc-members: :no-undoc-members:
:show-inheritance: :show-inheritance:
ahriman.application.handlers.web module
---------------------------------------
.. automodule:: ahriman.application.handlers.web
:members:
:no-undoc-members:
:show-inheritance:
Module contents Module contents
--------------- ---------------
@@ -1,21 +0,0 @@
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:
-21
View File
@@ -1,21 +0,0 @@
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:
+17 -22
View File
@@ -1,19 +1,19 @@
# This file was autogenerated by uv via the following command: # This file was autogenerated by uv via the following command:
# 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 # uv pip compile --group pyproject.toml:docs --extra s3 --extra validator --extra web --output-file docs/requirements.txt pyproject.toml
aiohappyeyeballs==2.6.1 aiohappyeyeballs==2.6.1
# via aiohttp # via aiohttp
aiohttp==3.11.18 aiohttp==3.11.18
# via # via
# ahriman-web # ahriman (pyproject.toml)
# aiohttp-cors # aiohttp-cors
# aiohttp-jinja2 # aiohttp-jinja2
# aiohttp-sse # aiohttp-sse
aiohttp-cors==0.8.1 aiohttp-cors==0.8.1
# via ahriman-web # via ahriman (pyproject.toml)
aiohttp-jinja2==1.6 aiohttp-jinja2==1.6
# via ahriman-web # via ahriman (pyproject.toml)
aiohttp-sse==2.2.0 aiohttp-sse==2.2.0
# via ahriman-web # via ahriman (pyproject.toml)
aiosignal==1.3.2 aiosignal==1.3.2
# via aiohttp # via aiohttp
alabaster==1.0.0 alabaster==1.0.0
@@ -25,15 +25,15 @@ attrs==25.3.0
babel==2.17.0 babel==2.17.0
# via sphinx # via sphinx
bcrypt==4.3.0 bcrypt==4.3.0
# via ahriman-core # via ahriman (pyproject.toml)
boto3==1.43.47 boto3==1.38.11
# via ahriman-core # via ahriman (pyproject.toml)
botocore==1.43.47 botocore==1.38.11
# via # via
# boto3 # boto3
# s3transfer # s3transfer
cerberus==1.3.8 cerberus==1.3.7
# via ahriman-core # via ahriman (pyproject.toml)
certifi==2025.4.26 certifi==2025.4.26
# via requests # via requests
charset-normalizer==3.4.2 charset-normalizer==3.4.2
@@ -44,7 +44,7 @@ docutils==0.21.2
# sphinx-argparse # sphinx-argparse
# sphinx-rtd-theme # sphinx-rtd-theme
filelock==3.24.0 filelock==3.24.0
# via ahriman-core # via ahriman (pyproject.toml)
frozenlist==1.6.0 frozenlist==1.6.0
# via # via
# aiohttp # aiohttp
@@ -56,12 +56,12 @@ idna==3.10
imagesize==1.4.1 imagesize==1.4.1
# via sphinx # via sphinx
inflection==0.5.1 inflection==0.5.1
# via ahriman-core # via ahriman (pyproject.toml)
jinja2==3.1.6 jinja2==3.1.6
# via # via
# aiohttp-jinja2 # aiohttp-jinja2
# sphinx # sphinx
jmespath==1.1.0 jmespath==1.0.1
# via # via
# boto3 # boto3
# botocore # botocore
@@ -80,18 +80,18 @@ propcache==0.3.1
pydeps==3.0.1 pydeps==3.0.1
# via ahriman (pyproject.toml:docs) # via ahriman (pyproject.toml:docs)
pyelftools==0.32 pyelftools==0.32
# via ahriman-core # via ahriman (pyproject.toml)
pygments==2.19.1 pygments==2.19.1
# via sphinx # via sphinx
python-dateutil==2.9.0.post0 python-dateutil==2.9.0.post0
# via botocore # via botocore
requests==2.32.3 requests==2.32.3
# via # via
# ahriman-core # ahriman (pyproject.toml)
# sphinx # sphinx
roman-numerals-py==3.1.0 roman-numerals-py==3.1.0
# via sphinx # via sphinx
s3transfer==0.19.1 s3transfer==0.12.0
# via boto3 # via boto3
shtab==1.7.2 shtab==1.7.2
# via ahriman (pyproject.toml:docs) # via ahriman (pyproject.toml:docs)
@@ -131,8 +131,3 @@ urllib3==2.4.0
# requests # requests
yarl==1.20.0 yarl==1.20.0
# via aiohttp # via aiohttp
# The following packages were excluded from the output:
# ahriman-core
# ahriman-triggers
# ahriman-web
-13
View File
@@ -36,7 +36,6 @@ check = [
"pylint", "pylint",
] ]
docs = [ docs = [
"ahriman-core[s3,validator]",
"Sphinx", "Sphinx",
"argparse-manpage", "argparse-manpage",
"pydeps", "pydeps",
@@ -82,15 +81,3 @@ workspace.members = [
[tool.hatch.version] [tool.hatch.version]
path = "ahriman-core/src/ahriman/__init__.py" 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",
]
+13 -10
View File
@@ -91,6 +91,7 @@ deps = [
{ replace = "ref", of = ["project", "extras"], extend = true }, { replace = "ref", of = ["project", "extras"], extend = true },
] ]
pip_pre = true pip_pre = true
skip_install = true
set_env.CFLAGS = "-Wno-unterminated-string-initialization" set_env.CFLAGS = "-Wno-unterminated-string-initialization"
set_env.MYPYPATH = "ahriman-core/src:ahriman-triggers/src:ahriman-web/src" set_env.MYPYPATH = "ahriman-core/src:ahriman-triggers/src:ahriman-web/src"
commands = [ commands = [
@@ -159,8 +160,9 @@ deps = [
{ replace = "ref", of = ["project", "extras"], extend = true }, { replace = "ref", of = ["project", "extras"], extend = true },
"uv", "uv",
] ]
dynamic_version = "{[project]name}" dynamic_version = "{[project]name}.__version__"
pip_pre = true 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" set_env.SPHINX_APIDOC_OPTIONS = "members,no-undoc-members,show-inheritance"
commands = [ commands = [
[ [
@@ -188,14 +190,16 @@ commands = [
"--dot-output", "{tox_root}/docs/_static/architecture.dot", "--dot-output", "{tox_root}/docs/_static/architecture.dot",
"--no-output", "--no-output",
"--show-dot", "--show-dot",
"{envsitepackagesdir}/{[project]name}", "ahriman-core/src/ahriman",
], ],
[ [
"sphinx-apidoc", "sphinx-apidoc",
"--force", "--force",
"--no-toc", "--no-toc",
"--output-dir", "docs", "--output-dir", "docs",
"{envsitepackagesdir}/{[project]name}", "ahriman-core/src",
"ahriman-triggers/src",
"ahriman-web/src",
], ],
# compile list of dependencies for rtd.io # compile list of dependencies for rtd.io
[ [
@@ -203,9 +207,9 @@ commands = [
"pip", "pip",
"compile", "compile",
"--group", "pyproject.toml:docs", "--group", "pyproject.toml:docs",
"--no-emit-package", "ahriman-core", "--extra", "s3",
"--no-emit-package", "ahriman-triggers", "--extra", "validator",
"--no-emit-package", "ahriman-web", "--extra", "web",
"--output-file", "docs/requirements.txt", "--output-file", "docs/requirements.txt",
"--quiet", "--quiet",
"pyproject.toml", "pyproject.toml",
@@ -242,7 +246,7 @@ commands = [
"sphinx-build", "sphinx-build",
"--builder", "html", "--builder", "html",
"--fail-on-warning", "--fail-on-warning",
"--jobs", "1", "--jobs", "auto",
"--write-all", "--write-all",
"docs", "docs",
"{envtmpdir}/html", "{envtmpdir}/html",
@@ -264,9 +268,9 @@ commands = [
[ [
"git", "git",
"add", "add",
"archlinux/PKGBUILD",
"docs/_static/architecture.dot", "docs/_static/architecture.dot",
"frontend/package.json", "frontend/package.json",
"package/archlinux/PKGBUILD",
"ahriman-core/package/share/man/man1/ahriman.1", "ahriman-core/package/share/man/man1/ahriman.1",
"ahriman-core/package/share/bash-completion/completions/_ahriman", "ahriman-core/package/share/bash-completion/completions/_ahriman",
"ahriman-core/package/share/zsh/site-functions/_ahriman", "ahriman-core/package/share/zsh/site-functions/_ahriman",
@@ -323,7 +327,6 @@ allowlist_externals = [
deps = [ deps = [
"packaging", "packaging",
] ]
skip_install = true
commands = [ commands = [
# check if version is set and validate it # check if version is set and validate it
[ [
@@ -346,6 +349,6 @@ commands = [
"sed", "sed",
"--in-place", "--in-place",
"s/pkgver=.*/pkgver={posargs}/", "s/pkgver=.*/pkgver={posargs}/",
"archlinux/PKGBUILD", "package/archlinux/PKGBUILD",
], ],
] ]
+23 -20
View File
@@ -17,7 +17,8 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
from importlib.metadata import Distribution, PackageNotFoundError import importlib
import sys
from tox.config.sets import EnvConfigSet from tox.config.sets import EnvConfigSet
from tox.plugin import impl from tox.plugin import impl
@@ -25,34 +26,32 @@ from tox.session.state import State
from tox.tox_env.api import ToxEnv from tox.tox_env.api import ToxEnv
def _extract_version(tox_env: ToxEnv) -> dict[str, str]: def _extract_version(env_conf: EnvConfigSet, python_path: str | None = None) -> dict[str, str]:
""" """
extract version dynamically and set VERSION environment variable extract version dynamically and set VERSION environment variable
Args: Args:
tox_env(ToxEnv): tox environment containing the installed package env_conf(EnvConfigSet): the core configuration object
python_path(str | None): python path variable if available
Returns: Returns:
dict[str, str]: environment variables which must be inserted dict[str, str]: environment variables which must be inserted
Raises:
PackageNotFoundError: no installed distribution has been found
""" """
distribution = tox_env.conf["dynamic_version"] import_path = env_conf["dynamic_version"]
if not distribution: if not import_path:
return {} return {}
installed = next( if python_path is not None:
( sys.path.append(python_path)
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)
return {"VERSION": installed.version} 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}
@impl @impl
@@ -71,7 +70,7 @@ def tox_add_env_config(env_conf: EnvConfigSet, state: State) -> None:
keys=["dynamic_version"], keys=["dynamic_version"],
of_type=str, of_type=str,
default="", default="",
desc="distribution name used to populate the VERSION environment variable", desc="import path for the version variable",
) )
@@ -83,4 +82,8 @@ def tox_before_run_commands(tox_env: ToxEnv) -> None:
Args: Args:
tox_env(ToxEnv): the tox environment being executed tox_env(ToxEnv): the tox environment being executed
""" """
tox_env.conf["set_env"].update(_extract_version(tox_env)) 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))