diff --git a/.gitignore b/.gitignore
index 5a856dcf..b9016c14 100644
--- a/.gitignore
+++ b/.gitignore
@@ -103,5 +103,8 @@ docs/html/
# Frontend
node_modules/
package-lock.json
-package/share/ahriman/templates/static/index.js
-package/share/ahriman/templates/static/index.css
+ahriman-web/package/share/ahriman/templates/static/index.js
+ahriman-web/package/share/ahriman/templates/static/index.css
+
+# local configs
+/*.ini
diff --git a/package/lib/systemd/system/ahriman-daemon@.service b/ahriman-core/package/lib/systemd/system/ahriman-daemon@.service
similarity index 100%
rename from package/lib/systemd/system/ahriman-daemon@.service
rename to ahriman-core/package/lib/systemd/system/ahriman-daemon@.service
diff --git a/package/lib/systemd/system/ahriman@.service b/ahriman-core/package/lib/systemd/system/ahriman@.service
similarity index 100%
rename from package/lib/systemd/system/ahriman@.service
rename to ahriman-core/package/lib/systemd/system/ahriman@.service
diff --git a/package/lib/systemd/system/ahriman@.timer b/ahriman-core/package/lib/systemd/system/ahriman@.timer
similarity index 100%
rename from package/lib/systemd/system/ahriman@.timer
rename to ahriman-core/package/lib/systemd/system/ahriman@.timer
diff --git a/package/share/ahriman/settings/ahriman.ini b/ahriman-core/package/share/ahriman/settings/ahriman.ini
similarity index 100%
rename from package/share/ahriman/settings/ahriman.ini
rename to ahriman-core/package/share/ahriman/settings/ahriman.ini
diff --git a/package/share/ahriman/settings/ahriman.ini.d/00-housekeeping.ini b/ahriman-core/package/share/ahriman/settings/ahriman.ini.d/00-housekeeping.ini
similarity index 100%
rename from package/share/ahriman/settings/ahriman.ini.d/00-housekeeping.ini
rename to ahriman-core/package/share/ahriman/settings/ahriman.ini.d/00-housekeeping.ini
diff --git a/package/share/ahriman/settings/ahriman.ini.d/logging.ini b/ahriman-core/package/share/ahriman/settings/ahriman.ini.d/logging.ini
similarity index 100%
rename from package/share/ahriman/settings/ahriman.ini.d/logging.ini
rename to ahriman-core/package/share/ahriman/settings/ahriman.ini.d/logging.ini
diff --git a/package/share/ahriman/templates/email-index.jinja2 b/ahriman-core/package/share/ahriman/templates/email-index.jinja2
similarity index 100%
rename from package/share/ahriman/templates/email-index.jinja2
rename to ahriman-core/package/share/ahriman/templates/email-index.jinja2
diff --git a/package/share/ahriman/templates/repo-index.jinja2 b/ahriman-core/package/share/ahriman/templates/repo-index.jinja2
similarity index 100%
rename from package/share/ahriman/templates/repo-index.jinja2
rename to ahriman-core/package/share/ahriman/templates/repo-index.jinja2
diff --git a/package/share/ahriman/templates/rss.jinja2 b/ahriman-core/package/share/ahriman/templates/rss.jinja2
similarity index 100%
rename from package/share/ahriman/templates/rss.jinja2
rename to ahriman-core/package/share/ahriman/templates/rss.jinja2
diff --git a/package/share/ahriman/templates/shell b/ahriman-core/package/share/ahriman/templates/shell
similarity index 100%
rename from package/share/ahriman/templates/shell
rename to ahriman-core/package/share/ahriman/templates/shell
diff --git a/package/share/ahriman/templates/telegram-index.jinja2 b/ahriman-core/package/share/ahriman/templates/telegram-index.jinja2
similarity index 100%
rename from package/share/ahriman/templates/telegram-index.jinja2
rename to ahriman-core/package/share/ahriman/templates/telegram-index.jinja2
diff --git a/package/share/ahriman/templates/utils/bootstrap-scripts.jinja2 b/ahriman-core/package/share/ahriman/templates/utils/bootstrap-scripts.jinja2
similarity index 100%
rename from package/share/ahriman/templates/utils/bootstrap-scripts.jinja2
rename to ahriman-core/package/share/ahriman/templates/utils/bootstrap-scripts.jinja2
diff --git a/package/share/ahriman/templates/utils/style.jinja2 b/ahriman-core/package/share/ahriman/templates/utils/style.jinja2
similarity index 100%
rename from package/share/ahriman/templates/utils/style.jinja2
rename to ahriman-core/package/share/ahriman/templates/utils/style.jinja2
diff --git a/package/share/bash-completion/completions/_ahriman b/ahriman-core/package/share/bash-completion/completions/_ahriman
similarity index 100%
rename from package/share/bash-completion/completions/_ahriman
rename to ahriman-core/package/share/bash-completion/completions/_ahriman
diff --git a/package/share/man/man1/ahriman.1 b/ahriman-core/package/share/man/man1/ahriman.1
similarity index 100%
rename from package/share/man/man1/ahriman.1
rename to ahriman-core/package/share/man/man1/ahriman.1
diff --git a/package/share/zsh/site-functions/_ahriman b/ahriman-core/package/share/zsh/site-functions/_ahriman
similarity index 100%
rename from package/share/zsh/site-functions/_ahriman
rename to ahriman-core/package/share/zsh/site-functions/_ahriman
diff --git a/ahriman-core/pyproject.toml b/ahriman-core/pyproject.toml
new file mode 100644
index 00000000..82798a4e
--- /dev/null
+++ b/ahriman-core/pyproject.toml
@@ -0,0 +1,68 @@
+[build-system]
+requires = ["hatchling"]
+build-backend = "hatchling.build"
+
+[project]
+name = "ahriman-core"
+description = "ArcH linux ReposItory MANager, core package"
+readme = "../README.md"
+requires-python = ">=3.13"
+license = {file = "../COPYING"}
+authors = [
+ {name = "ahriman team"},
+]
+dependencies = [
+ "bcrypt",
+ "filelock",
+ "inflection",
+ "pyelftools",
+ "requests",
+]
+dynamic = ["version"]
+
+[project.optional-dependencies]
+journald = [
+ "systemd-python",
+]
+# FIXME technically this dependency is required, but in some cases we do not have access to
+# the libalpm which is required in order to install the package. Thus in case if we do not
+# really need to run the application we can move it to "optional" dependencies
+pacman = [
+ "pyalpm",
+]
+reports = [
+ "Jinja2",
+]
+s3 = [
+ "boto3",
+]
+shell = [
+ "IPython",
+]
+stats = [
+ "matplotlib",
+]
+unixsocket = [
+ "requests-unixsocket2",
+]
+validator = [
+ "cerberus",
+]
+
+[project.scripts]
+ahriman = "ahriman.application.ahriman:run"
+
+[project.urls]
+Documentation = "https://ahriman.readthedocs.io/"
+Repository = "https://github.com/arcan1s/ahriman"
+Changelog = "https://github.com/arcan1s/ahriman/releases"
+
+[tool.hatch.version]
+path = "src/ahriman/__init__.py"
+
+[tool.hatch.build.targets.wheel]
+packages = ["src/ahriman"]
+
+[tool.hatch.build.targets.wheel.shared-data]
+"package/lib" = "lib"
+"package/share" = "share"
diff --git a/src/ahriman/__init__.py b/ahriman-core/src/ahriman/__init__.py
similarity index 100%
rename from src/ahriman/__init__.py
rename to ahriman-core/src/ahriman/__init__.py
diff --git a/src/ahriman/application/__init__.py b/ahriman-core/src/ahriman/application/__init__.py
similarity index 100%
rename from src/ahriman/application/__init__.py
rename to ahriman-core/src/ahriman/application/__init__.py
diff --git a/src/ahriman/application/ahriman.py b/ahriman-core/src/ahriman/application/ahriman.py
similarity index 100%
rename from src/ahriman/application/ahriman.py
rename to ahriman-core/src/ahriman/application/ahriman.py
diff --git a/src/ahriman/application/application/__init__.py b/ahriman-core/src/ahriman/application/application/__init__.py
similarity index 100%
rename from src/ahriman/application/application/__init__.py
rename to ahriman-core/src/ahriman/application/application/__init__.py
diff --git a/src/ahriman/application/application/application.py b/ahriman-core/src/ahriman/application/application/application.py
similarity index 100%
rename from src/ahriman/application/application/application.py
rename to ahriman-core/src/ahriman/application/application/application.py
diff --git a/src/ahriman/application/application/application_packages.py b/ahriman-core/src/ahriman/application/application/application_packages.py
similarity index 100%
rename from src/ahriman/application/application/application_packages.py
rename to ahriman-core/src/ahriman/application/application/application_packages.py
diff --git a/src/ahriman/application/application/application_properties.py b/ahriman-core/src/ahriman/application/application/application_properties.py
similarity index 100%
rename from src/ahriman/application/application/application_properties.py
rename to ahriman-core/src/ahriman/application/application/application_properties.py
diff --git a/src/ahriman/application/application/application_repository.py b/ahriman-core/src/ahriman/application/application/application_repository.py
similarity index 100%
rename from src/ahriman/application/application/application_repository.py
rename to ahriman-core/src/ahriman/application/application/application_repository.py
diff --git a/src/ahriman/application/application/updates_iterator.py b/ahriman-core/src/ahriman/application/application/updates_iterator.py
similarity index 100%
rename from src/ahriman/application/application/updates_iterator.py
rename to ahriman-core/src/ahriman/application/application/updates_iterator.py
diff --git a/src/ahriman/application/application/workers/__init__.py b/ahriman-core/src/ahriman/application/application/workers/__init__.py
similarity index 100%
rename from src/ahriman/application/application/workers/__init__.py
rename to ahriman-core/src/ahriman/application/application/workers/__init__.py
diff --git a/src/ahriman/application/application/workers/local_updater.py b/ahriman-core/src/ahriman/application/application/workers/local_updater.py
similarity index 100%
rename from src/ahriman/application/application/workers/local_updater.py
rename to ahriman-core/src/ahriman/application/application/workers/local_updater.py
diff --git a/src/ahriman/application/application/workers/remote_updater.py b/ahriman-core/src/ahriman/application/application/workers/remote_updater.py
similarity index 100%
rename from src/ahriman/application/application/workers/remote_updater.py
rename to ahriman-core/src/ahriman/application/application/workers/remote_updater.py
diff --git a/src/ahriman/application/application/workers/updater.py b/ahriman-core/src/ahriman/application/application/workers/updater.py
similarity index 100%
rename from src/ahriman/application/application/workers/updater.py
rename to ahriman-core/src/ahriman/application/application/workers/updater.py
diff --git a/src/ahriman/application/handlers/__init__.py b/ahriman-core/src/ahriman/application/handlers/__init__.py
similarity index 100%
rename from src/ahriman/application/handlers/__init__.py
rename to ahriman-core/src/ahriman/application/handlers/__init__.py
diff --git a/src/ahriman/application/handlers/add.py b/ahriman-core/src/ahriman/application/handlers/add.py
similarity index 100%
rename from src/ahriman/application/handlers/add.py
rename to ahriman-core/src/ahriman/application/handlers/add.py
diff --git a/src/ahriman/application/handlers/archives.py b/ahriman-core/src/ahriman/application/handlers/archives.py
similarity index 100%
rename from src/ahriman/application/handlers/archives.py
rename to ahriman-core/src/ahriman/application/handlers/archives.py
diff --git a/src/ahriman/application/handlers/backup.py b/ahriman-core/src/ahriman/application/handlers/backup.py
similarity index 100%
rename from src/ahriman/application/handlers/backup.py
rename to ahriman-core/src/ahriman/application/handlers/backup.py
diff --git a/src/ahriman/application/handlers/change.py b/ahriman-core/src/ahriman/application/handlers/change.py
similarity index 100%
rename from src/ahriman/application/handlers/change.py
rename to ahriman-core/src/ahriman/application/handlers/change.py
diff --git a/src/ahriman/application/handlers/clean.py b/ahriman-core/src/ahriman/application/handlers/clean.py
similarity index 100%
rename from src/ahriman/application/handlers/clean.py
rename to ahriman-core/src/ahriman/application/handlers/clean.py
diff --git a/src/ahriman/application/handlers/copy.py b/ahriman-core/src/ahriman/application/handlers/copy.py
similarity index 100%
rename from src/ahriman/application/handlers/copy.py
rename to ahriman-core/src/ahriman/application/handlers/copy.py
diff --git a/src/ahriman/application/handlers/daemon.py b/ahriman-core/src/ahriman/application/handlers/daemon.py
similarity index 100%
rename from src/ahriman/application/handlers/daemon.py
rename to ahriman-core/src/ahriman/application/handlers/daemon.py
diff --git a/src/ahriman/application/handlers/dump.py b/ahriman-core/src/ahriman/application/handlers/dump.py
similarity index 100%
rename from src/ahriman/application/handlers/dump.py
rename to ahriman-core/src/ahriman/application/handlers/dump.py
diff --git a/src/ahriman/application/handlers/handler.py b/ahriman-core/src/ahriman/application/handlers/handler.py
similarity index 100%
rename from src/ahriman/application/handlers/handler.py
rename to ahriman-core/src/ahriman/application/handlers/handler.py
diff --git a/src/ahriman/application/handlers/help.py b/ahriman-core/src/ahriman/application/handlers/help.py
similarity index 100%
rename from src/ahriman/application/handlers/help.py
rename to ahriman-core/src/ahriman/application/handlers/help.py
diff --git a/src/ahriman/application/handlers/hold.py b/ahriman-core/src/ahriman/application/handlers/hold.py
similarity index 100%
rename from src/ahriman/application/handlers/hold.py
rename to ahriman-core/src/ahriman/application/handlers/hold.py
diff --git a/src/ahriman/application/handlers/key_import.py b/ahriman-core/src/ahriman/application/handlers/key_import.py
similarity index 100%
rename from src/ahriman/application/handlers/key_import.py
rename to ahriman-core/src/ahriman/application/handlers/key_import.py
diff --git a/src/ahriman/application/handlers/patch.py b/ahriman-core/src/ahriman/application/handlers/patch.py
similarity index 100%
rename from src/ahriman/application/handlers/patch.py
rename to ahriman-core/src/ahriman/application/handlers/patch.py
diff --git a/src/ahriman/application/handlers/pkgbuild.py b/ahriman-core/src/ahriman/application/handlers/pkgbuild.py
similarity index 100%
rename from src/ahriman/application/handlers/pkgbuild.py
rename to ahriman-core/src/ahriman/application/handlers/pkgbuild.py
diff --git a/src/ahriman/application/handlers/rebuild.py b/ahriman-core/src/ahriman/application/handlers/rebuild.py
similarity index 100%
rename from src/ahriman/application/handlers/rebuild.py
rename to ahriman-core/src/ahriman/application/handlers/rebuild.py
diff --git a/src/ahriman/application/handlers/reload.py b/ahriman-core/src/ahriman/application/handlers/reload.py
similarity index 100%
rename from src/ahriman/application/handlers/reload.py
rename to ahriman-core/src/ahriman/application/handlers/reload.py
diff --git a/src/ahriman/application/handlers/remove.py b/ahriman-core/src/ahriman/application/handlers/remove.py
similarity index 100%
rename from src/ahriman/application/handlers/remove.py
rename to ahriman-core/src/ahriman/application/handlers/remove.py
diff --git a/src/ahriman/application/handlers/remove_unknown.py b/ahriman-core/src/ahriman/application/handlers/remove_unknown.py
similarity index 100%
rename from src/ahriman/application/handlers/remove_unknown.py
rename to ahriman-core/src/ahriman/application/handlers/remove_unknown.py
diff --git a/src/ahriman/application/handlers/repositories.py b/ahriman-core/src/ahriman/application/handlers/repositories.py
similarity index 100%
rename from src/ahriman/application/handlers/repositories.py
rename to ahriman-core/src/ahriman/application/handlers/repositories.py
diff --git a/src/ahriman/application/handlers/restore.py b/ahriman-core/src/ahriman/application/handlers/restore.py
similarity index 100%
rename from src/ahriman/application/handlers/restore.py
rename to ahriman-core/src/ahriman/application/handlers/restore.py
diff --git a/src/ahriman/application/handlers/rollback.py b/ahriman-core/src/ahriman/application/handlers/rollback.py
similarity index 100%
rename from src/ahriman/application/handlers/rollback.py
rename to ahriman-core/src/ahriman/application/handlers/rollback.py
diff --git a/src/ahriman/application/handlers/run.py b/ahriman-core/src/ahriman/application/handlers/run.py
similarity index 100%
rename from src/ahriman/application/handlers/run.py
rename to ahriman-core/src/ahriman/application/handlers/run.py
diff --git a/src/ahriman/application/handlers/search.py b/ahriman-core/src/ahriman/application/handlers/search.py
similarity index 100%
rename from src/ahriman/application/handlers/search.py
rename to ahriman-core/src/ahriman/application/handlers/search.py
diff --git a/src/ahriman/application/handlers/service_updates.py b/ahriman-core/src/ahriman/application/handlers/service_updates.py
similarity index 100%
rename from src/ahriman/application/handlers/service_updates.py
rename to ahriman-core/src/ahriman/application/handlers/service_updates.py
diff --git a/src/ahriman/application/handlers/setup.py b/ahriman-core/src/ahriman/application/handlers/setup.py
similarity index 100%
rename from src/ahriman/application/handlers/setup.py
rename to ahriman-core/src/ahriman/application/handlers/setup.py
diff --git a/src/ahriman/application/handlers/shell.py b/ahriman-core/src/ahriman/application/handlers/shell.py
similarity index 100%
rename from src/ahriman/application/handlers/shell.py
rename to ahriman-core/src/ahriman/application/handlers/shell.py
diff --git a/src/ahriman/application/handlers/sign.py b/ahriman-core/src/ahriman/application/handlers/sign.py
similarity index 100%
rename from src/ahriman/application/handlers/sign.py
rename to ahriman-core/src/ahriman/application/handlers/sign.py
diff --git a/src/ahriman/application/handlers/statistics.py b/ahriman-core/src/ahriman/application/handlers/statistics.py
similarity index 100%
rename from src/ahriman/application/handlers/statistics.py
rename to ahriman-core/src/ahriman/application/handlers/statistics.py
diff --git a/src/ahriman/application/handlers/status.py b/ahriman-core/src/ahriman/application/handlers/status.py
similarity index 100%
rename from src/ahriman/application/handlers/status.py
rename to ahriman-core/src/ahriman/application/handlers/status.py
diff --git a/src/ahriman/application/handlers/status_update.py b/ahriman-core/src/ahriman/application/handlers/status_update.py
similarity index 100%
rename from src/ahriman/application/handlers/status_update.py
rename to ahriman-core/src/ahriman/application/handlers/status_update.py
diff --git a/src/ahriman/application/handlers/structure.py b/ahriman-core/src/ahriman/application/handlers/structure.py
similarity index 100%
rename from src/ahriman/application/handlers/structure.py
rename to ahriman-core/src/ahriman/application/handlers/structure.py
diff --git a/src/ahriman/application/handlers/tree_migrate.py b/ahriman-core/src/ahriman/application/handlers/tree_migrate.py
similarity index 100%
rename from src/ahriman/application/handlers/tree_migrate.py
rename to ahriman-core/src/ahriman/application/handlers/tree_migrate.py
diff --git a/src/ahriman/application/handlers/triggers.py b/ahriman-core/src/ahriman/application/handlers/triggers.py
similarity index 100%
rename from src/ahriman/application/handlers/triggers.py
rename to ahriman-core/src/ahriman/application/handlers/triggers.py
diff --git a/src/ahriman/application/handlers/unsafe_commands.py b/ahriman-core/src/ahriman/application/handlers/unsafe_commands.py
similarity index 100%
rename from src/ahriman/application/handlers/unsafe_commands.py
rename to ahriman-core/src/ahriman/application/handlers/unsafe_commands.py
diff --git a/src/ahriman/application/handlers/update.py b/ahriman-core/src/ahriman/application/handlers/update.py
similarity index 100%
rename from src/ahriman/application/handlers/update.py
rename to ahriman-core/src/ahriman/application/handlers/update.py
diff --git a/src/ahriman/application/handlers/users.py b/ahriman-core/src/ahriman/application/handlers/users.py
similarity index 100%
rename from src/ahriman/application/handlers/users.py
rename to ahriman-core/src/ahriman/application/handlers/users.py
diff --git a/src/ahriman/application/handlers/validate.py b/ahriman-core/src/ahriman/application/handlers/validate.py
similarity index 100%
rename from src/ahriman/application/handlers/validate.py
rename to ahriman-core/src/ahriman/application/handlers/validate.py
diff --git a/src/ahriman/application/handlers/versions.py b/ahriman-core/src/ahriman/application/handlers/versions.py
similarity index 100%
rename from src/ahriman/application/handlers/versions.py
rename to ahriman-core/src/ahriman/application/handlers/versions.py
diff --git a/src/ahriman/application/help_formatter.py b/ahriman-core/src/ahriman/application/help_formatter.py
similarity index 100%
rename from src/ahriman/application/help_formatter.py
rename to ahriman-core/src/ahriman/application/help_formatter.py
diff --git a/src/ahriman/application/interactive_shell.py b/ahriman-core/src/ahriman/application/interactive_shell.py
similarity index 100%
rename from src/ahriman/application/interactive_shell.py
rename to ahriman-core/src/ahriman/application/interactive_shell.py
diff --git a/src/ahriman/application/lock.py b/ahriman-core/src/ahriman/application/lock.py
similarity index 100%
rename from src/ahriman/application/lock.py
rename to ahriman-core/src/ahriman/application/lock.py
diff --git a/src/ahriman/core/__init__.py b/ahriman-core/src/ahriman/core/__init__.py
similarity index 100%
rename from src/ahriman/core/__init__.py
rename to ahriman-core/src/ahriman/core/__init__.py
diff --git a/src/ahriman/core/alpm/__init__.py b/ahriman-core/src/ahriman/core/alpm/__init__.py
similarity index 100%
rename from src/ahriman/core/alpm/__init__.py
rename to ahriman-core/src/ahriman/core/alpm/__init__.py
diff --git a/src/ahriman/core/alpm/pacman.py b/ahriman-core/src/ahriman/core/alpm/pacman.py
similarity index 100%
rename from src/ahriman/core/alpm/pacman.py
rename to ahriman-core/src/ahriman/core/alpm/pacman.py
diff --git a/src/ahriman/core/alpm/pacman_database.py b/ahriman-core/src/ahriman/core/alpm/pacman_database.py
similarity index 100%
rename from src/ahriman/core/alpm/pacman_database.py
rename to ahriman-core/src/ahriman/core/alpm/pacman_database.py
diff --git a/src/ahriman/core/alpm/pacman_handle.py b/ahriman-core/src/ahriman/core/alpm/pacman_handle.py
similarity index 100%
rename from src/ahriman/core/alpm/pacman_handle.py
rename to ahriman-core/src/ahriman/core/alpm/pacman_handle.py
diff --git a/src/ahriman/core/alpm/pkgbuild_parser.py b/ahriman-core/src/ahriman/core/alpm/pkgbuild_parser.py
similarity index 100%
rename from src/ahriman/core/alpm/pkgbuild_parser.py
rename to ahriman-core/src/ahriman/core/alpm/pkgbuild_parser.py
diff --git a/src/ahriman/core/alpm/remote/__init__.py b/ahriman-core/src/ahriman/core/alpm/remote/__init__.py
similarity index 100%
rename from src/ahriman/core/alpm/remote/__init__.py
rename to ahriman-core/src/ahriman/core/alpm/remote/__init__.py
diff --git a/src/ahriman/core/alpm/remote/aur.py b/ahriman-core/src/ahriman/core/alpm/remote/aur.py
similarity index 100%
rename from src/ahriman/core/alpm/remote/aur.py
rename to ahriman-core/src/ahriman/core/alpm/remote/aur.py
diff --git a/src/ahriman/core/alpm/remote/official.py b/ahriman-core/src/ahriman/core/alpm/remote/official.py
similarity index 100%
rename from src/ahriman/core/alpm/remote/official.py
rename to ahriman-core/src/ahriman/core/alpm/remote/official.py
diff --git a/src/ahriman/core/alpm/remote/official_syncdb.py b/ahriman-core/src/ahriman/core/alpm/remote/official_syncdb.py
similarity index 100%
rename from src/ahriman/core/alpm/remote/official_syncdb.py
rename to ahriman-core/src/ahriman/core/alpm/remote/official_syncdb.py
diff --git a/src/ahriman/core/alpm/remote/remote.py b/ahriman-core/src/ahriman/core/alpm/remote/remote.py
similarity index 100%
rename from src/ahriman/core/alpm/remote/remote.py
rename to ahriman-core/src/ahriman/core/alpm/remote/remote.py
diff --git a/src/ahriman/core/alpm/repo.py b/ahriman-core/src/ahriman/core/alpm/repo.py
similarity index 100%
rename from src/ahriman/core/alpm/repo.py
rename to ahriman-core/src/ahriman/core/alpm/repo.py
diff --git a/src/ahriman/core/build_tools/__init__.py b/ahriman-core/src/ahriman/core/build_tools/__init__.py
similarity index 100%
rename from src/ahriman/core/build_tools/__init__.py
rename to ahriman-core/src/ahriman/core/build_tools/__init__.py
diff --git a/src/ahriman/core/build_tools/package_archive.py b/ahriman-core/src/ahriman/core/build_tools/package_archive.py
similarity index 100%
rename from src/ahriman/core/build_tools/package_archive.py
rename to ahriman-core/src/ahriman/core/build_tools/package_archive.py
diff --git a/src/ahriman/core/build_tools/package_version.py b/ahriman-core/src/ahriman/core/build_tools/package_version.py
similarity index 100%
rename from src/ahriman/core/build_tools/package_version.py
rename to ahriman-core/src/ahriman/core/build_tools/package_version.py
diff --git a/src/ahriman/core/build_tools/sources.py b/ahriman-core/src/ahriman/core/build_tools/sources.py
similarity index 100%
rename from src/ahriman/core/build_tools/sources.py
rename to ahriman-core/src/ahriman/core/build_tools/sources.py
diff --git a/src/ahriman/core/build_tools/task.py b/ahriman-core/src/ahriman/core/build_tools/task.py
similarity index 100%
rename from src/ahriman/core/build_tools/task.py
rename to ahriman-core/src/ahriman/core/build_tools/task.py
diff --git a/src/ahriman/core/configuration/__init__.py b/ahriman-core/src/ahriman/core/configuration/__init__.py
similarity index 100%
rename from src/ahriman/core/configuration/__init__.py
rename to ahriman-core/src/ahriman/core/configuration/__init__.py
diff --git a/src/ahriman/core/configuration/configuration.py b/ahriman-core/src/ahriman/core/configuration/configuration.py
similarity index 100%
rename from src/ahriman/core/configuration/configuration.py
rename to ahriman-core/src/ahriman/core/configuration/configuration.py
diff --git a/src/ahriman/core/configuration/configuration_multi_dict.py b/ahriman-core/src/ahriman/core/configuration/configuration_multi_dict.py
similarity index 100%
rename from src/ahriman/core/configuration/configuration_multi_dict.py
rename to ahriman-core/src/ahriman/core/configuration/configuration_multi_dict.py
diff --git a/src/ahriman/core/configuration/schema.py b/ahriman-core/src/ahriman/core/configuration/schema.py
similarity index 100%
rename from src/ahriman/core/configuration/schema.py
rename to ahriman-core/src/ahriman/core/configuration/schema.py
diff --git a/src/ahriman/core/configuration/shell_interpolator.py b/ahriman-core/src/ahriman/core/configuration/shell_interpolator.py
similarity index 100%
rename from src/ahriman/core/configuration/shell_interpolator.py
rename to ahriman-core/src/ahriman/core/configuration/shell_interpolator.py
diff --git a/src/ahriman/core/configuration/shell_template.py b/ahriman-core/src/ahriman/core/configuration/shell_template.py
similarity index 100%
rename from src/ahriman/core/configuration/shell_template.py
rename to ahriman-core/src/ahriman/core/configuration/shell_template.py
diff --git a/src/ahriman/core/configuration/validator.py b/ahriman-core/src/ahriman/core/configuration/validator.py
similarity index 100%
rename from src/ahriman/core/configuration/validator.py
rename to ahriman-core/src/ahriman/core/configuration/validator.py
diff --git a/src/ahriman/core/database/__init__.py b/ahriman-core/src/ahriman/core/database/__init__.py
similarity index 100%
rename from src/ahriman/core/database/__init__.py
rename to ahriman-core/src/ahriman/core/database/__init__.py
diff --git a/src/ahriman/core/database/migrations/__init__.py b/ahriman-core/src/ahriman/core/database/migrations/__init__.py
similarity index 100%
rename from src/ahriman/core/database/migrations/__init__.py
rename to ahriman-core/src/ahriman/core/database/migrations/__init__.py
diff --git a/src/ahriman/core/database/migrations/m000_initial.py b/ahriman-core/src/ahriman/core/database/migrations/m000_initial.py
similarity index 100%
rename from src/ahriman/core/database/migrations/m000_initial.py
rename to ahriman-core/src/ahriman/core/database/migrations/m000_initial.py
diff --git a/src/ahriman/core/database/migrations/m001_package_source.py b/ahriman-core/src/ahriman/core/database/migrations/m001_package_source.py
similarity index 100%
rename from src/ahriman/core/database/migrations/m001_package_source.py
rename to ahriman-core/src/ahriman/core/database/migrations/m001_package_source.py
diff --git a/src/ahriman/core/database/migrations/m002_user_access.py b/ahriman-core/src/ahriman/core/database/migrations/m002_user_access.py
similarity index 100%
rename from src/ahriman/core/database/migrations/m002_user_access.py
rename to ahriman-core/src/ahriman/core/database/migrations/m002_user_access.py
diff --git a/src/ahriman/core/database/migrations/m003_patch_variables.py b/ahriman-core/src/ahriman/core/database/migrations/m003_patch_variables.py
similarity index 100%
rename from src/ahriman/core/database/migrations/m003_patch_variables.py
rename to ahriman-core/src/ahriman/core/database/migrations/m003_patch_variables.py
diff --git a/src/ahriman/core/database/migrations/m004_logs.py b/ahriman-core/src/ahriman/core/database/migrations/m004_logs.py
similarity index 100%
rename from src/ahriman/core/database/migrations/m004_logs.py
rename to ahriman-core/src/ahriman/core/database/migrations/m004_logs.py
diff --git a/src/ahriman/core/database/migrations/m005_make_opt_depends.py b/ahriman-core/src/ahriman/core/database/migrations/m005_make_opt_depends.py
similarity index 100%
rename from src/ahriman/core/database/migrations/m005_make_opt_depends.py
rename to ahriman-core/src/ahriman/core/database/migrations/m005_make_opt_depends.py
diff --git a/src/ahriman/core/database/migrations/m006_packages_architecture_required.py b/ahriman-core/src/ahriman/core/database/migrations/m006_packages_architecture_required.py
similarity index 100%
rename from src/ahriman/core/database/migrations/m006_packages_architecture_required.py
rename to ahriman-core/src/ahriman/core/database/migrations/m006_packages_architecture_required.py
diff --git a/src/ahriman/core/database/migrations/m007_check_depends.py b/ahriman-core/src/ahriman/core/database/migrations/m007_check_depends.py
similarity index 100%
rename from src/ahriman/core/database/migrations/m007_check_depends.py
rename to ahriman-core/src/ahriman/core/database/migrations/m007_check_depends.py
diff --git a/src/ahriman/core/database/migrations/m008_packagers.py b/ahriman-core/src/ahriman/core/database/migrations/m008_packagers.py
similarity index 100%
rename from src/ahriman/core/database/migrations/m008_packagers.py
rename to ahriman-core/src/ahriman/core/database/migrations/m008_packagers.py
diff --git a/src/ahriman/core/database/migrations/m009_local_source.py b/ahriman-core/src/ahriman/core/database/migrations/m009_local_source.py
similarity index 100%
rename from src/ahriman/core/database/migrations/m009_local_source.py
rename to ahriman-core/src/ahriman/core/database/migrations/m009_local_source.py
diff --git a/src/ahriman/core/database/migrations/m010_version_based_logs_removal.py b/ahriman-core/src/ahriman/core/database/migrations/m010_version_based_logs_removal.py
similarity index 100%
rename from src/ahriman/core/database/migrations/m010_version_based_logs_removal.py
rename to ahriman-core/src/ahriman/core/database/migrations/m010_version_based_logs_removal.py
diff --git a/src/ahriman/core/database/migrations/m011_repository_name.py b/ahriman-core/src/ahriman/core/database/migrations/m011_repository_name.py
similarity index 100%
rename from src/ahriman/core/database/migrations/m011_repository_name.py
rename to ahriman-core/src/ahriman/core/database/migrations/m011_repository_name.py
diff --git a/src/ahriman/core/database/migrations/m012_last_commit_sha.py b/ahriman-core/src/ahriman/core/database/migrations/m012_last_commit_sha.py
similarity index 100%
rename from src/ahriman/core/database/migrations/m012_last_commit_sha.py
rename to ahriman-core/src/ahriman/core/database/migrations/m012_last_commit_sha.py
diff --git a/src/ahriman/core/database/migrations/m013_dependencies.py b/ahriman-core/src/ahriman/core/database/migrations/m013_dependencies.py
similarity index 100%
rename from src/ahriman/core/database/migrations/m013_dependencies.py
rename to ahriman-core/src/ahriman/core/database/migrations/m013_dependencies.py
diff --git a/src/ahriman/core/database/migrations/m014_auditlog.py b/ahriman-core/src/ahriman/core/database/migrations/m014_auditlog.py
similarity index 100%
rename from src/ahriman/core/database/migrations/m014_auditlog.py
rename to ahriman-core/src/ahriman/core/database/migrations/m014_auditlog.py
diff --git a/src/ahriman/core/database/migrations/m015_logs_process_id.py b/ahriman-core/src/ahriman/core/database/migrations/m015_logs_process_id.py
similarity index 100%
rename from src/ahriman/core/database/migrations/m015_logs_process_id.py
rename to ahriman-core/src/ahriman/core/database/migrations/m015_logs_process_id.py
diff --git a/src/ahriman/core/database/migrations/m016_archive.py b/ahriman-core/src/ahriman/core/database/migrations/m016_archive.py
similarity index 100%
rename from src/ahriman/core/database/migrations/m016_archive.py
rename to ahriman-core/src/ahriman/core/database/migrations/m016_archive.py
diff --git a/src/ahriman/core/database/migrations/m017_pkgbuild.py b/ahriman-core/src/ahriman/core/database/migrations/m017_pkgbuild.py
similarity index 100%
rename from src/ahriman/core/database/migrations/m017_pkgbuild.py
rename to ahriman-core/src/ahriman/core/database/migrations/m017_pkgbuild.py
diff --git a/src/ahriman/core/database/migrations/m018_package_hold.py b/ahriman-core/src/ahriman/core/database/migrations/m018_package_hold.py
similarity index 100%
rename from src/ahriman/core/database/migrations/m018_package_hold.py
rename to ahriman-core/src/ahriman/core/database/migrations/m018_package_hold.py
diff --git a/src/ahriman/core/database/operations/__init__.py b/ahriman-core/src/ahriman/core/database/operations/__init__.py
similarity index 100%
rename from src/ahriman/core/database/operations/__init__.py
rename to ahriman-core/src/ahriman/core/database/operations/__init__.py
diff --git a/src/ahriman/core/database/operations/auth_operations.py b/ahriman-core/src/ahriman/core/database/operations/auth_operations.py
similarity index 100%
rename from src/ahriman/core/database/operations/auth_operations.py
rename to ahriman-core/src/ahriman/core/database/operations/auth_operations.py
diff --git a/src/ahriman/core/database/operations/build_operations.py b/ahriman-core/src/ahriman/core/database/operations/build_operations.py
similarity index 100%
rename from src/ahriman/core/database/operations/build_operations.py
rename to ahriman-core/src/ahriman/core/database/operations/build_operations.py
diff --git a/src/ahriman/core/database/operations/changes_operations.py b/ahriman-core/src/ahriman/core/database/operations/changes_operations.py
similarity index 100%
rename from src/ahriman/core/database/operations/changes_operations.py
rename to ahriman-core/src/ahriman/core/database/operations/changes_operations.py
diff --git a/src/ahriman/core/database/operations/dependencies_operations.py b/ahriman-core/src/ahriman/core/database/operations/dependencies_operations.py
similarity index 100%
rename from src/ahriman/core/database/operations/dependencies_operations.py
rename to ahriman-core/src/ahriman/core/database/operations/dependencies_operations.py
diff --git a/src/ahriman/core/database/operations/event_operations.py b/ahriman-core/src/ahriman/core/database/operations/event_operations.py
similarity index 100%
rename from src/ahriman/core/database/operations/event_operations.py
rename to ahriman-core/src/ahriman/core/database/operations/event_operations.py
diff --git a/src/ahriman/core/database/operations/logs_operations.py b/ahriman-core/src/ahriman/core/database/operations/logs_operations.py
similarity index 100%
rename from src/ahriman/core/database/operations/logs_operations.py
rename to ahriman-core/src/ahriman/core/database/operations/logs_operations.py
diff --git a/src/ahriman/core/database/operations/operations.py b/ahriman-core/src/ahriman/core/database/operations/operations.py
similarity index 100%
rename from src/ahriman/core/database/operations/operations.py
rename to ahriman-core/src/ahriman/core/database/operations/operations.py
diff --git a/src/ahriman/core/database/operations/package_operations.py b/ahriman-core/src/ahriman/core/database/operations/package_operations.py
similarity index 100%
rename from src/ahriman/core/database/operations/package_operations.py
rename to ahriman-core/src/ahriman/core/database/operations/package_operations.py
diff --git a/src/ahriman/core/database/operations/patch_operations.py b/ahriman-core/src/ahriman/core/database/operations/patch_operations.py
similarity index 100%
rename from src/ahriman/core/database/operations/patch_operations.py
rename to ahriman-core/src/ahriman/core/database/operations/patch_operations.py
diff --git a/src/ahriman/core/database/sqlite.py b/ahriman-core/src/ahriman/core/database/sqlite.py
similarity index 100%
rename from src/ahriman/core/database/sqlite.py
rename to ahriman-core/src/ahriman/core/database/sqlite.py
diff --git a/src/ahriman/core/exceptions.py b/ahriman-core/src/ahriman/core/exceptions.py
similarity index 100%
rename from src/ahriman/core/exceptions.py
rename to ahriman-core/src/ahriman/core/exceptions.py
diff --git a/src/ahriman/core/formatters/__init__.py b/ahriman-core/src/ahriman/core/formatters/__init__.py
similarity index 100%
rename from src/ahriman/core/formatters/__init__.py
rename to ahriman-core/src/ahriman/core/formatters/__init__.py
diff --git a/src/ahriman/core/formatters/aur_printer.py b/ahriman-core/src/ahriman/core/formatters/aur_printer.py
similarity index 100%
rename from src/ahriman/core/formatters/aur_printer.py
rename to ahriman-core/src/ahriman/core/formatters/aur_printer.py
diff --git a/src/ahriman/core/formatters/build_printer.py b/ahriman-core/src/ahriman/core/formatters/build_printer.py
similarity index 100%
rename from src/ahriman/core/formatters/build_printer.py
rename to ahriman-core/src/ahriman/core/formatters/build_printer.py
diff --git a/src/ahriman/core/formatters/changes_printer.py b/ahriman-core/src/ahriman/core/formatters/changes_printer.py
similarity index 100%
rename from src/ahriman/core/formatters/changes_printer.py
rename to ahriman-core/src/ahriman/core/formatters/changes_printer.py
diff --git a/src/ahriman/core/formatters/configuration_paths_printer.py b/ahriman-core/src/ahriman/core/formatters/configuration_paths_printer.py
similarity index 100%
rename from src/ahriman/core/formatters/configuration_paths_printer.py
rename to ahriman-core/src/ahriman/core/formatters/configuration_paths_printer.py
diff --git a/src/ahriman/core/formatters/configuration_printer.py b/ahriman-core/src/ahriman/core/formatters/configuration_printer.py
similarity index 100%
rename from src/ahriman/core/formatters/configuration_printer.py
rename to ahriman-core/src/ahriman/core/formatters/configuration_printer.py
diff --git a/src/ahriman/core/formatters/event_stats_printer.py b/ahriman-core/src/ahriman/core/formatters/event_stats_printer.py
similarity index 100%
rename from src/ahriman/core/formatters/event_stats_printer.py
rename to ahriman-core/src/ahriman/core/formatters/event_stats_printer.py
diff --git a/src/ahriman/core/formatters/package_printer.py b/ahriman-core/src/ahriman/core/formatters/package_printer.py
similarity index 100%
rename from src/ahriman/core/formatters/package_printer.py
rename to ahriman-core/src/ahriman/core/formatters/package_printer.py
diff --git a/src/ahriman/core/formatters/package_stats_printer.py b/ahriman-core/src/ahriman/core/formatters/package_stats_printer.py
similarity index 100%
rename from src/ahriman/core/formatters/package_stats_printer.py
rename to ahriman-core/src/ahriman/core/formatters/package_stats_printer.py
diff --git a/src/ahriman/core/formatters/patch_printer.py b/ahriman-core/src/ahriman/core/formatters/patch_printer.py
similarity index 100%
rename from src/ahriman/core/formatters/patch_printer.py
rename to ahriman-core/src/ahriman/core/formatters/patch_printer.py
diff --git a/src/ahriman/core/formatters/pkgbuild_printer.py b/ahriman-core/src/ahriman/core/formatters/pkgbuild_printer.py
similarity index 100%
rename from src/ahriman/core/formatters/pkgbuild_printer.py
rename to ahriman-core/src/ahriman/core/formatters/pkgbuild_printer.py
diff --git a/src/ahriman/core/formatters/printer.py b/ahriman-core/src/ahriman/core/formatters/printer.py
similarity index 100%
rename from src/ahriman/core/formatters/printer.py
rename to ahriman-core/src/ahriman/core/formatters/printer.py
diff --git a/src/ahriman/core/formatters/repository_printer.py b/ahriman-core/src/ahriman/core/formatters/repository_printer.py
similarity index 100%
rename from src/ahriman/core/formatters/repository_printer.py
rename to ahriman-core/src/ahriman/core/formatters/repository_printer.py
diff --git a/src/ahriman/core/formatters/repository_stats_printer.py b/ahriman-core/src/ahriman/core/formatters/repository_stats_printer.py
similarity index 100%
rename from src/ahriman/core/formatters/repository_stats_printer.py
rename to ahriman-core/src/ahriman/core/formatters/repository_stats_printer.py
diff --git a/src/ahriman/core/formatters/status_printer.py b/ahriman-core/src/ahriman/core/formatters/status_printer.py
similarity index 100%
rename from src/ahriman/core/formatters/status_printer.py
rename to ahriman-core/src/ahriman/core/formatters/status_printer.py
diff --git a/src/ahriman/core/formatters/string_printer.py b/ahriman-core/src/ahriman/core/formatters/string_printer.py
similarity index 100%
rename from src/ahriman/core/formatters/string_printer.py
rename to ahriman-core/src/ahriman/core/formatters/string_printer.py
diff --git a/src/ahriman/core/formatters/tree_printer.py b/ahriman-core/src/ahriman/core/formatters/tree_printer.py
similarity index 100%
rename from src/ahriman/core/formatters/tree_printer.py
rename to ahriman-core/src/ahriman/core/formatters/tree_printer.py
diff --git a/src/ahriman/core/formatters/update_printer.py b/ahriman-core/src/ahriman/core/formatters/update_printer.py
similarity index 100%
rename from src/ahriman/core/formatters/update_printer.py
rename to ahriman-core/src/ahriman/core/formatters/update_printer.py
diff --git a/src/ahriman/core/formatters/user_printer.py b/ahriman-core/src/ahriman/core/formatters/user_printer.py
similarity index 100%
rename from src/ahriman/core/formatters/user_printer.py
rename to ahriman-core/src/ahriman/core/formatters/user_printer.py
diff --git a/src/ahriman/core/formatters/validation_printer.py b/ahriman-core/src/ahriman/core/formatters/validation_printer.py
similarity index 100%
rename from src/ahriman/core/formatters/validation_printer.py
rename to ahriman-core/src/ahriman/core/formatters/validation_printer.py
diff --git a/src/ahriman/core/formatters/version_printer.py b/ahriman-core/src/ahriman/core/formatters/version_printer.py
similarity index 100%
rename from src/ahriman/core/formatters/version_printer.py
rename to ahriman-core/src/ahriman/core/formatters/version_printer.py
diff --git a/src/ahriman/core/gitremote/__init__.py b/ahriman-core/src/ahriman/core/gitremote/__init__.py
similarity index 100%
rename from src/ahriman/core/gitremote/__init__.py
rename to ahriman-core/src/ahriman/core/gitremote/__init__.py
diff --git a/src/ahriman/core/gitremote/remote_pull.py b/ahriman-core/src/ahriman/core/gitremote/remote_pull.py
similarity index 100%
rename from src/ahriman/core/gitremote/remote_pull.py
rename to ahriman-core/src/ahriman/core/gitremote/remote_pull.py
diff --git a/src/ahriman/core/gitremote/remote_pull_trigger.py b/ahriman-core/src/ahriman/core/gitremote/remote_pull_trigger.py
similarity index 100%
rename from src/ahriman/core/gitremote/remote_pull_trigger.py
rename to ahriman-core/src/ahriman/core/gitremote/remote_pull_trigger.py
diff --git a/src/ahriman/core/gitremote/remote_push.py b/ahriman-core/src/ahriman/core/gitremote/remote_push.py
similarity index 100%
rename from src/ahriman/core/gitremote/remote_push.py
rename to ahriman-core/src/ahriman/core/gitremote/remote_push.py
diff --git a/src/ahriman/core/gitremote/remote_push_trigger.py b/ahriman-core/src/ahriman/core/gitremote/remote_push_trigger.py
similarity index 100%
rename from src/ahriman/core/gitremote/remote_push_trigger.py
rename to ahriman-core/src/ahriman/core/gitremote/remote_push_trigger.py
diff --git a/src/ahriman/core/housekeeping/__init__.py b/ahriman-core/src/ahriman/core/housekeeping/__init__.py
similarity index 100%
rename from src/ahriman/core/housekeeping/__init__.py
rename to ahriman-core/src/ahriman/core/housekeeping/__init__.py
diff --git a/src/ahriman/core/housekeeping/archive_rotation_trigger.py b/ahriman-core/src/ahriman/core/housekeeping/archive_rotation_trigger.py
similarity index 100%
rename from src/ahriman/core/housekeeping/archive_rotation_trigger.py
rename to ahriman-core/src/ahriman/core/housekeeping/archive_rotation_trigger.py
diff --git a/src/ahriman/core/housekeeping/logs_rotation_trigger.py b/ahriman-core/src/ahriman/core/housekeeping/logs_rotation_trigger.py
similarity index 100%
rename from src/ahriman/core/housekeeping/logs_rotation_trigger.py
rename to ahriman-core/src/ahriman/core/housekeeping/logs_rotation_trigger.py
diff --git a/src/ahriman/core/http/__init__.py b/ahriman-core/src/ahriman/core/http/__init__.py
similarity index 100%
rename from src/ahriman/core/http/__init__.py
rename to ahriman-core/src/ahriman/core/http/__init__.py
diff --git a/src/ahriman/core/http/sync_ahriman_client.py b/ahriman-core/src/ahriman/core/http/sync_ahriman_client.py
similarity index 100%
rename from src/ahriman/core/http/sync_ahriman_client.py
rename to ahriman-core/src/ahriman/core/http/sync_ahriman_client.py
diff --git a/src/ahriman/core/http/sync_http_client.py b/ahriman-core/src/ahriman/core/http/sync_http_client.py
similarity index 100%
rename from src/ahriman/core/http/sync_http_client.py
rename to ahriman-core/src/ahriman/core/http/sync_http_client.py
diff --git a/src/ahriman/core/log/__init__.py b/ahriman-core/src/ahriman/core/log/__init__.py
similarity index 100%
rename from src/ahriman/core/log/__init__.py
rename to ahriman-core/src/ahriman/core/log/__init__.py
diff --git a/src/ahriman/core/log/http_log_handler.py b/ahriman-core/src/ahriman/core/log/http_log_handler.py
similarity index 100%
rename from src/ahriman/core/log/http_log_handler.py
rename to ahriman-core/src/ahriman/core/log/http_log_handler.py
diff --git a/src/ahriman/core/log/journal_handler.py b/ahriman-core/src/ahriman/core/log/journal_handler.py
similarity index 100%
rename from src/ahriman/core/log/journal_handler.py
rename to ahriman-core/src/ahriman/core/log/journal_handler.py
diff --git a/src/ahriman/core/log/lazy_logging.py b/ahriman-core/src/ahriman/core/log/lazy_logging.py
similarity index 100%
rename from src/ahriman/core/log/lazy_logging.py
rename to ahriman-core/src/ahriman/core/log/lazy_logging.py
diff --git a/src/ahriman/core/log/log_context.py b/ahriman-core/src/ahriman/core/log/log_context.py
similarity index 100%
rename from src/ahriman/core/log/log_context.py
rename to ahriman-core/src/ahriman/core/log/log_context.py
diff --git a/src/ahriman/core/log/log_loader.py b/ahriman-core/src/ahriman/core/log/log_loader.py
similarity index 100%
rename from src/ahriman/core/log/log_loader.py
rename to ahriman-core/src/ahriman/core/log/log_loader.py
diff --git a/src/ahriman/core/module_loader.py b/ahriman-core/src/ahriman/core/module_loader.py
similarity index 95%
rename from src/ahriman/core/module_loader.py
rename to ahriman-core/src/ahriman/core/module_loader.py
index e45aee62..ed66e71e 100644
--- a/src/ahriman/core/module_loader.py
+++ b/ahriman-core/src/ahriman/core/module_loader.py
@@ -46,9 +46,7 @@ def _modules(module_root: Path, prefix: str) -> Iterator[ModuleInfo]:
"""
prefix = f"{prefix}." if prefix else ""
for module_info in walk_packages([str(module_root)], prefix):
- if module_info.ispkg:
- yield from _modules(module_root / module_info.name, prefix)
- else:
+ if not module_info.ispkg:
yield module_info
diff --git a/src/ahriman/core/report/__init__.py b/ahriman-core/src/ahriman/core/report/__init__.py
similarity index 100%
rename from src/ahriman/core/report/__init__.py
rename to ahriman-core/src/ahriman/core/report/__init__.py
diff --git a/src/ahriman/core/report/console.py b/ahriman-core/src/ahriman/core/report/console.py
similarity index 100%
rename from src/ahriman/core/report/console.py
rename to ahriman-core/src/ahriman/core/report/console.py
diff --git a/src/ahriman/core/report/email.py b/ahriman-core/src/ahriman/core/report/email.py
similarity index 100%
rename from src/ahriman/core/report/email.py
rename to ahriman-core/src/ahriman/core/report/email.py
diff --git a/src/ahriman/core/report/html.py b/ahriman-core/src/ahriman/core/report/html.py
similarity index 100%
rename from src/ahriman/core/report/html.py
rename to ahriman-core/src/ahriman/core/report/html.py
diff --git a/src/ahriman/core/report/jinja_template.py b/ahriman-core/src/ahriman/core/report/jinja_template.py
similarity index 100%
rename from src/ahriman/core/report/jinja_template.py
rename to ahriman-core/src/ahriman/core/report/jinja_template.py
diff --git a/src/ahriman/core/report/remote_call.py b/ahriman-core/src/ahriman/core/report/remote_call.py
similarity index 100%
rename from src/ahriman/core/report/remote_call.py
rename to ahriman-core/src/ahriman/core/report/remote_call.py
diff --git a/src/ahriman/core/report/report.py b/ahriman-core/src/ahriman/core/report/report.py
similarity index 100%
rename from src/ahriman/core/report/report.py
rename to ahriman-core/src/ahriman/core/report/report.py
diff --git a/src/ahriman/core/report/report_trigger.py b/ahriman-core/src/ahriman/core/report/report_trigger.py
similarity index 100%
rename from src/ahriman/core/report/report_trigger.py
rename to ahriman-core/src/ahriman/core/report/report_trigger.py
diff --git a/src/ahriman/core/report/rss.py b/ahriman-core/src/ahriman/core/report/rss.py
similarity index 100%
rename from src/ahriman/core/report/rss.py
rename to ahriman-core/src/ahriman/core/report/rss.py
diff --git a/src/ahriman/core/report/telegram.py b/ahriman-core/src/ahriman/core/report/telegram.py
similarity index 100%
rename from src/ahriman/core/report/telegram.py
rename to ahriman-core/src/ahriman/core/report/telegram.py
diff --git a/src/ahriman/core/repository/__init__.py b/ahriman-core/src/ahriman/core/repository/__init__.py
similarity index 100%
rename from src/ahriman/core/repository/__init__.py
rename to ahriman-core/src/ahriman/core/repository/__init__.py
diff --git a/src/ahriman/core/repository/cleaner.py b/ahriman-core/src/ahriman/core/repository/cleaner.py
similarity index 100%
rename from src/ahriman/core/repository/cleaner.py
rename to ahriman-core/src/ahriman/core/repository/cleaner.py
diff --git a/src/ahriman/core/repository/event_logger.py b/ahriman-core/src/ahriman/core/repository/event_logger.py
similarity index 100%
rename from src/ahriman/core/repository/event_logger.py
rename to ahriman-core/src/ahriman/core/repository/event_logger.py
diff --git a/src/ahriman/core/repository/executor.py b/ahriman-core/src/ahriman/core/repository/executor.py
similarity index 100%
rename from src/ahriman/core/repository/executor.py
rename to ahriman-core/src/ahriman/core/repository/executor.py
diff --git a/src/ahriman/core/repository/explorer.py b/ahriman-core/src/ahriman/core/repository/explorer.py
similarity index 100%
rename from src/ahriman/core/repository/explorer.py
rename to ahriman-core/src/ahriman/core/repository/explorer.py
diff --git a/src/ahriman/core/repository/package_info.py b/ahriman-core/src/ahriman/core/repository/package_info.py
similarity index 100%
rename from src/ahriman/core/repository/package_info.py
rename to ahriman-core/src/ahriman/core/repository/package_info.py
diff --git a/src/ahriman/core/repository/repository.py b/ahriman-core/src/ahriman/core/repository/repository.py
similarity index 100%
rename from src/ahriman/core/repository/repository.py
rename to ahriman-core/src/ahriman/core/repository/repository.py
diff --git a/src/ahriman/core/repository/repository_properties.py b/ahriman-core/src/ahriman/core/repository/repository_properties.py
similarity index 100%
rename from src/ahriman/core/repository/repository_properties.py
rename to ahriman-core/src/ahriman/core/repository/repository_properties.py
diff --git a/src/ahriman/core/repository/update_handler.py b/ahriman-core/src/ahriman/core/repository/update_handler.py
similarity index 100%
rename from src/ahriman/core/repository/update_handler.py
rename to ahriman-core/src/ahriman/core/repository/update_handler.py
diff --git a/src/ahriman/core/sign/__init__.py b/ahriman-core/src/ahriman/core/sign/__init__.py
similarity index 100%
rename from src/ahriman/core/sign/__init__.py
rename to ahriman-core/src/ahriman/core/sign/__init__.py
diff --git a/src/ahriman/core/sign/gpg.py b/ahriman-core/src/ahriman/core/sign/gpg.py
similarity index 100%
rename from src/ahriman/core/sign/gpg.py
rename to ahriman-core/src/ahriman/core/sign/gpg.py
diff --git a/src/ahriman/core/spawn.py b/ahriman-core/src/ahriman/core/spawn.py
similarity index 100%
rename from src/ahriman/core/spawn.py
rename to ahriman-core/src/ahriman/core/spawn.py
diff --git a/src/ahriman/core/status/__init__.py b/ahriman-core/src/ahriman/core/status/__init__.py
similarity index 100%
rename from src/ahriman/core/status/__init__.py
rename to ahriman-core/src/ahriman/core/status/__init__.py
diff --git a/src/ahriman/core/status/client.py b/ahriman-core/src/ahriman/core/status/client.py
similarity index 100%
rename from src/ahriman/core/status/client.py
rename to ahriman-core/src/ahriman/core/status/client.py
diff --git a/src/ahriman/core/status/event_bus.py b/ahriman-core/src/ahriman/core/status/event_bus.py
similarity index 100%
rename from src/ahriman/core/status/event_bus.py
rename to ahriman-core/src/ahriman/core/status/event_bus.py
diff --git a/src/ahriman/core/status/local_client.py b/ahriman-core/src/ahriman/core/status/local_client.py
similarity index 100%
rename from src/ahriman/core/status/local_client.py
rename to ahriman-core/src/ahriman/core/status/local_client.py
diff --git a/src/ahriman/core/status/watcher.py b/ahriman-core/src/ahriman/core/status/watcher.py
similarity index 100%
rename from src/ahriman/core/status/watcher.py
rename to ahriman-core/src/ahriman/core/status/watcher.py
diff --git a/src/ahriman/core/status/web_client.py b/ahriman-core/src/ahriman/core/status/web_client.py
similarity index 100%
rename from src/ahriman/core/status/web_client.py
rename to ahriman-core/src/ahriman/core/status/web_client.py
diff --git a/src/ahriman/core/tree.py b/ahriman-core/src/ahriman/core/tree.py
similarity index 100%
rename from src/ahriman/core/tree.py
rename to ahriman-core/src/ahriman/core/tree.py
diff --git a/src/ahriman/core/triggers/__init__.py b/ahriman-core/src/ahriman/core/triggers/__init__.py
similarity index 100%
rename from src/ahriman/core/triggers/__init__.py
rename to ahriman-core/src/ahriman/core/triggers/__init__.py
diff --git a/src/ahriman/core/triggers/trigger.py b/ahriman-core/src/ahriman/core/triggers/trigger.py
similarity index 100%
rename from src/ahriman/core/triggers/trigger.py
rename to ahriman-core/src/ahriman/core/triggers/trigger.py
diff --git a/src/ahriman/core/triggers/trigger_loader.py b/ahriman-core/src/ahriman/core/triggers/trigger_loader.py
similarity index 100%
rename from src/ahriman/core/triggers/trigger_loader.py
rename to ahriman-core/src/ahriman/core/triggers/trigger_loader.py
diff --git a/src/ahriman/core/types.py b/ahriman-core/src/ahriman/core/types.py
similarity index 100%
rename from src/ahriman/core/types.py
rename to ahriman-core/src/ahriman/core/types.py
diff --git a/src/ahriman/core/upload/__init__.py b/ahriman-core/src/ahriman/core/upload/__init__.py
similarity index 100%
rename from src/ahriman/core/upload/__init__.py
rename to ahriman-core/src/ahriman/core/upload/__init__.py
diff --git a/src/ahriman/core/upload/github.py b/ahriman-core/src/ahriman/core/upload/github.py
similarity index 100%
rename from src/ahriman/core/upload/github.py
rename to ahriman-core/src/ahriman/core/upload/github.py
diff --git a/src/ahriman/core/upload/http_upload.py b/ahriman-core/src/ahriman/core/upload/http_upload.py
similarity index 100%
rename from src/ahriman/core/upload/http_upload.py
rename to ahriman-core/src/ahriman/core/upload/http_upload.py
diff --git a/src/ahriman/core/upload/remote_service.py b/ahriman-core/src/ahriman/core/upload/remote_service.py
similarity index 100%
rename from src/ahriman/core/upload/remote_service.py
rename to ahriman-core/src/ahriman/core/upload/remote_service.py
diff --git a/src/ahriman/core/upload/rsync.py b/ahriman-core/src/ahriman/core/upload/rsync.py
similarity index 100%
rename from src/ahriman/core/upload/rsync.py
rename to ahriman-core/src/ahriman/core/upload/rsync.py
diff --git a/src/ahriman/core/upload/s3.py b/ahriman-core/src/ahriman/core/upload/s3.py
similarity index 100%
rename from src/ahriman/core/upload/s3.py
rename to ahriman-core/src/ahriman/core/upload/s3.py
diff --git a/src/ahriman/core/upload/upload.py b/ahriman-core/src/ahriman/core/upload/upload.py
similarity index 100%
rename from src/ahriman/core/upload/upload.py
rename to ahriman-core/src/ahriman/core/upload/upload.py
diff --git a/src/ahriman/core/upload/upload_trigger.py b/ahriman-core/src/ahriman/core/upload/upload_trigger.py
similarity index 100%
rename from src/ahriman/core/upload/upload_trigger.py
rename to ahriman-core/src/ahriman/core/upload/upload_trigger.py
diff --git a/src/ahriman/core/util.py b/ahriman-core/src/ahriman/core/util.py
similarity index 100%
rename from src/ahriman/core/util.py
rename to ahriman-core/src/ahriman/core/util.py
diff --git a/src/ahriman/core/utils.py b/ahriman-core/src/ahriman/core/utils.py
similarity index 100%
rename from src/ahriman/core/utils.py
rename to ahriman-core/src/ahriman/core/utils.py
diff --git a/src/ahriman/core/support/pkgbuild/__init__.py b/ahriman-core/src/ahriman/models/__init__.py
similarity index 100%
rename from src/ahriman/core/support/pkgbuild/__init__.py
rename to ahriman-core/src/ahriman/models/__init__.py
diff --git a/src/ahriman/models/action.py b/ahriman-core/src/ahriman/models/action.py
similarity index 100%
rename from src/ahriman/models/action.py
rename to ahriman-core/src/ahriman/models/action.py
diff --git a/src/ahriman/models/aur_package.py b/ahriman-core/src/ahriman/models/aur_package.py
similarity index 100%
rename from src/ahriman/models/aur_package.py
rename to ahriman-core/src/ahriman/models/aur_package.py
diff --git a/src/ahriman/models/auth_settings.py b/ahriman-core/src/ahriman/models/auth_settings.py
similarity index 100%
rename from src/ahriman/models/auth_settings.py
rename to ahriman-core/src/ahriman/models/auth_settings.py
diff --git a/src/ahriman/models/build_status.py b/ahriman-core/src/ahriman/models/build_status.py
similarity index 100%
rename from src/ahriman/models/build_status.py
rename to ahriman-core/src/ahriman/models/build_status.py
diff --git a/src/ahriman/models/changes.py b/ahriman-core/src/ahriman/models/changes.py
similarity index 100%
rename from src/ahriman/models/changes.py
rename to ahriman-core/src/ahriman/models/changes.py
diff --git a/src/ahriman/models/context_key.py b/ahriman-core/src/ahriman/models/context_key.py
similarity index 100%
rename from src/ahriman/models/context_key.py
rename to ahriman-core/src/ahriman/models/context_key.py
diff --git a/src/ahriman/models/counters.py b/ahriman-core/src/ahriman/models/counters.py
similarity index 100%
rename from src/ahriman/models/counters.py
rename to ahriman-core/src/ahriman/models/counters.py
diff --git a/src/ahriman/models/dependencies.py b/ahriman-core/src/ahriman/models/dependencies.py
similarity index 100%
rename from src/ahriman/models/dependencies.py
rename to ahriman-core/src/ahriman/models/dependencies.py
diff --git a/src/ahriman/models/event.py b/ahriman-core/src/ahriman/models/event.py
similarity index 100%
rename from src/ahriman/models/event.py
rename to ahriman-core/src/ahriman/models/event.py
diff --git a/src/ahriman/models/filesystem_package.py b/ahriman-core/src/ahriman/models/filesystem_package.py
similarity index 100%
rename from src/ahriman/models/filesystem_package.py
rename to ahriman-core/src/ahriman/models/filesystem_package.py
diff --git a/src/ahriman/models/internal_status.py b/ahriman-core/src/ahriman/models/internal_status.py
similarity index 100%
rename from src/ahriman/models/internal_status.py
rename to ahriman-core/src/ahriman/models/internal_status.py
diff --git a/src/ahriman/models/log_handler.py b/ahriman-core/src/ahriman/models/log_handler.py
similarity index 100%
rename from src/ahriman/models/log_handler.py
rename to ahriman-core/src/ahriman/models/log_handler.py
diff --git a/src/ahriman/models/log_record.py b/ahriman-core/src/ahriman/models/log_record.py
similarity index 100%
rename from src/ahriman/models/log_record.py
rename to ahriman-core/src/ahriman/models/log_record.py
diff --git a/src/ahriman/models/log_record_id.py b/ahriman-core/src/ahriman/models/log_record_id.py
similarity index 100%
rename from src/ahriman/models/log_record_id.py
rename to ahriman-core/src/ahriman/models/log_record_id.py
diff --git a/src/ahriman/models/metrics_timer.py b/ahriman-core/src/ahriman/models/metrics_timer.py
similarity index 100%
rename from src/ahriman/models/metrics_timer.py
rename to ahriman-core/src/ahriman/models/metrics_timer.py
diff --git a/src/ahriman/models/migration.py b/ahriman-core/src/ahriman/models/migration.py
similarity index 100%
rename from src/ahriman/models/migration.py
rename to ahriman-core/src/ahriman/models/migration.py
diff --git a/src/ahriman/models/migration_result.py b/ahriman-core/src/ahriman/models/migration_result.py
similarity index 100%
rename from src/ahriman/models/migration_result.py
rename to ahriman-core/src/ahriman/models/migration_result.py
diff --git a/src/ahriman/models/package.py b/ahriman-core/src/ahriman/models/package.py
similarity index 100%
rename from src/ahriman/models/package.py
rename to ahriman-core/src/ahriman/models/package.py
diff --git a/src/ahriman/models/package_description.py b/ahriman-core/src/ahriman/models/package_description.py
similarity index 100%
rename from src/ahriman/models/package_description.py
rename to ahriman-core/src/ahriman/models/package_description.py
diff --git a/src/ahriman/models/package_source.py b/ahriman-core/src/ahriman/models/package_source.py
similarity index 100%
rename from src/ahriman/models/package_source.py
rename to ahriman-core/src/ahriman/models/package_source.py
diff --git a/src/ahriman/models/packagers.py b/ahriman-core/src/ahriman/models/packagers.py
similarity index 100%
rename from src/ahriman/models/packagers.py
rename to ahriman-core/src/ahriman/models/packagers.py
diff --git a/src/ahriman/models/pacman_synchronization.py b/ahriman-core/src/ahriman/models/pacman_synchronization.py
similarity index 100%
rename from src/ahriman/models/pacman_synchronization.py
rename to ahriman-core/src/ahriman/models/pacman_synchronization.py
diff --git a/src/ahriman/models/pkgbuild.py b/ahriman-core/src/ahriman/models/pkgbuild.py
similarity index 100%
rename from src/ahriman/models/pkgbuild.py
rename to ahriman-core/src/ahriman/models/pkgbuild.py
diff --git a/src/ahriman/models/pkgbuild_patch.py b/ahriman-core/src/ahriman/models/pkgbuild_patch.py
similarity index 100%
rename from src/ahriman/models/pkgbuild_patch.py
rename to ahriman-core/src/ahriman/models/pkgbuild_patch.py
diff --git a/src/ahriman/models/process_status.py b/ahriman-core/src/ahriman/models/process_status.py
similarity index 100%
rename from src/ahriman/models/process_status.py
rename to ahriman-core/src/ahriman/models/process_status.py
diff --git a/src/ahriman/models/property.py b/ahriman-core/src/ahriman/models/property.py
similarity index 100%
rename from src/ahriman/models/property.py
rename to ahriman-core/src/ahriman/models/property.py
diff --git a/src/ahriman/models/remote_source.py b/ahriman-core/src/ahriman/models/remote_source.py
similarity index 100%
rename from src/ahriman/models/remote_source.py
rename to ahriman-core/src/ahriman/models/remote_source.py
diff --git a/src/ahriman/models/report_settings.py b/ahriman-core/src/ahriman/models/report_settings.py
similarity index 100%
rename from src/ahriman/models/report_settings.py
rename to ahriman-core/src/ahriman/models/report_settings.py
diff --git a/src/ahriman/models/repository_id.py b/ahriman-core/src/ahriman/models/repository_id.py
similarity index 100%
rename from src/ahriman/models/repository_id.py
rename to ahriman-core/src/ahriman/models/repository_id.py
diff --git a/src/ahriman/models/repository_paths.py b/ahriman-core/src/ahriman/models/repository_paths.py
similarity index 100%
rename from src/ahriman/models/repository_paths.py
rename to ahriman-core/src/ahriman/models/repository_paths.py
diff --git a/src/ahriman/models/repository_stats.py b/ahriman-core/src/ahriman/models/repository_stats.py
similarity index 100%
rename from src/ahriman/models/repository_stats.py
rename to ahriman-core/src/ahriman/models/repository_stats.py
diff --git a/src/ahriman/models/result.py b/ahriman-core/src/ahriman/models/result.py
similarity index 100%
rename from src/ahriman/models/result.py
rename to ahriman-core/src/ahriman/models/result.py
diff --git a/src/ahriman/models/scan_paths.py b/ahriman-core/src/ahriman/models/scan_paths.py
similarity index 100%
rename from src/ahriman/models/scan_paths.py
rename to ahriman-core/src/ahriman/models/scan_paths.py
diff --git a/src/ahriman/models/series_statistics.py b/ahriman-core/src/ahriman/models/series_statistics.py
similarity index 100%
rename from src/ahriman/models/series_statistics.py
rename to ahriman-core/src/ahriman/models/series_statistics.py
diff --git a/src/ahriman/models/sign_settings.py b/ahriman-core/src/ahriman/models/sign_settings.py
similarity index 100%
rename from src/ahriman/models/sign_settings.py
rename to ahriman-core/src/ahriman/models/sign_settings.py
diff --git a/src/ahriman/models/smtp_ssl_settings.py b/ahriman-core/src/ahriman/models/smtp_ssl_settings.py
similarity index 100%
rename from src/ahriman/models/smtp_ssl_settings.py
rename to ahriman-core/src/ahriman/models/smtp_ssl_settings.py
diff --git a/src/ahriman/models/upload_settings.py b/ahriman-core/src/ahriman/models/upload_settings.py
similarity index 100%
rename from src/ahriman/models/upload_settings.py
rename to ahriman-core/src/ahriman/models/upload_settings.py
diff --git a/src/ahriman/models/user.py b/ahriman-core/src/ahriman/models/user.py
similarity index 100%
rename from src/ahriman/models/user.py
rename to ahriman-core/src/ahriman/models/user.py
diff --git a/src/ahriman/models/user_access.py b/ahriman-core/src/ahriman/models/user_access.py
similarity index 100%
rename from src/ahriman/models/user_access.py
rename to ahriman-core/src/ahriman/models/user_access.py
diff --git a/src/ahriman/models/waiter.py b/ahriman-core/src/ahriman/models/waiter.py
similarity index 100%
rename from src/ahriman/models/waiter.py
rename to ahriman-core/src/ahriman/models/waiter.py
diff --git a/src/ahriman/models/worker.py b/ahriman-core/src/ahriman/models/worker.py
similarity index 100%
rename from src/ahriman/models/worker.py
rename to ahriman-core/src/ahriman/models/worker.py
diff --git a/src/ahriman/py.typed b/ahriman-core/src/ahriman/py.typed
similarity index 100%
rename from src/ahriman/py.typed
rename to ahriman-core/src/ahriman/py.typed
diff --git a/tests/ahriman/application/application/conftest.py b/ahriman-core/tests/ahriman/application/application/conftest.py
similarity index 100%
rename from tests/ahriman/application/application/conftest.py
rename to ahriman-core/tests/ahriman/application/application/conftest.py
diff --git a/tests/ahriman/application/application/test_application.py b/ahriman-core/tests/ahriman/application/application/test_application.py
similarity index 100%
rename from tests/ahriman/application/application/test_application.py
rename to ahriman-core/tests/ahriman/application/application/test_application.py
diff --git a/tests/ahriman/application/application/test_application_packages.py b/ahriman-core/tests/ahriman/application/application/test_application_packages.py
similarity index 100%
rename from tests/ahriman/application/application/test_application_packages.py
rename to ahriman-core/tests/ahriman/application/application/test_application_packages.py
diff --git a/tests/ahriman/application/application/test_application_properties.py b/ahriman-core/tests/ahriman/application/application/test_application_properties.py
similarity index 100%
rename from tests/ahriman/application/application/test_application_properties.py
rename to ahriman-core/tests/ahriman/application/application/test_application_properties.py
diff --git a/tests/ahriman/application/application/test_application_repository.py b/ahriman-core/tests/ahriman/application/application/test_application_repository.py
similarity index 100%
rename from tests/ahriman/application/application/test_application_repository.py
rename to ahriman-core/tests/ahriman/application/application/test_application_repository.py
diff --git a/tests/ahriman/application/application/test_updates_iterator.py b/ahriman-core/tests/ahriman/application/application/test_updates_iterator.py
similarity index 100%
rename from tests/ahriman/application/application/test_updates_iterator.py
rename to ahriman-core/tests/ahriman/application/application/test_updates_iterator.py
diff --git a/tests/ahriman/application/application/workers/conftest.py b/ahriman-core/tests/ahriman/application/application/workers/conftest.py
similarity index 100%
rename from tests/ahriman/application/application/workers/conftest.py
rename to ahriman-core/tests/ahriman/application/application/workers/conftest.py
diff --git a/tests/ahriman/application/application/workers/test_local_updater.py b/ahriman-core/tests/ahriman/application/application/workers/test_local_updater.py
similarity index 100%
rename from tests/ahriman/application/application/workers/test_local_updater.py
rename to ahriman-core/tests/ahriman/application/application/workers/test_local_updater.py
diff --git a/tests/ahriman/application/application/workers/test_remote_updater.py b/ahriman-core/tests/ahriman/application/application/workers/test_remote_updater.py
similarity index 100%
rename from tests/ahriman/application/application/workers/test_remote_updater.py
rename to ahriman-core/tests/ahriman/application/application/workers/test_remote_updater.py
diff --git a/tests/ahriman/application/application/workers/test_updater.py b/ahriman-core/tests/ahriman/application/application/workers/test_updater.py
similarity index 100%
rename from tests/ahriman/application/application/workers/test_updater.py
rename to ahriman-core/tests/ahriman/application/application/workers/test_updater.py
diff --git a/tests/ahriman/application/conftest.py b/ahriman-core/tests/ahriman/application/conftest.py
similarity index 100%
rename from tests/ahriman/application/conftest.py
rename to ahriman-core/tests/ahriman/application/conftest.py
diff --git a/tests/ahriman/application/handlers/test_handler.py b/ahriman-core/tests/ahriman/application/handlers/test_handler.py
similarity index 100%
rename from tests/ahriman/application/handlers/test_handler.py
rename to ahriman-core/tests/ahriman/application/handlers/test_handler.py
diff --git a/tests/ahriman/application/handlers/test_handler_add.py b/ahriman-core/tests/ahriman/application/handlers/test_handler_add.py
similarity index 100%
rename from tests/ahriman/application/handlers/test_handler_add.py
rename to ahriman-core/tests/ahriman/application/handlers/test_handler_add.py
diff --git a/tests/ahriman/application/handlers/test_handler_archives.py b/ahriman-core/tests/ahriman/application/handlers/test_handler_archives.py
similarity index 100%
rename from tests/ahriman/application/handlers/test_handler_archives.py
rename to ahriman-core/tests/ahriman/application/handlers/test_handler_archives.py
diff --git a/tests/ahriman/application/handlers/test_handler_backup.py b/ahriman-core/tests/ahriman/application/handlers/test_handler_backup.py
similarity index 100%
rename from tests/ahriman/application/handlers/test_handler_backup.py
rename to ahriman-core/tests/ahriman/application/handlers/test_handler_backup.py
diff --git a/tests/ahriman/application/handlers/test_handler_change.py b/ahriman-core/tests/ahriman/application/handlers/test_handler_change.py
similarity index 100%
rename from tests/ahriman/application/handlers/test_handler_change.py
rename to ahriman-core/tests/ahriman/application/handlers/test_handler_change.py
diff --git a/tests/ahriman/application/handlers/test_handler_clean.py b/ahriman-core/tests/ahriman/application/handlers/test_handler_clean.py
similarity index 100%
rename from tests/ahriman/application/handlers/test_handler_clean.py
rename to ahriman-core/tests/ahriman/application/handlers/test_handler_clean.py
diff --git a/tests/ahriman/application/handlers/test_handler_copy.py b/ahriman-core/tests/ahriman/application/handlers/test_handler_copy.py
similarity index 100%
rename from tests/ahriman/application/handlers/test_handler_copy.py
rename to ahriman-core/tests/ahriman/application/handlers/test_handler_copy.py
diff --git a/tests/ahriman/application/handlers/test_handler_daemon.py b/ahriman-core/tests/ahriman/application/handlers/test_handler_daemon.py
similarity index 100%
rename from tests/ahriman/application/handlers/test_handler_daemon.py
rename to ahriman-core/tests/ahriman/application/handlers/test_handler_daemon.py
diff --git a/tests/ahriman/application/handlers/test_handler_dump.py b/ahriman-core/tests/ahriman/application/handlers/test_handler_dump.py
similarity index 100%
rename from tests/ahriman/application/handlers/test_handler_dump.py
rename to ahriman-core/tests/ahriman/application/handlers/test_handler_dump.py
diff --git a/tests/ahriman/application/handlers/test_handler_help.py b/ahriman-core/tests/ahriman/application/handlers/test_handler_help.py
similarity index 100%
rename from tests/ahriman/application/handlers/test_handler_help.py
rename to ahriman-core/tests/ahriman/application/handlers/test_handler_help.py
diff --git a/tests/ahriman/application/handlers/test_handler_hold.py b/ahriman-core/tests/ahriman/application/handlers/test_handler_hold.py
similarity index 100%
rename from tests/ahriman/application/handlers/test_handler_hold.py
rename to ahriman-core/tests/ahriman/application/handlers/test_handler_hold.py
diff --git a/tests/ahriman/application/handlers/test_handler_key_import.py b/ahriman-core/tests/ahriman/application/handlers/test_handler_key_import.py
similarity index 100%
rename from tests/ahriman/application/handlers/test_handler_key_import.py
rename to ahriman-core/tests/ahriman/application/handlers/test_handler_key_import.py
diff --git a/tests/ahriman/application/handlers/test_handler_patch.py b/ahriman-core/tests/ahriman/application/handlers/test_handler_patch.py
similarity index 100%
rename from tests/ahriman/application/handlers/test_handler_patch.py
rename to ahriman-core/tests/ahriman/application/handlers/test_handler_patch.py
diff --git a/tests/ahriman/application/handlers/test_handler_pkgbuild.py b/ahriman-core/tests/ahriman/application/handlers/test_handler_pkgbuild.py
similarity index 100%
rename from tests/ahriman/application/handlers/test_handler_pkgbuild.py
rename to ahriman-core/tests/ahriman/application/handlers/test_handler_pkgbuild.py
diff --git a/tests/ahriman/application/handlers/test_handler_rebuild.py b/ahriman-core/tests/ahriman/application/handlers/test_handler_rebuild.py
similarity index 100%
rename from tests/ahriman/application/handlers/test_handler_rebuild.py
rename to ahriman-core/tests/ahriman/application/handlers/test_handler_rebuild.py
diff --git a/tests/ahriman/application/handlers/test_handler_reload.py b/ahriman-core/tests/ahriman/application/handlers/test_handler_reload.py
similarity index 100%
rename from tests/ahriman/application/handlers/test_handler_reload.py
rename to ahriman-core/tests/ahriman/application/handlers/test_handler_reload.py
diff --git a/tests/ahriman/application/handlers/test_handler_remove.py b/ahriman-core/tests/ahriman/application/handlers/test_handler_remove.py
similarity index 100%
rename from tests/ahriman/application/handlers/test_handler_remove.py
rename to ahriman-core/tests/ahriman/application/handlers/test_handler_remove.py
diff --git a/tests/ahriman/application/handlers/test_handler_remove_unknown.py b/ahriman-core/tests/ahriman/application/handlers/test_handler_remove_unknown.py
similarity index 100%
rename from tests/ahriman/application/handlers/test_handler_remove_unknown.py
rename to ahriman-core/tests/ahriman/application/handlers/test_handler_remove_unknown.py
diff --git a/tests/ahriman/application/handlers/test_handler_repositories.py b/ahriman-core/tests/ahriman/application/handlers/test_handler_repositories.py
similarity index 100%
rename from tests/ahriman/application/handlers/test_handler_repositories.py
rename to ahriman-core/tests/ahriman/application/handlers/test_handler_repositories.py
diff --git a/tests/ahriman/application/handlers/test_handler_restore.py b/ahriman-core/tests/ahriman/application/handlers/test_handler_restore.py
similarity index 100%
rename from tests/ahriman/application/handlers/test_handler_restore.py
rename to ahriman-core/tests/ahriman/application/handlers/test_handler_restore.py
diff --git a/tests/ahriman/application/handlers/test_handler_rollback.py b/ahriman-core/tests/ahriman/application/handlers/test_handler_rollback.py
similarity index 100%
rename from tests/ahriman/application/handlers/test_handler_rollback.py
rename to ahriman-core/tests/ahriman/application/handlers/test_handler_rollback.py
diff --git a/tests/ahriman/application/handlers/test_handler_run.py b/ahriman-core/tests/ahriman/application/handlers/test_handler_run.py
similarity index 100%
rename from tests/ahriman/application/handlers/test_handler_run.py
rename to ahriman-core/tests/ahriman/application/handlers/test_handler_run.py
diff --git a/tests/ahriman/application/handlers/test_handler_search.py b/ahriman-core/tests/ahriman/application/handlers/test_handler_search.py
similarity index 100%
rename from tests/ahriman/application/handlers/test_handler_search.py
rename to ahriman-core/tests/ahriman/application/handlers/test_handler_search.py
diff --git a/tests/ahriman/application/handlers/test_handler_service_updates.py b/ahriman-core/tests/ahriman/application/handlers/test_handler_service_updates.py
similarity index 100%
rename from tests/ahriman/application/handlers/test_handler_service_updates.py
rename to ahriman-core/tests/ahriman/application/handlers/test_handler_service_updates.py
diff --git a/tests/ahriman/application/handlers/test_handler_setup.py b/ahriman-core/tests/ahriman/application/handlers/test_handler_setup.py
similarity index 100%
rename from tests/ahriman/application/handlers/test_handler_setup.py
rename to ahriman-core/tests/ahriman/application/handlers/test_handler_setup.py
diff --git a/tests/ahriman/application/handlers/test_handler_shell.py b/ahriman-core/tests/ahriman/application/handlers/test_handler_shell.py
similarity index 100%
rename from tests/ahriman/application/handlers/test_handler_shell.py
rename to ahriman-core/tests/ahriman/application/handlers/test_handler_shell.py
diff --git a/tests/ahriman/application/handlers/test_handler_sign.py b/ahriman-core/tests/ahriman/application/handlers/test_handler_sign.py
similarity index 100%
rename from tests/ahriman/application/handlers/test_handler_sign.py
rename to ahriman-core/tests/ahriman/application/handlers/test_handler_sign.py
diff --git a/tests/ahriman/application/handlers/test_handler_statistics.py b/ahriman-core/tests/ahriman/application/handlers/test_handler_statistics.py
similarity index 100%
rename from tests/ahriman/application/handlers/test_handler_statistics.py
rename to ahriman-core/tests/ahriman/application/handlers/test_handler_statistics.py
diff --git a/tests/ahriman/application/handlers/test_handler_status.py b/ahriman-core/tests/ahriman/application/handlers/test_handler_status.py
similarity index 100%
rename from tests/ahriman/application/handlers/test_handler_status.py
rename to ahriman-core/tests/ahriman/application/handlers/test_handler_status.py
diff --git a/tests/ahriman/application/handlers/test_handler_status_update.py b/ahriman-core/tests/ahriman/application/handlers/test_handler_status_update.py
similarity index 100%
rename from tests/ahriman/application/handlers/test_handler_status_update.py
rename to ahriman-core/tests/ahriman/application/handlers/test_handler_status_update.py
diff --git a/tests/ahriman/application/handlers/test_handler_structure.py b/ahriman-core/tests/ahriman/application/handlers/test_handler_structure.py
similarity index 100%
rename from tests/ahriman/application/handlers/test_handler_structure.py
rename to ahriman-core/tests/ahriman/application/handlers/test_handler_structure.py
diff --git a/tests/ahriman/application/handlers/test_handler_tree_migrate.py b/ahriman-core/tests/ahriman/application/handlers/test_handler_tree_migrate.py
similarity index 100%
rename from tests/ahriman/application/handlers/test_handler_tree_migrate.py
rename to ahriman-core/tests/ahriman/application/handlers/test_handler_tree_migrate.py
diff --git a/tests/ahriman/application/handlers/test_handler_triggers.py b/ahriman-core/tests/ahriman/application/handlers/test_handler_triggers.py
similarity index 100%
rename from tests/ahriman/application/handlers/test_handler_triggers.py
rename to ahriman-core/tests/ahriman/application/handlers/test_handler_triggers.py
diff --git a/tests/ahriman/application/handlers/test_handler_unsafe_commands.py b/ahriman-core/tests/ahriman/application/handlers/test_handler_unsafe_commands.py
similarity index 100%
rename from tests/ahriman/application/handlers/test_handler_unsafe_commands.py
rename to ahriman-core/tests/ahriman/application/handlers/test_handler_unsafe_commands.py
diff --git a/tests/ahriman/application/handlers/test_handler_update.py b/ahriman-core/tests/ahriman/application/handlers/test_handler_update.py
similarity index 100%
rename from tests/ahriman/application/handlers/test_handler_update.py
rename to ahriman-core/tests/ahriman/application/handlers/test_handler_update.py
diff --git a/tests/ahriman/application/handlers/test_handler_users.py b/ahriman-core/tests/ahriman/application/handlers/test_handler_users.py
similarity index 100%
rename from tests/ahriman/application/handlers/test_handler_users.py
rename to ahriman-core/tests/ahriman/application/handlers/test_handler_users.py
diff --git a/tests/ahriman/application/handlers/test_handler_validate.py b/ahriman-core/tests/ahriman/application/handlers/test_handler_validate.py
similarity index 100%
rename from tests/ahriman/application/handlers/test_handler_validate.py
rename to ahriman-core/tests/ahriman/application/handlers/test_handler_validate.py
diff --git a/tests/ahriman/application/handlers/test_handler_versions.py b/ahriman-core/tests/ahriman/application/handlers/test_handler_versions.py
similarity index 100%
rename from tests/ahriman/application/handlers/test_handler_versions.py
rename to ahriman-core/tests/ahriman/application/handlers/test_handler_versions.py
diff --git a/tests/ahriman/application/test_ahriman.py b/ahriman-core/tests/ahriman/application/test_ahriman.py
similarity index 100%
rename from tests/ahriman/application/test_ahriman.py
rename to ahriman-core/tests/ahriman/application/test_ahriman.py
diff --git a/tests/ahriman/application/test_help_formatter.py b/ahriman-core/tests/ahriman/application/test_help_formatter.py
similarity index 100%
rename from tests/ahriman/application/test_help_formatter.py
rename to ahriman-core/tests/ahriman/application/test_help_formatter.py
diff --git a/tests/ahriman/application/test_interactive_shell.py b/ahriman-core/tests/ahriman/application/test_interactive_shell.py
similarity index 100%
rename from tests/ahriman/application/test_interactive_shell.py
rename to ahriman-core/tests/ahriman/application/test_interactive_shell.py
diff --git a/tests/ahriman/application/test_lock.py b/ahriman-core/tests/ahriman/application/test_lock.py
similarity index 100%
rename from tests/ahriman/application/test_lock.py
rename to ahriman-core/tests/ahriman/application/test_lock.py
diff --git a/tests/ahriman/core/alpm/conftest.py b/ahriman-core/tests/ahriman/core/alpm/conftest.py
similarity index 100%
rename from tests/ahriman/core/alpm/conftest.py
rename to ahriman-core/tests/ahriman/core/alpm/conftest.py
diff --git a/tests/ahriman/core/alpm/remote/conftest.py b/ahriman-core/tests/ahriman/core/alpm/remote/conftest.py
similarity index 100%
rename from tests/ahriman/core/alpm/remote/conftest.py
rename to ahriman-core/tests/ahriman/core/alpm/remote/conftest.py
diff --git a/tests/ahriman/core/alpm/remote/test_aur.py b/ahriman-core/tests/ahriman/core/alpm/remote/test_aur.py
similarity index 100%
rename from tests/ahriman/core/alpm/remote/test_aur.py
rename to ahriman-core/tests/ahriman/core/alpm/remote/test_aur.py
diff --git a/tests/ahriman/core/alpm/remote/test_official.py b/ahriman-core/tests/ahriman/core/alpm/remote/test_official.py
similarity index 100%
rename from tests/ahriman/core/alpm/remote/test_official.py
rename to ahriman-core/tests/ahriman/core/alpm/remote/test_official.py
diff --git a/tests/ahriman/core/alpm/remote/test_official_syncdb.py b/ahriman-core/tests/ahriman/core/alpm/remote/test_official_syncdb.py
similarity index 100%
rename from tests/ahriman/core/alpm/remote/test_official_syncdb.py
rename to ahriman-core/tests/ahriman/core/alpm/remote/test_official_syncdb.py
diff --git a/tests/ahriman/core/alpm/remote/test_remote.py b/ahriman-core/tests/ahriman/core/alpm/remote/test_remote.py
similarity index 100%
rename from tests/ahriman/core/alpm/remote/test_remote.py
rename to ahriman-core/tests/ahriman/core/alpm/remote/test_remote.py
diff --git a/tests/ahriman/core/alpm/test_pacman.py b/ahriman-core/tests/ahriman/core/alpm/test_pacman.py
similarity index 100%
rename from tests/ahriman/core/alpm/test_pacman.py
rename to ahriman-core/tests/ahriman/core/alpm/test_pacman.py
diff --git a/tests/ahriman/core/alpm/test_pacman_database.py b/ahriman-core/tests/ahriman/core/alpm/test_pacman_database.py
similarity index 100%
rename from tests/ahriman/core/alpm/test_pacman_database.py
rename to ahriman-core/tests/ahriman/core/alpm/test_pacman_database.py
diff --git a/tests/ahriman/core/alpm/test_pacman_handle.py b/ahriman-core/tests/ahriman/core/alpm/test_pacman_handle.py
similarity index 100%
rename from tests/ahriman/core/alpm/test_pacman_handle.py
rename to ahriman-core/tests/ahriman/core/alpm/test_pacman_handle.py
diff --git a/tests/ahriman/core/alpm/test_pkgbuild_parser.py b/ahriman-core/tests/ahriman/core/alpm/test_pkgbuild_parser.py
similarity index 100%
rename from tests/ahriman/core/alpm/test_pkgbuild_parser.py
rename to ahriman-core/tests/ahriman/core/alpm/test_pkgbuild_parser.py
diff --git a/tests/ahriman/core/alpm/test_repo.py b/ahriman-core/tests/ahriman/core/alpm/test_repo.py
similarity index 100%
rename from tests/ahriman/core/alpm/test_repo.py
rename to ahriman-core/tests/ahriman/core/alpm/test_repo.py
diff --git a/tests/ahriman/core/build_tools/conftest.py b/ahriman-core/tests/ahriman/core/build_tools/conftest.py
similarity index 100%
rename from tests/ahriman/core/build_tools/conftest.py
rename to ahriman-core/tests/ahriman/core/build_tools/conftest.py
diff --git a/tests/ahriman/core/build_tools/test_package_archive.py b/ahriman-core/tests/ahriman/core/build_tools/test_package_archive.py
similarity index 100%
rename from tests/ahriman/core/build_tools/test_package_archive.py
rename to ahriman-core/tests/ahriman/core/build_tools/test_package_archive.py
diff --git a/tests/ahriman/core/build_tools/test_package_version.py b/ahriman-core/tests/ahriman/core/build_tools/test_package_version.py
similarity index 100%
rename from tests/ahriman/core/build_tools/test_package_version.py
rename to ahriman-core/tests/ahriman/core/build_tools/test_package_version.py
diff --git a/tests/ahriman/core/build_tools/test_sources.py b/ahriman-core/tests/ahriman/core/build_tools/test_sources.py
similarity index 100%
rename from tests/ahriman/core/build_tools/test_sources.py
rename to ahriman-core/tests/ahriman/core/build_tools/test_sources.py
diff --git a/tests/ahriman/core/build_tools/test_task.py b/ahriman-core/tests/ahriman/core/build_tools/test_task.py
similarity index 100%
rename from tests/ahriman/core/build_tools/test_task.py
rename to ahriman-core/tests/ahriman/core/build_tools/test_task.py
diff --git a/tests/ahriman/core/configuration/conftest.py b/ahriman-core/tests/ahriman/core/configuration/conftest.py
similarity index 100%
rename from tests/ahriman/core/configuration/conftest.py
rename to ahriman-core/tests/ahriman/core/configuration/conftest.py
diff --git a/tests/ahriman/core/configuration/test_configuration.py b/ahriman-core/tests/ahriman/core/configuration/test_configuration.py
similarity index 100%
rename from tests/ahriman/core/configuration/test_configuration.py
rename to ahriman-core/tests/ahriman/core/configuration/test_configuration.py
diff --git a/tests/ahriman/core/configuration/test_configuration_multi_dict.py b/ahriman-core/tests/ahriman/core/configuration/test_configuration_multi_dict.py
similarity index 100%
rename from tests/ahriman/core/configuration/test_configuration_multi_dict.py
rename to ahriman-core/tests/ahriman/core/configuration/test_configuration_multi_dict.py
diff --git a/tests/ahriman/core/configuration/test_schema.py b/ahriman-core/tests/ahriman/core/configuration/test_schema.py
similarity index 100%
rename from tests/ahriman/core/configuration/test_schema.py
rename to ahriman-core/tests/ahriman/core/configuration/test_schema.py
diff --git a/tests/ahriman/core/configuration/test_shell_interpolator.py b/ahriman-core/tests/ahriman/core/configuration/test_shell_interpolator.py
similarity index 100%
rename from tests/ahriman/core/configuration/test_shell_interpolator.py
rename to ahriman-core/tests/ahriman/core/configuration/test_shell_interpolator.py
diff --git a/tests/ahriman/core/configuration/test_shell_template.py b/ahriman-core/tests/ahriman/core/configuration/test_shell_template.py
similarity index 100%
rename from tests/ahriman/core/configuration/test_shell_template.py
rename to ahriman-core/tests/ahriman/core/configuration/test_shell_template.py
diff --git a/tests/ahriman/core/configuration/test_validator.py b/ahriman-core/tests/ahriman/core/configuration/test_validator.py
similarity index 100%
rename from tests/ahriman/core/configuration/test_validator.py
rename to ahriman-core/tests/ahriman/core/configuration/test_validator.py
diff --git a/tests/ahriman/core/conftest.py b/ahriman-core/tests/ahriman/core/conftest.py
similarity index 100%
rename from tests/ahriman/core/conftest.py
rename to ahriman-core/tests/ahriman/core/conftest.py
diff --git a/tests/ahriman/core/database/conftest.py b/ahriman-core/tests/ahriman/core/database/conftest.py
similarity index 100%
rename from tests/ahriman/core/database/conftest.py
rename to ahriman-core/tests/ahriman/core/database/conftest.py
diff --git a/tests/ahriman/core/database/migrations/conftest.py b/ahriman-core/tests/ahriman/core/database/migrations/conftest.py
similarity index 100%
rename from tests/ahriman/core/database/migrations/conftest.py
rename to ahriman-core/tests/ahriman/core/database/migrations/conftest.py
diff --git a/tests/ahriman/core/database/migrations/test_m000_initial.py b/ahriman-core/tests/ahriman/core/database/migrations/test_m000_initial.py
similarity index 100%
rename from tests/ahriman/core/database/migrations/test_m000_initial.py
rename to ahriman-core/tests/ahriman/core/database/migrations/test_m000_initial.py
diff --git a/tests/ahriman/core/database/migrations/test_m001_package_source.py b/ahriman-core/tests/ahriman/core/database/migrations/test_m001_package_source.py
similarity index 100%
rename from tests/ahriman/core/database/migrations/test_m001_package_source.py
rename to ahriman-core/tests/ahriman/core/database/migrations/test_m001_package_source.py
diff --git a/tests/ahriman/core/database/migrations/test_m002_user_access.py b/ahriman-core/tests/ahriman/core/database/migrations/test_m002_user_access.py
similarity index 100%
rename from tests/ahriman/core/database/migrations/test_m002_user_access.py
rename to ahriman-core/tests/ahriman/core/database/migrations/test_m002_user_access.py
diff --git a/tests/ahriman/core/database/migrations/test_m003_patch_variables.py b/ahriman-core/tests/ahriman/core/database/migrations/test_m003_patch_variables.py
similarity index 100%
rename from tests/ahriman/core/database/migrations/test_m003_patch_variables.py
rename to ahriman-core/tests/ahriman/core/database/migrations/test_m003_patch_variables.py
diff --git a/tests/ahriman/core/database/migrations/test_m004_logs.py b/ahriman-core/tests/ahriman/core/database/migrations/test_m004_logs.py
similarity index 100%
rename from tests/ahriman/core/database/migrations/test_m004_logs.py
rename to ahriman-core/tests/ahriman/core/database/migrations/test_m004_logs.py
diff --git a/tests/ahriman/core/database/migrations/test_m005_make_opt_depends.py b/ahriman-core/tests/ahriman/core/database/migrations/test_m005_make_opt_depends.py
similarity index 100%
rename from tests/ahriman/core/database/migrations/test_m005_make_opt_depends.py
rename to ahriman-core/tests/ahriman/core/database/migrations/test_m005_make_opt_depends.py
diff --git a/tests/ahriman/core/database/migrations/test_m006_packages_architecture_required.py b/ahriman-core/tests/ahriman/core/database/migrations/test_m006_packages_architecture_required.py
similarity index 100%
rename from tests/ahriman/core/database/migrations/test_m006_packages_architecture_required.py
rename to ahriman-core/tests/ahriman/core/database/migrations/test_m006_packages_architecture_required.py
diff --git a/tests/ahriman/core/database/migrations/test_m007_check_depends.py b/ahriman-core/tests/ahriman/core/database/migrations/test_m007_check_depends.py
similarity index 100%
rename from tests/ahriman/core/database/migrations/test_m007_check_depends.py
rename to ahriman-core/tests/ahriman/core/database/migrations/test_m007_check_depends.py
diff --git a/tests/ahriman/core/database/migrations/test_m008_packagers.py b/ahriman-core/tests/ahriman/core/database/migrations/test_m008_packagers.py
similarity index 100%
rename from tests/ahriman/core/database/migrations/test_m008_packagers.py
rename to ahriman-core/tests/ahriman/core/database/migrations/test_m008_packagers.py
diff --git a/tests/ahriman/core/database/migrations/test_m009_local_source.py b/ahriman-core/tests/ahriman/core/database/migrations/test_m009_local_source.py
similarity index 100%
rename from tests/ahriman/core/database/migrations/test_m009_local_source.py
rename to ahriman-core/tests/ahriman/core/database/migrations/test_m009_local_source.py
diff --git a/tests/ahriman/core/database/migrations/test_m010_version_based_logs_removal.py b/ahriman-core/tests/ahriman/core/database/migrations/test_m010_version_based_logs_removal.py
similarity index 100%
rename from tests/ahriman/core/database/migrations/test_m010_version_based_logs_removal.py
rename to ahriman-core/tests/ahriman/core/database/migrations/test_m010_version_based_logs_removal.py
diff --git a/tests/ahriman/core/database/migrations/test_m011_repository_name.py b/ahriman-core/tests/ahriman/core/database/migrations/test_m011_repository_name.py
similarity index 100%
rename from tests/ahriman/core/database/migrations/test_m011_repository_name.py
rename to ahriman-core/tests/ahriman/core/database/migrations/test_m011_repository_name.py
diff --git a/tests/ahriman/core/database/migrations/test_m012_last_commit_sha.py b/ahriman-core/tests/ahriman/core/database/migrations/test_m012_last_commit_sha.py
similarity index 100%
rename from tests/ahriman/core/database/migrations/test_m012_last_commit_sha.py
rename to ahriman-core/tests/ahriman/core/database/migrations/test_m012_last_commit_sha.py
diff --git a/tests/ahriman/core/database/migrations/test_m013_dependencies.py b/ahriman-core/tests/ahriman/core/database/migrations/test_m013_dependencies.py
similarity index 100%
rename from tests/ahriman/core/database/migrations/test_m013_dependencies.py
rename to ahriman-core/tests/ahriman/core/database/migrations/test_m013_dependencies.py
diff --git a/tests/ahriman/core/database/migrations/test_m014_auditlog.py b/ahriman-core/tests/ahriman/core/database/migrations/test_m014_auditlog.py
similarity index 100%
rename from tests/ahriman/core/database/migrations/test_m014_auditlog.py
rename to ahriman-core/tests/ahriman/core/database/migrations/test_m014_auditlog.py
diff --git a/tests/ahriman/core/database/migrations/test_m015_logs_process_id.py b/ahriman-core/tests/ahriman/core/database/migrations/test_m015_logs_process_id.py
similarity index 100%
rename from tests/ahriman/core/database/migrations/test_m015_logs_process_id.py
rename to ahriman-core/tests/ahriman/core/database/migrations/test_m015_logs_process_id.py
diff --git a/tests/ahriman/core/database/migrations/test_m016_archive.py b/ahriman-core/tests/ahriman/core/database/migrations/test_m016_archive.py
similarity index 100%
rename from tests/ahriman/core/database/migrations/test_m016_archive.py
rename to ahriman-core/tests/ahriman/core/database/migrations/test_m016_archive.py
diff --git a/tests/ahriman/core/database/migrations/test_m017_pkgbuild.py b/ahriman-core/tests/ahriman/core/database/migrations/test_m017_pkgbuild.py
similarity index 100%
rename from tests/ahriman/core/database/migrations/test_m017_pkgbuild.py
rename to ahriman-core/tests/ahriman/core/database/migrations/test_m017_pkgbuild.py
diff --git a/tests/ahriman/core/database/migrations/test_m018_package_hold.py b/ahriman-core/tests/ahriman/core/database/migrations/test_m018_package_hold.py
similarity index 100%
rename from tests/ahriman/core/database/migrations/test_m018_package_hold.py
rename to ahriman-core/tests/ahriman/core/database/migrations/test_m018_package_hold.py
diff --git a/tests/ahriman/core/database/migrations/test_migrations_init.py b/ahriman-core/tests/ahriman/core/database/migrations/test_migrations_init.py
similarity index 100%
rename from tests/ahriman/core/database/migrations/test_migrations_init.py
rename to ahriman-core/tests/ahriman/core/database/migrations/test_migrations_init.py
diff --git a/tests/ahriman/core/database/operations/test_auth_operations.py b/ahriman-core/tests/ahriman/core/database/operations/test_auth_operations.py
similarity index 100%
rename from tests/ahriman/core/database/operations/test_auth_operations.py
rename to ahriman-core/tests/ahriman/core/database/operations/test_auth_operations.py
diff --git a/tests/ahriman/core/database/operations/test_build_operations.py b/ahriman-core/tests/ahriman/core/database/operations/test_build_operations.py
similarity index 100%
rename from tests/ahriman/core/database/operations/test_build_operations.py
rename to ahriman-core/tests/ahriman/core/database/operations/test_build_operations.py
diff --git a/tests/ahriman/core/database/operations/test_changes_operations.py b/ahriman-core/tests/ahriman/core/database/operations/test_changes_operations.py
similarity index 100%
rename from tests/ahriman/core/database/operations/test_changes_operations.py
rename to ahriman-core/tests/ahriman/core/database/operations/test_changes_operations.py
diff --git a/tests/ahriman/core/database/operations/test_dependencies_operations.py b/ahriman-core/tests/ahriman/core/database/operations/test_dependencies_operations.py
similarity index 100%
rename from tests/ahriman/core/database/operations/test_dependencies_operations.py
rename to ahriman-core/tests/ahriman/core/database/operations/test_dependencies_operations.py
diff --git a/tests/ahriman/core/database/operations/test_event_operations.py b/ahriman-core/tests/ahriman/core/database/operations/test_event_operations.py
similarity index 100%
rename from tests/ahriman/core/database/operations/test_event_operations.py
rename to ahriman-core/tests/ahriman/core/database/operations/test_event_operations.py
diff --git a/tests/ahriman/core/database/operations/test_logs_operations.py b/ahriman-core/tests/ahriman/core/database/operations/test_logs_operations.py
similarity index 100%
rename from tests/ahriman/core/database/operations/test_logs_operations.py
rename to ahriman-core/tests/ahriman/core/database/operations/test_logs_operations.py
diff --git a/tests/ahriman/core/database/operations/test_operations.py b/ahriman-core/tests/ahriman/core/database/operations/test_operations.py
similarity index 100%
rename from tests/ahriman/core/database/operations/test_operations.py
rename to ahriman-core/tests/ahriman/core/database/operations/test_operations.py
diff --git a/tests/ahriman/core/database/operations/test_package_operations.py b/ahriman-core/tests/ahriman/core/database/operations/test_package_operations.py
similarity index 100%
rename from tests/ahriman/core/database/operations/test_package_operations.py
rename to ahriman-core/tests/ahriman/core/database/operations/test_package_operations.py
diff --git a/tests/ahriman/core/database/operations/test_patch_operations.py b/ahriman-core/tests/ahriman/core/database/operations/test_patch_operations.py
similarity index 100%
rename from tests/ahriman/core/database/operations/test_patch_operations.py
rename to ahriman-core/tests/ahriman/core/database/operations/test_patch_operations.py
diff --git a/tests/ahriman/core/database/test_sqlite.py b/ahriman-core/tests/ahriman/core/database/test_sqlite.py
similarity index 100%
rename from tests/ahriman/core/database/test_sqlite.py
rename to ahriman-core/tests/ahriman/core/database/test_sqlite.py
diff --git a/tests/ahriman/core/formatters/conftest.py b/ahriman-core/tests/ahriman/core/formatters/conftest.py
similarity index 100%
rename from tests/ahriman/core/formatters/conftest.py
rename to ahriman-core/tests/ahriman/core/formatters/conftest.py
diff --git a/tests/ahriman/core/formatters/test_aur_printer.py b/ahriman-core/tests/ahriman/core/formatters/test_aur_printer.py
similarity index 100%
rename from tests/ahriman/core/formatters/test_aur_printer.py
rename to ahriman-core/tests/ahriman/core/formatters/test_aur_printer.py
diff --git a/tests/ahriman/core/formatters/test_build_printer.py b/ahriman-core/tests/ahriman/core/formatters/test_build_printer.py
similarity index 100%
rename from tests/ahriman/core/formatters/test_build_printer.py
rename to ahriman-core/tests/ahriman/core/formatters/test_build_printer.py
diff --git a/tests/ahriman/core/formatters/test_changes_printer.py b/ahriman-core/tests/ahriman/core/formatters/test_changes_printer.py
similarity index 100%
rename from tests/ahriman/core/formatters/test_changes_printer.py
rename to ahriman-core/tests/ahriman/core/formatters/test_changes_printer.py
diff --git a/tests/ahriman/core/formatters/test_configuration_paths_printer.py b/ahriman-core/tests/ahriman/core/formatters/test_configuration_paths_printer.py
similarity index 100%
rename from tests/ahriman/core/formatters/test_configuration_paths_printer.py
rename to ahriman-core/tests/ahriman/core/formatters/test_configuration_paths_printer.py
diff --git a/tests/ahriman/core/formatters/test_configuration_printer.py b/ahriman-core/tests/ahriman/core/formatters/test_configuration_printer.py
similarity index 100%
rename from tests/ahriman/core/formatters/test_configuration_printer.py
rename to ahriman-core/tests/ahriman/core/formatters/test_configuration_printer.py
diff --git a/tests/ahriman/core/formatters/test_event_stats_printer.py b/ahriman-core/tests/ahriman/core/formatters/test_event_stats_printer.py
similarity index 100%
rename from tests/ahriman/core/formatters/test_event_stats_printer.py
rename to ahriman-core/tests/ahriman/core/formatters/test_event_stats_printer.py
diff --git a/tests/ahriman/core/formatters/test_package_printer.py b/ahriman-core/tests/ahriman/core/formatters/test_package_printer.py
similarity index 100%
rename from tests/ahriman/core/formatters/test_package_printer.py
rename to ahriman-core/tests/ahriman/core/formatters/test_package_printer.py
diff --git a/tests/ahriman/core/formatters/test_package_stats_printer.py b/ahriman-core/tests/ahriman/core/formatters/test_package_stats_printer.py
similarity index 100%
rename from tests/ahriman/core/formatters/test_package_stats_printer.py
rename to ahriman-core/tests/ahriman/core/formatters/test_package_stats_printer.py
diff --git a/tests/ahriman/core/formatters/test_patch_printer.py b/ahriman-core/tests/ahriman/core/formatters/test_patch_printer.py
similarity index 100%
rename from tests/ahriman/core/formatters/test_patch_printer.py
rename to ahriman-core/tests/ahriman/core/formatters/test_patch_printer.py
diff --git a/tests/ahriman/core/formatters/test_pkgbuild_printer.py b/ahriman-core/tests/ahriman/core/formatters/test_pkgbuild_printer.py
similarity index 100%
rename from tests/ahriman/core/formatters/test_pkgbuild_printer.py
rename to ahriman-core/tests/ahriman/core/formatters/test_pkgbuild_printer.py
diff --git a/tests/ahriman/core/formatters/test_printer.py b/ahriman-core/tests/ahriman/core/formatters/test_printer.py
similarity index 100%
rename from tests/ahriman/core/formatters/test_printer.py
rename to ahriman-core/tests/ahriman/core/formatters/test_printer.py
diff --git a/tests/ahriman/core/formatters/test_repository_printer.py b/ahriman-core/tests/ahriman/core/formatters/test_repository_printer.py
similarity index 100%
rename from tests/ahriman/core/formatters/test_repository_printer.py
rename to ahriman-core/tests/ahriman/core/formatters/test_repository_printer.py
diff --git a/tests/ahriman/core/formatters/test_repository_stats_printer.py b/ahriman-core/tests/ahriman/core/formatters/test_repository_stats_printer.py
similarity index 100%
rename from tests/ahriman/core/formatters/test_repository_stats_printer.py
rename to ahriman-core/tests/ahriman/core/formatters/test_repository_stats_printer.py
diff --git a/tests/ahriman/core/formatters/test_status_printer.py b/ahriman-core/tests/ahriman/core/formatters/test_status_printer.py
similarity index 100%
rename from tests/ahriman/core/formatters/test_status_printer.py
rename to ahriman-core/tests/ahriman/core/formatters/test_status_printer.py
diff --git a/tests/ahriman/core/formatters/test_string_printer.py b/ahriman-core/tests/ahriman/core/formatters/test_string_printer.py
similarity index 100%
rename from tests/ahriman/core/formatters/test_string_printer.py
rename to ahriman-core/tests/ahriman/core/formatters/test_string_printer.py
diff --git a/tests/ahriman/core/formatters/test_tree_printer.py b/ahriman-core/tests/ahriman/core/formatters/test_tree_printer.py
similarity index 100%
rename from tests/ahriman/core/formatters/test_tree_printer.py
rename to ahriman-core/tests/ahriman/core/formatters/test_tree_printer.py
diff --git a/tests/ahriman/core/formatters/test_update_printer.py b/ahriman-core/tests/ahriman/core/formatters/test_update_printer.py
similarity index 100%
rename from tests/ahriman/core/formatters/test_update_printer.py
rename to ahriman-core/tests/ahriman/core/formatters/test_update_printer.py
diff --git a/tests/ahriman/core/formatters/test_user_printer.py b/ahriman-core/tests/ahriman/core/formatters/test_user_printer.py
similarity index 100%
rename from tests/ahriman/core/formatters/test_user_printer.py
rename to ahriman-core/tests/ahriman/core/formatters/test_user_printer.py
diff --git a/tests/ahriman/core/formatters/test_validation_printer.py b/ahriman-core/tests/ahriman/core/formatters/test_validation_printer.py
similarity index 100%
rename from tests/ahriman/core/formatters/test_validation_printer.py
rename to ahriman-core/tests/ahriman/core/formatters/test_validation_printer.py
diff --git a/tests/ahriman/core/formatters/test_version_printer.py b/ahriman-core/tests/ahriman/core/formatters/test_version_printer.py
similarity index 100%
rename from tests/ahriman/core/formatters/test_version_printer.py
rename to ahriman-core/tests/ahriman/core/formatters/test_version_printer.py
diff --git a/tests/ahriman/core/gitremote/test_remote_pull.py b/ahriman-core/tests/ahriman/core/gitremote/test_remote_pull.py
similarity index 100%
rename from tests/ahriman/core/gitremote/test_remote_pull.py
rename to ahriman-core/tests/ahriman/core/gitremote/test_remote_pull.py
diff --git a/tests/ahriman/core/gitremote/test_remote_pull_trigger.py b/ahriman-core/tests/ahriman/core/gitremote/test_remote_pull_trigger.py
similarity index 100%
rename from tests/ahriman/core/gitremote/test_remote_pull_trigger.py
rename to ahriman-core/tests/ahriman/core/gitremote/test_remote_pull_trigger.py
diff --git a/tests/ahriman/core/gitremote/test_remote_push.py b/ahriman-core/tests/ahriman/core/gitremote/test_remote_push.py
similarity index 100%
rename from tests/ahriman/core/gitremote/test_remote_push.py
rename to ahriman-core/tests/ahriman/core/gitremote/test_remote_push.py
diff --git a/tests/ahriman/core/gitremote/test_remote_push_trigger.py b/ahriman-core/tests/ahriman/core/gitremote/test_remote_push_trigger.py
similarity index 100%
rename from tests/ahriman/core/gitremote/test_remote_push_trigger.py
rename to ahriman-core/tests/ahriman/core/gitremote/test_remote_push_trigger.py
diff --git a/tests/ahriman/core/housekeeping/conftest.py b/ahriman-core/tests/ahriman/core/housekeeping/conftest.py
similarity index 100%
rename from tests/ahriman/core/housekeeping/conftest.py
rename to ahriman-core/tests/ahriman/core/housekeeping/conftest.py
diff --git a/tests/ahriman/core/housekeeping/test_archive_rotation_trigger.py b/ahriman-core/tests/ahriman/core/housekeeping/test_archive_rotation_trigger.py
similarity index 100%
rename from tests/ahriman/core/housekeeping/test_archive_rotation_trigger.py
rename to ahriman-core/tests/ahriman/core/housekeeping/test_archive_rotation_trigger.py
diff --git a/tests/ahriman/core/housekeeping/test_logs_rotation_trigger.py b/ahriman-core/tests/ahriman/core/housekeeping/test_logs_rotation_trigger.py
similarity index 100%
rename from tests/ahriman/core/housekeeping/test_logs_rotation_trigger.py
rename to ahriman-core/tests/ahriman/core/housekeeping/test_logs_rotation_trigger.py
diff --git a/tests/ahriman/core/http/conftest.py b/ahriman-core/tests/ahriman/core/http/conftest.py
similarity index 100%
rename from tests/ahriman/core/http/conftest.py
rename to ahriman-core/tests/ahriman/core/http/conftest.py
diff --git a/tests/ahriman/core/http/test_sync_ahriman_client.py b/ahriman-core/tests/ahriman/core/http/test_sync_ahriman_client.py
similarity index 100%
rename from tests/ahriman/core/http/test_sync_ahriman_client.py
rename to ahriman-core/tests/ahriman/core/http/test_sync_ahriman_client.py
diff --git a/tests/ahriman/core/http/test_sync_http_client.py b/ahriman-core/tests/ahriman/core/http/test_sync_http_client.py
similarity index 100%
rename from tests/ahriman/core/http/test_sync_http_client.py
rename to ahriman-core/tests/ahriman/core/http/test_sync_http_client.py
diff --git a/tests/ahriman/core/log/test_http_log_handler.py b/ahriman-core/tests/ahriman/core/log/test_http_log_handler.py
similarity index 100%
rename from tests/ahriman/core/log/test_http_log_handler.py
rename to ahriman-core/tests/ahriman/core/log/test_http_log_handler.py
diff --git a/tests/ahriman/core/log/test_journal_handler.py b/ahriman-core/tests/ahriman/core/log/test_journal_handler.py
similarity index 100%
rename from tests/ahriman/core/log/test_journal_handler.py
rename to ahriman-core/tests/ahriman/core/log/test_journal_handler.py
diff --git a/tests/ahriman/core/log/test_lazy_logging.py b/ahriman-core/tests/ahriman/core/log/test_lazy_logging.py
similarity index 100%
rename from tests/ahriman/core/log/test_lazy_logging.py
rename to ahriman-core/tests/ahriman/core/log/test_lazy_logging.py
diff --git a/tests/ahriman/core/log/test_log_context.py b/ahriman-core/tests/ahriman/core/log/test_log_context.py
similarity index 100%
rename from tests/ahriman/core/log/test_log_context.py
rename to ahriman-core/tests/ahriman/core/log/test_log_context.py
diff --git a/tests/ahriman/core/log/test_log_loader.py b/ahriman-core/tests/ahriman/core/log/test_log_loader.py
similarity index 100%
rename from tests/ahriman/core/log/test_log_loader.py
rename to ahriman-core/tests/ahriman/core/log/test_log_loader.py
diff --git a/tests/ahriman/core/report/conftest.py b/ahriman-core/tests/ahriman/core/report/conftest.py
similarity index 100%
rename from tests/ahriman/core/report/conftest.py
rename to ahriman-core/tests/ahriman/core/report/conftest.py
diff --git a/tests/ahriman/core/report/test_console.py b/ahriman-core/tests/ahriman/core/report/test_console.py
similarity index 100%
rename from tests/ahriman/core/report/test_console.py
rename to ahriman-core/tests/ahriman/core/report/test_console.py
diff --git a/tests/ahriman/core/report/test_email.py b/ahriman-core/tests/ahriman/core/report/test_email.py
similarity index 100%
rename from tests/ahriman/core/report/test_email.py
rename to ahriman-core/tests/ahriman/core/report/test_email.py
diff --git a/tests/ahriman/core/report/test_html.py b/ahriman-core/tests/ahriman/core/report/test_html.py
similarity index 100%
rename from tests/ahriman/core/report/test_html.py
rename to ahriman-core/tests/ahriman/core/report/test_html.py
diff --git a/tests/ahriman/core/report/test_jinja_template.py b/ahriman-core/tests/ahriman/core/report/test_jinja_template.py
similarity index 100%
rename from tests/ahriman/core/report/test_jinja_template.py
rename to ahriman-core/tests/ahriman/core/report/test_jinja_template.py
diff --git a/tests/ahriman/core/report/test_remote_call.py b/ahriman-core/tests/ahriman/core/report/test_remote_call.py
similarity index 100%
rename from tests/ahriman/core/report/test_remote_call.py
rename to ahriman-core/tests/ahriman/core/report/test_remote_call.py
diff --git a/tests/ahriman/core/report/test_report.py b/ahriman-core/tests/ahriman/core/report/test_report.py
similarity index 100%
rename from tests/ahriman/core/report/test_report.py
rename to ahriman-core/tests/ahriman/core/report/test_report.py
diff --git a/tests/ahriman/core/report/test_report_trigger.py b/ahriman-core/tests/ahriman/core/report/test_report_trigger.py
similarity index 100%
rename from tests/ahriman/core/report/test_report_trigger.py
rename to ahriman-core/tests/ahriman/core/report/test_report_trigger.py
diff --git a/tests/ahriman/core/report/test_rss.py b/ahriman-core/tests/ahriman/core/report/test_rss.py
similarity index 100%
rename from tests/ahriman/core/report/test_rss.py
rename to ahriman-core/tests/ahriman/core/report/test_rss.py
diff --git a/tests/ahriman/core/report/test_telegram.py b/ahriman-core/tests/ahriman/core/report/test_telegram.py
similarity index 100%
rename from tests/ahriman/core/report/test_telegram.py
rename to ahriman-core/tests/ahriman/core/report/test_telegram.py
diff --git a/tests/ahriman/core/repository/conftest.py b/ahriman-core/tests/ahriman/core/repository/conftest.py
similarity index 100%
rename from tests/ahriman/core/repository/conftest.py
rename to ahriman-core/tests/ahriman/core/repository/conftest.py
diff --git a/tests/ahriman/core/repository/test_cleaner.py b/ahriman-core/tests/ahriman/core/repository/test_cleaner.py
similarity index 100%
rename from tests/ahriman/core/repository/test_cleaner.py
rename to ahriman-core/tests/ahriman/core/repository/test_cleaner.py
diff --git a/tests/ahriman/core/repository/test_event_logger.py b/ahriman-core/tests/ahriman/core/repository/test_event_logger.py
similarity index 100%
rename from tests/ahriman/core/repository/test_event_logger.py
rename to ahriman-core/tests/ahriman/core/repository/test_event_logger.py
diff --git a/tests/ahriman/core/repository/test_executor.py b/ahriman-core/tests/ahriman/core/repository/test_executor.py
similarity index 100%
rename from tests/ahriman/core/repository/test_executor.py
rename to ahriman-core/tests/ahriman/core/repository/test_executor.py
diff --git a/tests/ahriman/core/repository/test_explorer.py b/ahriman-core/tests/ahriman/core/repository/test_explorer.py
similarity index 100%
rename from tests/ahriman/core/repository/test_explorer.py
rename to ahriman-core/tests/ahriman/core/repository/test_explorer.py
diff --git a/tests/ahriman/core/repository/test_package_info.py b/ahriman-core/tests/ahriman/core/repository/test_package_info.py
similarity index 100%
rename from tests/ahriman/core/repository/test_package_info.py
rename to ahriman-core/tests/ahriman/core/repository/test_package_info.py
diff --git a/tests/ahriman/core/repository/test_repository.py b/ahriman-core/tests/ahriman/core/repository/test_repository.py
similarity index 100%
rename from tests/ahriman/core/repository/test_repository.py
rename to ahriman-core/tests/ahriman/core/repository/test_repository.py
diff --git a/tests/ahriman/core/repository/test_repository_properties.py b/ahriman-core/tests/ahriman/core/repository/test_repository_properties.py
similarity index 100%
rename from tests/ahriman/core/repository/test_repository_properties.py
rename to ahriman-core/tests/ahriman/core/repository/test_repository_properties.py
diff --git a/tests/ahriman/core/repository/test_update_handler.py b/ahriman-core/tests/ahriman/core/repository/test_update_handler.py
similarity index 100%
rename from tests/ahriman/core/repository/test_update_handler.py
rename to ahriman-core/tests/ahriman/core/repository/test_update_handler.py
diff --git a/tests/ahriman/core/sign/conftest.py b/ahriman-core/tests/ahriman/core/sign/conftest.py
similarity index 100%
rename from tests/ahriman/core/sign/conftest.py
rename to ahriman-core/tests/ahriman/core/sign/conftest.py
diff --git a/tests/ahriman/core/sign/test_gpg.py b/ahriman-core/tests/ahriman/core/sign/test_gpg.py
similarity index 100%
rename from tests/ahriman/core/sign/test_gpg.py
rename to ahriman-core/tests/ahriman/core/sign/test_gpg.py
diff --git a/tests/ahriman/core/status/conftest.py b/ahriman-core/tests/ahriman/core/status/conftest.py
similarity index 100%
rename from tests/ahriman/core/status/conftest.py
rename to ahriman-core/tests/ahriman/core/status/conftest.py
diff --git a/tests/ahriman/core/status/test_client.py b/ahriman-core/tests/ahriman/core/status/test_client.py
similarity index 100%
rename from tests/ahriman/core/status/test_client.py
rename to ahriman-core/tests/ahriman/core/status/test_client.py
diff --git a/tests/ahriman/core/status/test_event_bus.py b/ahriman-core/tests/ahriman/core/status/test_event_bus.py
similarity index 100%
rename from tests/ahriman/core/status/test_event_bus.py
rename to ahriman-core/tests/ahriman/core/status/test_event_bus.py
diff --git a/tests/ahriman/core/status/test_local_client.py b/ahriman-core/tests/ahriman/core/status/test_local_client.py
similarity index 100%
rename from tests/ahriman/core/status/test_local_client.py
rename to ahriman-core/tests/ahriman/core/status/test_local_client.py
diff --git a/tests/ahriman/core/status/test_watcher.py b/ahriman-core/tests/ahriman/core/status/test_watcher.py
similarity index 100%
rename from tests/ahriman/core/status/test_watcher.py
rename to ahriman-core/tests/ahriman/core/status/test_watcher.py
diff --git a/tests/ahriman/core/status/test_web_client.py b/ahriman-core/tests/ahriman/core/status/test_web_client.py
similarity index 100%
rename from tests/ahriman/core/status/test_web_client.py
rename to ahriman-core/tests/ahriman/core/status/test_web_client.py
diff --git a/tests/ahriman/core/test_context_init.py b/ahriman-core/tests/ahriman/core/test_context_init.py
similarity index 100%
rename from tests/ahriman/core/test_context_init.py
rename to ahriman-core/tests/ahriman/core/test_context_init.py
diff --git a/tests/ahriman/core/test_exceptions.py b/ahriman-core/tests/ahriman/core/test_exceptions.py
similarity index 100%
rename from tests/ahriman/core/test_exceptions.py
rename to ahriman-core/tests/ahriman/core/test_exceptions.py
diff --git a/tests/ahriman/core/test_module_loader.py b/ahriman-core/tests/ahriman/core/test_module_loader.py
similarity index 86%
rename from tests/ahriman/core/test_module_loader.py
rename to ahriman-core/tests/ahriman/core/test_module_loader.py
index ba6b1515..72c34929 100644
--- a/tests/ahriman/core/test_module_loader.py
+++ b/ahriman-core/tests/ahriman/core/test_module_loader.py
@@ -10,7 +10,7 @@ def test_modules() -> None:
"""
must load modules
"""
- modules = list(_modules(Path(__file__).parent.parent, "ahriman.web.views"))
+ modules = list(_modules(Path(next(iter(ahriman.web.views.__path__))), "ahriman.web.views"))
assert modules
assert all(not module.ispkg for module in modules)
diff --git a/tests/ahriman/core/test_spawn.py b/ahriman-core/tests/ahriman/core/test_spawn.py
similarity index 100%
rename from tests/ahriman/core/test_spawn.py
rename to ahriman-core/tests/ahriman/core/test_spawn.py
diff --git a/tests/ahriman/core/test_tree.py b/ahriman-core/tests/ahriman/core/test_tree.py
similarity index 100%
rename from tests/ahriman/core/test_tree.py
rename to ahriman-core/tests/ahriman/core/test_tree.py
diff --git a/tests/ahriman/core/test_types.py b/ahriman-core/tests/ahriman/core/test_types.py
similarity index 100%
rename from tests/ahriman/core/test_types.py
rename to ahriman-core/tests/ahriman/core/test_types.py
diff --git a/tests/ahriman/core/test_util.py b/ahriman-core/tests/ahriman/core/test_util.py
similarity index 100%
rename from tests/ahriman/core/test_util.py
rename to ahriman-core/tests/ahriman/core/test_util.py
diff --git a/tests/ahriman/core/test_utils.py b/ahriman-core/tests/ahriman/core/test_utils.py
similarity index 100%
rename from tests/ahriman/core/test_utils.py
rename to ahriman-core/tests/ahriman/core/test_utils.py
diff --git a/tests/ahriman/core/triggers/conftest.py b/ahriman-core/tests/ahriman/core/triggers/conftest.py
similarity index 100%
rename from tests/ahriman/core/triggers/conftest.py
rename to ahriman-core/tests/ahriman/core/triggers/conftest.py
diff --git a/tests/ahriman/core/triggers/test_trigger.py b/ahriman-core/tests/ahriman/core/triggers/test_trigger.py
similarity index 100%
rename from tests/ahriman/core/triggers/test_trigger.py
rename to ahriman-core/tests/ahriman/core/triggers/test_trigger.py
diff --git a/tests/ahriman/core/triggers/test_trigger_loader.py b/ahriman-core/tests/ahriman/core/triggers/test_trigger_loader.py
similarity index 95%
rename from tests/ahriman/core/triggers/test_trigger_loader.py
rename to ahriman-core/tests/ahriman/core/triggers/test_trigger_loader.py
index 6c2d5ba3..0398ac43 100644
--- a/tests/ahriman/core/triggers/test_trigger_loader.py
+++ b/ahriman-core/tests/ahriman/core/triggers/test_trigger_loader.py
@@ -92,7 +92,7 @@ def test_load_trigger_class_path(trigger_loader: TriggerLoader, resource_path_ro
"""
must load trigger class from path
"""
- path = resource_path_root.parent.parent / "src" / "ahriman" / "core" / "report" / "__init__.py"
+ path = resource_path_root.parent.parent / "ahriman-core" / "src" / "ahriman" / "core" / "report" / "__init__.py"
assert trigger_loader.load_trigger_class(f"{path}.ReportTrigger") == ReportTrigger
@@ -100,7 +100,7 @@ def test_load_trigger_class_path_suffix(trigger_loader: TriggerLoader, resource_
"""
must load trigger class from path without py suffix
"""
- path = resource_path_root.parent.parent / "src" / "ahriman" / "core" / "report" / "__init__"
+ path = resource_path_root.parent.parent / "ahriman-core" / "src" / "ahriman" / "core" / "report" / "__init__"
assert trigger_loader.load_trigger_class(f"{path}.ReportTrigger") == ReportTrigger
@@ -108,7 +108,7 @@ def test_load_trigger_class_path_directory(trigger_loader: TriggerLoader, resour
"""
must raise InvalidExtension if provided import path is directory
"""
- path = resource_path_root.parent.parent / "src" / "ahriman" / "core" / "report"
+ path = resource_path_root.parent.parent / "ahriman-core" / "src" / "ahriman" / "core" / "report"
with pytest.raises(ExtensionError):
trigger_loader.load_trigger_class(f"{path}.ReportTrigger")
diff --git a/tests/ahriman/core/upload/conftest.py b/ahriman-core/tests/ahriman/core/upload/conftest.py
similarity index 100%
rename from tests/ahriman/core/upload/conftest.py
rename to ahriman-core/tests/ahriman/core/upload/conftest.py
diff --git a/tests/ahriman/core/upload/test_github.py b/ahriman-core/tests/ahriman/core/upload/test_github.py
similarity index 100%
rename from tests/ahriman/core/upload/test_github.py
rename to ahriman-core/tests/ahriman/core/upload/test_github.py
diff --git a/tests/ahriman/core/upload/test_http_upload.py b/ahriman-core/tests/ahriman/core/upload/test_http_upload.py
similarity index 100%
rename from tests/ahriman/core/upload/test_http_upload.py
rename to ahriman-core/tests/ahriman/core/upload/test_http_upload.py
diff --git a/tests/ahriman/core/upload/test_remote_service.py b/ahriman-core/tests/ahriman/core/upload/test_remote_service.py
similarity index 100%
rename from tests/ahriman/core/upload/test_remote_service.py
rename to ahriman-core/tests/ahriman/core/upload/test_remote_service.py
diff --git a/tests/ahriman/core/upload/test_rsync.py b/ahriman-core/tests/ahriman/core/upload/test_rsync.py
similarity index 100%
rename from tests/ahriman/core/upload/test_rsync.py
rename to ahriman-core/tests/ahriman/core/upload/test_rsync.py
diff --git a/tests/ahriman/core/upload/test_s3.py b/ahriman-core/tests/ahriman/core/upload/test_s3.py
similarity index 100%
rename from tests/ahriman/core/upload/test_s3.py
rename to ahriman-core/tests/ahriman/core/upload/test_s3.py
diff --git a/tests/ahriman/core/upload/test_upload.py b/ahriman-core/tests/ahriman/core/upload/test_upload.py
similarity index 100%
rename from tests/ahriman/core/upload/test_upload.py
rename to ahriman-core/tests/ahriman/core/upload/test_upload.py
diff --git a/tests/ahriman/core/upload/test_upload_trigger.py b/ahriman-core/tests/ahriman/core/upload/test_upload_trigger.py
similarity index 100%
rename from tests/ahriman/core/upload/test_upload_trigger.py
rename to ahriman-core/tests/ahriman/core/upload/test_upload_trigger.py
diff --git a/tests/ahriman/models/conftest.py b/ahriman-core/tests/ahriman/models/conftest.py
similarity index 100%
rename from tests/ahriman/models/conftest.py
rename to ahriman-core/tests/ahriman/models/conftest.py
diff --git a/tests/ahriman/models/test_action.py b/ahriman-core/tests/ahriman/models/test_action.py
similarity index 100%
rename from tests/ahriman/models/test_action.py
rename to ahriman-core/tests/ahriman/models/test_action.py
diff --git a/tests/ahriman/models/test_aur_package.py b/ahriman-core/tests/ahriman/models/test_aur_package.py
similarity index 100%
rename from tests/ahriman/models/test_aur_package.py
rename to ahriman-core/tests/ahriman/models/test_aur_package.py
diff --git a/tests/ahriman/models/test_auth_settings.py b/ahriman-core/tests/ahriman/models/test_auth_settings.py
similarity index 100%
rename from tests/ahriman/models/test_auth_settings.py
rename to ahriman-core/tests/ahriman/models/test_auth_settings.py
diff --git a/tests/ahriman/models/test_build_status.py b/ahriman-core/tests/ahriman/models/test_build_status.py
similarity index 100%
rename from tests/ahriman/models/test_build_status.py
rename to ahriman-core/tests/ahriman/models/test_build_status.py
diff --git a/tests/ahriman/models/test_changes.py b/ahriman-core/tests/ahriman/models/test_changes.py
similarity index 100%
rename from tests/ahriman/models/test_changes.py
rename to ahriman-core/tests/ahriman/models/test_changes.py
diff --git a/tests/ahriman/models/test_context_key.py b/ahriman-core/tests/ahriman/models/test_context_key.py
similarity index 100%
rename from tests/ahriman/models/test_context_key.py
rename to ahriman-core/tests/ahriman/models/test_context_key.py
diff --git a/tests/ahriman/models/test_counters.py b/ahriman-core/tests/ahriman/models/test_counters.py
similarity index 100%
rename from tests/ahriman/models/test_counters.py
rename to ahriman-core/tests/ahriman/models/test_counters.py
diff --git a/tests/ahriman/models/test_dependencies.py b/ahriman-core/tests/ahriman/models/test_dependencies.py
similarity index 100%
rename from tests/ahriman/models/test_dependencies.py
rename to ahriman-core/tests/ahriman/models/test_dependencies.py
diff --git a/tests/ahriman/models/test_event.py b/ahriman-core/tests/ahriman/models/test_event.py
similarity index 100%
rename from tests/ahriman/models/test_event.py
rename to ahriman-core/tests/ahriman/models/test_event.py
diff --git a/tests/ahriman/models/test_filesystem_package.py b/ahriman-core/tests/ahriman/models/test_filesystem_package.py
similarity index 100%
rename from tests/ahriman/models/test_filesystem_package.py
rename to ahriman-core/tests/ahriman/models/test_filesystem_package.py
diff --git a/tests/ahriman/models/test_internal_status.py b/ahriman-core/tests/ahriman/models/test_internal_status.py
similarity index 100%
rename from tests/ahriman/models/test_internal_status.py
rename to ahriman-core/tests/ahriman/models/test_internal_status.py
diff --git a/tests/ahriman/models/test_log_handler.py b/ahriman-core/tests/ahriman/models/test_log_handler.py
similarity index 100%
rename from tests/ahriman/models/test_log_handler.py
rename to ahriman-core/tests/ahriman/models/test_log_handler.py
diff --git a/tests/ahriman/models/test_log_record.py b/ahriman-core/tests/ahriman/models/test_log_record.py
similarity index 100%
rename from tests/ahriman/models/test_log_record.py
rename to ahriman-core/tests/ahriman/models/test_log_record.py
diff --git a/tests/ahriman/models/test_log_record_id.py b/ahriman-core/tests/ahriman/models/test_log_record_id.py
similarity index 100%
rename from tests/ahriman/models/test_log_record_id.py
rename to ahriman-core/tests/ahriman/models/test_log_record_id.py
diff --git a/tests/ahriman/models/test_metrics_timer.py b/ahriman-core/tests/ahriman/models/test_metrics_timer.py
similarity index 100%
rename from tests/ahriman/models/test_metrics_timer.py
rename to ahriman-core/tests/ahriman/models/test_metrics_timer.py
diff --git a/tests/ahriman/models/test_migration.py b/ahriman-core/tests/ahriman/models/test_migration.py
similarity index 100%
rename from tests/ahriman/models/test_migration.py
rename to ahriman-core/tests/ahriman/models/test_migration.py
diff --git a/tests/ahriman/models/test_migration_result.py b/ahriman-core/tests/ahriman/models/test_migration_result.py
similarity index 100%
rename from tests/ahriman/models/test_migration_result.py
rename to ahriman-core/tests/ahriman/models/test_migration_result.py
diff --git a/tests/ahriman/models/test_package.py b/ahriman-core/tests/ahriman/models/test_package.py
similarity index 100%
rename from tests/ahriman/models/test_package.py
rename to ahriman-core/tests/ahriman/models/test_package.py
diff --git a/tests/ahriman/models/test_package_description.py b/ahriman-core/tests/ahriman/models/test_package_description.py
similarity index 100%
rename from tests/ahriman/models/test_package_description.py
rename to ahriman-core/tests/ahriman/models/test_package_description.py
diff --git a/tests/ahriman/models/test_package_source.py b/ahriman-core/tests/ahriman/models/test_package_source.py
similarity index 100%
rename from tests/ahriman/models/test_package_source.py
rename to ahriman-core/tests/ahriman/models/test_package_source.py
diff --git a/tests/ahriman/models/test_packagers.py b/ahriman-core/tests/ahriman/models/test_packagers.py
similarity index 100%
rename from tests/ahriman/models/test_packagers.py
rename to ahriman-core/tests/ahriman/models/test_packagers.py
diff --git a/tests/ahriman/models/test_pacman_synchronization.py b/ahriman-core/tests/ahriman/models/test_pacman_synchronization.py
similarity index 100%
rename from tests/ahriman/models/test_pacman_synchronization.py
rename to ahriman-core/tests/ahriman/models/test_pacman_synchronization.py
diff --git a/tests/ahriman/models/test_pkgbuild.py b/ahriman-core/tests/ahriman/models/test_pkgbuild.py
similarity index 100%
rename from tests/ahriman/models/test_pkgbuild.py
rename to ahriman-core/tests/ahriman/models/test_pkgbuild.py
diff --git a/tests/ahriman/models/test_pkgbuild_patch.py b/ahriman-core/tests/ahriman/models/test_pkgbuild_patch.py
similarity index 100%
rename from tests/ahriman/models/test_pkgbuild_patch.py
rename to ahriman-core/tests/ahriman/models/test_pkgbuild_patch.py
diff --git a/tests/ahriman/models/test_process_status.py b/ahriman-core/tests/ahriman/models/test_process_status.py
similarity index 100%
rename from tests/ahriman/models/test_process_status.py
rename to ahriman-core/tests/ahriman/models/test_process_status.py
diff --git a/tests/ahriman/models/test_property.py b/ahriman-core/tests/ahriman/models/test_property.py
similarity index 100%
rename from tests/ahriman/models/test_property.py
rename to ahriman-core/tests/ahriman/models/test_property.py
diff --git a/tests/ahriman/models/test_remote_source.py b/ahriman-core/tests/ahriman/models/test_remote_source.py
similarity index 100%
rename from tests/ahriman/models/test_remote_source.py
rename to ahriman-core/tests/ahriman/models/test_remote_source.py
diff --git a/tests/ahriman/models/test_report_settings.py b/ahriman-core/tests/ahriman/models/test_report_settings.py
similarity index 100%
rename from tests/ahriman/models/test_report_settings.py
rename to ahriman-core/tests/ahriman/models/test_report_settings.py
diff --git a/tests/ahriman/models/test_repository_id.py b/ahriman-core/tests/ahriman/models/test_repository_id.py
similarity index 100%
rename from tests/ahriman/models/test_repository_id.py
rename to ahriman-core/tests/ahriman/models/test_repository_id.py
diff --git a/tests/ahriman/models/test_repository_paths.py b/ahriman-core/tests/ahriman/models/test_repository_paths.py
similarity index 100%
rename from tests/ahriman/models/test_repository_paths.py
rename to ahriman-core/tests/ahriman/models/test_repository_paths.py
diff --git a/tests/ahriman/models/test_repository_stats.py b/ahriman-core/tests/ahriman/models/test_repository_stats.py
similarity index 100%
rename from tests/ahriman/models/test_repository_stats.py
rename to ahriman-core/tests/ahriman/models/test_repository_stats.py
diff --git a/tests/ahriman/models/test_result.py b/ahriman-core/tests/ahriman/models/test_result.py
similarity index 100%
rename from tests/ahriman/models/test_result.py
rename to ahriman-core/tests/ahriman/models/test_result.py
diff --git a/tests/ahriman/models/test_scan_paths.py b/ahriman-core/tests/ahriman/models/test_scan_paths.py
similarity index 100%
rename from tests/ahriman/models/test_scan_paths.py
rename to ahriman-core/tests/ahriman/models/test_scan_paths.py
diff --git a/tests/ahriman/models/test_series_statistics.py b/ahriman-core/tests/ahriman/models/test_series_statistics.py
similarity index 100%
rename from tests/ahriman/models/test_series_statistics.py
rename to ahriman-core/tests/ahriman/models/test_series_statistics.py
diff --git a/tests/ahriman/models/test_sign_settings.py b/ahriman-core/tests/ahriman/models/test_sign_settings.py
similarity index 100%
rename from tests/ahriman/models/test_sign_settings.py
rename to ahriman-core/tests/ahriman/models/test_sign_settings.py
diff --git a/tests/ahriman/models/test_smtp_ssl_settings.py b/ahriman-core/tests/ahriman/models/test_smtp_ssl_settings.py
similarity index 100%
rename from tests/ahriman/models/test_smtp_ssl_settings.py
rename to ahriman-core/tests/ahriman/models/test_smtp_ssl_settings.py
diff --git a/tests/ahriman/models/test_upload_settings.py b/ahriman-core/tests/ahriman/models/test_upload_settings.py
similarity index 100%
rename from tests/ahriman/models/test_upload_settings.py
rename to ahriman-core/tests/ahriman/models/test_upload_settings.py
diff --git a/tests/ahriman/models/test_user.py b/ahriman-core/tests/ahriman/models/test_user.py
similarity index 100%
rename from tests/ahriman/models/test_user.py
rename to ahriman-core/tests/ahriman/models/test_user.py
diff --git a/tests/ahriman/models/test_user_access.py b/ahriman-core/tests/ahriman/models/test_user_access.py
similarity index 100%
rename from tests/ahriman/models/test_user_access.py
rename to ahriman-core/tests/ahriman/models/test_user_access.py
diff --git a/tests/ahriman/models/test_waiter.py b/ahriman-core/tests/ahriman/models/test_waiter.py
similarity index 100%
rename from tests/ahriman/models/test_waiter.py
rename to ahriman-core/tests/ahriman/models/test_waiter.py
diff --git a/tests/ahriman/models/test_worker.py b/ahriman-core/tests/ahriman/models/test_worker.py
similarity index 100%
rename from tests/ahriman/models/test_worker.py
rename to ahriman-core/tests/ahriman/models/test_worker.py
diff --git a/ahriman-core/tests/conftest.py b/ahriman-core/tests/conftest.py
new file mode 100644
index 00000000..8c562e24
--- /dev/null
+++ b/ahriman-core/tests/conftest.py
@@ -0,0 +1,13 @@
+# pylint: disable=wildcard-import,unused-wildcard-import
+from fixtures import *
+import sys
+from pathlib import Path
+
+import pytest
+
+sys.path.insert(0, str(Path(__file__).resolve().parents[2] / "tests"))
+
+
+@pytest.fixture
+def resource_path_root() -> Path:
+ return Path(__file__).resolve().parents[2] / "tests" / "testresources"
diff --git a/package/share/ahriman/settings/ahriman.ini.d/00-triggers.ini b/ahriman-triggers/package/share/ahriman/settings/ahriman.ini.d/00-triggers.ini
similarity index 100%
rename from package/share/ahriman/settings/ahriman.ini.d/00-triggers.ini
rename to ahriman-triggers/package/share/ahriman/settings/ahriman.ini.d/00-triggers.ini
diff --git a/ahriman-triggers/pyproject.toml b/ahriman-triggers/pyproject.toml
new file mode 100644
index 00000000..4346db16
--- /dev/null
+++ b/ahriman-triggers/pyproject.toml
@@ -0,0 +1,32 @@
+[build-system]
+requires = ["hatchling"]
+build-backend = "hatchling.build"
+
+[project]
+name = "ahriman-triggers"
+description = "ArcH linux ReposItory MANager, additional extensions"
+readme = "../README.md"
+requires-python = ">=3.13"
+license = {file = "../COPYING"}
+authors = [
+ {name = "ahriman team"},
+]
+dependencies = [
+ "ahriman-core",
+]
+dynamic = ["version"]
+
+[project.urls]
+Documentation = "https://ahriman.readthedocs.io/"
+Repository = "https://github.com/arcan1s/ahriman"
+Changelog = "https://github.com/arcan1s/ahriman/releases"
+
+[tool.hatch.version]
+path = "../ahriman-core/src/ahriman/__init__.py"
+
+[tool.hatch.build.targets.wheel]
+only-include = ["src/ahriman"]
+sources = ["src"]
+
+[tool.hatch.build.targets.wheel.shared-data]
+"package/share" = "share"
diff --git a/src/ahriman/models/__init__.py b/ahriman-triggers/src/ahriman/application/handlers/triggers_support/__init__.py
similarity index 100%
rename from src/ahriman/models/__init__.py
rename to ahriman-triggers/src/ahriman/application/handlers/triggers_support/__init__.py
diff --git a/src/ahriman/application/handlers/triggers_support.py b/ahriman-triggers/src/ahriman/application/handlers/triggers_support/triggers_support.py
similarity index 100%
rename from src/ahriman/application/handlers/triggers_support.py
rename to ahriman-triggers/src/ahriman/application/handlers/triggers_support/triggers_support.py
diff --git a/src/ahriman/core/archive/__init__.py b/ahriman-triggers/src/ahriman/core/archive/__init__.py
similarity index 100%
rename from src/ahriman/core/archive/__init__.py
rename to ahriman-triggers/src/ahriman/core/archive/__init__.py
diff --git a/src/ahriman/core/archive/archive_tree.py b/ahriman-triggers/src/ahriman/core/archive/archive_tree.py
similarity index 100%
rename from src/ahriman/core/archive/archive_tree.py
rename to ahriman-triggers/src/ahriman/core/archive/archive_tree.py
diff --git a/src/ahriman/core/archive/archive_trigger.py b/ahriman-triggers/src/ahriman/core/archive/archive_trigger.py
similarity index 100%
rename from src/ahriman/core/archive/archive_trigger.py
rename to ahriman-triggers/src/ahriman/core/archive/archive_trigger.py
diff --git a/src/ahriman/core/distributed/__init__.py b/ahriman-triggers/src/ahriman/core/distributed/__init__.py
similarity index 100%
rename from src/ahriman/core/distributed/__init__.py
rename to ahriman-triggers/src/ahriman/core/distributed/__init__.py
diff --git a/src/ahriman/core/distributed/distributed_system.py b/ahriman-triggers/src/ahriman/core/distributed/distributed_system.py
similarity index 100%
rename from src/ahriman/core/distributed/distributed_system.py
rename to ahriman-triggers/src/ahriman/core/distributed/distributed_system.py
diff --git a/src/ahriman/core/distributed/worker_loader_trigger.py b/ahriman-triggers/src/ahriman/core/distributed/worker_loader_trigger.py
similarity index 100%
rename from src/ahriman/core/distributed/worker_loader_trigger.py
rename to ahriman-triggers/src/ahriman/core/distributed/worker_loader_trigger.py
diff --git a/src/ahriman/core/distributed/worker_trigger.py b/ahriman-triggers/src/ahriman/core/distributed/worker_trigger.py
similarity index 100%
rename from src/ahriman/core/distributed/worker_trigger.py
rename to ahriman-triggers/src/ahriman/core/distributed/worker_trigger.py
diff --git a/src/ahriman/core/distributed/workers_cache.py b/ahriman-triggers/src/ahriman/core/distributed/workers_cache.py
similarity index 100%
rename from src/ahriman/core/distributed/workers_cache.py
rename to ahriman-triggers/src/ahriman/core/distributed/workers_cache.py
diff --git a/src/ahriman/core/support/__init__.py b/ahriman-triggers/src/ahriman/core/support/__init__.py
similarity index 100%
rename from src/ahriman/core/support/__init__.py
rename to ahriman-triggers/src/ahriman/core/support/__init__.py
diff --git a/src/ahriman/core/support/keyring_trigger.py b/ahriman-triggers/src/ahriman/core/support/keyring_trigger.py
similarity index 100%
rename from src/ahriman/core/support/keyring_trigger.py
rename to ahriman-triggers/src/ahriman/core/support/keyring_trigger.py
diff --git a/src/ahriman/core/support/mirrorlist_trigger.py b/ahriman-triggers/src/ahriman/core/support/mirrorlist_trigger.py
similarity index 100%
rename from src/ahriman/core/support/mirrorlist_trigger.py
rename to ahriman-triggers/src/ahriman/core/support/mirrorlist_trigger.py
diff --git a/src/ahriman/core/support/package_creator.py b/ahriman-triggers/src/ahriman/core/support/package_creator.py
similarity index 100%
rename from src/ahriman/core/support/package_creator.py
rename to ahriman-triggers/src/ahriman/core/support/package_creator.py
diff --git a/src/ahriman/web/__init__.py b/ahriman-triggers/src/ahriman/core/support/pkgbuild/__init__.py
similarity index 100%
rename from src/ahriman/web/__init__.py
rename to ahriman-triggers/src/ahriman/core/support/pkgbuild/__init__.py
diff --git a/src/ahriman/core/support/pkgbuild/keyring_generator.py b/ahriman-triggers/src/ahriman/core/support/pkgbuild/keyring_generator.py
similarity index 100%
rename from src/ahriman/core/support/pkgbuild/keyring_generator.py
rename to ahriman-triggers/src/ahriman/core/support/pkgbuild/keyring_generator.py
diff --git a/src/ahriman/core/support/pkgbuild/mirrorlist_generator.py b/ahriman-triggers/src/ahriman/core/support/pkgbuild/mirrorlist_generator.py
similarity index 100%
rename from src/ahriman/core/support/pkgbuild/mirrorlist_generator.py
rename to ahriman-triggers/src/ahriman/core/support/pkgbuild/mirrorlist_generator.py
diff --git a/src/ahriman/core/support/pkgbuild/pkgbuild_generator.py b/ahriman-triggers/src/ahriman/core/support/pkgbuild/pkgbuild_generator.py
similarity index 100%
rename from src/ahriman/core/support/pkgbuild/pkgbuild_generator.py
rename to ahriman-triggers/src/ahriman/core/support/pkgbuild/pkgbuild_generator.py
diff --git a/tests/ahriman/application/handlers/test_handler_triggers_support.py b/ahriman-triggers/tests/ahriman/application/handlers/test_handler_triggers_support.py
similarity index 68%
rename from tests/ahriman/application/handlers/test_handler_triggers_support.py
rename to ahriman-triggers/tests/ahriman/application/handlers/test_handler_triggers_support.py
index 074bf472..11b95415 100644
--- a/tests/ahriman/application/handlers/test_handler_triggers_support.py
+++ b/ahriman-triggers/tests/ahriman/application/handlers/test_handler_triggers_support.py
@@ -1,5 +1,5 @@
from ahriman.application.handlers.triggers import Triggers
-from ahriman.application.handlers.triggers_support import TriggersSupport
+from ahriman.application.handlers.triggers_support.triggers_support import TriggersSupport
def test_arguments() -> None:
diff --git a/tests/ahriman/core/archive/conftest.py b/ahriman-triggers/tests/ahriman/core/archive/conftest.py
similarity index 100%
rename from tests/ahriman/core/archive/conftest.py
rename to ahriman-triggers/tests/ahriman/core/archive/conftest.py
diff --git a/tests/ahriman/core/archive/test_archive_tree.py b/ahriman-triggers/tests/ahriman/core/archive/test_archive_tree.py
similarity index 100%
rename from tests/ahriman/core/archive/test_archive_tree.py
rename to ahriman-triggers/tests/ahriman/core/archive/test_archive_tree.py
diff --git a/tests/ahriman/core/archive/test_archive_trigger.py b/ahriman-triggers/tests/ahriman/core/archive/test_archive_trigger.py
similarity index 100%
rename from tests/ahriman/core/archive/test_archive_trigger.py
rename to ahriman-triggers/tests/ahriman/core/archive/test_archive_trigger.py
diff --git a/tests/ahriman/core/distributed/conftest.py b/ahriman-triggers/tests/ahriman/core/distributed/conftest.py
similarity index 100%
rename from tests/ahriman/core/distributed/conftest.py
rename to ahriman-triggers/tests/ahriman/core/distributed/conftest.py
diff --git a/tests/ahriman/core/distributed/test_distributed_system.py b/ahriman-triggers/tests/ahriman/core/distributed/test_distributed_system.py
similarity index 100%
rename from tests/ahriman/core/distributed/test_distributed_system.py
rename to ahriman-triggers/tests/ahriman/core/distributed/test_distributed_system.py
diff --git a/tests/ahriman/core/distributed/test_worker_loader_trigger.py b/ahriman-triggers/tests/ahriman/core/distributed/test_worker_loader_trigger.py
similarity index 100%
rename from tests/ahriman/core/distributed/test_worker_loader_trigger.py
rename to ahriman-triggers/tests/ahriman/core/distributed/test_worker_loader_trigger.py
diff --git a/tests/ahriman/core/distributed/test_worker_trigger.py b/ahriman-triggers/tests/ahriman/core/distributed/test_worker_trigger.py
similarity index 100%
rename from tests/ahriman/core/distributed/test_worker_trigger.py
rename to ahriman-triggers/tests/ahriman/core/distributed/test_worker_trigger.py
diff --git a/tests/ahriman/core/distributed/test_workers_cache.py b/ahriman-triggers/tests/ahriman/core/distributed/test_workers_cache.py
similarity index 100%
rename from tests/ahriman/core/distributed/test_workers_cache.py
rename to ahriman-triggers/tests/ahriman/core/distributed/test_workers_cache.py
diff --git a/tests/ahriman/core/support/conftest.py b/ahriman-triggers/tests/ahriman/core/support/conftest.py
similarity index 100%
rename from tests/ahriman/core/support/conftest.py
rename to ahriman-triggers/tests/ahriman/core/support/conftest.py
diff --git a/tests/ahriman/core/support/pkgbuild/conftest.py b/ahriman-triggers/tests/ahriman/core/support/pkgbuild/conftest.py
similarity index 100%
rename from tests/ahriman/core/support/pkgbuild/conftest.py
rename to ahriman-triggers/tests/ahriman/core/support/pkgbuild/conftest.py
diff --git a/tests/ahriman/core/support/pkgbuild/test_keyring_generator.py b/ahriman-triggers/tests/ahriman/core/support/pkgbuild/test_keyring_generator.py
similarity index 100%
rename from tests/ahriman/core/support/pkgbuild/test_keyring_generator.py
rename to ahriman-triggers/tests/ahriman/core/support/pkgbuild/test_keyring_generator.py
diff --git a/tests/ahriman/core/support/pkgbuild/test_mirrorlist_generator.py b/ahriman-triggers/tests/ahriman/core/support/pkgbuild/test_mirrorlist_generator.py
similarity index 100%
rename from tests/ahriman/core/support/pkgbuild/test_mirrorlist_generator.py
rename to ahriman-triggers/tests/ahriman/core/support/pkgbuild/test_mirrorlist_generator.py
diff --git a/tests/ahriman/core/support/pkgbuild/test_pkgbuild_generator.py b/ahriman-triggers/tests/ahriman/core/support/pkgbuild/test_pkgbuild_generator.py
similarity index 100%
rename from tests/ahriman/core/support/pkgbuild/test_pkgbuild_generator.py
rename to ahriman-triggers/tests/ahriman/core/support/pkgbuild/test_pkgbuild_generator.py
diff --git a/tests/ahriman/core/support/test_keyring_trigger.py b/ahriman-triggers/tests/ahriman/core/support/test_keyring_trigger.py
similarity index 100%
rename from tests/ahriman/core/support/test_keyring_trigger.py
rename to ahriman-triggers/tests/ahriman/core/support/test_keyring_trigger.py
diff --git a/tests/ahriman/core/support/test_mirrorlist_trigger.py b/ahriman-triggers/tests/ahriman/core/support/test_mirrorlist_trigger.py
similarity index 100%
rename from tests/ahriman/core/support/test_mirrorlist_trigger.py
rename to ahriman-triggers/tests/ahriman/core/support/test_mirrorlist_trigger.py
diff --git a/tests/ahriman/core/support/test_package_creator.py b/ahriman-triggers/tests/ahriman/core/support/test_package_creator.py
similarity index 100%
rename from tests/ahriman/core/support/test_package_creator.py
rename to ahriman-triggers/tests/ahriman/core/support/test_package_creator.py
diff --git a/ahriman-triggers/tests/conftest.py b/ahriman-triggers/tests/conftest.py
new file mode 100644
index 00000000..8c562e24
--- /dev/null
+++ b/ahriman-triggers/tests/conftest.py
@@ -0,0 +1,13 @@
+# pylint: disable=wildcard-import,unused-wildcard-import
+from fixtures import *
+import sys
+from pathlib import Path
+
+import pytest
+
+sys.path.insert(0, str(Path(__file__).resolve().parents[2] / "tests"))
+
+
+@pytest.fixture
+def resource_path_root() -> Path:
+ return Path(__file__).resolve().parents[2] / "tests" / "testresources"
diff --git a/package/lib/systemd/system/ahriman-web.service b/ahriman-web/package/lib/systemd/system/ahriman-web.service
similarity index 100%
rename from package/lib/systemd/system/ahriman-web.service
rename to ahriman-web/package/lib/systemd/system/ahriman-web.service
diff --git a/package/lib/systemd/system/ahriman-web@.service b/ahriman-web/package/lib/systemd/system/ahriman-web@.service
similarity index 100%
rename from package/lib/systemd/system/ahriman-web@.service
rename to ahriman-web/package/lib/systemd/system/ahriman-web@.service
diff --git a/package/share/ahriman/settings/ahriman.ini.d/00-web.ini b/ahriman-web/package/share/ahriman/settings/ahriman.ini.d/00-web.ini
similarity index 100%
rename from package/share/ahriman/settings/ahriman.ini.d/00-web.ini
rename to ahriman-web/package/share/ahriman/settings/ahriman.ini.d/00-web.ini
diff --git a/package/share/ahriman/templates/api.jinja2 b/ahriman-web/package/share/ahriman/templates/api.jinja2
similarity index 100%
rename from package/share/ahriman/templates/api.jinja2
rename to ahriman-web/package/share/ahriman/templates/api.jinja2
diff --git a/package/share/ahriman/templates/build-status-classic.jinja2 b/ahriman-web/package/share/ahriman/templates/build-status-classic.jinja2
similarity index 100%
rename from package/share/ahriman/templates/build-status-classic.jinja2
rename to ahriman-web/package/share/ahriman/templates/build-status-classic.jinja2
diff --git a/package/share/ahriman/templates/build-status.jinja2 b/ahriman-web/package/share/ahriman/templates/build-status.jinja2
similarity index 100%
rename from package/share/ahriman/templates/build-status.jinja2
rename to ahriman-web/package/share/ahriman/templates/build-status.jinja2
diff --git a/package/share/ahriman/templates/build-status/alerts.jinja2 b/ahriman-web/package/share/ahriman/templates/build-status/alerts.jinja2
similarity index 100%
rename from package/share/ahriman/templates/build-status/alerts.jinja2
rename to ahriman-web/package/share/ahriman/templates/build-status/alerts.jinja2
diff --git a/package/share/ahriman/templates/build-status/dashboard.jinja2 b/ahriman-web/package/share/ahriman/templates/build-status/dashboard.jinja2
similarity index 100%
rename from package/share/ahriman/templates/build-status/dashboard.jinja2
rename to ahriman-web/package/share/ahriman/templates/build-status/dashboard.jinja2
diff --git a/package/share/ahriman/templates/build-status/key-import-modal.jinja2 b/ahriman-web/package/share/ahriman/templates/build-status/key-import-modal.jinja2
similarity index 100%
rename from package/share/ahriman/templates/build-status/key-import-modal.jinja2
rename to ahriman-web/package/share/ahriman/templates/build-status/key-import-modal.jinja2
diff --git a/package/share/ahriman/templates/build-status/login-modal.jinja2 b/ahriman-web/package/share/ahriman/templates/build-status/login-modal.jinja2
similarity index 100%
rename from package/share/ahriman/templates/build-status/login-modal.jinja2
rename to ahriman-web/package/share/ahriman/templates/build-status/login-modal.jinja2
diff --git a/package/share/ahriman/templates/build-status/package-add-modal.jinja2 b/ahriman-web/package/share/ahriman/templates/build-status/package-add-modal.jinja2
similarity index 100%
rename from package/share/ahriman/templates/build-status/package-add-modal.jinja2
rename to ahriman-web/package/share/ahriman/templates/build-status/package-add-modal.jinja2
diff --git a/package/share/ahriman/templates/build-status/package-info-modal.jinja2 b/ahriman-web/package/share/ahriman/templates/build-status/package-info-modal.jinja2
similarity index 100%
rename from package/share/ahriman/templates/build-status/package-info-modal.jinja2
rename to ahriman-web/package/share/ahriman/templates/build-status/package-info-modal.jinja2
diff --git a/package/share/ahriman/templates/build-status/package-rebuild-modal.jinja2 b/ahriman-web/package/share/ahriman/templates/build-status/package-rebuild-modal.jinja2
similarity index 100%
rename from package/share/ahriman/templates/build-status/package-rebuild-modal.jinja2
rename to ahriman-web/package/share/ahriman/templates/build-status/package-rebuild-modal.jinja2
diff --git a/package/share/ahriman/templates/build-status/table.jinja2 b/ahriman-web/package/share/ahriman/templates/build-status/table.jinja2
similarity index 100%
rename from package/share/ahriman/templates/build-status/table.jinja2
rename to ahriman-web/package/share/ahriman/templates/build-status/table.jinja2
diff --git a/package/share/ahriman/templates/error.jinja2 b/ahriman-web/package/share/ahriman/templates/error.jinja2
similarity index 100%
rename from package/share/ahriman/templates/error.jinja2
rename to ahriman-web/package/share/ahriman/templates/error.jinja2
diff --git a/package/share/ahriman/templates/static/favicon.ico b/ahriman-web/package/share/ahriman/templates/static/favicon.ico
similarity index 100%
rename from package/share/ahriman/templates/static/favicon.ico
rename to ahriman-web/package/share/ahriman/templates/static/favicon.ico
diff --git a/package/share/ahriman/templates/static/logo.svg b/ahriman-web/package/share/ahriman/templates/static/logo.svg
similarity index 100%
rename from package/share/ahriman/templates/static/logo.svg
rename to ahriman-web/package/share/ahriman/templates/static/logo.svg
diff --git a/ahriman-web/pyproject.toml b/ahriman-web/pyproject.toml
new file mode 100644
index 00000000..4be8c799
--- /dev/null
+++ b/ahriman-web/pyproject.toml
@@ -0,0 +1,55 @@
+[build-system]
+requires = ["hatchling"]
+build-backend = "hatchling.build"
+
+[project]
+name = "ahriman-web"
+description = "ArcH linux ReposItory MANager, web server"
+readme = "../README.md"
+requires-python = ">=3.13"
+license = {file = "../COPYING"}
+authors = [
+ {name = "ahriman team"},
+]
+dependencies = [
+ "ahriman-core",
+ "aiohttp",
+ "aiohttp_cors",
+ "aiohttp_jinja2",
+ "aiohttp_sse",
+]
+dynamic = ["version"]
+
+[project.optional-dependencies]
+auth = [
+ "aiohttp_session",
+ "aiohttp_security",
+ "cryptography",
+]
+docs = [
+ "aiohttp-apispec",
+ "setuptools",
+]
+metrics = [
+ "aiohttp-openmetrics",
+]
+oauth2 = [
+ "ahriman-web[auth]",
+ "aioauth-client",
+]
+
+[project.urls]
+Documentation = "https://ahriman.readthedocs.io/"
+Repository = "https://github.com/arcan1s/ahriman"
+Changelog = "https://github.com/arcan1s/ahriman/releases"
+
+[tool.hatch.version]
+path = "../ahriman-core/src/ahriman/__init__.py"
+
+[tool.hatch.build.targets.wheel]
+only-include = ["src/ahriman"]
+sources = ["src"]
+
+[tool.hatch.build.targets.wheel.shared-data]
+"package/lib" = "lib"
+"package/share" = "share"
diff --git a/src/ahriman/web/views/__init__.py b/ahriman-web/src/ahriman/application/handlers/web/__init__.py
similarity index 100%
rename from src/ahriman/web/views/__init__.py
rename to ahriman-web/src/ahriman/application/handlers/web/__init__.py
diff --git a/src/ahriman/application/handlers/web.py b/ahriman-web/src/ahriman/application/handlers/web/web.py
similarity index 100%
rename from src/ahriman/application/handlers/web.py
rename to ahriman-web/src/ahriman/application/handlers/web/web.py
diff --git a/src/ahriman/core/auth/__init__.py b/ahriman-web/src/ahriman/core/auth/__init__.py
similarity index 100%
rename from src/ahriman/core/auth/__init__.py
rename to ahriman-web/src/ahriman/core/auth/__init__.py
diff --git a/src/ahriman/core/auth/auth.py b/ahriman-web/src/ahriman/core/auth/auth.py
similarity index 100%
rename from src/ahriman/core/auth/auth.py
rename to ahriman-web/src/ahriman/core/auth/auth.py
diff --git a/src/ahriman/core/auth/helpers.py b/ahriman-web/src/ahriman/core/auth/helpers.py
similarity index 100%
rename from src/ahriman/core/auth/helpers.py
rename to ahriman-web/src/ahriman/core/auth/helpers.py
diff --git a/src/ahriman/core/auth/mapping.py b/ahriman-web/src/ahriman/core/auth/mapping.py
similarity index 100%
rename from src/ahriman/core/auth/mapping.py
rename to ahriman-web/src/ahriman/core/auth/mapping.py
diff --git a/src/ahriman/core/auth/oauth.py b/ahriman-web/src/ahriman/core/auth/oauth.py
similarity index 100%
rename from src/ahriman/core/auth/oauth.py
rename to ahriman-web/src/ahriman/core/auth/oauth.py
diff --git a/src/ahriman/core/auth/pam.py b/ahriman-web/src/ahriman/core/auth/pam.py
similarity index 100%
rename from src/ahriman/core/auth/pam.py
rename to ahriman-web/src/ahriman/core/auth/pam.py
diff --git a/src/ahriman/web/views/api/__init__.py b/ahriman-web/src/ahriman/web/__init__.py
similarity index 100%
rename from src/ahriman/web/views/api/__init__.py
rename to ahriman-web/src/ahriman/web/__init__.py
diff --git a/src/ahriman/web/apispec/__init__.py b/ahriman-web/src/ahriman/web/apispec/__init__.py
similarity index 100%
rename from src/ahriman/web/apispec/__init__.py
rename to ahriman-web/src/ahriman/web/apispec/__init__.py
diff --git a/src/ahriman/web/apispec/decorators.py b/ahriman-web/src/ahriman/web/apispec/decorators.py
similarity index 100%
rename from src/ahriman/web/apispec/decorators.py
rename to ahriman-web/src/ahriman/web/apispec/decorators.py
diff --git a/src/ahriman/web/apispec/info.py b/ahriman-web/src/ahriman/web/apispec/info.py
similarity index 100%
rename from src/ahriman/web/apispec/info.py
rename to ahriman-web/src/ahriman/web/apispec/info.py
diff --git a/src/ahriman/web/cors.py b/ahriman-web/src/ahriman/web/cors.py
similarity index 100%
rename from src/ahriman/web/cors.py
rename to ahriman-web/src/ahriman/web/cors.py
diff --git a/src/ahriman/web/keys.py b/ahriman-web/src/ahriman/web/keys.py
similarity index 100%
rename from src/ahriman/web/keys.py
rename to ahriman-web/src/ahriman/web/keys.py
diff --git a/src/ahriman/web/middlewares/__init__.py b/ahriman-web/src/ahriman/web/middlewares/__init__.py
similarity index 100%
rename from src/ahriman/web/middlewares/__init__.py
rename to ahriman-web/src/ahriman/web/middlewares/__init__.py
diff --git a/src/ahriman/web/middlewares/auth_handler.py b/ahriman-web/src/ahriman/web/middlewares/auth_handler.py
similarity index 100%
rename from src/ahriman/web/middlewares/auth_handler.py
rename to ahriman-web/src/ahriman/web/middlewares/auth_handler.py
diff --git a/src/ahriman/web/middlewares/etag_handler.py b/ahriman-web/src/ahriman/web/middlewares/etag_handler.py
similarity index 100%
rename from src/ahriman/web/middlewares/etag_handler.py
rename to ahriman-web/src/ahriman/web/middlewares/etag_handler.py
diff --git a/src/ahriman/web/middlewares/exception_handler.py b/ahriman-web/src/ahriman/web/middlewares/exception_handler.py
similarity index 100%
rename from src/ahriman/web/middlewares/exception_handler.py
rename to ahriman-web/src/ahriman/web/middlewares/exception_handler.py
diff --git a/src/ahriman/web/middlewares/metrics_handler.py b/ahriman-web/src/ahriman/web/middlewares/metrics_handler.py
similarity index 100%
rename from src/ahriman/web/middlewares/metrics_handler.py
rename to ahriman-web/src/ahriman/web/middlewares/metrics_handler.py
diff --git a/src/ahriman/web/middlewares/request_id_handler.py b/ahriman-web/src/ahriman/web/middlewares/request_id_handler.py
similarity index 100%
rename from src/ahriman/web/middlewares/request_id_handler.py
rename to ahriman-web/src/ahriman/web/middlewares/request_id_handler.py
diff --git a/src/ahriman/web/routes.py b/ahriman-web/src/ahriman/web/routes.py
similarity index 100%
rename from src/ahriman/web/routes.py
rename to ahriman-web/src/ahriman/web/routes.py
diff --git a/src/ahriman/web/schemas/__init__.py b/ahriman-web/src/ahriman/web/schemas/__init__.py
similarity index 100%
rename from src/ahriman/web/schemas/__init__.py
rename to ahriman-web/src/ahriman/web/schemas/__init__.py
diff --git a/src/ahriman/web/schemas/any_schema.py b/ahriman-web/src/ahriman/web/schemas/any_schema.py
similarity index 100%
rename from src/ahriman/web/schemas/any_schema.py
rename to ahriman-web/src/ahriman/web/schemas/any_schema.py
diff --git a/src/ahriman/web/schemas/aur_package_schema.py b/ahriman-web/src/ahriman/web/schemas/aur_package_schema.py
similarity index 100%
rename from src/ahriman/web/schemas/aur_package_schema.py
rename to ahriman-web/src/ahriman/web/schemas/aur_package_schema.py
diff --git a/src/ahriman/web/schemas/auth_info_schema.py b/ahriman-web/src/ahriman/web/schemas/auth_info_schema.py
similarity index 100%
rename from src/ahriman/web/schemas/auth_info_schema.py
rename to ahriman-web/src/ahriman/web/schemas/auth_info_schema.py
diff --git a/src/ahriman/web/schemas/auth_schema.py b/ahriman-web/src/ahriman/web/schemas/auth_schema.py
similarity index 100%
rename from src/ahriman/web/schemas/auth_schema.py
rename to ahriman-web/src/ahriman/web/schemas/auth_schema.py
diff --git a/src/ahriman/web/schemas/auto_refresh_interval_schema.py b/ahriman-web/src/ahriman/web/schemas/auto_refresh_interval_schema.py
similarity index 100%
rename from src/ahriman/web/schemas/auto_refresh_interval_schema.py
rename to ahriman-web/src/ahriman/web/schemas/auto_refresh_interval_schema.py
diff --git a/src/ahriman/web/schemas/build_options_schema.py b/ahriman-web/src/ahriman/web/schemas/build_options_schema.py
similarity index 100%
rename from src/ahriman/web/schemas/build_options_schema.py
rename to ahriman-web/src/ahriman/web/schemas/build_options_schema.py
diff --git a/src/ahriman/web/schemas/changes_schema.py b/ahriman-web/src/ahriman/web/schemas/changes_schema.py
similarity index 100%
rename from src/ahriman/web/schemas/changes_schema.py
rename to ahriman-web/src/ahriman/web/schemas/changes_schema.py
diff --git a/src/ahriman/web/schemas/configuration_schema.py b/ahriman-web/src/ahriman/web/schemas/configuration_schema.py
similarity index 100%
rename from src/ahriman/web/schemas/configuration_schema.py
rename to ahriman-web/src/ahriman/web/schemas/configuration_schema.py
diff --git a/src/ahriman/web/schemas/counters_schema.py b/ahriman-web/src/ahriman/web/schemas/counters_schema.py
similarity index 100%
rename from src/ahriman/web/schemas/counters_schema.py
rename to ahriman-web/src/ahriman/web/schemas/counters_schema.py
diff --git a/src/ahriman/web/schemas/dependencies_schema.py b/ahriman-web/src/ahriman/web/schemas/dependencies_schema.py
similarity index 100%
rename from src/ahriman/web/schemas/dependencies_schema.py
rename to ahriman-web/src/ahriman/web/schemas/dependencies_schema.py
diff --git a/src/ahriman/web/schemas/error_schema.py b/ahriman-web/src/ahriman/web/schemas/error_schema.py
similarity index 100%
rename from src/ahriman/web/schemas/error_schema.py
rename to ahriman-web/src/ahriman/web/schemas/error_schema.py
diff --git a/src/ahriman/web/schemas/event_bus_filter_schema.py b/ahriman-web/src/ahriman/web/schemas/event_bus_filter_schema.py
similarity index 100%
rename from src/ahriman/web/schemas/event_bus_filter_schema.py
rename to ahriman-web/src/ahriman/web/schemas/event_bus_filter_schema.py
diff --git a/src/ahriman/web/schemas/event_schema.py b/ahriman-web/src/ahriman/web/schemas/event_schema.py
similarity index 100%
rename from src/ahriman/web/schemas/event_schema.py
rename to ahriman-web/src/ahriman/web/schemas/event_schema.py
diff --git a/src/ahriman/web/schemas/event_search_schema.py b/ahriman-web/src/ahriman/web/schemas/event_search_schema.py
similarity index 100%
rename from src/ahriman/web/schemas/event_search_schema.py
rename to ahriman-web/src/ahriman/web/schemas/event_search_schema.py
diff --git a/src/ahriman/web/schemas/file_schema.py b/ahriman-web/src/ahriman/web/schemas/file_schema.py
similarity index 100%
rename from src/ahriman/web/schemas/file_schema.py
rename to ahriman-web/src/ahriman/web/schemas/file_schema.py
diff --git a/src/ahriman/web/schemas/hold_schema.py b/ahriman-web/src/ahriman/web/schemas/hold_schema.py
similarity index 100%
rename from src/ahriman/web/schemas/hold_schema.py
rename to ahriman-web/src/ahriman/web/schemas/hold_schema.py
diff --git a/src/ahriman/web/schemas/info_schema.py b/ahriman-web/src/ahriman/web/schemas/info_schema.py
similarity index 100%
rename from src/ahriman/web/schemas/info_schema.py
rename to ahriman-web/src/ahriman/web/schemas/info_schema.py
diff --git a/src/ahriman/web/schemas/info_v2_schema.py b/ahriman-web/src/ahriman/web/schemas/info_v2_schema.py
similarity index 100%
rename from src/ahriman/web/schemas/info_v2_schema.py
rename to ahriman-web/src/ahriman/web/schemas/info_v2_schema.py
diff --git a/src/ahriman/web/schemas/internal_status_schema.py b/ahriman-web/src/ahriman/web/schemas/internal_status_schema.py
similarity index 100%
rename from src/ahriman/web/schemas/internal_status_schema.py
rename to ahriman-web/src/ahriman/web/schemas/internal_status_schema.py
diff --git a/src/ahriman/web/schemas/log_schema.py b/ahriman-web/src/ahriman/web/schemas/log_schema.py
similarity index 100%
rename from src/ahriman/web/schemas/log_schema.py
rename to ahriman-web/src/ahriman/web/schemas/log_schema.py
diff --git a/src/ahriman/web/schemas/login_schema.py b/ahriman-web/src/ahriman/web/schemas/login_schema.py
similarity index 100%
rename from src/ahriman/web/schemas/login_schema.py
rename to ahriman-web/src/ahriman/web/schemas/login_schema.py
diff --git a/src/ahriman/web/schemas/logs_rotate_schema.py b/ahriman-web/src/ahriman/web/schemas/logs_rotate_schema.py
similarity index 100%
rename from src/ahriman/web/schemas/logs_rotate_schema.py
rename to ahriman-web/src/ahriman/web/schemas/logs_rotate_schema.py
diff --git a/src/ahriman/web/schemas/logs_schema.py b/ahriman-web/src/ahriman/web/schemas/logs_schema.py
similarity index 100%
rename from src/ahriman/web/schemas/logs_schema.py
rename to ahriman-web/src/ahriman/web/schemas/logs_schema.py
diff --git a/src/ahriman/web/schemas/logs_search_schema.py b/ahriman-web/src/ahriman/web/schemas/logs_search_schema.py
similarity index 100%
rename from src/ahriman/web/schemas/logs_search_schema.py
rename to ahriman-web/src/ahriman/web/schemas/logs_search_schema.py
diff --git a/src/ahriman/web/schemas/oauth2_schema.py b/ahriman-web/src/ahriman/web/schemas/oauth2_schema.py
similarity index 100%
rename from src/ahriman/web/schemas/oauth2_schema.py
rename to ahriman-web/src/ahriman/web/schemas/oauth2_schema.py
diff --git a/src/ahriman/web/schemas/package_name_schema.py b/ahriman-web/src/ahriman/web/schemas/package_name_schema.py
similarity index 100%
rename from src/ahriman/web/schemas/package_name_schema.py
rename to ahriman-web/src/ahriman/web/schemas/package_name_schema.py
diff --git a/src/ahriman/web/schemas/package_names_schema.py b/ahriman-web/src/ahriman/web/schemas/package_names_schema.py
similarity index 100%
rename from src/ahriman/web/schemas/package_names_schema.py
rename to ahriman-web/src/ahriman/web/schemas/package_names_schema.py
diff --git a/src/ahriman/web/schemas/package_patch_schema.py b/ahriman-web/src/ahriman/web/schemas/package_patch_schema.py
similarity index 100%
rename from src/ahriman/web/schemas/package_patch_schema.py
rename to ahriman-web/src/ahriman/web/schemas/package_patch_schema.py
diff --git a/src/ahriman/web/schemas/package_properties_schema.py b/ahriman-web/src/ahriman/web/schemas/package_properties_schema.py
similarity index 100%
rename from src/ahriman/web/schemas/package_properties_schema.py
rename to ahriman-web/src/ahriman/web/schemas/package_properties_schema.py
diff --git a/src/ahriman/web/schemas/package_schema.py b/ahriman-web/src/ahriman/web/schemas/package_schema.py
similarity index 100%
rename from src/ahriman/web/schemas/package_schema.py
rename to ahriman-web/src/ahriman/web/schemas/package_schema.py
diff --git a/src/ahriman/web/schemas/package_status_schema.py b/ahriman-web/src/ahriman/web/schemas/package_status_schema.py
similarity index 100%
rename from src/ahriman/web/schemas/package_status_schema.py
rename to ahriman-web/src/ahriman/web/schemas/package_status_schema.py
diff --git a/src/ahriman/web/schemas/package_version_schema.py b/ahriman-web/src/ahriman/web/schemas/package_version_schema.py
similarity index 100%
rename from src/ahriman/web/schemas/package_version_schema.py
rename to ahriman-web/src/ahriman/web/schemas/package_version_schema.py
diff --git a/src/ahriman/web/schemas/packager_schema.py b/ahriman-web/src/ahriman/web/schemas/packager_schema.py
similarity index 100%
rename from src/ahriman/web/schemas/packager_schema.py
rename to ahriman-web/src/ahriman/web/schemas/packager_schema.py
diff --git a/src/ahriman/web/schemas/pagination_schema.py b/ahriman-web/src/ahriman/web/schemas/pagination_schema.py
similarity index 100%
rename from src/ahriman/web/schemas/pagination_schema.py
rename to ahriman-web/src/ahriman/web/schemas/pagination_schema.py
diff --git a/src/ahriman/web/schemas/patch_name_schema.py b/ahriman-web/src/ahriman/web/schemas/patch_name_schema.py
similarity index 100%
rename from src/ahriman/web/schemas/patch_name_schema.py
rename to ahriman-web/src/ahriman/web/schemas/patch_name_schema.py
diff --git a/src/ahriman/web/schemas/patch_schema.py b/ahriman-web/src/ahriman/web/schemas/patch_schema.py
similarity index 100%
rename from src/ahriman/web/schemas/patch_schema.py
rename to ahriman-web/src/ahriman/web/schemas/patch_schema.py
diff --git a/src/ahriman/web/schemas/pgp_key_id_schema.py b/ahriman-web/src/ahriman/web/schemas/pgp_key_id_schema.py
similarity index 100%
rename from src/ahriman/web/schemas/pgp_key_id_schema.py
rename to ahriman-web/src/ahriman/web/schemas/pgp_key_id_schema.py
diff --git a/src/ahriman/web/schemas/pgp_key_schema.py b/ahriman-web/src/ahriman/web/schemas/pgp_key_schema.py
similarity index 100%
rename from src/ahriman/web/schemas/pgp_key_schema.py
rename to ahriman-web/src/ahriman/web/schemas/pgp_key_schema.py
diff --git a/src/ahriman/web/schemas/process_id_schema.py b/ahriman-web/src/ahriman/web/schemas/process_id_schema.py
similarity index 100%
rename from src/ahriman/web/schemas/process_id_schema.py
rename to ahriman-web/src/ahriman/web/schemas/process_id_schema.py
diff --git a/src/ahriman/web/schemas/process_schema.py b/ahriman-web/src/ahriman/web/schemas/process_schema.py
similarity index 100%
rename from src/ahriman/web/schemas/process_schema.py
rename to ahriman-web/src/ahriman/web/schemas/process_schema.py
diff --git a/src/ahriman/web/schemas/remote_schema.py b/ahriman-web/src/ahriman/web/schemas/remote_schema.py
similarity index 100%
rename from src/ahriman/web/schemas/remote_schema.py
rename to ahriman-web/src/ahriman/web/schemas/remote_schema.py
diff --git a/src/ahriman/web/schemas/repository_id_schema.py b/ahriman-web/src/ahriman/web/schemas/repository_id_schema.py
similarity index 100%
rename from src/ahriman/web/schemas/repository_id_schema.py
rename to ahriman-web/src/ahriman/web/schemas/repository_id_schema.py
diff --git a/src/ahriman/web/schemas/repository_stats_schema.py b/ahriman-web/src/ahriman/web/schemas/repository_stats_schema.py
similarity index 100%
rename from src/ahriman/web/schemas/repository_stats_schema.py
rename to ahriman-web/src/ahriman/web/schemas/repository_stats_schema.py
diff --git a/src/ahriman/web/schemas/rollback_schema.py b/ahriman-web/src/ahriman/web/schemas/rollback_schema.py
similarity index 100%
rename from src/ahriman/web/schemas/rollback_schema.py
rename to ahriman-web/src/ahriman/web/schemas/rollback_schema.py
diff --git a/src/ahriman/web/schemas/search_schema.py b/ahriman-web/src/ahriman/web/schemas/search_schema.py
similarity index 100%
rename from src/ahriman/web/schemas/search_schema.py
rename to ahriman-web/src/ahriman/web/schemas/search_schema.py
diff --git a/src/ahriman/web/schemas/sse_schema.py b/ahriman-web/src/ahriman/web/schemas/sse_schema.py
similarity index 100%
rename from src/ahriman/web/schemas/sse_schema.py
rename to ahriman-web/src/ahriman/web/schemas/sse_schema.py
diff --git a/src/ahriman/web/schemas/status_schema.py b/ahriman-web/src/ahriman/web/schemas/status_schema.py
similarity index 100%
rename from src/ahriman/web/schemas/status_schema.py
rename to ahriman-web/src/ahriman/web/schemas/status_schema.py
diff --git a/src/ahriman/web/schemas/update_flags_schema.py b/ahriman-web/src/ahriman/web/schemas/update_flags_schema.py
similarity index 100%
rename from src/ahriman/web/schemas/update_flags_schema.py
rename to ahriman-web/src/ahriman/web/schemas/update_flags_schema.py
diff --git a/src/ahriman/web/schemas/worker_schema.py b/ahriman-web/src/ahriman/web/schemas/worker_schema.py
similarity index 100%
rename from src/ahriman/web/schemas/worker_schema.py
rename to ahriman-web/src/ahriman/web/schemas/worker_schema.py
diff --git a/src/ahriman/web/server_info.py b/ahriman-web/src/ahriman/web/server_info.py
similarity index 100%
rename from src/ahriman/web/server_info.py
rename to ahriman-web/src/ahriman/web/server_info.py
diff --git a/src/ahriman/web/views/v1/__init__.py b/ahriman-web/src/ahriman/web/views/__init__.py
similarity index 100%
rename from src/ahriman/web/views/v1/__init__.py
rename to ahriman-web/src/ahriman/web/views/__init__.py
diff --git a/src/ahriman/web/views/v1/auditlog/__init__.py b/ahriman-web/src/ahriman/web/views/api/__init__.py
similarity index 100%
rename from src/ahriman/web/views/v1/auditlog/__init__.py
rename to ahriman-web/src/ahriman/web/views/api/__init__.py
diff --git a/src/ahriman/web/views/api/docs.py b/ahriman-web/src/ahriman/web/views/api/docs.py
similarity index 100%
rename from src/ahriman/web/views/api/docs.py
rename to ahriman-web/src/ahriman/web/views/api/docs.py
diff --git a/src/ahriman/web/views/api/swagger.py b/ahriman-web/src/ahriman/web/views/api/swagger.py
similarity index 100%
rename from src/ahriman/web/views/api/swagger.py
rename to ahriman-web/src/ahriman/web/views/api/swagger.py
diff --git a/src/ahriman/web/views/base.py b/ahriman-web/src/ahriman/web/views/base.py
similarity index 100%
rename from src/ahriman/web/views/base.py
rename to ahriman-web/src/ahriman/web/views/base.py
diff --git a/src/ahriman/web/views/index.py b/ahriman-web/src/ahriman/web/views/index.py
similarity index 100%
rename from src/ahriman/web/views/index.py
rename to ahriman-web/src/ahriman/web/views/index.py
diff --git a/src/ahriman/web/views/static.py b/ahriman-web/src/ahriman/web/views/static.py
similarity index 100%
rename from src/ahriman/web/views/static.py
rename to ahriman-web/src/ahriman/web/views/static.py
diff --git a/src/ahriman/web/views/status_view_guard.py b/ahriman-web/src/ahriman/web/views/status_view_guard.py
similarity index 100%
rename from src/ahriman/web/views/status_view_guard.py
rename to ahriman-web/src/ahriman/web/views/status_view_guard.py
diff --git a/src/ahriman/web/views/v1/distributed/__init__.py b/ahriman-web/src/ahriman/web/views/v1/__init__.py
similarity index 100%
rename from src/ahriman/web/views/v1/distributed/__init__.py
rename to ahriman-web/src/ahriman/web/views/v1/__init__.py
diff --git a/src/ahriman/web/views/v1/packages/__init__.py b/ahriman-web/src/ahriman/web/views/v1/auditlog/__init__.py
similarity index 100%
rename from src/ahriman/web/views/v1/packages/__init__.py
rename to ahriman-web/src/ahriman/web/views/v1/auditlog/__init__.py
diff --git a/src/ahriman/web/views/v1/auditlog/event_bus.py b/ahriman-web/src/ahriman/web/views/v1/auditlog/event_bus.py
similarity index 100%
rename from src/ahriman/web/views/v1/auditlog/event_bus.py
rename to ahriman-web/src/ahriman/web/views/v1/auditlog/event_bus.py
diff --git a/src/ahriman/web/views/v1/auditlog/events.py b/ahriman-web/src/ahriman/web/views/v1/auditlog/events.py
similarity index 100%
rename from src/ahriman/web/views/v1/auditlog/events.py
rename to ahriman-web/src/ahriman/web/views/v1/auditlog/events.py
diff --git a/src/ahriman/web/views/v1/service/__init__.py b/ahriman-web/src/ahriman/web/views/v1/distributed/__init__.py
similarity index 100%
rename from src/ahriman/web/views/v1/service/__init__.py
rename to ahriman-web/src/ahriman/web/views/v1/distributed/__init__.py
diff --git a/src/ahriman/web/views/v1/distributed/workers.py b/ahriman-web/src/ahriman/web/views/v1/distributed/workers.py
similarity index 100%
rename from src/ahriman/web/views/v1/distributed/workers.py
rename to ahriman-web/src/ahriman/web/views/v1/distributed/workers.py
diff --git a/src/ahriman/web/views/v1/status/__init__.py b/ahriman-web/src/ahriman/web/views/v1/packages/__init__.py
similarity index 100%
rename from src/ahriman/web/views/v1/status/__init__.py
rename to ahriman-web/src/ahriman/web/views/v1/packages/__init__.py
diff --git a/src/ahriman/web/views/v1/packages/archives.py b/ahriman-web/src/ahriman/web/views/v1/packages/archives.py
similarity index 100%
rename from src/ahriman/web/views/v1/packages/archives.py
rename to ahriman-web/src/ahriman/web/views/v1/packages/archives.py
diff --git a/src/ahriman/web/views/v1/packages/changes.py b/ahriman-web/src/ahriman/web/views/v1/packages/changes.py
similarity index 100%
rename from src/ahriman/web/views/v1/packages/changes.py
rename to ahriman-web/src/ahriman/web/views/v1/packages/changes.py
diff --git a/src/ahriman/web/views/v1/packages/dependencies.py b/ahriman-web/src/ahriman/web/views/v1/packages/dependencies.py
similarity index 100%
rename from src/ahriman/web/views/v1/packages/dependencies.py
rename to ahriman-web/src/ahriman/web/views/v1/packages/dependencies.py
diff --git a/src/ahriman/web/views/v1/packages/hold.py b/ahriman-web/src/ahriman/web/views/v1/packages/hold.py
similarity index 100%
rename from src/ahriman/web/views/v1/packages/hold.py
rename to ahriman-web/src/ahriman/web/views/v1/packages/hold.py
diff --git a/src/ahriman/web/views/v1/packages/logs.py b/ahriman-web/src/ahriman/web/views/v1/packages/logs.py
similarity index 100%
rename from src/ahriman/web/views/v1/packages/logs.py
rename to ahriman-web/src/ahriman/web/views/v1/packages/logs.py
diff --git a/src/ahriman/web/views/v1/packages/package.py b/ahriman-web/src/ahriman/web/views/v1/packages/package.py
similarity index 100%
rename from src/ahriman/web/views/v1/packages/package.py
rename to ahriman-web/src/ahriman/web/views/v1/packages/package.py
diff --git a/src/ahriman/web/views/v1/packages/packages.py b/ahriman-web/src/ahriman/web/views/v1/packages/packages.py
similarity index 100%
rename from src/ahriman/web/views/v1/packages/packages.py
rename to ahriman-web/src/ahriman/web/views/v1/packages/packages.py
diff --git a/src/ahriman/web/views/v1/packages/patch.py b/ahriman-web/src/ahriman/web/views/v1/packages/patch.py
similarity index 100%
rename from src/ahriman/web/views/v1/packages/patch.py
rename to ahriman-web/src/ahriman/web/views/v1/packages/patch.py
diff --git a/src/ahriman/web/views/v1/packages/patches.py b/ahriman-web/src/ahriman/web/views/v1/packages/patches.py
similarity index 100%
rename from src/ahriman/web/views/v1/packages/patches.py
rename to ahriman-web/src/ahriman/web/views/v1/packages/patches.py
diff --git a/src/ahriman/web/views/v1/user/__init__.py b/ahriman-web/src/ahriman/web/views/v1/service/__init__.py
similarity index 100%
rename from src/ahriman/web/views/v1/user/__init__.py
rename to ahriman-web/src/ahriman/web/views/v1/service/__init__.py
diff --git a/src/ahriman/web/views/v1/service/add.py b/ahriman-web/src/ahriman/web/views/v1/service/add.py
similarity index 100%
rename from src/ahriman/web/views/v1/service/add.py
rename to ahriman-web/src/ahriman/web/views/v1/service/add.py
diff --git a/src/ahriman/web/views/v1/service/config.py b/ahriman-web/src/ahriman/web/views/v1/service/config.py
similarity index 100%
rename from src/ahriman/web/views/v1/service/config.py
rename to ahriman-web/src/ahriman/web/views/v1/service/config.py
diff --git a/src/ahriman/web/views/v1/service/logs.py b/ahriman-web/src/ahriman/web/views/v1/service/logs.py
similarity index 100%
rename from src/ahriman/web/views/v1/service/logs.py
rename to ahriman-web/src/ahriman/web/views/v1/service/logs.py
diff --git a/src/ahriman/web/views/v1/service/pgp.py b/ahriman-web/src/ahriman/web/views/v1/service/pgp.py
similarity index 100%
rename from src/ahriman/web/views/v1/service/pgp.py
rename to ahriman-web/src/ahriman/web/views/v1/service/pgp.py
diff --git a/src/ahriman/web/views/v1/service/process.py b/ahriman-web/src/ahriman/web/views/v1/service/process.py
similarity index 100%
rename from src/ahriman/web/views/v1/service/process.py
rename to ahriman-web/src/ahriman/web/views/v1/service/process.py
diff --git a/src/ahriman/web/views/v1/service/rebuild.py b/ahriman-web/src/ahriman/web/views/v1/service/rebuild.py
similarity index 100%
rename from src/ahriman/web/views/v1/service/rebuild.py
rename to ahriman-web/src/ahriman/web/views/v1/service/rebuild.py
diff --git a/src/ahriman/web/views/v1/service/remove.py b/ahriman-web/src/ahriman/web/views/v1/service/remove.py
similarity index 100%
rename from src/ahriman/web/views/v1/service/remove.py
rename to ahriman-web/src/ahriman/web/views/v1/service/remove.py
diff --git a/src/ahriman/web/views/v1/service/request.py b/ahriman-web/src/ahriman/web/views/v1/service/request.py
similarity index 100%
rename from src/ahriman/web/views/v1/service/request.py
rename to ahriman-web/src/ahriman/web/views/v1/service/request.py
diff --git a/src/ahriman/web/views/v1/service/rollback.py b/ahriman-web/src/ahriman/web/views/v1/service/rollback.py
similarity index 100%
rename from src/ahriman/web/views/v1/service/rollback.py
rename to ahriman-web/src/ahriman/web/views/v1/service/rollback.py
diff --git a/src/ahriman/web/views/v1/service/search.py b/ahriman-web/src/ahriman/web/views/v1/service/search.py
similarity index 100%
rename from src/ahriman/web/views/v1/service/search.py
rename to ahriman-web/src/ahriman/web/views/v1/service/search.py
diff --git a/src/ahriman/web/views/v1/service/update.py b/ahriman-web/src/ahriman/web/views/v1/service/update.py
similarity index 100%
rename from src/ahriman/web/views/v1/service/update.py
rename to ahriman-web/src/ahriman/web/views/v1/service/update.py
diff --git a/src/ahriman/web/views/v1/service/upload.py b/ahriman-web/src/ahriman/web/views/v1/service/upload.py
similarity index 100%
rename from src/ahriman/web/views/v1/service/upload.py
rename to ahriman-web/src/ahriman/web/views/v1/service/upload.py
diff --git a/src/ahriman/web/views/v2/__init__.py b/ahriman-web/src/ahriman/web/views/v1/status/__init__.py
similarity index 100%
rename from src/ahriman/web/views/v2/__init__.py
rename to ahriman-web/src/ahriman/web/views/v1/status/__init__.py
diff --git a/src/ahriman/web/views/v1/status/info.py b/ahriman-web/src/ahriman/web/views/v1/status/info.py
similarity index 100%
rename from src/ahriman/web/views/v1/status/info.py
rename to ahriman-web/src/ahriman/web/views/v1/status/info.py
diff --git a/src/ahriman/web/views/v1/status/metrics.py b/ahriman-web/src/ahriman/web/views/v1/status/metrics.py
similarity index 100%
rename from src/ahriman/web/views/v1/status/metrics.py
rename to ahriman-web/src/ahriman/web/views/v1/status/metrics.py
diff --git a/src/ahriman/web/views/v1/status/repositories.py b/ahriman-web/src/ahriman/web/views/v1/status/repositories.py
similarity index 100%
rename from src/ahriman/web/views/v1/status/repositories.py
rename to ahriman-web/src/ahriman/web/views/v1/status/repositories.py
diff --git a/src/ahriman/web/views/v1/status/status.py b/ahriman-web/src/ahriman/web/views/v1/status/status.py
similarity index 100%
rename from src/ahriman/web/views/v1/status/status.py
rename to ahriman-web/src/ahriman/web/views/v1/status/status.py
diff --git a/src/ahriman/web/views/v2/packages/__init__.py b/ahriman-web/src/ahriman/web/views/v1/user/__init__.py
similarity index 100%
rename from src/ahriman/web/views/v2/packages/__init__.py
rename to ahriman-web/src/ahriman/web/views/v1/user/__init__.py
diff --git a/src/ahriman/web/views/v1/user/login.py b/ahriman-web/src/ahriman/web/views/v1/user/login.py
similarity index 100%
rename from src/ahriman/web/views/v1/user/login.py
rename to ahriman-web/src/ahriman/web/views/v1/user/login.py
diff --git a/src/ahriman/web/views/v1/user/logout.py b/ahriman-web/src/ahriman/web/views/v1/user/logout.py
similarity index 100%
rename from src/ahriman/web/views/v1/user/logout.py
rename to ahriman-web/src/ahriman/web/views/v1/user/logout.py
diff --git a/src/ahriman/web/views/v2/status/__init__.py b/ahriman-web/src/ahriman/web/views/v2/__init__.py
similarity index 100%
rename from src/ahriman/web/views/v2/status/__init__.py
rename to ahriman-web/src/ahriman/web/views/v2/__init__.py
diff --git a/ahriman-web/src/ahriman/web/views/v2/packages/__init__.py b/ahriman-web/src/ahriman/web/views/v2/packages/__init__.py
new file mode 100644
index 00000000..cddc28d6
--- /dev/null
+++ b/ahriman-web/src/ahriman/web/views/v2/packages/__init__.py
@@ -0,0 +1,19 @@
+#
+# Copyright (c) 2021-2026 ahriman team.
+#
+# This file is part of ahriman
+# (see https://github.com/arcan1s/ahriman).
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+#
diff --git a/src/ahriman/web/views/v2/packages/logs.py b/ahriman-web/src/ahriman/web/views/v2/packages/logs.py
similarity index 100%
rename from src/ahriman/web/views/v2/packages/logs.py
rename to ahriman-web/src/ahriman/web/views/v2/packages/logs.py
diff --git a/ahriman-web/src/ahriman/web/views/v2/status/__init__.py b/ahriman-web/src/ahriman/web/views/v2/status/__init__.py
new file mode 100644
index 00000000..cddc28d6
--- /dev/null
+++ b/ahriman-web/src/ahriman/web/views/v2/status/__init__.py
@@ -0,0 +1,19 @@
+#
+# Copyright (c) 2021-2026 ahriman team.
+#
+# This file is part of ahriman
+# (see https://github.com/arcan1s/ahriman).
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+#
diff --git a/src/ahriman/web/views/v2/status/info.py b/ahriman-web/src/ahriman/web/views/v2/status/info.py
similarity index 100%
rename from src/ahriman/web/views/v2/status/info.py
rename to ahriman-web/src/ahriman/web/views/v2/status/info.py
diff --git a/src/ahriman/web/web.py b/ahriman-web/src/ahriman/web/web.py
similarity index 100%
rename from src/ahriman/web/web.py
rename to ahriman-web/src/ahriman/web/web.py
diff --git a/tests/ahriman/application/handlers/test_handler_web.py b/ahriman-web/tests/ahriman/application/handlers/test_handler_web.py
similarity index 96%
rename from tests/ahriman/application/handlers/test_handler_web.py
rename to ahriman-web/tests/ahriman/application/handlers/test_handler_web.py
index a16a1f15..19b0fc79 100644
--- a/tests/ahriman/application/handlers/test_handler_web.py
+++ b/ahriman-web/tests/ahriman/application/handlers/test_handler_web.py
@@ -3,7 +3,7 @@ import pytest
from pytest_mock import MockerFixture
-from ahriman.application.handlers.web import Web
+from ahriman.application.handlers.web.web import Web
from ahriman.core.configuration import Configuration
from ahriman.core.repository import Repository
from ahriman.models.log_handler import LogHandler
@@ -36,8 +36,8 @@ def test_run(args: argparse.Namespace, configuration: Configuration, repository:
"""
args = _default_args(args)
mocker.patch("ahriman.core.repository.Repository.load", return_value=repository)
- setup_mock = mocker.patch("ahriman.application.handlers.web.setup_server")
- run_mock = mocker.patch("ahriman.application.handlers.web.run_server")
+ setup_mock = mocker.patch("ahriman.application.handlers.web.web.setup_server")
+ run_mock = mocker.patch("ahriman.application.handlers.web.web.run_server")
start_mock = mocker.patch("ahriman.core.spawn.Spawn.start")
trigger_mock = mocker.patch("ahriman.core.triggers.TriggerLoader.load")
stop_mock = mocker.patch("ahriman.core.spawn.Spawn.stop")
diff --git a/tests/ahriman/core/auth/conftest.py b/ahriman-web/tests/ahriman/core/auth/conftest.py
similarity index 100%
rename from tests/ahriman/core/auth/conftest.py
rename to ahriman-web/tests/ahriman/core/auth/conftest.py
diff --git a/tests/ahriman/core/auth/test_auth.py b/ahriman-web/tests/ahriman/core/auth/test_auth.py
similarity index 100%
rename from tests/ahriman/core/auth/test_auth.py
rename to ahriman-web/tests/ahriman/core/auth/test_auth.py
diff --git a/tests/ahriman/core/auth/test_helpers.py b/ahriman-web/tests/ahriman/core/auth/test_helpers.py
similarity index 100%
rename from tests/ahriman/core/auth/test_helpers.py
rename to ahriman-web/tests/ahriman/core/auth/test_helpers.py
diff --git a/tests/ahriman/core/auth/test_mapping.py b/ahriman-web/tests/ahriman/core/auth/test_mapping.py
similarity index 100%
rename from tests/ahriman/core/auth/test_mapping.py
rename to ahriman-web/tests/ahriman/core/auth/test_mapping.py
diff --git a/tests/ahriman/core/auth/test_oauth.py b/ahriman-web/tests/ahriman/core/auth/test_oauth.py
similarity index 100%
rename from tests/ahriman/core/auth/test_oauth.py
rename to ahriman-web/tests/ahriman/core/auth/test_oauth.py
diff --git a/tests/ahriman/core/auth/test_pam.py b/ahriman-web/tests/ahriman/core/auth/test_pam.py
similarity index 100%
rename from tests/ahriman/core/auth/test_pam.py
rename to ahriman-web/tests/ahriman/core/auth/test_pam.py
diff --git a/tests/ahriman/web/apispec/test_apispec.py b/ahriman-web/tests/ahriman/web/apispec/test_apispec.py
similarity index 100%
rename from tests/ahriman/web/apispec/test_apispec.py
rename to ahriman-web/tests/ahriman/web/apispec/test_apispec.py
diff --git a/tests/ahriman/web/apispec/test_decorators.py b/ahriman-web/tests/ahriman/web/apispec/test_decorators.py
similarity index 100%
rename from tests/ahriman/web/apispec/test_decorators.py
rename to ahriman-web/tests/ahriman/web/apispec/test_decorators.py
diff --git a/tests/ahriman/web/apispec/test_info.py b/ahriman-web/tests/ahriman/web/apispec/test_info.py
similarity index 100%
rename from tests/ahriman/web/apispec/test_info.py
rename to ahriman-web/tests/ahriman/web/apispec/test_info.py
diff --git a/tests/ahriman/web/conftest.py b/ahriman-web/tests/ahriman/web/conftest.py
similarity index 100%
rename from tests/ahriman/web/conftest.py
rename to ahriman-web/tests/ahriman/web/conftest.py
diff --git a/tests/ahriman/web/middlewares/conftest.py b/ahriman-web/tests/ahriman/web/middlewares/conftest.py
similarity index 100%
rename from tests/ahriman/web/middlewares/conftest.py
rename to ahriman-web/tests/ahriman/web/middlewares/conftest.py
diff --git a/tests/ahriman/web/middlewares/test_auth_handler.py b/ahriman-web/tests/ahriman/web/middlewares/test_auth_handler.py
similarity index 100%
rename from tests/ahriman/web/middlewares/test_auth_handler.py
rename to ahriman-web/tests/ahriman/web/middlewares/test_auth_handler.py
diff --git a/tests/ahriman/web/middlewares/test_etag_handler.py b/ahriman-web/tests/ahriman/web/middlewares/test_etag_handler.py
similarity index 100%
rename from tests/ahriman/web/middlewares/test_etag_handler.py
rename to ahriman-web/tests/ahriman/web/middlewares/test_etag_handler.py
diff --git a/tests/ahriman/web/middlewares/test_exception_handler.py b/ahriman-web/tests/ahriman/web/middlewares/test_exception_handler.py
similarity index 100%
rename from tests/ahriman/web/middlewares/test_exception_handler.py
rename to ahriman-web/tests/ahriman/web/middlewares/test_exception_handler.py
diff --git a/tests/ahriman/web/middlewares/test_metrics_handler.py b/ahriman-web/tests/ahriman/web/middlewares/test_metrics_handler.py
similarity index 100%
rename from tests/ahriman/web/middlewares/test_metrics_handler.py
rename to ahriman-web/tests/ahriman/web/middlewares/test_metrics_handler.py
diff --git a/tests/ahriman/web/middlewares/test_request_id_handler.py b/ahriman-web/tests/ahriman/web/middlewares/test_request_id_handler.py
similarity index 100%
rename from tests/ahriman/web/middlewares/test_request_id_handler.py
rename to ahriman-web/tests/ahriman/web/middlewares/test_request_id_handler.py
diff --git a/tests/ahriman/web/schemas/test_any_schema.py b/ahriman-web/tests/ahriman/web/schemas/test_any_schema.py
similarity index 100%
rename from tests/ahriman/web/schemas/test_any_schema.py
rename to ahriman-web/tests/ahriman/web/schemas/test_any_schema.py
diff --git a/tests/ahriman/web/schemas/test_aur_package_schema.py b/ahriman-web/tests/ahriman/web/schemas/test_aur_package_schema.py
similarity index 100%
rename from tests/ahriman/web/schemas/test_aur_package_schema.py
rename to ahriman-web/tests/ahriman/web/schemas/test_aur_package_schema.py
diff --git a/tests/ahriman/web/schemas/test_auth_info_schema.py b/ahriman-web/tests/ahriman/web/schemas/test_auth_info_schema.py
similarity index 100%
rename from tests/ahriman/web/schemas/test_auth_info_schema.py
rename to ahriman-web/tests/ahriman/web/schemas/test_auth_info_schema.py
diff --git a/tests/ahriman/web/schemas/test_auth_schema.py b/ahriman-web/tests/ahriman/web/schemas/test_auth_schema.py
similarity index 100%
rename from tests/ahriman/web/schemas/test_auth_schema.py
rename to ahriman-web/tests/ahriman/web/schemas/test_auth_schema.py
diff --git a/tests/ahriman/web/schemas/test_auto_refresh_interval_schema.py b/ahriman-web/tests/ahriman/web/schemas/test_auto_refresh_interval_schema.py
similarity index 100%
rename from tests/ahriman/web/schemas/test_auto_refresh_interval_schema.py
rename to ahriman-web/tests/ahriman/web/schemas/test_auto_refresh_interval_schema.py
diff --git a/tests/ahriman/web/schemas/test_build_options_schema.py b/ahriman-web/tests/ahriman/web/schemas/test_build_options_schema.py
similarity index 100%
rename from tests/ahriman/web/schemas/test_build_options_schema.py
rename to ahriman-web/tests/ahriman/web/schemas/test_build_options_schema.py
diff --git a/tests/ahriman/web/schemas/test_changes_schema.py b/ahriman-web/tests/ahriman/web/schemas/test_changes_schema.py
similarity index 100%
rename from tests/ahriman/web/schemas/test_changes_schema.py
rename to ahriman-web/tests/ahriman/web/schemas/test_changes_schema.py
diff --git a/tests/ahriman/web/schemas/test_configuration_schema.py b/ahriman-web/tests/ahriman/web/schemas/test_configuration_schema.py
similarity index 100%
rename from tests/ahriman/web/schemas/test_configuration_schema.py
rename to ahriman-web/tests/ahriman/web/schemas/test_configuration_schema.py
diff --git a/tests/ahriman/web/schemas/test_counters_schema.py b/ahriman-web/tests/ahriman/web/schemas/test_counters_schema.py
similarity index 100%
rename from tests/ahriman/web/schemas/test_counters_schema.py
rename to ahriman-web/tests/ahriman/web/schemas/test_counters_schema.py
diff --git a/tests/ahriman/web/schemas/test_dependencies_schema.py b/ahriman-web/tests/ahriman/web/schemas/test_dependencies_schema.py
similarity index 100%
rename from tests/ahriman/web/schemas/test_dependencies_schema.py
rename to ahriman-web/tests/ahriman/web/schemas/test_dependencies_schema.py
diff --git a/tests/ahriman/web/schemas/test_error_schema.py b/ahriman-web/tests/ahriman/web/schemas/test_error_schema.py
similarity index 100%
rename from tests/ahriman/web/schemas/test_error_schema.py
rename to ahriman-web/tests/ahriman/web/schemas/test_error_schema.py
diff --git a/tests/ahriman/web/schemas/test_event_bus_filter_schema.py b/ahriman-web/tests/ahriman/web/schemas/test_event_bus_filter_schema.py
similarity index 100%
rename from tests/ahriman/web/schemas/test_event_bus_filter_schema.py
rename to ahriman-web/tests/ahriman/web/schemas/test_event_bus_filter_schema.py
diff --git a/tests/ahriman/web/schemas/test_event_schema.py b/ahriman-web/tests/ahriman/web/schemas/test_event_schema.py
similarity index 100%
rename from tests/ahriman/web/schemas/test_event_schema.py
rename to ahriman-web/tests/ahriman/web/schemas/test_event_schema.py
diff --git a/tests/ahriman/web/schemas/test_event_search_schema.py b/ahriman-web/tests/ahriman/web/schemas/test_event_search_schema.py
similarity index 100%
rename from tests/ahriman/web/schemas/test_event_search_schema.py
rename to ahriman-web/tests/ahriman/web/schemas/test_event_search_schema.py
diff --git a/tests/ahriman/web/schemas/test_file_schema.py b/ahriman-web/tests/ahriman/web/schemas/test_file_schema.py
similarity index 100%
rename from tests/ahriman/web/schemas/test_file_schema.py
rename to ahriman-web/tests/ahriman/web/schemas/test_file_schema.py
diff --git a/tests/ahriman/web/schemas/test_hold_schema.py b/ahriman-web/tests/ahriman/web/schemas/test_hold_schema.py
similarity index 100%
rename from tests/ahriman/web/schemas/test_hold_schema.py
rename to ahriman-web/tests/ahriman/web/schemas/test_hold_schema.py
diff --git a/tests/ahriman/web/schemas/test_info_schema.py b/ahriman-web/tests/ahriman/web/schemas/test_info_schema.py
similarity index 100%
rename from tests/ahriman/web/schemas/test_info_schema.py
rename to ahriman-web/tests/ahriman/web/schemas/test_info_schema.py
diff --git a/tests/ahriman/web/schemas/test_info_v2_schema.py b/ahriman-web/tests/ahriman/web/schemas/test_info_v2_schema.py
similarity index 100%
rename from tests/ahriman/web/schemas/test_info_v2_schema.py
rename to ahriman-web/tests/ahriman/web/schemas/test_info_v2_schema.py
diff --git a/tests/ahriman/web/schemas/test_internal_status_schema.py b/ahriman-web/tests/ahriman/web/schemas/test_internal_status_schema.py
similarity index 100%
rename from tests/ahriman/web/schemas/test_internal_status_schema.py
rename to ahriman-web/tests/ahriman/web/schemas/test_internal_status_schema.py
diff --git a/tests/ahriman/web/schemas/test_log_schema.py b/ahriman-web/tests/ahriman/web/schemas/test_log_schema.py
similarity index 100%
rename from tests/ahriman/web/schemas/test_log_schema.py
rename to ahriman-web/tests/ahriman/web/schemas/test_log_schema.py
diff --git a/tests/ahriman/web/schemas/test_login_schema.py b/ahriman-web/tests/ahriman/web/schemas/test_login_schema.py
similarity index 100%
rename from tests/ahriman/web/schemas/test_login_schema.py
rename to ahriman-web/tests/ahriman/web/schemas/test_login_schema.py
diff --git a/tests/ahriman/web/schemas/test_logs_rotate_schema.py b/ahriman-web/tests/ahriman/web/schemas/test_logs_rotate_schema.py
similarity index 100%
rename from tests/ahriman/web/schemas/test_logs_rotate_schema.py
rename to ahriman-web/tests/ahriman/web/schemas/test_logs_rotate_schema.py
diff --git a/tests/ahriman/web/schemas/test_logs_schema.py b/ahriman-web/tests/ahriman/web/schemas/test_logs_schema.py
similarity index 100%
rename from tests/ahriman/web/schemas/test_logs_schema.py
rename to ahriman-web/tests/ahriman/web/schemas/test_logs_schema.py
diff --git a/tests/ahriman/web/schemas/test_logs_search_schema.py b/ahriman-web/tests/ahriman/web/schemas/test_logs_search_schema.py
similarity index 100%
rename from tests/ahriman/web/schemas/test_logs_search_schema.py
rename to ahriman-web/tests/ahriman/web/schemas/test_logs_search_schema.py
diff --git a/tests/ahriman/web/schemas/test_oauth2_schema.py b/ahriman-web/tests/ahriman/web/schemas/test_oauth2_schema.py
similarity index 100%
rename from tests/ahriman/web/schemas/test_oauth2_schema.py
rename to ahriman-web/tests/ahriman/web/schemas/test_oauth2_schema.py
diff --git a/tests/ahriman/web/schemas/test_package_name_schema.py b/ahriman-web/tests/ahriman/web/schemas/test_package_name_schema.py
similarity index 100%
rename from tests/ahriman/web/schemas/test_package_name_schema.py
rename to ahriman-web/tests/ahriman/web/schemas/test_package_name_schema.py
diff --git a/tests/ahriman/web/schemas/test_package_names_schema.py b/ahriman-web/tests/ahriman/web/schemas/test_package_names_schema.py
similarity index 100%
rename from tests/ahriman/web/schemas/test_package_names_schema.py
rename to ahriman-web/tests/ahriman/web/schemas/test_package_names_schema.py
diff --git a/tests/ahriman/web/schemas/test_package_patch_schema.py b/ahriman-web/tests/ahriman/web/schemas/test_package_patch_schema.py
similarity index 100%
rename from tests/ahriman/web/schemas/test_package_patch_schema.py
rename to ahriman-web/tests/ahriman/web/schemas/test_package_patch_schema.py
diff --git a/tests/ahriman/web/schemas/test_package_properties_schema.py b/ahriman-web/tests/ahriman/web/schemas/test_package_properties_schema.py
similarity index 100%
rename from tests/ahriman/web/schemas/test_package_properties_schema.py
rename to ahriman-web/tests/ahriman/web/schemas/test_package_properties_schema.py
diff --git a/tests/ahriman/web/schemas/test_package_schema.py b/ahriman-web/tests/ahriman/web/schemas/test_package_schema.py
similarity index 100%
rename from tests/ahriman/web/schemas/test_package_schema.py
rename to ahriman-web/tests/ahriman/web/schemas/test_package_schema.py
diff --git a/tests/ahriman/web/schemas/test_package_status_schema.py b/ahriman-web/tests/ahriman/web/schemas/test_package_status_schema.py
similarity index 100%
rename from tests/ahriman/web/schemas/test_package_status_schema.py
rename to ahriman-web/tests/ahriman/web/schemas/test_package_status_schema.py
diff --git a/tests/ahriman/web/schemas/test_package_version_schema.py b/ahriman-web/tests/ahriman/web/schemas/test_package_version_schema.py
similarity index 100%
rename from tests/ahriman/web/schemas/test_package_version_schema.py
rename to ahriman-web/tests/ahriman/web/schemas/test_package_version_schema.py
diff --git a/tests/ahriman/web/schemas/test_packager_schema.py b/ahriman-web/tests/ahriman/web/schemas/test_packager_schema.py
similarity index 100%
rename from tests/ahriman/web/schemas/test_packager_schema.py
rename to ahriman-web/tests/ahriman/web/schemas/test_packager_schema.py
diff --git a/tests/ahriman/web/schemas/test_pagination_schema.py b/ahriman-web/tests/ahriman/web/schemas/test_pagination_schema.py
similarity index 100%
rename from tests/ahriman/web/schemas/test_pagination_schema.py
rename to ahriman-web/tests/ahriman/web/schemas/test_pagination_schema.py
diff --git a/tests/ahriman/web/schemas/test_patch_name_schema.py b/ahriman-web/tests/ahriman/web/schemas/test_patch_name_schema.py
similarity index 100%
rename from tests/ahriman/web/schemas/test_patch_name_schema.py
rename to ahriman-web/tests/ahriman/web/schemas/test_patch_name_schema.py
diff --git a/tests/ahriman/web/schemas/test_patch_schema.py b/ahriman-web/tests/ahriman/web/schemas/test_patch_schema.py
similarity index 100%
rename from tests/ahriman/web/schemas/test_patch_schema.py
rename to ahriman-web/tests/ahriman/web/schemas/test_patch_schema.py
diff --git a/tests/ahriman/web/schemas/test_pgp_key_id_schema.py b/ahriman-web/tests/ahriman/web/schemas/test_pgp_key_id_schema.py
similarity index 100%
rename from tests/ahriman/web/schemas/test_pgp_key_id_schema.py
rename to ahriman-web/tests/ahriman/web/schemas/test_pgp_key_id_schema.py
diff --git a/tests/ahriman/web/schemas/test_pgp_key_schema.py b/ahriman-web/tests/ahriman/web/schemas/test_pgp_key_schema.py
similarity index 100%
rename from tests/ahriman/web/schemas/test_pgp_key_schema.py
rename to ahriman-web/tests/ahriman/web/schemas/test_pgp_key_schema.py
diff --git a/tests/ahriman/web/schemas/test_process_id_schema.py b/ahriman-web/tests/ahriman/web/schemas/test_process_id_schema.py
similarity index 100%
rename from tests/ahriman/web/schemas/test_process_id_schema.py
rename to ahriman-web/tests/ahriman/web/schemas/test_process_id_schema.py
diff --git a/tests/ahriman/web/schemas/test_process_schema.py b/ahriman-web/tests/ahriman/web/schemas/test_process_schema.py
similarity index 100%
rename from tests/ahriman/web/schemas/test_process_schema.py
rename to ahriman-web/tests/ahriman/web/schemas/test_process_schema.py
diff --git a/tests/ahriman/web/schemas/test_remote_schema.py b/ahriman-web/tests/ahriman/web/schemas/test_remote_schema.py
similarity index 100%
rename from tests/ahriman/web/schemas/test_remote_schema.py
rename to ahriman-web/tests/ahriman/web/schemas/test_remote_schema.py
diff --git a/tests/ahriman/web/schemas/test_repository_id_schema.py b/ahriman-web/tests/ahriman/web/schemas/test_repository_id_schema.py
similarity index 100%
rename from tests/ahriman/web/schemas/test_repository_id_schema.py
rename to ahriman-web/tests/ahriman/web/schemas/test_repository_id_schema.py
diff --git a/tests/ahriman/web/schemas/test_repository_stats_schema.py b/ahriman-web/tests/ahriman/web/schemas/test_repository_stats_schema.py
similarity index 100%
rename from tests/ahriman/web/schemas/test_repository_stats_schema.py
rename to ahriman-web/tests/ahriman/web/schemas/test_repository_stats_schema.py
diff --git a/tests/ahriman/web/schemas/test_rollback_schema.py b/ahriman-web/tests/ahriman/web/schemas/test_rollback_schema.py
similarity index 100%
rename from tests/ahriman/web/schemas/test_rollback_schema.py
rename to ahriman-web/tests/ahriman/web/schemas/test_rollback_schema.py
diff --git a/tests/ahriman/web/schemas/test_search_schema.py b/ahriman-web/tests/ahriman/web/schemas/test_search_schema.py
similarity index 100%
rename from tests/ahriman/web/schemas/test_search_schema.py
rename to ahriman-web/tests/ahriman/web/schemas/test_search_schema.py
diff --git a/tests/ahriman/web/schemas/test_sse_schema.py b/ahriman-web/tests/ahriman/web/schemas/test_sse_schema.py
similarity index 100%
rename from tests/ahriman/web/schemas/test_sse_schema.py
rename to ahriman-web/tests/ahriman/web/schemas/test_sse_schema.py
diff --git a/tests/ahriman/web/schemas/test_status_schema.py b/ahriman-web/tests/ahriman/web/schemas/test_status_schema.py
similarity index 100%
rename from tests/ahriman/web/schemas/test_status_schema.py
rename to ahriman-web/tests/ahriman/web/schemas/test_status_schema.py
diff --git a/tests/ahriman/web/schemas/test_update_flags_schema.py b/ahriman-web/tests/ahriman/web/schemas/test_update_flags_schema.py
similarity index 100%
rename from tests/ahriman/web/schemas/test_update_flags_schema.py
rename to ahriman-web/tests/ahriman/web/schemas/test_update_flags_schema.py
diff --git a/tests/ahriman/web/schemas/test_worker_schema.py b/ahriman-web/tests/ahriman/web/schemas/test_worker_schema.py
similarity index 100%
rename from tests/ahriman/web/schemas/test_worker_schema.py
rename to ahriman-web/tests/ahriman/web/schemas/test_worker_schema.py
diff --git a/tests/ahriman/web/test_cors.py b/ahriman-web/tests/ahriman/web/test_cors.py
similarity index 100%
rename from tests/ahriman/web/test_cors.py
rename to ahriman-web/tests/ahriman/web/test_cors.py
diff --git a/tests/ahriman/web/test_keys.py b/ahriman-web/tests/ahriman/web/test_keys.py
similarity index 100%
rename from tests/ahriman/web/test_keys.py
rename to ahriman-web/tests/ahriman/web/test_keys.py
diff --git a/tests/ahriman/web/test_routes.py b/ahriman-web/tests/ahriman/web/test_routes.py
similarity index 92%
rename from tests/ahriman/web/test_routes.py
rename to ahriman-web/tests/ahriman/web/test_routes.py
index 4a07a569..1b945927 100644
--- a/tests/ahriman/web/test_routes.py
+++ b/ahriman-web/tests/ahriman/web/test_routes.py
@@ -10,7 +10,7 @@ def test_dynamic_routes(resource_path_root: Path, configuration: Configuration)
"""
must return all available routes
"""
- views_root = resource_path_root / ".." / ".." / "src" / "ahriman" / "web" / "views"
+ views_root = resource_path_root.parent.parent / "ahriman-web" / "src" / "ahriman" / "web" / "views"
expected_views = [
file
for file in walk(views_root)
diff --git a/tests/ahriman/web/test_server_info.py b/ahriman-web/tests/ahriman/web/test_server_info.py
similarity index 100%
rename from tests/ahriman/web/test_server_info.py
rename to ahriman-web/tests/ahriman/web/test_server_info.py
diff --git a/tests/ahriman/web/test_web.py b/ahriman-web/tests/ahriman/web/test_web.py
similarity index 100%
rename from tests/ahriman/web/test_web.py
rename to ahriman-web/tests/ahriman/web/test_web.py
diff --git a/tests/ahriman/web/views/api/test_view_api_docs.py b/ahriman-web/tests/ahriman/web/views/api/test_view_api_docs.py
similarity index 100%
rename from tests/ahriman/web/views/api/test_view_api_docs.py
rename to ahriman-web/tests/ahriman/web/views/api/test_view_api_docs.py
diff --git a/tests/ahriman/web/views/api/test_view_api_swagger.py b/ahriman-web/tests/ahriman/web/views/api/test_view_api_swagger.py
similarity index 100%
rename from tests/ahriman/web/views/api/test_view_api_swagger.py
rename to ahriman-web/tests/ahriman/web/views/api/test_view_api_swagger.py
diff --git a/tests/ahriman/web/views/conftest.py b/ahriman-web/tests/ahriman/web/views/conftest.py
similarity index 100%
rename from tests/ahriman/web/views/conftest.py
rename to ahriman-web/tests/ahriman/web/views/conftest.py
diff --git a/tests/ahriman/web/views/test_status_view_guard.py b/ahriman-web/tests/ahriman/web/views/test_status_view_guard.py
similarity index 100%
rename from tests/ahriman/web/views/test_status_view_guard.py
rename to ahriman-web/tests/ahriman/web/views/test_status_view_guard.py
diff --git a/tests/ahriman/web/views/test_view_base.py b/ahriman-web/tests/ahriman/web/views/test_view_base.py
similarity index 100%
rename from tests/ahriman/web/views/test_view_base.py
rename to ahriman-web/tests/ahriman/web/views/test_view_base.py
diff --git a/tests/ahriman/web/views/test_view_index.py b/ahriman-web/tests/ahriman/web/views/test_view_index.py
similarity index 100%
rename from tests/ahriman/web/views/test_view_index.py
rename to ahriman-web/tests/ahriman/web/views/test_view_index.py
diff --git a/tests/ahriman/web/views/test_view_static.py b/ahriman-web/tests/ahriman/web/views/test_view_static.py
similarity index 100%
rename from tests/ahriman/web/views/test_view_static.py
rename to ahriman-web/tests/ahriman/web/views/test_view_static.py
diff --git a/tests/ahriman/web/views/v1/auditlog/test_view_v1_auditlog_event_bus.py b/ahriman-web/tests/ahriman/web/views/v1/auditlog/test_view_v1_auditlog_event_bus.py
similarity index 100%
rename from tests/ahriman/web/views/v1/auditlog/test_view_v1_auditlog_event_bus.py
rename to ahriman-web/tests/ahriman/web/views/v1/auditlog/test_view_v1_auditlog_event_bus.py
diff --git a/tests/ahriman/web/views/v1/auditlog/test_view_v1_auditlog_events.py b/ahriman-web/tests/ahriman/web/views/v1/auditlog/test_view_v1_auditlog_events.py
similarity index 100%
rename from tests/ahriman/web/views/v1/auditlog/test_view_v1_auditlog_events.py
rename to ahriman-web/tests/ahriman/web/views/v1/auditlog/test_view_v1_auditlog_events.py
diff --git a/tests/ahriman/web/views/v1/distributed/test_view_v1_distributed_workers.py b/ahriman-web/tests/ahriman/web/views/v1/distributed/test_view_v1_distributed_workers.py
similarity index 100%
rename from tests/ahriman/web/views/v1/distributed/test_view_v1_distributed_workers.py
rename to ahriman-web/tests/ahriman/web/views/v1/distributed/test_view_v1_distributed_workers.py
diff --git a/tests/ahriman/web/views/v1/packages/test_view_v1_packages_archives.py b/ahriman-web/tests/ahriman/web/views/v1/packages/test_view_v1_packages_archives.py
similarity index 100%
rename from tests/ahriman/web/views/v1/packages/test_view_v1_packages_archives.py
rename to ahriman-web/tests/ahriman/web/views/v1/packages/test_view_v1_packages_archives.py
diff --git a/tests/ahriman/web/views/v1/packages/test_view_v1_packages_changes.py b/ahriman-web/tests/ahriman/web/views/v1/packages/test_view_v1_packages_changes.py
similarity index 100%
rename from tests/ahriman/web/views/v1/packages/test_view_v1_packages_changes.py
rename to ahriman-web/tests/ahriman/web/views/v1/packages/test_view_v1_packages_changes.py
diff --git a/tests/ahriman/web/views/v1/packages/test_view_v1_packages_dependencies.py b/ahriman-web/tests/ahriman/web/views/v1/packages/test_view_v1_packages_dependencies.py
similarity index 100%
rename from tests/ahriman/web/views/v1/packages/test_view_v1_packages_dependencies.py
rename to ahriman-web/tests/ahriman/web/views/v1/packages/test_view_v1_packages_dependencies.py
diff --git a/tests/ahriman/web/views/v1/packages/test_view_v1_packages_hold.py b/ahriman-web/tests/ahriman/web/views/v1/packages/test_view_v1_packages_hold.py
similarity index 100%
rename from tests/ahriman/web/views/v1/packages/test_view_v1_packages_hold.py
rename to ahriman-web/tests/ahriman/web/views/v1/packages/test_view_v1_packages_hold.py
diff --git a/tests/ahriman/web/views/v1/packages/test_view_v1_packages_logs.py b/ahriman-web/tests/ahriman/web/views/v1/packages/test_view_v1_packages_logs.py
similarity index 100%
rename from tests/ahriman/web/views/v1/packages/test_view_v1_packages_logs.py
rename to ahriman-web/tests/ahriman/web/views/v1/packages/test_view_v1_packages_logs.py
diff --git a/tests/ahriman/web/views/v1/packages/test_view_v1_packages_package.py b/ahriman-web/tests/ahriman/web/views/v1/packages/test_view_v1_packages_package.py
similarity index 100%
rename from tests/ahriman/web/views/v1/packages/test_view_v1_packages_package.py
rename to ahriman-web/tests/ahriman/web/views/v1/packages/test_view_v1_packages_package.py
diff --git a/tests/ahriman/web/views/v1/packages/test_view_v1_packages_packages.py b/ahriman-web/tests/ahriman/web/views/v1/packages/test_view_v1_packages_packages.py
similarity index 100%
rename from tests/ahriman/web/views/v1/packages/test_view_v1_packages_packages.py
rename to ahriman-web/tests/ahriman/web/views/v1/packages/test_view_v1_packages_packages.py
diff --git a/tests/ahriman/web/views/v1/packages/test_view_v1_packages_patch.py b/ahriman-web/tests/ahriman/web/views/v1/packages/test_view_v1_packages_patch.py
similarity index 100%
rename from tests/ahriman/web/views/v1/packages/test_view_v1_packages_patch.py
rename to ahriman-web/tests/ahriman/web/views/v1/packages/test_view_v1_packages_patch.py
diff --git a/tests/ahriman/web/views/v1/packages/test_view_v1_packages_patches.py b/ahriman-web/tests/ahriman/web/views/v1/packages/test_view_v1_packages_patches.py
similarity index 100%
rename from tests/ahriman/web/views/v1/packages/test_view_v1_packages_patches.py
rename to ahriman-web/tests/ahriman/web/views/v1/packages/test_view_v1_packages_patches.py
diff --git a/tests/ahriman/web/views/v1/service/test_view_v1_service_add.py b/ahriman-web/tests/ahriman/web/views/v1/service/test_view_v1_service_add.py
similarity index 100%
rename from tests/ahriman/web/views/v1/service/test_view_v1_service_add.py
rename to ahriman-web/tests/ahriman/web/views/v1/service/test_view_v1_service_add.py
diff --git a/tests/ahriman/web/views/v1/service/test_view_v1_service_config.py b/ahriman-web/tests/ahriman/web/views/v1/service/test_view_v1_service_config.py
similarity index 100%
rename from tests/ahriman/web/views/v1/service/test_view_v1_service_config.py
rename to ahriman-web/tests/ahriman/web/views/v1/service/test_view_v1_service_config.py
diff --git a/tests/ahriman/web/views/v1/service/test_view_v1_service_logs.py b/ahriman-web/tests/ahriman/web/views/v1/service/test_view_v1_service_logs.py
similarity index 100%
rename from tests/ahriman/web/views/v1/service/test_view_v1_service_logs.py
rename to ahriman-web/tests/ahriman/web/views/v1/service/test_view_v1_service_logs.py
diff --git a/tests/ahriman/web/views/v1/service/test_view_v1_service_pgp.py b/ahriman-web/tests/ahriman/web/views/v1/service/test_view_v1_service_pgp.py
similarity index 100%
rename from tests/ahriman/web/views/v1/service/test_view_v1_service_pgp.py
rename to ahriman-web/tests/ahriman/web/views/v1/service/test_view_v1_service_pgp.py
diff --git a/tests/ahriman/web/views/v1/service/test_view_v1_service_process.py b/ahriman-web/tests/ahriman/web/views/v1/service/test_view_v1_service_process.py
similarity index 100%
rename from tests/ahriman/web/views/v1/service/test_view_v1_service_process.py
rename to ahriman-web/tests/ahriman/web/views/v1/service/test_view_v1_service_process.py
diff --git a/tests/ahriman/web/views/v1/service/test_view_v1_service_rebuild.py b/ahriman-web/tests/ahriman/web/views/v1/service/test_view_v1_service_rebuild.py
similarity index 100%
rename from tests/ahriman/web/views/v1/service/test_view_v1_service_rebuild.py
rename to ahriman-web/tests/ahriman/web/views/v1/service/test_view_v1_service_rebuild.py
diff --git a/tests/ahriman/web/views/v1/service/test_view_v1_service_remove.py b/ahriman-web/tests/ahriman/web/views/v1/service/test_view_v1_service_remove.py
similarity index 100%
rename from tests/ahriman/web/views/v1/service/test_view_v1_service_remove.py
rename to ahriman-web/tests/ahriman/web/views/v1/service/test_view_v1_service_remove.py
diff --git a/tests/ahriman/web/views/v1/service/test_view_v1_service_request.py b/ahriman-web/tests/ahriman/web/views/v1/service/test_view_v1_service_request.py
similarity index 100%
rename from tests/ahriman/web/views/v1/service/test_view_v1_service_request.py
rename to ahriman-web/tests/ahriman/web/views/v1/service/test_view_v1_service_request.py
diff --git a/tests/ahriman/web/views/v1/service/test_view_v1_service_rollback.py b/ahriman-web/tests/ahriman/web/views/v1/service/test_view_v1_service_rollback.py
similarity index 100%
rename from tests/ahriman/web/views/v1/service/test_view_v1_service_rollback.py
rename to ahriman-web/tests/ahriman/web/views/v1/service/test_view_v1_service_rollback.py
diff --git a/tests/ahriman/web/views/v1/service/test_view_v1_service_search.py b/ahriman-web/tests/ahriman/web/views/v1/service/test_view_v1_service_search.py
similarity index 100%
rename from tests/ahriman/web/views/v1/service/test_view_v1_service_search.py
rename to ahriman-web/tests/ahriman/web/views/v1/service/test_view_v1_service_search.py
diff --git a/tests/ahriman/web/views/v1/service/test_view_v1_service_update.py b/ahriman-web/tests/ahriman/web/views/v1/service/test_view_v1_service_update.py
similarity index 100%
rename from tests/ahriman/web/views/v1/service/test_view_v1_service_update.py
rename to ahriman-web/tests/ahriman/web/views/v1/service/test_view_v1_service_update.py
diff --git a/tests/ahriman/web/views/v1/service/test_view_v1_service_upload.py b/ahriman-web/tests/ahriman/web/views/v1/service/test_view_v1_service_upload.py
similarity index 100%
rename from tests/ahriman/web/views/v1/service/test_view_v1_service_upload.py
rename to ahriman-web/tests/ahriman/web/views/v1/service/test_view_v1_service_upload.py
diff --git a/tests/ahriman/web/views/v1/status/test_view_v1_status_info.py b/ahriman-web/tests/ahriman/web/views/v1/status/test_view_v1_status_info.py
similarity index 100%
rename from tests/ahriman/web/views/v1/status/test_view_v1_status_info.py
rename to ahriman-web/tests/ahriman/web/views/v1/status/test_view_v1_status_info.py
diff --git a/tests/ahriman/web/views/v1/status/test_view_v1_status_metrics.py b/ahriman-web/tests/ahriman/web/views/v1/status/test_view_v1_status_metrics.py
similarity index 100%
rename from tests/ahriman/web/views/v1/status/test_view_v1_status_metrics.py
rename to ahriman-web/tests/ahriman/web/views/v1/status/test_view_v1_status_metrics.py
diff --git a/tests/ahriman/web/views/v1/status/test_view_v1_status_repositories.py b/ahriman-web/tests/ahriman/web/views/v1/status/test_view_v1_status_repositories.py
similarity index 100%
rename from tests/ahriman/web/views/v1/status/test_view_v1_status_repositories.py
rename to ahriman-web/tests/ahriman/web/views/v1/status/test_view_v1_status_repositories.py
diff --git a/tests/ahriman/web/views/v1/status/test_view_v1_status_status.py b/ahriman-web/tests/ahriman/web/views/v1/status/test_view_v1_status_status.py
similarity index 100%
rename from tests/ahriman/web/views/v1/status/test_view_v1_status_status.py
rename to ahriman-web/tests/ahriman/web/views/v1/status/test_view_v1_status_status.py
diff --git a/tests/ahriman/web/views/v1/user/test_view_v1_user_login.py b/ahriman-web/tests/ahriman/web/views/v1/user/test_view_v1_user_login.py
similarity index 100%
rename from tests/ahriman/web/views/v1/user/test_view_v1_user_login.py
rename to ahriman-web/tests/ahriman/web/views/v1/user/test_view_v1_user_login.py
diff --git a/tests/ahriman/web/views/v1/user/test_view_v1_user_logout.py b/ahriman-web/tests/ahriman/web/views/v1/user/test_view_v1_user_logout.py
similarity index 100%
rename from tests/ahriman/web/views/v1/user/test_view_v1_user_logout.py
rename to ahriman-web/tests/ahriman/web/views/v1/user/test_view_v1_user_logout.py
diff --git a/tests/ahriman/web/views/v2/packages/test_view_v2_packages_logs.py b/ahriman-web/tests/ahriman/web/views/v2/packages/test_view_v2_packages_logs.py
similarity index 100%
rename from tests/ahriman/web/views/v2/packages/test_view_v2_packages_logs.py
rename to ahriman-web/tests/ahriman/web/views/v2/packages/test_view_v2_packages_logs.py
diff --git a/tests/ahriman/web/views/v2/status/test_view_v2_status_info.py b/ahriman-web/tests/ahriman/web/views/v2/status/test_view_v2_status_info.py
similarity index 100%
rename from tests/ahriman/web/views/v2/status/test_view_v2_status_info.py
rename to ahriman-web/tests/ahriman/web/views/v2/status/test_view_v2_status_info.py
diff --git a/ahriman-web/tests/conftest.py b/ahriman-web/tests/conftest.py
new file mode 100644
index 00000000..8c562e24
--- /dev/null
+++ b/ahriman-web/tests/conftest.py
@@ -0,0 +1,13 @@
+# pylint: disable=wildcard-import,unused-wildcard-import
+from fixtures import *
+import sys
+from pathlib import Path
+
+import pytest
+
+sys.path.insert(0, str(Path(__file__).resolve().parents[2] / "tests"))
+
+
+@pytest.fixture
+def resource_path_root() -> Path:
+ return Path(__file__).resolve().parents[2] / "tests" / "testresources"
diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts
index 949e6db4..d13d6b97 100644
--- a/frontend/vite.config.ts
+++ b/frontend/vite.config.ts
@@ -19,7 +19,7 @@ export default defineConfig({
build: {
chunkSizeWarningLimit: 10000,
emptyOutDir: false,
- outDir: path.resolve(__dirname, "../package/share/ahriman/templates"),
+ outDir: path.resolve(__dirname, "../ahriman-web/package/share/ahriman/templates"),
rolldownOptions: {
output: {
assetFileNames: "static/[name].[ext]",
diff --git a/package/archlinux/PKGBUILD b/package/archlinux/PKGBUILD
index 0c8e9fc7..618ff9ba 100644
--- a/package/archlinux/PKGBUILD
+++ b/package/archlinux/PKGBUILD
@@ -20,7 +20,9 @@ build() {
npm --prefix "frontend" install --cache "$srcdir/npm-cache"
npm --prefix "frontend" run build
- python -m build --wheel --no-isolation
+ python -m build --wheel --no-isolation ahriman-core
+ python -m build --wheel --no-isolation ahriman-triggers
+ python -m build --wheel --no-isolation ahriman-web
}
package_ahriman() {
@@ -48,8 +50,7 @@ package_ahriman-core() {
cd "$pkgbase-$pkgver"
- python -m installer --destdir="$pkgdir" "dist/$pkgbase-$pkgver-py3-none-any.whl"
- python subpackages.py "$pkgdir" "$pkgname"
+ python -m installer --destdir="$pkgdir" "$pkgname/dist/ahriman_core-$pkgver-py3-none-any.whl"
# keep usr/share configs as reference and copy them to /etc
install -Dm644 "$pkgdir/usr/share/$pkgbase/settings/ahriman.ini" "$pkgdir/etc/ahriman.ini"
@@ -68,8 +69,7 @@ package_ahriman-triggers() {
cd "$pkgbase-$pkgver"
- python -m installer --destdir="$pkgdir" "dist/$pkgbase-$pkgver-py3-none-any.whl"
- python subpackages.py "$pkgdir" "$pkgname"
+ python -m installer --destdir="$pkgdir" "$pkgname/dist/ahriman_triggers-$pkgver-py3-none-any.whl"
install -Dm644 "$pkgdir/usr/share/$pkgbase/settings/ahriman.ini.d/00-triggers.ini" "$pkgdir/etc/ahriman.ini.d/00-triggers.ini"
}
@@ -88,8 +88,7 @@ package_ahriman-web() {
cd "$pkgbase-$pkgver"
- python -m installer --destdir="$pkgdir" "dist/$pkgbase-$pkgver-py3-none-any.whl"
- python subpackages.py "$pkgdir" "$pkgname"
+ python -m installer --destdir="$pkgdir" "$pkgname/dist/ahriman_web-$pkgver-py3-none-any.whl"
install -Dm644 "$pkgdir/usr/share/$pkgbase/settings/ahriman.ini.d/00-web.ini" "$pkgdir/etc/ahriman.ini.d/00-web.ini"
}
diff --git a/pyproject.toml b/pyproject.toml
index 0e605fe8..b180ca0e 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -16,72 +16,13 @@ authors = [
]
dependencies = [
- "bcrypt",
- "filelock",
- "inflection",
- "pyelftools",
- "requests",
+ "ahriman-core",
+ "ahriman-triggers",
+ "ahriman-web",
]
dynamic = ["version"]
-[project.optional-dependencies]
-journald = [
- "systemd-python",
-]
-# FIXME technically this dependency is required, but in some cases we do not have access to
-# the libalpm which is required in order to install the package. Thus in case if we do not
-# really need to run the application we can move it to "optional" dependencies
-pacman = [
- "pyalpm",
-]
-reports = [
- "Jinja2",
-]
-s3 = [
- "boto3",
-]
-shell = [
- "IPython"
-]
-stats = [
- "matplotlib",
-]
-unixsocket = [
- "requests-unixsocket2", # required by unix socket support
-]
-validator = [
- "cerberus",
-]
-web = [
- "aiohttp",
- "aiohttp_cors",
- "aiohttp_jinja2",
- "aiohttp_sse",
-]
-web-auth = [
- "ahriman[web]",
- "aiohttp_session",
- "aiohttp_security",
- "cryptography",
-]
-web-docs = [
- "ahriman[web]",
- "aiohttp-apispec",
- "setuptools", # required by aiohttp-apispec
-]
-web-metrics = [
- "ahriman[web]",
- "aiohttp-openmetrics",
-]
-web-oauth2 = [
- "ahriman[web-auth]",
- "aioauth-client",
-]
-
-[project.scripts]
-ahriman = "ahriman.application.ahriman:run"
-
[project.urls]
Documentation = "https://ahriman.readthedocs.io/"
Repository = "https://github.com/arcan1s/ahriman"
@@ -112,32 +53,31 @@ tests = [
"pytest-spec",
]
-[tool.hatch.version]
-path = "src/ahriman/__init__.py"
-
[tool.hatch.build.targets.sdist]
-include = [
- "/AUTHORS",
- "/CONTRIBUTING.md",
- "/COPYING",
- "/README.md",
- "/SECURITY.md",
- "/frontend",
- "/package",
- "/pyproject.toml",
- "/src",
- "/subpackages.py",
- "/web.png",
-]
exclude = [
+ "/.github",
+ "/docker",
"/package/archlinux",
- "/frontend/node_modules",
- "/frontend/package-lock.json",
+ "/recipes",
+ "/tools",
+ "/.bandit.yml",
+ "/.dockerignore",
+ "/.pylint.toml",
+ "/.readthedocs.yml",
+ "/github-logo.png",
+ "/tox.toml",
+ "/toxfile.py",
]
[tool.hatch.build.targets.wheel]
-packages = ["src/ahriman"]
+bypass-selection = true
-[tool.hatch.build.targets.wheel.shared-data]
-"package/lib" = "lib"
-"package/share" = "share"
+[tool.hatch.envs.default]
+workspace.members = [
+ {path = "ahriman-core"},
+ {path = "ahriman-triggers"},
+ {path = "ahriman-web"},
+]
+
+[tool.hatch.version]
+path = "ahriman-core/src/ahriman/__init__.py"
diff --git a/subpackages.py b/subpackages.py
deleted file mode 100644
index 2001d000..00000000
--- a/subpackages.py
+++ /dev/null
@@ -1,136 +0,0 @@
-#
-# Copyright (c) 2021-2025 ahriman team.
-#
-# This file is part of ahriman
-# (see https://github.com/arcan1s/ahriman).
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see .
-#
-import argparse
-import shutil
-import site
-import sys
-
-from pathlib import Path
-
-
-prefix = Path(sys.prefix).relative_to("/")
-site_packages = Path(site.getsitepackages()[0]).relative_to("/")
-SUBPACKAGES = {
- "ahriman-core": [
- prefix / "bin",
- prefix / "lib" / "systemd",
- prefix / "share",
- site_packages,
- ],
- "ahriman-triggers": [
- prefix / "share" / "ahriman" / "settings" / "ahriman.ini.d" / "00-triggers.ini",
- site_packages / "ahriman" / "application" / "handlers" / "triggers_support.py",
- site_packages / "ahriman" / "core" / "archive",
- site_packages / "ahriman" / "core" / "distributed",
- site_packages / "ahriman" / "core" / "support",
- ],
- "ahriman-web": [
- prefix / "lib" / "systemd" / "system" / "ahriman-web.service",
- prefix / "lib" / "systemd" / "system" / "ahriman-web@.service",
- prefix / "share" / "ahriman" / "settings" / "ahriman.ini.d" / "00-web.ini",
- prefix / "share" / "ahriman" / "templates" / "api.jinja2",
- prefix / "share" / "ahriman" / "templates" / "build-status",
- prefix / "share" / "ahriman" / "templates" / "build-status-classic.jinja2",
- prefix / "share" / "ahriman" / "templates" / "build-status.jinja2",
- prefix / "share" / "ahriman" / "templates" / "error.jinja2",
- prefix / "share" / "ahriman" / "templates" / "static",
- site_packages / "ahriman" / "application" / "handlers" / "web.py",
- site_packages / "ahriman" / "core" / "auth",
- site_packages / "ahriman" / "web",
- ],
-}
-
-
-def subpackages(root: Path) -> dict[str, list[Path]]:
- """
- extend list of subpackages
-
- Args:
- root(Path): root directory
-
- Returns:
- dict[str, list[Path]]: extended list of files which belong to a specific package
- """
- for paths in SUBPACKAGES.values():
- new_paths = []
- for path in paths:
- full_path = root / path
-
- match path.suffix:
- case ".py":
- pycache_path = full_path.parent / "__pycache__"
- new_paths.extend(
- new_path.relative_to(root) for new_path in pycache_path.glob(f"{full_path.stem}.*.pyc")
- )
-
- paths.extend(new_paths)
-
- return SUBPACKAGES
-
-
-def process(root: Path, include: list[Path], exclude: list[Path]) -> None:
- """
- remove files based on patterns
-
- Args:
- root(Path): root directory
- include(list[Path]): list of files to include to the subpackage
- exclude(list[Path]): list of files to exclude from the subpackage
- """
- for subdirectory, _, files in root.walk(top_down=False):
- for file in files:
- full_path = subdirectory / file
- relative_path = full_path.relative_to(root)
-
- if not any(relative_path.is_relative_to(path) for path in include):
- full_path.unlink()
- elif any(relative_path.is_relative_to(path) for path in exclude):
- full_path.unlink()
-
- content = list(subdirectory.iterdir())
- if not content:
- shutil.rmtree(subdirectory)
-
-
-def run() -> None:
- """
- run application
- """
- parser = argparse.ArgumentParser(description="Split package into subpackages")
- parser.add_argument("root", help="package root", type=Path)
- parser.add_argument("subpackage", help="subpackage name", choices=SUBPACKAGES.keys())
-
- args = parser.parse_args()
-
- full_subpackages = subpackages(args.root)
- include = full_subpackages[args.subpackage]
- exclude = [
- path
- for subpackage, portion in full_subpackages.items()
- if subpackage != args.subpackage
- for path in portion
- if not any(include_path.is_relative_to(path) for include_path in include)
- ]
-
- process(args.root, include, exclude)
-
-
-if __name__ == "__main__":
- run()
diff --git a/tests/ahriman/conftest.py b/tests/ahriman/conftest.py
deleted file mode 100644
index 99d27d83..00000000
--- a/tests/ahriman/conftest.py
+++ /dev/null
@@ -1,695 +0,0 @@
-import datetime
-import pytest
-
-from dataclasses import replace
-from pathlib import Path
-from pytest_mock import MockerFixture
-from sqlite3 import Cursor
-from typing import Any, TypeVar
-from unittest.mock import MagicMock, PropertyMock
-
-from ahriman.core.alpm.pacman import Pacman
-from ahriman.core.alpm.remote import AUR
-from ahriman.core.auth import Auth
-from ahriman.core.configuration import Configuration
-from ahriman.core.database import SQLite
-from ahriman.core.database.migrations import Migrations
-from ahriman.core.log.log_loader import LogLoader
-from ahriman.core.repository import Repository
-from ahriman.core.repository.package_info import PackageInfo
-from ahriman.core.spawn import Spawn
-from ahriman.core.status import Client
-from ahriman.core.status.event_bus import EventBus
-from ahriman.core.status.watcher import Watcher
-from ahriman.models.aur_package import AURPackage
-from ahriman.models.build_status import BuildStatus, BuildStatusEnum
-from ahriman.models.migration import Migration
-from ahriman.models.package import Package
-from ahriman.models.package_description import PackageDescription
-from ahriman.models.package_source import PackageSource
-from ahriman.models.pacman_synchronization import PacmanSynchronization
-from ahriman.models.remote_source import RemoteSource
-from ahriman.models.repository_id import RepositoryId
-from ahriman.models.repository_paths import RepositoryPaths
-from ahriman.models.result import Result
-from ahriman.models.scan_paths import ScanPaths
-from ahriman.models.user import User
-from ahriman.models.user_access import UserAccess
-
-
-T = TypeVar("T")
-
-
-# helpers
-# https://stackoverflow.com/a/21611963
-@pytest.helpers.register
-def anyvar(cls: type[T], strict: bool = False) -> T:
- """
- any value helper for mocker calls check
-
- Args:
- cls(type[T]): type of the variable to check
- strict(bool, optional): if True then check type of supplied argument (Default value = False)
-
- Returns:
- T: any wrapper
- """
- class AnyVar(cls):
- """
- any value wrapper
- """
-
- def __eq__(self, other: Any) -> bool:
- """
- compare object to other
-
- Args:
- other(Any): other object to compare
-
- Returns:
- bool: True in case if objects are equal
- """
- return not strict or isinstance(other, cls)
-
- return AnyVar()
-
-
-@pytest.helpers.register
-def get_package_status(package: Package) -> dict[str, Any]:
- """
- helper to extract package status from package
-
- Args:
- package(Package): package object
-
- Returns:
- dict[str, Any]: simplified package status map (with only status and view)
- """
- return {"status": BuildStatusEnum.Unknown.value, "package": package.view()}
-
-
-@pytest.helpers.register
-def get_package_status_extended(package: Package) -> dict[str, Any]:
- """
- helper to extract package status from package
-
- Args:
- package(Package): package object
-
- Returns:
- dict[str, Any]: full package status map (with timestamped build status and view)
- """
- return {"status": BuildStatus().view(), "package": package.view()}
-
-
-@pytest.helpers.register
-def import_error(package: str, components: list[str], mocker: MockerFixture) -> MagicMock:
- """
- mock import error
-
- Args:
- package(str): package name to import
- components(list[str]): component to import if any (e.g. from ... import ...)
- mocker(MockerFixture): mocker object
-
- Returns:
- MagicMock: mocked object
- """
- import builtins
- _import = builtins.__import__
-
- def test_import(name: str, globals: Any, locals: Any, from_list: list[str], level: Any):
- if name == package and (not components or any(component in from_list for component in components)):
- raise ImportError
- return _import(name, globals, locals, from_list, level)
-
- return mocker.patch.object(builtins, "__import__", test_import)
-
-
-# generic fixtures
-@pytest.fixture(autouse=True)
-def _register_log_context() -> None:
- """
- register log context variables and factory
- """
- LogLoader.register_context()
-
-
-@pytest.fixture
-def aur_package_ahriman() -> AURPackage:
- """
- fixture for AUR package
-
- Returns:
- AURPackage: AUR package test instance
- """
- return AURPackage(
- id=1197565,
- name="ahriman",
- package_base_id=165427,
- package_base="ahriman",
- version="2.6.0-1",
- description="ArcH linux ReposItory MANager",
- num_votes=0,
- popularity=0,
- first_submitted=datetime.datetime.fromtimestamp(1618008285, datetime.UTC),
- last_modified=datetime.datetime.fromtimestamp(1673826351, datetime.UTC),
- url_path="/cgit/aur.git/snapshot/ahriman.tar.gz",
- url="https://github.com/arcan1s/ahriman",
- out_of_date=None,
- maintainer="arcanis",
- submitter="arcanis",
- depends=[
- "devtools",
- "git",
- "pyalpm",
- "python-cerberus",
- "python-inflection",
- "python-passlib",
- "python-requests",
- "python-setuptools",
- "python-srcinfo",
- ],
- make_depends=[
- "python-build",
- "python-installer",
- "python-wheel",
- ],
- opt_depends=[
- "breezy",
- "darcs",
- "mercurial",
- "python-aioauth-client",
- "python-aiohttp",
- "python-aiohttp-debugtoolbar",
- "python-aiohttp-jinja2",
- "python-aiohttp-security",
- "python-aiohttp-session",
- "python-boto3",
- "python-cryptography",
- "python-requests-unixsocket",
- "python-jinja",
- "rsync",
- "subversion",
- ],
- check_depends=[
- "python-pytest",
- ],
- conflicts=[],
- provides=[],
- license=["GPL3"],
- keywords=[],
- groups=[],
- )
-
-
-@pytest.fixture
-def aur_package_akonadi() -> AURPackage:
- """
- fixture for AUR package
-
- Returns:
- AURPackage: AUR package test instance
- """
- return AURPackage(
- id=0,
- name="akonadi",
- package_base_id=0,
- package_base="akonadi",
- version="21.12.3-2",
- description="PIM layer, which provides an asynchronous API to access all kind of PIM data",
- num_votes=0,
- popularity=0.0,
- first_submitted=datetime.datetime.fromtimestamp(0, datetime.UTC),
- last_modified=datetime.datetime.fromtimestamp(1646555990.610, datetime.UTC),
- url_path="",
- url="https://kontact.kde.org",
- out_of_date=None,
- maintainer="felixonmars",
- repository="extra",
- depends=[
- "libakonadi",
- "mariadb",
- ],
- make_depends=[
- "boost",
- "doxygen",
- "extra-cmake-modules",
- "kaccounts-integration",
- "kitemmodels",
- "postgresql",
- "qt5-tools",
- ],
- opt_depends=[
- "postgresql: PostgreSQL backend",
- ],
- conflicts=[],
- provides=[],
- license=["LGPL"],
- keywords=[],
- groups=[],
- )
-
-
-@pytest.fixture
-def auth(configuration: Configuration) -> Auth:
- """
- auth provider fixture
-
- Args:
- configuration(Configuration): configuration fixture
-
- Returns:
- Auth: auth service instance
- """
- return Auth(configuration)
-
-
-@pytest.fixture
-def configuration(repository_id: RepositoryId, tmp_path: Path, resource_path_root: Path) -> Configuration:
- """
- configuration fixture
-
- Args:
- repository_id(RepositoryId): repository identifier fixture
- tmp_path(Path): temporary path used by the fixture as root
- resource_path_root(Path): resource path root directory
-
- Returns:
- Configuration: configuration test instance
- """
- path = resource_path_root / "core" / "ahriman.ini"
-
- instance = Configuration.from_path(path, repository_id)
- instance.set_option("repository", "root", str(tmp_path))
- instance.set_option("settings", "database", str(tmp_path / "ahriman.db"))
-
- return instance
-
-
-@pytest.fixture
-def database(configuration: Configuration, mocker: MockerFixture) -> SQLite:
- """
- database fixture
-
- Args:
- configuration(Configuration): configuration fixture
- mocker(MockerFixture): mocker object
-
- Returns:
- SQLite: database test instance
- """
- original_method = Migrations.perform_migration
-
- def perform_migration(self: Migrations, cursor: Cursor, migration: Migration) -> None:
- original_method(self, cursor, replace(migration, migrate_data=lambda *args: None))
-
- mocker.patch.object(Migrations, "perform_migration", autospec=True, side_effect=perform_migration)
- return SQLite.load(configuration)
-
-
-@pytest.fixture
-def local_client(database: SQLite, configuration: Configuration) -> Client:
- """
- local status client
-
- Args:
- database(SQLite): database fixture
- configuration(Configuration): configuration fixture
-
- Returns:
- Client: local status client test instance
- """
- _, repository_id = configuration.check_loaded()
- return Client.load(repository_id, configuration, database, report=False)
-
-
-@pytest.fixture
-def package_ahriman(package_description_ahriman: PackageDescription, remote_source: RemoteSource) -> Package:
- """
- package fixture
-
- Args:
- package_description_ahriman(PackageDescription): description fixture
- remote_source(RemoteSource): remote source fixture
-
- Returns:
- Package: package test instance
- """
- packages = {"ahriman": package_description_ahriman}
- return Package(
- base="ahriman",
- version="2.6.0-1",
- remote=remote_source,
- packages=packages,
- packager="packager")
-
-
-@pytest.fixture
-def package_python_schedule(
- package_description_python_schedule: PackageDescription,
- package_description_python2_schedule: PackageDescription) -> Package:
- """
- multi package fixture
-
- Args:
- package_description_python_schedule(PackageDescription): description fixture
- package_description_python2_schedule(PackageDescription): description fixture
-
- Returns:
- Package: multi package test instance
- """
- packages = {
- "python-schedule": package_description_python_schedule,
- "python2-schedule": package_description_python2_schedule
- }
- return Package(
- base="python-schedule",
- version="1.0.0-2",
- remote=RemoteSource(
- source=PackageSource.AUR,
- git_url=AUR.remote_git_url("python-schedule", "aur"),
- web_url=AUR.remote_web_url("python-schedule"),
- path=".",
- branch="master",
- ),
- packages=packages)
-
-
-@pytest.fixture
-def package_tpacpi_bat_git() -> Package:
- """
- git package fixture
-
- Returns:
- Package: git package test instance
- """
- return Package(
- base="tpacpi-bat-git",
- version="3.1.r12.g4959b52-1",
- remote=RemoteSource(
- source=PackageSource.AUR,
- git_url=AUR.remote_git_url("tpacpi-bat-git", "aur"),
- web_url=AUR.remote_web_url("tpacpi-bat-git"),
- path=".",
- branch="master",
- ),
- packages={"tpacpi-bat-git": PackageDescription()})
-
-
-@pytest.fixture
-def package_description_ahriman() -> PackageDescription:
- """
- package description fixture
-
- Returns:
- PackageDescription: package description test instance
- """
- return PackageDescription(
- architecture="x86_64",
- archive_size=4200,
- build_date=42,
- depends=[
- "devtools",
- "git",
- "pyalpm",
- "python-cerberus",
- "python-inflection",
- "python-passlib",
- "python-requests",
- "python-setuptools",
- "python-srcinfo",
- ],
- make_depends=[
- "python-build",
- "python-installer",
- "python-wheel",
- ],
- opt_depends=[
- "breezy",
- "darcs",
- "mercurial",
- "python-aioauth-client",
- "python-aiohttp",
- "python-aiohttp-debugtoolbar",
- "python-aiohttp-jinja2",
- "python-aiohttp-security",
- "python-aiohttp-session",
- "python-boto3",
- "python-cryptography",
- "python-requests-unixsocket",
- "python-jinja",
- "rsync",
- "subversion",
- ],
- check_depends=[
- "python-pytest",
- ],
- description="ArcH linux ReposItory MANager",
- filename="ahriman-2.6.0-1-any.pkg.tar.zst",
- groups=[],
- installed_size=4200000,
- licenses=["GPL3"],
- url="https://github.com/arcan1s/ahriman",
- )
-
-
-@pytest.fixture
-def package_description_python_schedule() -> PackageDescription:
- """
- package description fixture
-
- Returns:
- PackageDescription: package description test instance
- """
- return PackageDescription(
- architecture="x86_64",
- archive_size=4201,
- build_date=421,
- depends=["python"],
- description="Python job scheduling for humans.",
- filename="python-schedule-1.0.0-2-any.pkg.tar.zst",
- groups=[],
- installed_size=4200001,
- licenses=["MIT"],
- url="https://github.com/dbader/schedule",
- )
-
-
-@pytest.fixture
-def package_description_python2_schedule() -> PackageDescription:
- """
- package description fixture
-
- Returns:
- PackageDescription: package description test instance
- """
- return PackageDescription(
- architecture="x86_64",
- archive_size=4202,
- build_date=422,
- depends=["python2"],
- description="Python job scheduling for humans.",
- filename="python2-schedule-1.0.0-2-any.pkg.tar.zst",
- groups=[],
- installed_size=4200002,
- licenses=["MIT"],
- url="https://github.com/dbader/schedule",
- )
-
-
-@pytest.fixture
-def pacman(configuration: Configuration) -> Pacman:
- """
- fixture for pacman wrapper
-
- Args:
- configuration(Configuration): configuration fixture
-
- Returns:
- Pacman: pacman wrapper test instance
- """
- _, repository_id = configuration.check_loaded()
- return Pacman(repository_id, configuration, refresh_database=PacmanSynchronization.Disabled)
-
-
-@pytest.fixture
-def passwd() -> MagicMock:
- """
- get passwd structure for the user
-
- Returns:
- MagicMock: passwd structure test instance
- """
- passwd = MagicMock()
- passwd.pw_dir = "home"
- passwd.pw_name = "ahriman"
- return passwd
-
-
-@pytest.fixture
-def pyalpm_package_ahriman(aur_package_ahriman: AURPackage) -> MagicMock:
- """
- mock object for pyalpm package
-
- Args:
- aur_package_ahriman(AURPackage): package fixture
-
- Returns:
- MagicMock: pyalpm package mock
- """
- mock = MagicMock()
- db = type(mock).db = MagicMock()
-
- type(mock).base = PropertyMock(return_value=aur_package_ahriman.package_base)
- type(mock).builddate = PropertyMock(
- return_value=aur_package_ahriman.last_modified.replace(tzinfo=datetime.timezone.utc).timestamp())
- type(mock).conflicts = PropertyMock(return_value=aur_package_ahriman.conflicts)
- type(db).name = PropertyMock(return_value="aur")
- type(mock).depends = PropertyMock(return_value=aur_package_ahriman.depends)
- type(mock).desc = PropertyMock(return_value=aur_package_ahriman.description)
- type(mock).licenses = PropertyMock(return_value=aur_package_ahriman.license)
- type(mock).makedepends = PropertyMock(return_value=aur_package_ahriman.make_depends)
- type(mock).name = PropertyMock(return_value=aur_package_ahriman.name)
- type(mock).optdepends = PropertyMock(return_value=aur_package_ahriman.opt_depends)
- type(mock).checkdepends = PropertyMock(return_value=aur_package_ahriman.check_depends)
- type(mock).packager = PropertyMock(return_value="packager")
- type(mock).provides = PropertyMock(return_value=aur_package_ahriman.provides)
- type(mock).version = PropertyMock(return_value=aur_package_ahriman.version)
- type(mock).url = PropertyMock(return_value=aur_package_ahriman.url)
- type(mock).groups = PropertyMock(return_value=aur_package_ahriman.groups)
-
- return mock
-
-
-@pytest.fixture
-def remote_source() -> RemoteSource:
- """
- remote source fixture
-
- Returns:
- RemoteSource: remote source test instance
- """
- return RemoteSource(
- source=PackageSource.AUR,
- git_url=AUR.remote_git_url("ahriman", "aur"),
- web_url=AUR.remote_web_url("ahriman"),
- path=".",
- branch="master",
- )
-
-
-@pytest.fixture
-def repository(configuration: Configuration, database: SQLite, mocker: MockerFixture) -> Repository:
- """
- fixture for repository
-
- Args:
- configuration(Configuration): configuration fixture
- database(SQLite): database fixture
- mocker(MockerFixture): mocker object
-
- Returns:
- Repository: repository test instance
- """
- mocker.patch("ahriman.core.repository.Repository._set_context")
- _, repository_id = configuration.check_loaded()
- return Repository.load(repository_id, configuration, database, report=False)
-
-
-@pytest.fixture
-def repository_id() -> RepositoryId:
- """
- fixture for repository identifier
-
- Returns:
- RepositoryId: repository identifier test instance
- """
- return RepositoryId("x86_64", "aur")
-
-
-@pytest.fixture
-def repository_paths(configuration: Configuration) -> RepositoryPaths:
- """
- repository paths fixture
-
- Args:
- configuration(Configuration): configuration fixture
-
- Returns:
- RepositoryPaths: repository paths test instance
- """
- return configuration.repository_paths
-
-
-@pytest.fixture
-def result(package_ahriman: Package) -> Result:
- """
- result fixture
-
- Args:
- package_ahriman(Package): package fixture
-
- Returns:
- Result: result test instance
- """
- result = Result()
- result.add_updated(package_ahriman)
- return result
-
-
-@pytest.fixture
-def scan_paths(configuration: Configuration) -> ScanPaths:
- """
- scan paths fixture
-
- Args:
- configuration(Configuration): configuration test instance
-
- Returns:
- ScanPaths: scan paths test instance
- """
- return ScanPaths(configuration.getlist("build", "scan_paths", fallback=[]))
-
-
-@pytest.fixture
-def spawner(configuration: Configuration) -> Spawn:
- """
- spawner fixture
-
- Args:
- configuration(Configuration): configuration fixture
-
- Returns:
- Spawn: spawner fixture
- """
- return Spawn(MagicMock(), [
- "--configuration", str(configuration.path),
- ])
-
-
-@pytest.fixture
-def user() -> User:
- """
- fixture for user descriptor
-
- Returns:
- User: user descriptor instance
- """
- return User(username="user", password="pa55w0rd", access=UserAccess.Reporter, packager_id="packager", key="key")
-
-
-@pytest.fixture
-def watcher(local_client: Client) -> Watcher:
- """
- package status watcher fixture
-
- Args:
- local_client(Client): local status client fixture
-
- Returns:
- Watcher: package status watcher test instance
- """
- package_info = PackageInfo()
- event_bus = EventBus(0)
- return Watcher(local_client, package_info, event_bus)
diff --git a/tests/ahriman/test_tests.py b/tests/ahriman/test_tests.py
deleted file mode 100644
index b48d28fc..00000000
--- a/tests/ahriman/test_tests.py
+++ /dev/null
@@ -1,29 +0,0 @@
-from pathlib import Path
-
-from ahriman.core.utils import walk
-
-
-def test_test_coverage() -> None:
- """
- must have test files for each source file
- """
- root = Path()
- for source_file in filter(lambda fn: fn.suffix == ".py" and fn.name != "__init__.py", walk(root / "src")):
- # some workaround for well known files
- if source_file.parts[2:4] == ("application", "handlers") and source_file.name != "handler.py":
- filename = f"test_handler_{source_file.name}"
- elif source_file.parts[2:4] == ("web", "views"):
- if (api := source_file.parts[4]) == "api":
- filename = f"test_view_{api}_{source_file.name}"
- elif (version := source_file.parts[4]) in ("v1", "v2"):
- api = source_file.parts[5]
- filename = f"test_view_{version}_{api}_{source_file.name}"
- elif source_file.name.endswith("_guard.py"):
- filename = f"test_{source_file.name}"
- else:
- filename = f"test_view_{source_file.name}"
- else:
- filename = f"test_{source_file.name}"
-
- test_file = Path("tests", *source_file.parts[1:-1], filename)
- assert test_file.is_file(), test_file
diff --git a/tests/testresources/core/logging.ini b/tests/testresources/core/logging.ini
index e5d0f33e..8d9a14e6 120000
--- a/tests/testresources/core/logging.ini
+++ b/tests/testresources/core/logging.ini
@@ -1 +1 @@
-../../../package/share/ahriman/settings/ahriman.ini.d/logging.ini
\ No newline at end of file
+../../../ahriman-core/package/share/ahriman/settings/ahriman.ini.d/logging.ini
\ No newline at end of file
diff --git a/tests/testresources/web/templates b/tests/testresources/web/templates
deleted file mode 120000
index ef7687d2..00000000
--- a/tests/testresources/web/templates
+++ /dev/null
@@ -1 +0,0 @@
-../../../package/share/ahriman/templates
\ No newline at end of file
diff --git a/tests/testresources/web/templates/api.jinja2 b/tests/testresources/web/templates/api.jinja2
new file mode 120000
index 00000000..f915f6b0
--- /dev/null
+++ b/tests/testresources/web/templates/api.jinja2
@@ -0,0 +1 @@
+../../../../ahriman-web/package/share/ahriman/templates/api.jinja2
\ No newline at end of file
diff --git a/tests/testresources/web/templates/build-status b/tests/testresources/web/templates/build-status
new file mode 120000
index 00000000..ecb61719
--- /dev/null
+++ b/tests/testresources/web/templates/build-status
@@ -0,0 +1 @@
+../../../../ahriman-web/package/share/ahriman/templates/build-status
\ No newline at end of file
diff --git a/tests/testresources/web/templates/build-status-classic.jinja2 b/tests/testresources/web/templates/build-status-classic.jinja2
new file mode 120000
index 00000000..c66acf87
--- /dev/null
+++ b/tests/testresources/web/templates/build-status-classic.jinja2
@@ -0,0 +1 @@
+../../../../ahriman-web/package/share/ahriman/templates/build-status-classic.jinja2
\ No newline at end of file
diff --git a/tests/testresources/web/templates/build-status.jinja2 b/tests/testresources/web/templates/build-status.jinja2
new file mode 120000
index 00000000..0a29b124
--- /dev/null
+++ b/tests/testresources/web/templates/build-status.jinja2
@@ -0,0 +1 @@
+../../../../ahriman-web/package/share/ahriman/templates/build-status.jinja2
\ No newline at end of file
diff --git a/tests/testresources/web/templates/email-index.jinja2 b/tests/testresources/web/templates/email-index.jinja2
new file mode 120000
index 00000000..b404cb32
--- /dev/null
+++ b/tests/testresources/web/templates/email-index.jinja2
@@ -0,0 +1 @@
+../../../../ahriman-core/package/share/ahriman/templates/email-index.jinja2
\ No newline at end of file
diff --git a/tests/testresources/web/templates/error.jinja2 b/tests/testresources/web/templates/error.jinja2
new file mode 120000
index 00000000..900a7429
--- /dev/null
+++ b/tests/testresources/web/templates/error.jinja2
@@ -0,0 +1 @@
+../../../../ahriman-web/package/share/ahriman/templates/error.jinja2
\ No newline at end of file
diff --git a/tests/testresources/web/templates/repo-index.jinja2 b/tests/testresources/web/templates/repo-index.jinja2
new file mode 120000
index 00000000..4af4cd06
--- /dev/null
+++ b/tests/testresources/web/templates/repo-index.jinja2
@@ -0,0 +1 @@
+../../../../ahriman-core/package/share/ahriman/templates/repo-index.jinja2
\ No newline at end of file
diff --git a/tests/testresources/web/templates/rss.jinja2 b/tests/testresources/web/templates/rss.jinja2
new file mode 120000
index 00000000..b0f4db41
--- /dev/null
+++ b/tests/testresources/web/templates/rss.jinja2
@@ -0,0 +1 @@
+../../../../ahriman-core/package/share/ahriman/templates/rss.jinja2
\ No newline at end of file
diff --git a/tests/testresources/web/templates/shell b/tests/testresources/web/templates/shell
new file mode 120000
index 00000000..85a9c395
--- /dev/null
+++ b/tests/testresources/web/templates/shell
@@ -0,0 +1 @@
+../../../../ahriman-core/package/share/ahriman/templates/shell
\ No newline at end of file
diff --git a/tests/testresources/web/templates/static b/tests/testresources/web/templates/static
new file mode 120000
index 00000000..c83a24a4
--- /dev/null
+++ b/tests/testresources/web/templates/static
@@ -0,0 +1 @@
+../../../../ahriman-web/package/share/ahriman/templates/static
\ No newline at end of file
diff --git a/tests/testresources/web/templates/telegram-index.jinja2 b/tests/testresources/web/templates/telegram-index.jinja2
new file mode 120000
index 00000000..923ea672
--- /dev/null
+++ b/tests/testresources/web/templates/telegram-index.jinja2
@@ -0,0 +1 @@
+../../../../ahriman-core/package/share/ahriman/templates/telegram-index.jinja2
\ No newline at end of file
diff --git a/tests/testresources/web/templates/utils b/tests/testresources/web/templates/utils
new file mode 120000
index 00000000..ebf14071
--- /dev/null
+++ b/tests/testresources/web/templates/utils
@@ -0,0 +1 @@
+../../../../ahriman-core/package/share/ahriman/templates/utils
\ No newline at end of file
diff --git a/tox.toml b/tox.toml
index 6dc19500..fb35ab3e 100644
--- a/tox.toml
+++ b/tox.toml
@@ -60,32 +60,22 @@ shtab = [
[project]
extras = [
- "journald",
- "pacman",
- "reports",
- "s3",
- "shell",
- "stats",
- "unixsocket",
- "validator",
- "web",
- "web-auth",
- "web-docs",
- "web-oauth2",
- "web-metrics",
+ "./ahriman-core[journald,pacman,reports,s3,shell,stats,unixsocket,validator]",
+ "./ahriman-triggers",
+ "./ahriman-web[auth,docs,metrics,oauth2]",
]
name = "ahriman"
[env.archive]
description = "Create source files tarball"
-deps = [
- "build",
-]
+skip_install = true
+system_site_packages = true
commands = [
[
"{envpython}",
"-m", "build",
"--sdist",
+ "--no-isolation",
],
]
@@ -157,12 +147,10 @@ depends = [
"version",
]
deps = [
+ { replace = "ref", of = ["project", "extras"], extend = true },
"uv",
]
dynamic_version = "{[project]name}.__version__"
-extras = [
- { replace = "ref", of = ["project", "extras"], extend = true },
-]
pip_pre = true
set_env.PYTHONPATH = "src"
set_env.SPHINX_APIDOC_OPTIONS = "members,no-undoc-members,show-inheritance"
@@ -171,20 +159,20 @@ commands = [
"shtab",
{ replace = "ref", of = ["flags", "shtab"], extend = true },
"--shell", "bash",
- "--output", "package/share/bash-completion/completions/_ahriman",
+ "--output", "ahriman-core/package/share/bash-completion/completions/_ahriman",
],
[
"shtab",
{ replace = "ref", of = ["flags", "shtab"], extend = true },
"--shell", "zsh",
- "--output", "package/share/zsh/site-functions/_ahriman",
+ "--output", "ahriman-core/package/share/zsh/site-functions/_ahriman",
],
[
"argparse-manpage",
{ replace = "ref", of = ["flags", "manpage"], extend = true },
"--module", "ahriman.application.ahriman",
"--function", "_parser",
- "--output", "package/share/man/man1/ahriman.1",
+ "--output", "ahriman-core/package/share/man/man1/ahriman.1",
],
[
"pydeps",
@@ -236,7 +224,7 @@ description = "Generate html documentation"
dependency_groups = [
"docs",
]
-extras = [
+deps = [
{ replace = "ref", of = ["project", "extras"], extend = true },
]
pip_pre = true
@@ -271,10 +259,10 @@ commands = [
"docs/_static/architecture.dot",
"frontend/package.json",
"package/archlinux/PKGBUILD",
- "package/share/man/man1/ahriman.1",
- "package/share/bash-completion/completions/_ahriman",
- "package/share/zsh/site-functions/_ahriman",
- "src/ahriman/__init__.py",
+ "ahriman-core/package/share/man/man1/ahriman.1",
+ "ahriman-core/package/share/bash-completion/completions/_ahriman",
+ "ahriman-core/package/share/zsh/site-functions/_ahriman",
+ "ahriman-core/src/ahriman/__init__.py",
],
[
"git",
@@ -302,7 +290,7 @@ description = "Run tests"
dependency_groups = [
"tests",
]
-extras = [
+deps = [
{ replace = "ref", of = ["project", "extras"], extend = true },
]
pip_pre = true