From 7db38ff9e480e705f3e2b0fd89ae3bf8dbc899e7 Mon Sep 17 00:00:00 2001 From: Evgenii Alekseev Date: Mon, 13 Jul 2026 13:00:13 +0300 Subject: [PATCH] reorder tests --- .gitignore | 7 +- .../systemd/system/ahriman-daemon@.service | 0 .../lib/systemd/system/ahriman@.service | 0 .../lib/systemd/system/ahriman@.timer | 0 .../share/ahriman/settings/ahriman.ini | 0 .../ahriman.ini.d/00-housekeeping.ini | 0 .../settings/ahriman.ini.d/logging.ini | 0 .../ahriman/templates/email-index.jinja2 | 0 .../share/ahriman/templates/repo-index.jinja2 | 0 .../share/ahriman/templates/rss.jinja2 | 0 .../package}/share/ahriman/templates/shell | 0 .../ahriman/templates/telegram-index.jinja2 | 0 .../templates/utils/bootstrap-scripts.jinja2 | 0 .../ahriman/templates/utils/style.jinja2 | 0 .../bash-completion/completions/_ahriman | 0 .../package}/share/man/man1/ahriman.1 | 0 .../share/zsh/site-functions/_ahriman | 0 ahriman-core/pyproject.toml | 68 ++ {src => ahriman-core/src}/ahriman/__init__.py | 0 .../src}/ahriman/application/__init__.py | 0 .../src}/ahriman/application/ahriman.py | 0 .../application/application/__init__.py | 0 .../application/application/application.py | 0 .../application/application_packages.py | 0 .../application/application_properties.py | 0 .../application/application_repository.py | 0 .../application/updates_iterator.py | 0 .../application/workers/__init__.py | 0 .../application/workers/local_updater.py | 0 .../application/workers/remote_updater.py | 0 .../application/workers/updater.py | 0 .../ahriman/application/handlers/__init__.py | 0 .../src}/ahriman/application/handlers/add.py | 0 .../ahriman/application/handlers/archives.py | 0 .../ahriman/application/handlers/backup.py | 0 .../ahriman/application/handlers/change.py | 0 .../ahriman/application/handlers/clean.py | 0 .../src}/ahriman/application/handlers/copy.py | 0 .../ahriman/application/handlers/daemon.py | 0 .../src}/ahriman/application/handlers/dump.py | 0 .../ahriman/application/handlers/handler.py | 0 .../src}/ahriman/application/handlers/help.py | 0 .../src}/ahriman/application/handlers/hold.py | 0 .../application/handlers/key_import.py | 0 .../ahriman/application/handlers/patch.py | 0 .../ahriman/application/handlers/pkgbuild.py | 0 .../ahriman/application/handlers/rebuild.py | 0 .../ahriman/application/handlers/reload.py | 0 .../ahriman/application/handlers/remove.py | 0 .../application/handlers/remove_unknown.py | 0 .../application/handlers/repositories.py | 0 .../ahriman/application/handlers/restore.py | 0 .../ahriman/application/handlers/rollback.py | 0 .../src}/ahriman/application/handlers/run.py | 0 .../ahriman/application/handlers/search.py | 0 .../application/handlers/service_updates.py | 0 .../ahriman/application/handlers/setup.py | 0 .../ahriman/application/handlers/shell.py | 0 .../src}/ahriman/application/handlers/sign.py | 0 .../application/handlers/statistics.py | 0 .../ahriman/application/handlers/status.py | 0 .../application/handlers/status_update.py | 0 .../ahriman/application/handlers/structure.py | 0 .../application/handlers/tree_migrate.py | 0 .../ahriman/application/handlers/triggers.py | 0 .../application/handlers/unsafe_commands.py | 0 .../ahriman/application/handlers/update.py | 0 .../ahriman/application/handlers/users.py | 0 .../ahriman/application/handlers/validate.py | 0 .../ahriman/application/handlers/versions.py | 0 .../ahriman/application/help_formatter.py | 0 .../ahriman/application/interactive_shell.py | 0 .../src}/ahriman/application/lock.py | 0 .../src}/ahriman/core/__init__.py | 0 .../src}/ahriman/core/alpm/__init__.py | 0 .../src}/ahriman/core/alpm/pacman.py | 0 .../src}/ahriman/core/alpm/pacman_database.py | 0 .../src}/ahriman/core/alpm/pacman_handle.py | 0 .../src}/ahriman/core/alpm/pkgbuild_parser.py | 0 .../src}/ahriman/core/alpm/remote/__init__.py | 0 .../src}/ahriman/core/alpm/remote/aur.py | 0 .../src}/ahriman/core/alpm/remote/official.py | 0 .../core/alpm/remote/official_syncdb.py | 0 .../src}/ahriman/core/alpm/remote/remote.py | 0 .../src}/ahriman/core/alpm/repo.py | 0 .../src}/ahriman/core/build_tools/__init__.py | 0 .../core/build_tools/package_archive.py | 0 .../core/build_tools/package_version.py | 0 .../src}/ahriman/core/build_tools/sources.py | 0 .../src}/ahriman/core/build_tools/task.py | 0 .../ahriman/core/configuration/__init__.py | 0 .../core/configuration/configuration.py | 0 .../configuration/configuration_multi_dict.py | 0 .../src}/ahriman/core/configuration/schema.py | 0 .../core/configuration/shell_interpolator.py | 0 .../core/configuration/shell_template.py | 0 .../ahriman/core/configuration/validator.py | 0 .../src}/ahriman/core/database/__init__.py | 0 .../core/database/migrations/__init__.py | 0 .../core/database/migrations/m000_initial.py | 0 .../migrations/m001_package_source.py | 0 .../database/migrations/m002_user_access.py | 0 .../migrations/m003_patch_variables.py | 0 .../core/database/migrations/m004_logs.py | 0 .../migrations/m005_make_opt_depends.py | 0 .../m006_packages_architecture_required.py | 0 .../database/migrations/m007_check_depends.py | 0 .../database/migrations/m008_packagers.py | 0 .../database/migrations/m009_local_source.py | 0 .../m010_version_based_logs_removal.py | 0 .../migrations/m011_repository_name.py | 0 .../migrations/m012_last_commit_sha.py | 0 .../database/migrations/m013_dependencies.py | 0 .../core/database/migrations/m014_auditlog.py | 0 .../migrations/m015_logs_process_id.py | 0 .../core/database/migrations/m016_archive.py | 0 .../core/database/migrations/m017_pkgbuild.py | 0 .../database/migrations/m018_package_hold.py | 0 .../core/database/operations/__init__.py | 0 .../database/operations/auth_operations.py | 0 .../database/operations/build_operations.py | 0 .../database/operations/changes_operations.py | 0 .../operations/dependencies_operations.py | 0 .../database/operations/event_operations.py | 0 .../database/operations/logs_operations.py | 0 .../core/database/operations/operations.py | 0 .../database/operations/package_operations.py | 0 .../database/operations/patch_operations.py | 0 .../src}/ahriman/core/database/sqlite.py | 0 .../src}/ahriman/core/exceptions.py | 0 .../src}/ahriman/core/formatters/__init__.py | 0 .../ahriman/core/formatters/aur_printer.py | 0 .../ahriman/core/formatters/build_printer.py | 0 .../core/formatters/changes_printer.py | 0 .../formatters/configuration_paths_printer.py | 0 .../core/formatters/configuration_printer.py | 0 .../core/formatters/event_stats_printer.py | 0 .../core/formatters/package_printer.py | 0 .../core/formatters/package_stats_printer.py | 0 .../ahriman/core/formatters/patch_printer.py | 0 .../core/formatters/pkgbuild_printer.py | 0 .../src}/ahriman/core/formatters/printer.py | 0 .../core/formatters/repository_printer.py | 0 .../formatters/repository_stats_printer.py | 0 .../ahriman/core/formatters/status_printer.py | 0 .../ahriman/core/formatters/string_printer.py | 0 .../ahriman/core/formatters/tree_printer.py | 0 .../ahriman/core/formatters/update_printer.py | 0 .../ahriman/core/formatters/user_printer.py | 0 .../core/formatters/validation_printer.py | 0 .../core/formatters/version_printer.py | 0 .../src}/ahriman/core/gitremote/__init__.py | 0 .../ahriman/core/gitremote/remote_pull.py | 0 .../core/gitremote/remote_pull_trigger.py | 0 .../ahriman/core/gitremote/remote_push.py | 0 .../core/gitremote/remote_push_trigger.py | 0 .../ahriman/core/housekeeping/__init__.py | 0 .../housekeeping/archive_rotation_trigger.py | 0 .../housekeeping/logs_rotation_trigger.py | 0 .../src}/ahriman/core/http/__init__.py | 0 .../ahriman/core/http/sync_ahriman_client.py | 0 .../ahriman/core/http/sync_http_client.py | 0 .../src}/ahriman/core/log/__init__.py | 0 .../src}/ahriman/core/log/http_log_handler.py | 0 .../src}/ahriman/core/log/journal_handler.py | 0 .../src}/ahriman/core/log/lazy_logging.py | 0 .../src}/ahriman/core/log/log_context.py | 0 .../src}/ahriman/core/log/log_loader.py | 0 .../src}/ahriman/core/module_loader.py | 4 +- .../src}/ahriman/core/report/__init__.py | 0 .../src}/ahriman/core/report/console.py | 0 .../src}/ahriman/core/report/email.py | 0 .../src}/ahriman/core/report/html.py | 0 .../ahriman/core/report/jinja_template.py | 0 .../src}/ahriman/core/report/remote_call.py | 0 .../src}/ahriman/core/report/report.py | 0 .../ahriman/core/report/report_trigger.py | 0 .../src}/ahriman/core/report/rss.py | 0 .../src}/ahriman/core/report/telegram.py | 0 .../src}/ahriman/core/repository/__init__.py | 0 .../src}/ahriman/core/repository/cleaner.py | 0 .../ahriman/core/repository/event_logger.py | 0 .../src}/ahriman/core/repository/executor.py | 0 .../src}/ahriman/core/repository/explorer.py | 0 .../ahriman/core/repository/package_info.py | 0 .../ahriman/core/repository/repository.py | 0 .../core/repository/repository_properties.py | 0 .../ahriman/core/repository/update_handler.py | 0 .../src}/ahriman/core/sign/__init__.py | 0 .../src}/ahriman/core/sign/gpg.py | 0 .../src}/ahriman/core/spawn.py | 0 .../src}/ahriman/core/status/__init__.py | 0 .../src}/ahriman/core/status/client.py | 0 .../src}/ahriman/core/status/event_bus.py | 0 .../src}/ahriman/core/status/local_client.py | 0 .../src}/ahriman/core/status/watcher.py | 0 .../src}/ahriman/core/status/web_client.py | 0 .../src}/ahriman/core/tree.py | 0 .../src}/ahriman/core/triggers/__init__.py | 0 .../src}/ahriman/core/triggers/trigger.py | 0 .../ahriman/core/triggers/trigger_loader.py | 0 .../src}/ahriman/core/types.py | 0 .../src}/ahriman/core/upload/__init__.py | 0 .../src}/ahriman/core/upload/github.py | 0 .../src}/ahriman/core/upload/http_upload.py | 0 .../ahriman/core/upload/remote_service.py | 0 .../src}/ahriman/core/upload/rsync.py | 0 .../src}/ahriman/core/upload/s3.py | 0 .../src}/ahriman/core/upload/upload.py | 0 .../ahriman/core/upload/upload_trigger.py | 0 .../src}/ahriman/core/util.py | 0 .../src}/ahriman/core/utils.py | 0 .../src/ahriman/models}/__init__.py | 0 .../src}/ahriman/models/action.py | 0 .../src}/ahriman/models/aur_package.py | 0 .../src}/ahriman/models/auth_settings.py | 0 .../src}/ahriman/models/build_status.py | 0 .../src}/ahriman/models/changes.py | 0 .../src}/ahriman/models/context_key.py | 0 .../src}/ahriman/models/counters.py | 0 .../src}/ahriman/models/dependencies.py | 0 .../src}/ahriman/models/event.py | 0 .../src}/ahriman/models/filesystem_package.py | 0 .../src}/ahriman/models/internal_status.py | 0 .../src}/ahriman/models/log_handler.py | 0 .../src}/ahriman/models/log_record.py | 0 .../src}/ahriman/models/log_record_id.py | 0 .../src}/ahriman/models/metrics_timer.py | 0 .../src}/ahriman/models/migration.py | 0 .../src}/ahriman/models/migration_result.py | 0 .../src}/ahriman/models/package.py | 0 .../ahriman/models/package_description.py | 0 .../src}/ahriman/models/package_source.py | 0 .../src}/ahriman/models/packagers.py | 0 .../ahriman/models/pacman_synchronization.py | 0 .../src}/ahriman/models/pkgbuild.py | 0 .../src}/ahriman/models/pkgbuild_patch.py | 0 .../src}/ahriman/models/process_status.py | 0 .../src}/ahriman/models/property.py | 0 .../src}/ahriman/models/remote_source.py | 0 .../src}/ahriman/models/report_settings.py | 0 .../src}/ahriman/models/repository_id.py | 0 .../src}/ahriman/models/repository_paths.py | 0 .../src}/ahriman/models/repository_stats.py | 0 .../src}/ahriman/models/result.py | 0 .../src}/ahriman/models/scan_paths.py | 0 .../src}/ahriman/models/series_statistics.py | 0 .../src}/ahriman/models/sign_settings.py | 0 .../src}/ahriman/models/smtp_ssl_settings.py | 0 .../src}/ahriman/models/upload_settings.py | 0 .../src}/ahriman/models/user.py | 0 .../src}/ahriman/models/user_access.py | 0 .../src}/ahriman/models/waiter.py | 0 .../src}/ahriman/models/worker.py | 0 {src => ahriman-core/src}/ahriman/py.typed | 0 .../application/application/conftest.py | 0 .../application/test_application.py | 0 .../application/test_application_packages.py | 0 .../test_application_properties.py | 0 .../test_application_repository.py | 0 .../application/test_updates_iterator.py | 0 .../application/workers/conftest.py | 0 .../application/workers/test_local_updater.py | 0 .../workers/test_remote_updater.py | 0 .../application/workers/test_updater.py | 0 .../tests}/ahriman/application/conftest.py | 0 .../application/handlers/test_handler.py | 0 .../application/handlers/test_handler_add.py | 0 .../handlers/test_handler_archives.py | 0 .../handlers/test_handler_backup.py | 0 .../handlers/test_handler_change.py | 0 .../handlers/test_handler_clean.py | 0 .../application/handlers/test_handler_copy.py | 0 .../handlers/test_handler_daemon.py | 0 .../application/handlers/test_handler_dump.py | 0 .../application/handlers/test_handler_help.py | 0 .../application/handlers/test_handler_hold.py | 0 .../handlers/test_handler_key_import.py | 0 .../handlers/test_handler_patch.py | 0 .../handlers/test_handler_pkgbuild.py | 0 .../handlers/test_handler_rebuild.py | 0 .../handlers/test_handler_reload.py | 0 .../handlers/test_handler_remove.py | 0 .../handlers/test_handler_remove_unknown.py | 0 .../handlers/test_handler_repositories.py | 0 .../handlers/test_handler_restore.py | 0 .../handlers/test_handler_rollback.py | 0 .../application/handlers/test_handler_run.py | 0 .../handlers/test_handler_search.py | 0 .../handlers/test_handler_service_updates.py | 0 .../handlers/test_handler_setup.py | 0 .../handlers/test_handler_shell.py | 0 .../application/handlers/test_handler_sign.py | 0 .../handlers/test_handler_statistics.py | 0 .../handlers/test_handler_status.py | 0 .../handlers/test_handler_status_update.py | 0 .../handlers/test_handler_structure.py | 0 .../handlers/test_handler_tree_migrate.py | 0 .../handlers/test_handler_triggers.py | 0 .../handlers/test_handler_unsafe_commands.py | 0 .../handlers/test_handler_update.py | 0 .../handlers/test_handler_users.py | 0 .../handlers/test_handler_validate.py | 0 .../handlers/test_handler_versions.py | 0 .../ahriman/application/test_ahriman.py | 0 .../application/test_help_formatter.py | 0 .../application/test_interactive_shell.py | 0 .../tests}/ahriman/application/test_lock.py | 0 .../tests}/ahriman/core/alpm/conftest.py | 0 .../ahriman/core/alpm/remote/conftest.py | 0 .../ahriman/core/alpm/remote/test_aur.py | 0 .../ahriman/core/alpm/remote/test_official.py | 0 .../core/alpm/remote/test_official_syncdb.py | 0 .../ahriman/core/alpm/remote/test_remote.py | 0 .../tests}/ahriman/core/alpm/test_pacman.py | 0 .../ahriman/core/alpm/test_pacman_database.py | 0 .../ahriman/core/alpm/test_pacman_handle.py | 0 .../ahriman/core/alpm/test_pkgbuild_parser.py | 0 .../tests}/ahriman/core/alpm/test_repo.py | 0 .../ahriman/core/build_tools/conftest.py | 0 .../core/build_tools/test_package_archive.py | 0 .../core/build_tools/test_package_version.py | 0 .../ahriman/core/build_tools/test_sources.py | 0 .../ahriman/core/build_tools/test_task.py | 0 .../ahriman/core/configuration/conftest.py | 0 .../core/configuration/test_configuration.py | 0 .../test_configuration_multi_dict.py | 0 .../ahriman/core/configuration/test_schema.py | 0 .../configuration/test_shell_interpolator.py | 0 .../core/configuration/test_shell_template.py | 0 .../core/configuration/test_validator.py | 0 .../tests}/ahriman/core/conftest.py | 0 .../tests}/ahriman/core/database/conftest.py | 0 .../core/database/migrations/conftest.py | 0 .../database/migrations/test_m000_initial.py | 0 .../migrations/test_m001_package_source.py | 0 .../migrations/test_m002_user_access.py | 0 .../migrations/test_m003_patch_variables.py | 0 .../database/migrations/test_m004_logs.py | 0 .../migrations/test_m005_make_opt_depends.py | 0 ...est_m006_packages_architecture_required.py | 0 .../migrations/test_m007_check_depends.py | 0 .../migrations/test_m008_packagers.py | 0 .../migrations/test_m009_local_source.py | 0 .../test_m010_version_based_logs_removal.py | 0 .../migrations/test_m011_repository_name.py | 0 .../migrations/test_m012_last_commit_sha.py | 0 .../migrations/test_m013_dependencies.py | 0 .../database/migrations/test_m014_auditlog.py | 0 .../migrations/test_m015_logs_process_id.py | 0 .../database/migrations/test_m016_archive.py | 0 .../database/migrations/test_m017_pkgbuild.py | 0 .../migrations/test_m018_package_hold.py | 0 .../migrations/test_migrations_init.py | 0 .../operations/test_auth_operations.py | 0 .../operations/test_build_operations.py | 0 .../operations/test_changes_operations.py | 0 .../test_dependencies_operations.py | 0 .../operations/test_event_operations.py | 0 .../operations/test_logs_operations.py | 0 .../database/operations/test_operations.py | 0 .../operations/test_package_operations.py | 0 .../operations/test_patch_operations.py | 0 .../ahriman/core/database/test_sqlite.py | 0 .../ahriman/core/formatters/conftest.py | 0 .../core/formatters/test_aur_printer.py | 0 .../core/formatters/test_build_printer.py | 0 .../core/formatters/test_changes_printer.py | 0 .../test_configuration_paths_printer.py | 0 .../formatters/test_configuration_printer.py | 0 .../formatters/test_event_stats_printer.py | 0 .../core/formatters/test_package_printer.py | 0 .../formatters/test_package_stats_printer.py | 0 .../core/formatters/test_patch_printer.py | 0 .../core/formatters/test_pkgbuild_printer.py | 0 .../ahriman/core/formatters/test_printer.py | 0 .../formatters/test_repository_printer.py | 0 .../test_repository_stats_printer.py | 0 .../core/formatters/test_status_printer.py | 0 .../core/formatters/test_string_printer.py | 0 .../core/formatters/test_tree_printer.py | 0 .../core/formatters/test_update_printer.py | 0 .../core/formatters/test_user_printer.py | 0 .../formatters/test_validation_printer.py | 0 .../core/formatters/test_version_printer.py | 0 .../core/gitremote/test_remote_pull.py | 0 .../gitremote/test_remote_pull_trigger.py | 0 .../core/gitremote/test_remote_push.py | 0 .../gitremote/test_remote_push_trigger.py | 0 .../ahriman/core/housekeeping/conftest.py | 0 .../test_archive_rotation_trigger.py | 0 .../test_logs_rotation_trigger.py | 0 .../tests}/ahriman/core/http/conftest.py | 0 .../core/http/test_sync_ahriman_client.py | 0 .../core/http/test_sync_http_client.py | 0 .../ahriman/core/log/test_http_log_handler.py | 0 .../ahriman/core/log/test_journal_handler.py | 0 .../ahriman/core/log/test_lazy_logging.py | 0 .../ahriman/core/log/test_log_context.py | 0 .../ahriman/core/log/test_log_loader.py | 0 .../tests}/ahriman/core/report/conftest.py | 0 .../ahriman/core/report/test_console.py | 0 .../tests}/ahriman/core/report/test_email.py | 0 .../tests}/ahriman/core/report/test_html.py | 0 .../core/report/test_jinja_template.py | 0 .../ahriman/core/report/test_remote_call.py | 0 .../tests}/ahriman/core/report/test_report.py | 0 .../core/report/test_report_trigger.py | 0 .../tests}/ahriman/core/report/test_rss.py | 0 .../ahriman/core/report/test_telegram.py | 0 .../ahriman/core/repository/conftest.py | 0 .../ahriman/core/repository/test_cleaner.py | 0 .../core/repository/test_event_logger.py | 0 .../ahriman/core/repository/test_executor.py | 0 .../ahriman/core/repository/test_explorer.py | 0 .../core/repository/test_package_info.py | 0 .../core/repository/test_repository.py | 0 .../repository/test_repository_properties.py | 0 .../core/repository/test_update_handler.py | 0 .../tests}/ahriman/core/sign/conftest.py | 0 .../tests}/ahriman/core/sign/test_gpg.py | 0 .../tests}/ahriman/core/status/conftest.py | 0 .../tests}/ahriman/core/status/test_client.py | 0 .../ahriman/core/status/test_event_bus.py | 0 .../ahriman/core/status/test_local_client.py | 0 .../ahriman/core/status/test_watcher.py | 0 .../ahriman/core/status/test_web_client.py | 0 .../tests}/ahriman/core/test_context_init.py | 0 .../tests}/ahriman/core/test_exceptions.py | 0 .../tests}/ahriman/core/test_module_loader.py | 2 +- .../tests}/ahriman/core/test_spawn.py | 0 .../tests}/ahriman/core/test_tree.py | 0 .../tests}/ahriman/core/test_types.py | 0 .../tests}/ahriman/core/test_util.py | 0 .../tests}/ahriman/core/test_utils.py | 0 .../tests}/ahriman/core/triggers/conftest.py | 0 .../ahriman/core/triggers/test_trigger.py | 0 .../core/triggers/test_trigger_loader.py | 6 +- .../tests}/ahriman/core/upload/conftest.py | 0 .../tests}/ahriman/core/upload/test_github.py | 0 .../ahriman/core/upload/test_http_upload.py | 0 .../core/upload/test_remote_service.py | 0 .../tests}/ahriman/core/upload/test_rsync.py | 0 .../tests}/ahriman/core/upload/test_s3.py | 0 .../tests}/ahriman/core/upload/test_upload.py | 0 .../core/upload/test_upload_trigger.py | 0 .../tests}/ahriman/models/conftest.py | 0 .../tests}/ahriman/models/test_action.py | 0 .../tests}/ahriman/models/test_aur_package.py | 0 .../ahriman/models/test_auth_settings.py | 0 .../ahriman/models/test_build_status.py | 0 .../tests}/ahriman/models/test_changes.py | 0 .../tests}/ahriman/models/test_context_key.py | 0 .../tests}/ahriman/models/test_counters.py | 0 .../ahriman/models/test_dependencies.py | 0 .../tests}/ahriman/models/test_event.py | 0 .../ahriman/models/test_filesystem_package.py | 0 .../ahriman/models/test_internal_status.py | 0 .../tests}/ahriman/models/test_log_handler.py | 0 .../tests}/ahriman/models/test_log_record.py | 0 .../ahriman/models/test_log_record_id.py | 0 .../ahriman/models/test_metrics_timer.py | 0 .../tests}/ahriman/models/test_migration.py | 0 .../ahriman/models/test_migration_result.py | 0 .../tests}/ahriman/models/test_package.py | 0 .../models/test_package_description.py | 0 .../ahriman/models/test_package_source.py | 0 .../tests}/ahriman/models/test_packagers.py | 0 .../models/test_pacman_synchronization.py | 0 .../tests}/ahriman/models/test_pkgbuild.py | 0 .../ahriman/models/test_pkgbuild_patch.py | 0 .../ahriman/models/test_process_status.py | 0 .../tests}/ahriman/models/test_property.py | 0 .../ahriman/models/test_remote_source.py | 0 .../ahriman/models/test_report_settings.py | 0 .../ahriman/models/test_repository_id.py | 0 .../ahriman/models/test_repository_paths.py | 0 .../ahriman/models/test_repository_stats.py | 0 .../tests}/ahriman/models/test_result.py | 0 .../tests}/ahriman/models/test_scan_paths.py | 0 .../ahriman/models/test_series_statistics.py | 0 .../ahriman/models/test_sign_settings.py | 0 .../ahriman/models/test_smtp_ssl_settings.py | 0 .../ahriman/models/test_upload_settings.py | 0 .../tests}/ahriman/models/test_user.py | 0 .../tests}/ahriman/models/test_user_access.py | 0 .../tests}/ahriman/models/test_waiter.py | 0 .../tests}/ahriman/models/test_worker.py | 0 ahriman-core/tests/conftest.py | 13 + .../settings/ahriman.ini.d/00-triggers.ini | 0 ahriman-triggers/pyproject.toml | 32 + .../handlers/triggers_support}/__init__.py | 0 .../triggers_support}/triggers_support.py | 0 .../src}/ahriman/core/archive/__init__.py | 0 .../src}/ahriman/core/archive/archive_tree.py | 0 .../ahriman/core/archive/archive_trigger.py | 0 .../src}/ahriman/core/distributed/__init__.py | 0 .../core/distributed/distributed_system.py | 0 .../core/distributed/worker_loader_trigger.py | 0 .../core/distributed/worker_trigger.py | 0 .../ahriman/core/distributed/workers_cache.py | 0 .../src}/ahriman/core/support/__init__.py | 0 .../ahriman/core/support/keyring_trigger.py | 0 .../core/support/mirrorlist_trigger.py | 0 .../ahriman/core/support/package_creator.py | 0 .../core/support/pkgbuild}/__init__.py | 0 .../support/pkgbuild/keyring_generator.py | 0 .../support/pkgbuild/mirrorlist_generator.py | 0 .../support/pkgbuild/pkgbuild_generator.py | 0 .../handlers/test_handler_triggers_support.py | 2 +- .../tests}/ahriman/core/archive/conftest.py | 0 .../ahriman/core/archive/test_archive_tree.py | 0 .../core/archive/test_archive_trigger.py | 0 .../ahriman/core/distributed/conftest.py | 0 .../distributed/test_distributed_system.py | 0 .../distributed/test_worker_loader_trigger.py | 0 .../core/distributed/test_worker_trigger.py | 0 .../core/distributed/test_workers_cache.py | 0 .../tests}/ahriman/core/support/conftest.py | 0 .../ahriman/core/support/pkgbuild/conftest.py | 0 .../pkgbuild/test_keyring_generator.py | 0 .../pkgbuild/test_mirrorlist_generator.py | 0 .../pkgbuild/test_pkgbuild_generator.py | 0 .../core/support/test_keyring_trigger.py | 0 .../core/support/test_mirrorlist_trigger.py | 0 .../core/support/test_package_creator.py | 0 ahriman-triggers/tests/conftest.py | 13 + .../lib/systemd/system/ahriman-web.service | 0 .../lib/systemd/system/ahriman-web@.service | 0 .../ahriman/settings/ahriman.ini.d/00-web.ini | 0 .../share/ahriman/templates/api.jinja2 | 0 .../templates/build-status-classic.jinja2 | 0 .../ahriman/templates/build-status.jinja2 | 0 .../templates/build-status/alerts.jinja2 | 0 .../templates/build-status/dashboard.jinja2 | 0 .../build-status/key-import-modal.jinja2 | 0 .../templates/build-status/login-modal.jinja2 | 0 .../build-status/package-add-modal.jinja2 | 0 .../build-status/package-info-modal.jinja2 | 0 .../build-status/package-rebuild-modal.jinja2 | 0 .../templates/build-status/table.jinja2 | 0 .../share/ahriman/templates/error.jinja2 | 0 .../ahriman/templates/static/favicon.ico | Bin .../share/ahriman/templates/static/logo.svg | 0 ahriman-web/pyproject.toml | 55 ++ .../application/handlers/web}/__init__.py | 0 .../ahriman/application/handlers/web}/web.py | 0 .../src}/ahriman/core/auth/__init__.py | 0 .../src}/ahriman/core/auth/auth.py | 0 .../src}/ahriman/core/auth/helpers.py | 0 .../src}/ahriman/core/auth/mapping.py | 0 .../src}/ahriman/core/auth/oauth.py | 0 .../src}/ahriman/core/auth/pam.py | 0 .../src/ahriman/web}/__init__.py | 0 .../src}/ahriman/web/apispec/__init__.py | 0 .../src}/ahriman/web/apispec/decorators.py | 0 .../src}/ahriman/web/apispec/info.py | 0 {src => ahriman-web/src}/ahriman/web/cors.py | 0 {src => ahriman-web/src}/ahriman/web/keys.py | 0 .../src}/ahriman/web/middlewares/__init__.py | 0 .../ahriman/web/middlewares/auth_handler.py | 0 .../ahriman/web/middlewares/etag_handler.py | 0 .../web/middlewares/exception_handler.py | 0 .../web/middlewares/metrics_handler.py | 0 .../web/middlewares/request_id_handler.py | 0 .../src}/ahriman/web/routes.py | 0 .../src}/ahriman/web/schemas/__init__.py | 0 .../src}/ahriman/web/schemas/any_schema.py | 0 .../ahriman/web/schemas/aur_package_schema.py | 0 .../ahriman/web/schemas/auth_info_schema.py | 0 .../src}/ahriman/web/schemas/auth_schema.py | 0 .../schemas/auto_refresh_interval_schema.py | 0 .../web/schemas/build_options_schema.py | 0 .../ahriman/web/schemas/changes_schema.py | 0 .../web/schemas/configuration_schema.py | 0 .../ahriman/web/schemas/counters_schema.py | 0 .../web/schemas/dependencies_schema.py | 0 .../src}/ahriman/web/schemas/error_schema.py | 0 .../web/schemas/event_bus_filter_schema.py | 0 .../src}/ahriman/web/schemas/event_schema.py | 0 .../web/schemas/event_search_schema.py | 0 .../src}/ahriman/web/schemas/file_schema.py | 0 .../src}/ahriman/web/schemas/hold_schema.py | 0 .../src}/ahriman/web/schemas/info_schema.py | 0 .../ahriman/web/schemas/info_v2_schema.py | 0 .../web/schemas/internal_status_schema.py | 0 .../src}/ahriman/web/schemas/log_schema.py | 0 .../src}/ahriman/web/schemas/login_schema.py | 0 .../ahriman/web/schemas/logs_rotate_schema.py | 0 .../src}/ahriman/web/schemas/logs_schema.py | 0 .../ahriman/web/schemas/logs_search_schema.py | 0 .../src}/ahriman/web/schemas/oauth2_schema.py | 0 .../web/schemas/package_name_schema.py | 0 .../web/schemas/package_names_schema.py | 0 .../web/schemas/package_patch_schema.py | 0 .../web/schemas/package_properties_schema.py | 0 .../ahriman/web/schemas/package_schema.py | 0 .../web/schemas/package_status_schema.py | 0 .../web/schemas/package_version_schema.py | 0 .../ahriman/web/schemas/packager_schema.py | 0 .../ahriman/web/schemas/pagination_schema.py | 0 .../ahriman/web/schemas/patch_name_schema.py | 0 .../src}/ahriman/web/schemas/patch_schema.py | 0 .../ahriman/web/schemas/pgp_key_id_schema.py | 0 .../ahriman/web/schemas/pgp_key_schema.py | 0 .../ahriman/web/schemas/process_id_schema.py | 0 .../ahriman/web/schemas/process_schema.py | 0 .../src}/ahriman/web/schemas/remote_schema.py | 0 .../web/schemas/repository_id_schema.py | 0 .../web/schemas/repository_stats_schema.py | 0 .../ahriman/web/schemas/rollback_schema.py | 0 .../src}/ahriman/web/schemas/search_schema.py | 0 .../src}/ahriman/web/schemas/sse_schema.py | 0 .../src}/ahriman/web/schemas/status_schema.py | 0 .../web/schemas/update_flags_schema.py | 0 .../src}/ahriman/web/schemas/worker_schema.py | 0 .../src}/ahriman/web/server_info.py | 0 .../src/ahriman/web/views}/__init__.py | 0 .../src/ahriman/web/views/api}/__init__.py | 0 .../src}/ahriman/web/views/api/docs.py | 0 .../src}/ahriman/web/views/api/swagger.py | 0 .../src}/ahriman/web/views/base.py | 0 .../src}/ahriman/web/views/index.py | 0 .../src}/ahriman/web/views/static.py | 0 .../ahriman/web/views/status_view_guard.py | 0 .../src/ahriman/web/views/v1}/__init__.py | 0 .../web/views/v1/auditlog}/__init__.py | 0 .../web/views/v1/auditlog/event_bus.py | 0 .../ahriman/web/views/v1/auditlog/events.py | 0 .../web/views/v1/distributed}/__init__.py | 0 .../web/views/v1/distributed/workers.py | 0 .../web/views/v1/packages}/__init__.py | 0 .../ahriman/web/views/v1/packages/archives.py | 0 .../ahriman/web/views/v1/packages/changes.py | 0 .../web/views/v1/packages/dependencies.py | 0 .../ahriman/web/views/v1/packages/hold.py | 0 .../ahriman/web/views/v1/packages/logs.py | 0 .../ahriman/web/views/v1/packages/package.py | 0 .../ahriman/web/views/v1/packages/packages.py | 0 .../ahriman/web/views/v1/packages/patch.py | 0 .../ahriman/web/views/v1/packages/patches.py | 0 .../ahriman/web/views/v1/service}/__init__.py | 0 .../src}/ahriman/web/views/v1/service/add.py | 0 .../ahriman/web/views/v1/service/config.py | 0 .../src}/ahriman/web/views/v1/service/logs.py | 0 .../src}/ahriman/web/views/v1/service/pgp.py | 0 .../ahriman/web/views/v1/service/process.py | 0 .../ahriman/web/views/v1/service/rebuild.py | 0 .../ahriman/web/views/v1/service/remove.py | 0 .../ahriman/web/views/v1/service/request.py | 0 .../ahriman/web/views/v1/service/rollback.py | 0 .../ahriman/web/views/v1/service/search.py | 0 .../ahriman/web/views/v1/service/update.py | 0 .../ahriman/web/views/v1/service/upload.py | 0 .../ahriman/web/views/v1/status}/__init__.py | 0 .../src}/ahriman/web/views/v1/status/info.py | 0 .../ahriman/web/views/v1/status/metrics.py | 0 .../web/views/v1/status/repositories.py | 0 .../ahriman/web/views/v1/status/status.py | 0 .../ahriman/web/views/v1/user}/__init__.py | 0 .../src}/ahriman/web/views/v1/user/login.py | 0 .../src}/ahriman/web/views/v1/user/logout.py | 0 .../src/ahriman/web/views/v2}/__init__.py | 0 .../ahriman/web/views/v2/packages/__init__.py | 19 + .../ahriman/web/views/v2/packages/logs.py | 0 .../ahriman/web/views/v2/status/__init__.py | 19 + .../src}/ahriman/web/views/v2/status/info.py | 0 {src => ahriman-web/src}/ahriman/web/web.py | 0 .../application/handlers/test_handler_web.py | 6 +- .../tests}/ahriman/core/auth/conftest.py | 0 .../tests}/ahriman/core/auth/test_auth.py | 0 .../tests}/ahriman/core/auth/test_helpers.py | 0 .../tests}/ahriman/core/auth/test_mapping.py | 0 .../tests}/ahriman/core/auth/test_oauth.py | 0 .../tests}/ahriman/core/auth/test_pam.py | 0 .../ahriman/web/apispec/test_apispec.py | 0 .../ahriman/web/apispec/test_decorators.py | 0 .../tests}/ahriman/web/apispec/test_info.py | 0 .../tests}/ahriman/web/conftest.py | 0 .../ahriman/web/middlewares/conftest.py | 0 .../web/middlewares/test_auth_handler.py | 0 .../web/middlewares/test_etag_handler.py | 0 .../web/middlewares/test_exception_handler.py | 0 .../web/middlewares/test_metrics_handler.py | 0 .../middlewares/test_request_id_handler.py | 0 .../ahriman/web/schemas/test_any_schema.py | 0 .../web/schemas/test_aur_package_schema.py | 0 .../web/schemas/test_auth_info_schema.py | 0 .../ahriman/web/schemas/test_auth_schema.py | 0 .../test_auto_refresh_interval_schema.py | 0 .../web/schemas/test_build_options_schema.py | 0 .../web/schemas/test_changes_schema.py | 0 .../web/schemas/test_configuration_schema.py | 0 .../web/schemas/test_counters_schema.py | 0 .../web/schemas/test_dependencies_schema.py | 0 .../ahriman/web/schemas/test_error_schema.py | 0 .../schemas/test_event_bus_filter_schema.py | 0 .../ahriman/web/schemas/test_event_schema.py | 0 .../web/schemas/test_event_search_schema.py | 0 .../ahriman/web/schemas/test_file_schema.py | 0 .../ahriman/web/schemas/test_hold_schema.py | 0 .../ahriman/web/schemas/test_info_schema.py | 0 .../web/schemas/test_info_v2_schema.py | 0 .../schemas/test_internal_status_schema.py | 0 .../ahriman/web/schemas/test_log_schema.py | 0 .../ahriman/web/schemas/test_login_schema.py | 0 .../web/schemas/test_logs_rotate_schema.py | 0 .../ahriman/web/schemas/test_logs_schema.py | 0 .../web/schemas/test_logs_search_schema.py | 0 .../ahriman/web/schemas/test_oauth2_schema.py | 0 .../web/schemas/test_package_name_schema.py | 0 .../web/schemas/test_package_names_schema.py | 0 .../web/schemas/test_package_patch_schema.py | 0 .../schemas/test_package_properties_schema.py | 0 .../web/schemas/test_package_schema.py | 0 .../web/schemas/test_package_status_schema.py | 0 .../schemas/test_package_version_schema.py | 0 .../web/schemas/test_packager_schema.py | 0 .../web/schemas/test_pagination_schema.py | 0 .../web/schemas/test_patch_name_schema.py | 0 .../ahriman/web/schemas/test_patch_schema.py | 0 .../web/schemas/test_pgp_key_id_schema.py | 0 .../web/schemas/test_pgp_key_schema.py | 0 .../web/schemas/test_process_id_schema.py | 0 .../web/schemas/test_process_schema.py | 0 .../ahriman/web/schemas/test_remote_schema.py | 0 .../web/schemas/test_repository_id_schema.py | 0 .../schemas/test_repository_stats_schema.py | 0 .../web/schemas/test_rollback_schema.py | 0 .../ahriman/web/schemas/test_search_schema.py | 0 .../ahriman/web/schemas/test_sse_schema.py | 0 .../ahriman/web/schemas/test_status_schema.py | 0 .../web/schemas/test_update_flags_schema.py | 0 .../ahriman/web/schemas/test_worker_schema.py | 0 .../tests}/ahriman/web/test_cors.py | 0 .../tests}/ahriman/web/test_keys.py | 0 .../tests}/ahriman/web/test_routes.py | 2 +- .../tests}/ahriman/web/test_server_info.py | 0 .../tests}/ahriman/web/test_web.py | 0 .../web/views/api/test_view_api_docs.py | 0 .../web/views/api/test_view_api_swagger.py | 0 .../tests}/ahriman/web/views/conftest.py | 0 .../web/views/test_status_view_guard.py | 0 .../ahriman/web/views/test_view_base.py | 0 .../ahriman/web/views/test_view_index.py | 0 .../ahriman/web/views/test_view_static.py | 0 .../test_view_v1_auditlog_event_bus.py | 0 .../auditlog/test_view_v1_auditlog_events.py | 0 .../test_view_v1_distributed_workers.py | 0 .../test_view_v1_packages_archives.py | 0 .../packages/test_view_v1_packages_changes.py | 0 .../test_view_v1_packages_dependencies.py | 0 .../v1/packages/test_view_v1_packages_hold.py | 0 .../v1/packages/test_view_v1_packages_logs.py | 0 .../packages/test_view_v1_packages_package.py | 0 .../test_view_v1_packages_packages.py | 0 .../packages/test_view_v1_packages_patch.py | 0 .../packages/test_view_v1_packages_patches.py | 0 .../v1/service/test_view_v1_service_add.py | 0 .../v1/service/test_view_v1_service_config.py | 0 .../v1/service/test_view_v1_service_logs.py | 0 .../v1/service/test_view_v1_service_pgp.py | 0 .../service/test_view_v1_service_process.py | 0 .../service/test_view_v1_service_rebuild.py | 0 .../v1/service/test_view_v1_service_remove.py | 0 .../service/test_view_v1_service_request.py | 0 .../service/test_view_v1_service_rollback.py | 0 .../v1/service/test_view_v1_service_search.py | 0 .../v1/service/test_view_v1_service_update.py | 0 .../v1/service/test_view_v1_service_upload.py | 0 .../v1/status/test_view_v1_status_info.py | 0 .../v1/status/test_view_v1_status_metrics.py | 0 .../test_view_v1_status_repositories.py | 0 .../v1/status/test_view_v1_status_status.py | 0 .../views/v1/user/test_view_v1_user_login.py | 0 .../views/v1/user/test_view_v1_user_logout.py | 0 .../v2/packages/test_view_v2_packages_logs.py | 0 .../v2/status/test_view_v2_status_info.py | 0 ahriman-web/tests/conftest.py | 13 + frontend/vite.config.ts | 2 +- package/archlinux/PKGBUILD | 13 +- pyproject.toml | 108 +-- subpackages.py | 136 ---- tests/ahriman/conftest.py | 695 ------------------ tests/ahriman/test_tests.py | 29 - tests/testresources/core/logging.ini | 2 +- tests/testresources/web/templates | 1 - tests/testresources/web/templates/api.jinja2 | 1 + .../testresources/web/templates/build-status | 1 + .../web/templates/build-status-classic.jinja2 | 1 + .../web/templates/build-status.jinja2 | 1 + .../web/templates/email-index.jinja2 | 1 + .../testresources/web/templates/error.jinja2 | 1 + .../web/templates/repo-index.jinja2 | 1 + tests/testresources/web/templates/rss.jinja2 | 1 + tests/testresources/web/templates/shell | 1 + tests/testresources/web/templates/static | 1 + .../web/templates/telegram-index.jinja2 | 1 + tests/testresources/web/templates/utils | 1 + tox.toml | 44 +- 800 files changed, 307 insertions(+), 996 deletions(-) rename {package => ahriman-core/package}/lib/systemd/system/ahriman-daemon@.service (100%) rename {package => ahriman-core/package}/lib/systemd/system/ahriman@.service (100%) rename {package => ahriman-core/package}/lib/systemd/system/ahriman@.timer (100%) rename {package => ahriman-core/package}/share/ahriman/settings/ahriman.ini (100%) rename {package => ahriman-core/package}/share/ahriman/settings/ahriman.ini.d/00-housekeeping.ini (100%) rename {package => ahriman-core/package}/share/ahriman/settings/ahriman.ini.d/logging.ini (100%) rename {package => ahriman-core/package}/share/ahriman/templates/email-index.jinja2 (100%) rename {package => ahriman-core/package}/share/ahriman/templates/repo-index.jinja2 (100%) rename {package => ahriman-core/package}/share/ahriman/templates/rss.jinja2 (100%) rename {package => ahriman-core/package}/share/ahriman/templates/shell (100%) rename {package => ahriman-core/package}/share/ahriman/templates/telegram-index.jinja2 (100%) rename {package => ahriman-core/package}/share/ahriman/templates/utils/bootstrap-scripts.jinja2 (100%) rename {package => ahriman-core/package}/share/ahriman/templates/utils/style.jinja2 (100%) rename {package => ahriman-core/package}/share/bash-completion/completions/_ahriman (100%) rename {package => ahriman-core/package}/share/man/man1/ahriman.1 (100%) rename {package => ahriman-core/package}/share/zsh/site-functions/_ahriman (100%) create mode 100644 ahriman-core/pyproject.toml rename {src => ahriman-core/src}/ahriman/__init__.py (100%) rename {src => ahriman-core/src}/ahriman/application/__init__.py (100%) rename {src => ahriman-core/src}/ahriman/application/ahriman.py (100%) rename {src => ahriman-core/src}/ahriman/application/application/__init__.py (100%) rename {src => ahriman-core/src}/ahriman/application/application/application.py (100%) rename {src => ahriman-core/src}/ahriman/application/application/application_packages.py (100%) rename {src => ahriman-core/src}/ahriman/application/application/application_properties.py (100%) rename {src => ahriman-core/src}/ahriman/application/application/application_repository.py (100%) rename {src => ahriman-core/src}/ahriman/application/application/updates_iterator.py (100%) rename {src => ahriman-core/src}/ahriman/application/application/workers/__init__.py (100%) rename {src => ahriman-core/src}/ahriman/application/application/workers/local_updater.py (100%) rename {src => ahriman-core/src}/ahriman/application/application/workers/remote_updater.py (100%) rename {src => ahriman-core/src}/ahriman/application/application/workers/updater.py (100%) rename {src => ahriman-core/src}/ahriman/application/handlers/__init__.py (100%) rename {src => ahriman-core/src}/ahriman/application/handlers/add.py (100%) rename {src => ahriman-core/src}/ahriman/application/handlers/archives.py (100%) rename {src => ahriman-core/src}/ahriman/application/handlers/backup.py (100%) rename {src => ahriman-core/src}/ahriman/application/handlers/change.py (100%) rename {src => ahriman-core/src}/ahriman/application/handlers/clean.py (100%) rename {src => ahriman-core/src}/ahriman/application/handlers/copy.py (100%) rename {src => ahriman-core/src}/ahriman/application/handlers/daemon.py (100%) rename {src => ahriman-core/src}/ahriman/application/handlers/dump.py (100%) rename {src => ahriman-core/src}/ahriman/application/handlers/handler.py (100%) rename {src => ahriman-core/src}/ahriman/application/handlers/help.py (100%) rename {src => ahriman-core/src}/ahriman/application/handlers/hold.py (100%) rename {src => ahriman-core/src}/ahriman/application/handlers/key_import.py (100%) rename {src => ahriman-core/src}/ahriman/application/handlers/patch.py (100%) rename {src => ahriman-core/src}/ahriman/application/handlers/pkgbuild.py (100%) rename {src => ahriman-core/src}/ahriman/application/handlers/rebuild.py (100%) rename {src => ahriman-core/src}/ahriman/application/handlers/reload.py (100%) rename {src => ahriman-core/src}/ahriman/application/handlers/remove.py (100%) rename {src => ahriman-core/src}/ahriman/application/handlers/remove_unknown.py (100%) rename {src => ahriman-core/src}/ahriman/application/handlers/repositories.py (100%) rename {src => ahriman-core/src}/ahriman/application/handlers/restore.py (100%) rename {src => ahriman-core/src}/ahriman/application/handlers/rollback.py (100%) rename {src => ahriman-core/src}/ahriman/application/handlers/run.py (100%) rename {src => ahriman-core/src}/ahriman/application/handlers/search.py (100%) rename {src => ahriman-core/src}/ahriman/application/handlers/service_updates.py (100%) rename {src => ahriman-core/src}/ahriman/application/handlers/setup.py (100%) rename {src => ahriman-core/src}/ahriman/application/handlers/shell.py (100%) rename {src => ahriman-core/src}/ahriman/application/handlers/sign.py (100%) rename {src => ahriman-core/src}/ahriman/application/handlers/statistics.py (100%) rename {src => ahriman-core/src}/ahriman/application/handlers/status.py (100%) rename {src => ahriman-core/src}/ahriman/application/handlers/status_update.py (100%) rename {src => ahriman-core/src}/ahriman/application/handlers/structure.py (100%) rename {src => ahriman-core/src}/ahriman/application/handlers/tree_migrate.py (100%) rename {src => ahriman-core/src}/ahriman/application/handlers/triggers.py (100%) rename {src => ahriman-core/src}/ahriman/application/handlers/unsafe_commands.py (100%) rename {src => ahriman-core/src}/ahriman/application/handlers/update.py (100%) rename {src => ahriman-core/src}/ahriman/application/handlers/users.py (100%) rename {src => ahriman-core/src}/ahriman/application/handlers/validate.py (100%) rename {src => ahriman-core/src}/ahriman/application/handlers/versions.py (100%) rename {src => ahriman-core/src}/ahriman/application/help_formatter.py (100%) rename {src => ahriman-core/src}/ahriman/application/interactive_shell.py (100%) rename {src => ahriman-core/src}/ahriman/application/lock.py (100%) rename {src => ahriman-core/src}/ahriman/core/__init__.py (100%) rename {src => ahriman-core/src}/ahriman/core/alpm/__init__.py (100%) rename {src => ahriman-core/src}/ahriman/core/alpm/pacman.py (100%) rename {src => ahriman-core/src}/ahriman/core/alpm/pacman_database.py (100%) rename {src => ahriman-core/src}/ahriman/core/alpm/pacman_handle.py (100%) rename {src => ahriman-core/src}/ahriman/core/alpm/pkgbuild_parser.py (100%) rename {src => ahriman-core/src}/ahriman/core/alpm/remote/__init__.py (100%) rename {src => ahriman-core/src}/ahriman/core/alpm/remote/aur.py (100%) rename {src => ahriman-core/src}/ahriman/core/alpm/remote/official.py (100%) rename {src => ahriman-core/src}/ahriman/core/alpm/remote/official_syncdb.py (100%) rename {src => ahriman-core/src}/ahriman/core/alpm/remote/remote.py (100%) rename {src => ahriman-core/src}/ahriman/core/alpm/repo.py (100%) rename {src => ahriman-core/src}/ahriman/core/build_tools/__init__.py (100%) rename {src => ahriman-core/src}/ahriman/core/build_tools/package_archive.py (100%) rename {src => ahriman-core/src}/ahriman/core/build_tools/package_version.py (100%) rename {src => ahriman-core/src}/ahriman/core/build_tools/sources.py (100%) rename {src => ahriman-core/src}/ahriman/core/build_tools/task.py (100%) rename {src => ahriman-core/src}/ahriman/core/configuration/__init__.py (100%) rename {src => ahriman-core/src}/ahriman/core/configuration/configuration.py (100%) rename {src => ahriman-core/src}/ahriman/core/configuration/configuration_multi_dict.py (100%) rename {src => ahriman-core/src}/ahriman/core/configuration/schema.py (100%) rename {src => ahriman-core/src}/ahriman/core/configuration/shell_interpolator.py (100%) rename {src => ahriman-core/src}/ahriman/core/configuration/shell_template.py (100%) rename {src => ahriman-core/src}/ahriman/core/configuration/validator.py (100%) rename {src => ahriman-core/src}/ahriman/core/database/__init__.py (100%) rename {src => ahriman-core/src}/ahriman/core/database/migrations/__init__.py (100%) rename {src => ahriman-core/src}/ahriman/core/database/migrations/m000_initial.py (100%) rename {src => ahriman-core/src}/ahriman/core/database/migrations/m001_package_source.py (100%) rename {src => ahriman-core/src}/ahriman/core/database/migrations/m002_user_access.py (100%) rename {src => ahriman-core/src}/ahriman/core/database/migrations/m003_patch_variables.py (100%) rename {src => ahriman-core/src}/ahriman/core/database/migrations/m004_logs.py (100%) rename {src => ahriman-core/src}/ahriman/core/database/migrations/m005_make_opt_depends.py (100%) rename {src => ahriman-core/src}/ahriman/core/database/migrations/m006_packages_architecture_required.py (100%) rename {src => ahriman-core/src}/ahriman/core/database/migrations/m007_check_depends.py (100%) rename {src => ahriman-core/src}/ahriman/core/database/migrations/m008_packagers.py (100%) rename {src => ahriman-core/src}/ahriman/core/database/migrations/m009_local_source.py (100%) rename {src => ahriman-core/src}/ahriman/core/database/migrations/m010_version_based_logs_removal.py (100%) rename {src => ahriman-core/src}/ahriman/core/database/migrations/m011_repository_name.py (100%) rename {src => ahriman-core/src}/ahriman/core/database/migrations/m012_last_commit_sha.py (100%) rename {src => ahriman-core/src}/ahriman/core/database/migrations/m013_dependencies.py (100%) rename {src => ahriman-core/src}/ahriman/core/database/migrations/m014_auditlog.py (100%) rename {src => ahriman-core/src}/ahriman/core/database/migrations/m015_logs_process_id.py (100%) rename {src => ahriman-core/src}/ahriman/core/database/migrations/m016_archive.py (100%) rename {src => ahriman-core/src}/ahriman/core/database/migrations/m017_pkgbuild.py (100%) rename {src => ahriman-core/src}/ahriman/core/database/migrations/m018_package_hold.py (100%) rename {src => ahriman-core/src}/ahriman/core/database/operations/__init__.py (100%) rename {src => ahriman-core/src}/ahriman/core/database/operations/auth_operations.py (100%) rename {src => ahriman-core/src}/ahriman/core/database/operations/build_operations.py (100%) rename {src => ahriman-core/src}/ahriman/core/database/operations/changes_operations.py (100%) rename {src => ahriman-core/src}/ahriman/core/database/operations/dependencies_operations.py (100%) rename {src => ahriman-core/src}/ahriman/core/database/operations/event_operations.py (100%) rename {src => ahriman-core/src}/ahriman/core/database/operations/logs_operations.py (100%) rename {src => ahriman-core/src}/ahriman/core/database/operations/operations.py (100%) rename {src => ahriman-core/src}/ahriman/core/database/operations/package_operations.py (100%) rename {src => ahriman-core/src}/ahriman/core/database/operations/patch_operations.py (100%) rename {src => ahriman-core/src}/ahriman/core/database/sqlite.py (100%) rename {src => ahriman-core/src}/ahriman/core/exceptions.py (100%) rename {src => ahriman-core/src}/ahriman/core/formatters/__init__.py (100%) rename {src => ahriman-core/src}/ahriman/core/formatters/aur_printer.py (100%) rename {src => ahriman-core/src}/ahriman/core/formatters/build_printer.py (100%) rename {src => ahriman-core/src}/ahriman/core/formatters/changes_printer.py (100%) rename {src => ahriman-core/src}/ahriman/core/formatters/configuration_paths_printer.py (100%) rename {src => ahriman-core/src}/ahriman/core/formatters/configuration_printer.py (100%) rename {src => ahriman-core/src}/ahriman/core/formatters/event_stats_printer.py (100%) rename {src => ahriman-core/src}/ahriman/core/formatters/package_printer.py (100%) rename {src => ahriman-core/src}/ahriman/core/formatters/package_stats_printer.py (100%) rename {src => ahriman-core/src}/ahriman/core/formatters/patch_printer.py (100%) rename {src => ahriman-core/src}/ahriman/core/formatters/pkgbuild_printer.py (100%) rename {src => ahriman-core/src}/ahriman/core/formatters/printer.py (100%) rename {src => ahriman-core/src}/ahriman/core/formatters/repository_printer.py (100%) rename {src => ahriman-core/src}/ahriman/core/formatters/repository_stats_printer.py (100%) rename {src => ahriman-core/src}/ahriman/core/formatters/status_printer.py (100%) rename {src => ahriman-core/src}/ahriman/core/formatters/string_printer.py (100%) rename {src => ahriman-core/src}/ahriman/core/formatters/tree_printer.py (100%) rename {src => ahriman-core/src}/ahriman/core/formatters/update_printer.py (100%) rename {src => ahriman-core/src}/ahriman/core/formatters/user_printer.py (100%) rename {src => ahriman-core/src}/ahriman/core/formatters/validation_printer.py (100%) rename {src => ahriman-core/src}/ahriman/core/formatters/version_printer.py (100%) rename {src => ahriman-core/src}/ahriman/core/gitremote/__init__.py (100%) rename {src => ahriman-core/src}/ahriman/core/gitremote/remote_pull.py (100%) rename {src => ahriman-core/src}/ahriman/core/gitremote/remote_pull_trigger.py (100%) rename {src => ahriman-core/src}/ahriman/core/gitremote/remote_push.py (100%) rename {src => ahriman-core/src}/ahriman/core/gitremote/remote_push_trigger.py (100%) rename {src => ahriman-core/src}/ahriman/core/housekeeping/__init__.py (100%) rename {src => ahriman-core/src}/ahriman/core/housekeeping/archive_rotation_trigger.py (100%) rename {src => ahriman-core/src}/ahriman/core/housekeeping/logs_rotation_trigger.py (100%) rename {src => ahriman-core/src}/ahriman/core/http/__init__.py (100%) rename {src => ahriman-core/src}/ahriman/core/http/sync_ahriman_client.py (100%) rename {src => ahriman-core/src}/ahriman/core/http/sync_http_client.py (100%) rename {src => ahriman-core/src}/ahriman/core/log/__init__.py (100%) rename {src => ahriman-core/src}/ahriman/core/log/http_log_handler.py (100%) rename {src => ahriman-core/src}/ahriman/core/log/journal_handler.py (100%) rename {src => ahriman-core/src}/ahriman/core/log/lazy_logging.py (100%) rename {src => ahriman-core/src}/ahriman/core/log/log_context.py (100%) rename {src => ahriman-core/src}/ahriman/core/log/log_loader.py (100%) rename {src => ahriman-core/src}/ahriman/core/module_loader.py (95%) rename {src => ahriman-core/src}/ahriman/core/report/__init__.py (100%) rename {src => ahriman-core/src}/ahriman/core/report/console.py (100%) rename {src => ahriman-core/src}/ahriman/core/report/email.py (100%) rename {src => ahriman-core/src}/ahriman/core/report/html.py (100%) rename {src => ahriman-core/src}/ahriman/core/report/jinja_template.py (100%) rename {src => ahriman-core/src}/ahriman/core/report/remote_call.py (100%) rename {src => ahriman-core/src}/ahriman/core/report/report.py (100%) rename {src => ahriman-core/src}/ahriman/core/report/report_trigger.py (100%) rename {src => ahriman-core/src}/ahriman/core/report/rss.py (100%) rename {src => ahriman-core/src}/ahriman/core/report/telegram.py (100%) rename {src => ahriman-core/src}/ahriman/core/repository/__init__.py (100%) rename {src => ahriman-core/src}/ahriman/core/repository/cleaner.py (100%) rename {src => ahriman-core/src}/ahriman/core/repository/event_logger.py (100%) rename {src => ahriman-core/src}/ahriman/core/repository/executor.py (100%) rename {src => ahriman-core/src}/ahriman/core/repository/explorer.py (100%) rename {src => ahriman-core/src}/ahriman/core/repository/package_info.py (100%) rename {src => ahriman-core/src}/ahriman/core/repository/repository.py (100%) rename {src => ahriman-core/src}/ahriman/core/repository/repository_properties.py (100%) rename {src => ahriman-core/src}/ahriman/core/repository/update_handler.py (100%) rename {src => ahriman-core/src}/ahriman/core/sign/__init__.py (100%) rename {src => ahriman-core/src}/ahriman/core/sign/gpg.py (100%) rename {src => ahriman-core/src}/ahriman/core/spawn.py (100%) rename {src => ahriman-core/src}/ahriman/core/status/__init__.py (100%) rename {src => ahriman-core/src}/ahriman/core/status/client.py (100%) rename {src => ahriman-core/src}/ahriman/core/status/event_bus.py (100%) rename {src => ahriman-core/src}/ahriman/core/status/local_client.py (100%) rename {src => ahriman-core/src}/ahriman/core/status/watcher.py (100%) rename {src => ahriman-core/src}/ahriman/core/status/web_client.py (100%) rename {src => ahriman-core/src}/ahriman/core/tree.py (100%) rename {src => ahriman-core/src}/ahriman/core/triggers/__init__.py (100%) rename {src => ahriman-core/src}/ahriman/core/triggers/trigger.py (100%) rename {src => ahriman-core/src}/ahriman/core/triggers/trigger_loader.py (100%) rename {src => ahriman-core/src}/ahriman/core/types.py (100%) rename {src => ahriman-core/src}/ahriman/core/upload/__init__.py (100%) rename {src => ahriman-core/src}/ahriman/core/upload/github.py (100%) rename {src => ahriman-core/src}/ahriman/core/upload/http_upload.py (100%) rename {src => ahriman-core/src}/ahriman/core/upload/remote_service.py (100%) rename {src => ahriman-core/src}/ahriman/core/upload/rsync.py (100%) rename {src => ahriman-core/src}/ahriman/core/upload/s3.py (100%) rename {src => ahriman-core/src}/ahriman/core/upload/upload.py (100%) rename {src => ahriman-core/src}/ahriman/core/upload/upload_trigger.py (100%) rename {src => ahriman-core/src}/ahriman/core/util.py (100%) rename {src => ahriman-core/src}/ahriman/core/utils.py (100%) rename {src/ahriman/core/support/pkgbuild => ahriman-core/src/ahriman/models}/__init__.py (100%) rename {src => ahriman-core/src}/ahriman/models/action.py (100%) rename {src => ahriman-core/src}/ahriman/models/aur_package.py (100%) rename {src => ahriman-core/src}/ahriman/models/auth_settings.py (100%) rename {src => ahriman-core/src}/ahriman/models/build_status.py (100%) rename {src => ahriman-core/src}/ahriman/models/changes.py (100%) rename {src => ahriman-core/src}/ahriman/models/context_key.py (100%) rename {src => ahriman-core/src}/ahriman/models/counters.py (100%) rename {src => ahriman-core/src}/ahriman/models/dependencies.py (100%) rename {src => ahriman-core/src}/ahriman/models/event.py (100%) rename {src => ahriman-core/src}/ahriman/models/filesystem_package.py (100%) rename {src => ahriman-core/src}/ahriman/models/internal_status.py (100%) rename {src => ahriman-core/src}/ahriman/models/log_handler.py (100%) rename {src => ahriman-core/src}/ahriman/models/log_record.py (100%) rename {src => ahriman-core/src}/ahriman/models/log_record_id.py (100%) rename {src => ahriman-core/src}/ahriman/models/metrics_timer.py (100%) rename {src => ahriman-core/src}/ahriman/models/migration.py (100%) rename {src => ahriman-core/src}/ahriman/models/migration_result.py (100%) rename {src => ahriman-core/src}/ahriman/models/package.py (100%) rename {src => ahriman-core/src}/ahriman/models/package_description.py (100%) rename {src => ahriman-core/src}/ahriman/models/package_source.py (100%) rename {src => ahriman-core/src}/ahriman/models/packagers.py (100%) rename {src => ahriman-core/src}/ahriman/models/pacman_synchronization.py (100%) rename {src => ahriman-core/src}/ahriman/models/pkgbuild.py (100%) rename {src => ahriman-core/src}/ahriman/models/pkgbuild_patch.py (100%) rename {src => ahriman-core/src}/ahriman/models/process_status.py (100%) rename {src => ahriman-core/src}/ahriman/models/property.py (100%) rename {src => ahriman-core/src}/ahriman/models/remote_source.py (100%) rename {src => ahriman-core/src}/ahriman/models/report_settings.py (100%) rename {src => ahriman-core/src}/ahriman/models/repository_id.py (100%) rename {src => ahriman-core/src}/ahriman/models/repository_paths.py (100%) rename {src => ahriman-core/src}/ahriman/models/repository_stats.py (100%) rename {src => ahriman-core/src}/ahriman/models/result.py (100%) rename {src => ahriman-core/src}/ahriman/models/scan_paths.py (100%) rename {src => ahriman-core/src}/ahriman/models/series_statistics.py (100%) rename {src => ahriman-core/src}/ahriman/models/sign_settings.py (100%) rename {src => ahriman-core/src}/ahriman/models/smtp_ssl_settings.py (100%) rename {src => ahriman-core/src}/ahriman/models/upload_settings.py (100%) rename {src => ahriman-core/src}/ahriman/models/user.py (100%) rename {src => ahriman-core/src}/ahriman/models/user_access.py (100%) rename {src => ahriman-core/src}/ahriman/models/waiter.py (100%) rename {src => ahriman-core/src}/ahriman/models/worker.py (100%) rename {src => ahriman-core/src}/ahriman/py.typed (100%) rename {tests => ahriman-core/tests}/ahriman/application/application/conftest.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/application/test_application.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/application/test_application_packages.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/application/test_application_properties.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/application/test_application_repository.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/application/test_updates_iterator.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/application/workers/conftest.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/application/workers/test_local_updater.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/application/workers/test_remote_updater.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/application/workers/test_updater.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/conftest.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/handlers/test_handler.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/handlers/test_handler_add.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/handlers/test_handler_archives.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/handlers/test_handler_backup.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/handlers/test_handler_change.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/handlers/test_handler_clean.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/handlers/test_handler_copy.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/handlers/test_handler_daemon.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/handlers/test_handler_dump.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/handlers/test_handler_help.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/handlers/test_handler_hold.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/handlers/test_handler_key_import.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/handlers/test_handler_patch.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/handlers/test_handler_pkgbuild.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/handlers/test_handler_rebuild.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/handlers/test_handler_reload.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/handlers/test_handler_remove.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/handlers/test_handler_remove_unknown.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/handlers/test_handler_repositories.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/handlers/test_handler_restore.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/handlers/test_handler_rollback.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/handlers/test_handler_run.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/handlers/test_handler_search.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/handlers/test_handler_service_updates.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/handlers/test_handler_setup.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/handlers/test_handler_shell.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/handlers/test_handler_sign.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/handlers/test_handler_statistics.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/handlers/test_handler_status.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/handlers/test_handler_status_update.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/handlers/test_handler_structure.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/handlers/test_handler_tree_migrate.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/handlers/test_handler_triggers.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/handlers/test_handler_unsafe_commands.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/handlers/test_handler_update.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/handlers/test_handler_users.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/handlers/test_handler_validate.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/handlers/test_handler_versions.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/test_ahriman.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/test_help_formatter.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/test_interactive_shell.py (100%) rename {tests => ahriman-core/tests}/ahriman/application/test_lock.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/alpm/conftest.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/alpm/remote/conftest.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/alpm/remote/test_aur.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/alpm/remote/test_official.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/alpm/remote/test_official_syncdb.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/alpm/remote/test_remote.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/alpm/test_pacman.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/alpm/test_pacman_database.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/alpm/test_pacman_handle.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/alpm/test_pkgbuild_parser.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/alpm/test_repo.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/build_tools/conftest.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/build_tools/test_package_archive.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/build_tools/test_package_version.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/build_tools/test_sources.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/build_tools/test_task.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/configuration/conftest.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/configuration/test_configuration.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/configuration/test_configuration_multi_dict.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/configuration/test_schema.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/configuration/test_shell_interpolator.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/configuration/test_shell_template.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/configuration/test_validator.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/conftest.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/database/conftest.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/database/migrations/conftest.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/database/migrations/test_m000_initial.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/database/migrations/test_m001_package_source.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/database/migrations/test_m002_user_access.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/database/migrations/test_m003_patch_variables.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/database/migrations/test_m004_logs.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/database/migrations/test_m005_make_opt_depends.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/database/migrations/test_m006_packages_architecture_required.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/database/migrations/test_m007_check_depends.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/database/migrations/test_m008_packagers.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/database/migrations/test_m009_local_source.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/database/migrations/test_m010_version_based_logs_removal.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/database/migrations/test_m011_repository_name.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/database/migrations/test_m012_last_commit_sha.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/database/migrations/test_m013_dependencies.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/database/migrations/test_m014_auditlog.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/database/migrations/test_m015_logs_process_id.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/database/migrations/test_m016_archive.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/database/migrations/test_m017_pkgbuild.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/database/migrations/test_m018_package_hold.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/database/migrations/test_migrations_init.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/database/operations/test_auth_operations.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/database/operations/test_build_operations.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/database/operations/test_changes_operations.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/database/operations/test_dependencies_operations.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/database/operations/test_event_operations.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/database/operations/test_logs_operations.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/database/operations/test_operations.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/database/operations/test_package_operations.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/database/operations/test_patch_operations.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/database/test_sqlite.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/formatters/conftest.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/formatters/test_aur_printer.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/formatters/test_build_printer.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/formatters/test_changes_printer.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/formatters/test_configuration_paths_printer.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/formatters/test_configuration_printer.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/formatters/test_event_stats_printer.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/formatters/test_package_printer.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/formatters/test_package_stats_printer.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/formatters/test_patch_printer.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/formatters/test_pkgbuild_printer.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/formatters/test_printer.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/formatters/test_repository_printer.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/formatters/test_repository_stats_printer.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/formatters/test_status_printer.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/formatters/test_string_printer.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/formatters/test_tree_printer.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/formatters/test_update_printer.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/formatters/test_user_printer.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/formatters/test_validation_printer.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/formatters/test_version_printer.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/gitremote/test_remote_pull.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/gitremote/test_remote_pull_trigger.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/gitremote/test_remote_push.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/gitremote/test_remote_push_trigger.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/housekeeping/conftest.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/housekeeping/test_archive_rotation_trigger.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/housekeeping/test_logs_rotation_trigger.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/http/conftest.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/http/test_sync_ahriman_client.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/http/test_sync_http_client.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/log/test_http_log_handler.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/log/test_journal_handler.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/log/test_lazy_logging.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/log/test_log_context.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/log/test_log_loader.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/report/conftest.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/report/test_console.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/report/test_email.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/report/test_html.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/report/test_jinja_template.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/report/test_remote_call.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/report/test_report.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/report/test_report_trigger.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/report/test_rss.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/report/test_telegram.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/repository/conftest.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/repository/test_cleaner.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/repository/test_event_logger.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/repository/test_executor.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/repository/test_explorer.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/repository/test_package_info.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/repository/test_repository.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/repository/test_repository_properties.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/repository/test_update_handler.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/sign/conftest.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/sign/test_gpg.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/status/conftest.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/status/test_client.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/status/test_event_bus.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/status/test_local_client.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/status/test_watcher.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/status/test_web_client.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/test_context_init.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/test_exceptions.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/test_module_loader.py (86%) rename {tests => ahriman-core/tests}/ahriman/core/test_spawn.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/test_tree.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/test_types.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/test_util.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/test_utils.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/triggers/conftest.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/triggers/test_trigger.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/triggers/test_trigger_loader.py (95%) rename {tests => ahriman-core/tests}/ahriman/core/upload/conftest.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/upload/test_github.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/upload/test_http_upload.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/upload/test_remote_service.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/upload/test_rsync.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/upload/test_s3.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/upload/test_upload.py (100%) rename {tests => ahriman-core/tests}/ahriman/core/upload/test_upload_trigger.py (100%) rename {tests => ahriman-core/tests}/ahriman/models/conftest.py (100%) rename {tests => ahriman-core/tests}/ahriman/models/test_action.py (100%) rename {tests => ahriman-core/tests}/ahriman/models/test_aur_package.py (100%) rename {tests => ahriman-core/tests}/ahriman/models/test_auth_settings.py (100%) rename {tests => ahriman-core/tests}/ahriman/models/test_build_status.py (100%) rename {tests => ahriman-core/tests}/ahriman/models/test_changes.py (100%) rename {tests => ahriman-core/tests}/ahriman/models/test_context_key.py (100%) rename {tests => ahriman-core/tests}/ahriman/models/test_counters.py (100%) rename {tests => ahriman-core/tests}/ahriman/models/test_dependencies.py (100%) rename {tests => ahriman-core/tests}/ahriman/models/test_event.py (100%) rename {tests => ahriman-core/tests}/ahriman/models/test_filesystem_package.py (100%) rename {tests => ahriman-core/tests}/ahriman/models/test_internal_status.py (100%) rename {tests => ahriman-core/tests}/ahriman/models/test_log_handler.py (100%) rename {tests => ahriman-core/tests}/ahriman/models/test_log_record.py (100%) rename {tests => ahriman-core/tests}/ahriman/models/test_log_record_id.py (100%) rename {tests => ahriman-core/tests}/ahriman/models/test_metrics_timer.py (100%) rename {tests => ahriman-core/tests}/ahriman/models/test_migration.py (100%) rename {tests => ahriman-core/tests}/ahriman/models/test_migration_result.py (100%) rename {tests => ahriman-core/tests}/ahriman/models/test_package.py (100%) rename {tests => ahriman-core/tests}/ahriman/models/test_package_description.py (100%) rename {tests => ahriman-core/tests}/ahriman/models/test_package_source.py (100%) rename {tests => ahriman-core/tests}/ahriman/models/test_packagers.py (100%) rename {tests => ahriman-core/tests}/ahriman/models/test_pacman_synchronization.py (100%) rename {tests => ahriman-core/tests}/ahriman/models/test_pkgbuild.py (100%) rename {tests => ahriman-core/tests}/ahriman/models/test_pkgbuild_patch.py (100%) rename {tests => ahriman-core/tests}/ahriman/models/test_process_status.py (100%) rename {tests => ahriman-core/tests}/ahriman/models/test_property.py (100%) rename {tests => ahriman-core/tests}/ahriman/models/test_remote_source.py (100%) rename {tests => ahriman-core/tests}/ahriman/models/test_report_settings.py (100%) rename {tests => ahriman-core/tests}/ahriman/models/test_repository_id.py (100%) rename {tests => ahriman-core/tests}/ahriman/models/test_repository_paths.py (100%) rename {tests => ahriman-core/tests}/ahriman/models/test_repository_stats.py (100%) rename {tests => ahriman-core/tests}/ahriman/models/test_result.py (100%) rename {tests => ahriman-core/tests}/ahriman/models/test_scan_paths.py (100%) rename {tests => ahriman-core/tests}/ahriman/models/test_series_statistics.py (100%) rename {tests => ahriman-core/tests}/ahriman/models/test_sign_settings.py (100%) rename {tests => ahriman-core/tests}/ahriman/models/test_smtp_ssl_settings.py (100%) rename {tests => ahriman-core/tests}/ahriman/models/test_upload_settings.py (100%) rename {tests => ahriman-core/tests}/ahriman/models/test_user.py (100%) rename {tests => ahriman-core/tests}/ahriman/models/test_user_access.py (100%) rename {tests => ahriman-core/tests}/ahriman/models/test_waiter.py (100%) rename {tests => ahriman-core/tests}/ahriman/models/test_worker.py (100%) create mode 100644 ahriman-core/tests/conftest.py rename {package => ahriman-triggers/package}/share/ahriman/settings/ahriman.ini.d/00-triggers.ini (100%) create mode 100644 ahriman-triggers/pyproject.toml rename {src/ahriman/models => ahriman-triggers/src/ahriman/application/handlers/triggers_support}/__init__.py (100%) rename {src/ahriman/application/handlers => ahriman-triggers/src/ahriman/application/handlers/triggers_support}/triggers_support.py (100%) rename {src => ahriman-triggers/src}/ahriman/core/archive/__init__.py (100%) rename {src => ahriman-triggers/src}/ahriman/core/archive/archive_tree.py (100%) rename {src => ahriman-triggers/src}/ahriman/core/archive/archive_trigger.py (100%) rename {src => ahriman-triggers/src}/ahriman/core/distributed/__init__.py (100%) rename {src => ahriman-triggers/src}/ahriman/core/distributed/distributed_system.py (100%) rename {src => ahriman-triggers/src}/ahriman/core/distributed/worker_loader_trigger.py (100%) rename {src => ahriman-triggers/src}/ahriman/core/distributed/worker_trigger.py (100%) rename {src => ahriman-triggers/src}/ahriman/core/distributed/workers_cache.py (100%) rename {src => ahriman-triggers/src}/ahriman/core/support/__init__.py (100%) rename {src => ahriman-triggers/src}/ahriman/core/support/keyring_trigger.py (100%) rename {src => ahriman-triggers/src}/ahriman/core/support/mirrorlist_trigger.py (100%) rename {src => ahriman-triggers/src}/ahriman/core/support/package_creator.py (100%) rename {src/ahriman/web => ahriman-triggers/src/ahriman/core/support/pkgbuild}/__init__.py (100%) rename {src => ahriman-triggers/src}/ahriman/core/support/pkgbuild/keyring_generator.py (100%) rename {src => ahriman-triggers/src}/ahriman/core/support/pkgbuild/mirrorlist_generator.py (100%) rename {src => ahriman-triggers/src}/ahriman/core/support/pkgbuild/pkgbuild_generator.py (100%) rename {tests => ahriman-triggers/tests}/ahriman/application/handlers/test_handler_triggers_support.py (68%) rename {tests => ahriman-triggers/tests}/ahriman/core/archive/conftest.py (100%) rename {tests => ahriman-triggers/tests}/ahriman/core/archive/test_archive_tree.py (100%) rename {tests => ahriman-triggers/tests}/ahriman/core/archive/test_archive_trigger.py (100%) rename {tests => ahriman-triggers/tests}/ahriman/core/distributed/conftest.py (100%) rename {tests => ahriman-triggers/tests}/ahriman/core/distributed/test_distributed_system.py (100%) rename {tests => ahriman-triggers/tests}/ahriman/core/distributed/test_worker_loader_trigger.py (100%) rename {tests => ahriman-triggers/tests}/ahriman/core/distributed/test_worker_trigger.py (100%) rename {tests => ahriman-triggers/tests}/ahriman/core/distributed/test_workers_cache.py (100%) rename {tests => ahriman-triggers/tests}/ahriman/core/support/conftest.py (100%) rename {tests => ahriman-triggers/tests}/ahriman/core/support/pkgbuild/conftest.py (100%) rename {tests => ahriman-triggers/tests}/ahriman/core/support/pkgbuild/test_keyring_generator.py (100%) rename {tests => ahriman-triggers/tests}/ahriman/core/support/pkgbuild/test_mirrorlist_generator.py (100%) rename {tests => ahriman-triggers/tests}/ahriman/core/support/pkgbuild/test_pkgbuild_generator.py (100%) rename {tests => ahriman-triggers/tests}/ahriman/core/support/test_keyring_trigger.py (100%) rename {tests => ahriman-triggers/tests}/ahriman/core/support/test_mirrorlist_trigger.py (100%) rename {tests => ahriman-triggers/tests}/ahriman/core/support/test_package_creator.py (100%) create mode 100644 ahriman-triggers/tests/conftest.py rename {package => ahriman-web/package}/lib/systemd/system/ahriman-web.service (100%) rename {package => ahriman-web/package}/lib/systemd/system/ahriman-web@.service (100%) rename {package => ahriman-web/package}/share/ahriman/settings/ahriman.ini.d/00-web.ini (100%) rename {package => ahriman-web/package}/share/ahriman/templates/api.jinja2 (100%) rename {package => ahriman-web/package}/share/ahriman/templates/build-status-classic.jinja2 (100%) rename {package => ahriman-web/package}/share/ahriman/templates/build-status.jinja2 (100%) rename {package => ahriman-web/package}/share/ahriman/templates/build-status/alerts.jinja2 (100%) rename {package => ahriman-web/package}/share/ahriman/templates/build-status/dashboard.jinja2 (100%) rename {package => ahriman-web/package}/share/ahriman/templates/build-status/key-import-modal.jinja2 (100%) rename {package => ahriman-web/package}/share/ahriman/templates/build-status/login-modal.jinja2 (100%) rename {package => ahriman-web/package}/share/ahriman/templates/build-status/package-add-modal.jinja2 (100%) rename {package => ahriman-web/package}/share/ahriman/templates/build-status/package-info-modal.jinja2 (100%) rename {package => ahriman-web/package}/share/ahriman/templates/build-status/package-rebuild-modal.jinja2 (100%) rename {package => ahriman-web/package}/share/ahriman/templates/build-status/table.jinja2 (100%) rename {package => ahriman-web/package}/share/ahriman/templates/error.jinja2 (100%) rename {package => ahriman-web/package}/share/ahriman/templates/static/favicon.ico (100%) rename {package => ahriman-web/package}/share/ahriman/templates/static/logo.svg (100%) create mode 100644 ahriman-web/pyproject.toml rename {src/ahriman/web/views => ahriman-web/src/ahriman/application/handlers/web}/__init__.py (100%) rename {src/ahriman/application/handlers => ahriman-web/src/ahriman/application/handlers/web}/web.py (100%) rename {src => ahriman-web/src}/ahriman/core/auth/__init__.py (100%) rename {src => ahriman-web/src}/ahriman/core/auth/auth.py (100%) rename {src => ahriman-web/src}/ahriman/core/auth/helpers.py (100%) rename {src => ahriman-web/src}/ahriman/core/auth/mapping.py (100%) rename {src => ahriman-web/src}/ahriman/core/auth/oauth.py (100%) rename {src => ahriman-web/src}/ahriman/core/auth/pam.py (100%) rename {src/ahriman/web/views/api => ahriman-web/src/ahriman/web}/__init__.py (100%) rename {src => ahriman-web/src}/ahriman/web/apispec/__init__.py (100%) rename {src => ahriman-web/src}/ahriman/web/apispec/decorators.py (100%) rename {src => ahriman-web/src}/ahriman/web/apispec/info.py (100%) rename {src => ahriman-web/src}/ahriman/web/cors.py (100%) rename {src => ahriman-web/src}/ahriman/web/keys.py (100%) rename {src => ahriman-web/src}/ahriman/web/middlewares/__init__.py (100%) rename {src => ahriman-web/src}/ahriman/web/middlewares/auth_handler.py (100%) rename {src => ahriman-web/src}/ahriman/web/middlewares/etag_handler.py (100%) rename {src => ahriman-web/src}/ahriman/web/middlewares/exception_handler.py (100%) rename {src => ahriman-web/src}/ahriman/web/middlewares/metrics_handler.py (100%) rename {src => ahriman-web/src}/ahriman/web/middlewares/request_id_handler.py (100%) rename {src => ahriman-web/src}/ahriman/web/routes.py (100%) rename {src => ahriman-web/src}/ahriman/web/schemas/__init__.py (100%) rename {src => ahriman-web/src}/ahriman/web/schemas/any_schema.py (100%) rename {src => ahriman-web/src}/ahriman/web/schemas/aur_package_schema.py (100%) rename {src => ahriman-web/src}/ahriman/web/schemas/auth_info_schema.py (100%) rename {src => ahriman-web/src}/ahriman/web/schemas/auth_schema.py (100%) rename {src => ahriman-web/src}/ahriman/web/schemas/auto_refresh_interval_schema.py (100%) rename {src => ahriman-web/src}/ahriman/web/schemas/build_options_schema.py (100%) rename {src => ahriman-web/src}/ahriman/web/schemas/changes_schema.py (100%) rename {src => ahriman-web/src}/ahriman/web/schemas/configuration_schema.py (100%) rename {src => ahriman-web/src}/ahriman/web/schemas/counters_schema.py (100%) rename {src => ahriman-web/src}/ahriman/web/schemas/dependencies_schema.py (100%) rename {src => ahriman-web/src}/ahriman/web/schemas/error_schema.py (100%) rename {src => ahriman-web/src}/ahriman/web/schemas/event_bus_filter_schema.py (100%) rename {src => ahriman-web/src}/ahriman/web/schemas/event_schema.py (100%) rename {src => ahriman-web/src}/ahriman/web/schemas/event_search_schema.py (100%) rename {src => ahriman-web/src}/ahriman/web/schemas/file_schema.py (100%) rename {src => ahriman-web/src}/ahriman/web/schemas/hold_schema.py (100%) rename {src => ahriman-web/src}/ahriman/web/schemas/info_schema.py (100%) rename {src => ahriman-web/src}/ahriman/web/schemas/info_v2_schema.py (100%) rename {src => ahriman-web/src}/ahriman/web/schemas/internal_status_schema.py (100%) rename {src => ahriman-web/src}/ahriman/web/schemas/log_schema.py (100%) rename {src => ahriman-web/src}/ahriman/web/schemas/login_schema.py (100%) rename {src => ahriman-web/src}/ahriman/web/schemas/logs_rotate_schema.py (100%) rename {src => ahriman-web/src}/ahriman/web/schemas/logs_schema.py (100%) rename {src => ahriman-web/src}/ahriman/web/schemas/logs_search_schema.py (100%) rename {src => ahriman-web/src}/ahriman/web/schemas/oauth2_schema.py (100%) rename {src => ahriman-web/src}/ahriman/web/schemas/package_name_schema.py (100%) rename {src => ahriman-web/src}/ahriman/web/schemas/package_names_schema.py (100%) rename {src => ahriman-web/src}/ahriman/web/schemas/package_patch_schema.py (100%) rename {src => ahriman-web/src}/ahriman/web/schemas/package_properties_schema.py (100%) rename {src => ahriman-web/src}/ahriman/web/schemas/package_schema.py (100%) rename {src => ahriman-web/src}/ahriman/web/schemas/package_status_schema.py (100%) rename {src => ahriman-web/src}/ahriman/web/schemas/package_version_schema.py (100%) rename {src => ahriman-web/src}/ahriman/web/schemas/packager_schema.py (100%) rename {src => ahriman-web/src}/ahriman/web/schemas/pagination_schema.py (100%) rename {src => ahriman-web/src}/ahriman/web/schemas/patch_name_schema.py (100%) rename {src => ahriman-web/src}/ahriman/web/schemas/patch_schema.py (100%) rename {src => ahriman-web/src}/ahriman/web/schemas/pgp_key_id_schema.py (100%) rename {src => ahriman-web/src}/ahriman/web/schemas/pgp_key_schema.py (100%) rename {src => ahriman-web/src}/ahriman/web/schemas/process_id_schema.py (100%) rename {src => ahriman-web/src}/ahriman/web/schemas/process_schema.py (100%) rename {src => ahriman-web/src}/ahriman/web/schemas/remote_schema.py (100%) rename {src => ahriman-web/src}/ahriman/web/schemas/repository_id_schema.py (100%) rename {src => ahriman-web/src}/ahriman/web/schemas/repository_stats_schema.py (100%) rename {src => ahriman-web/src}/ahriman/web/schemas/rollback_schema.py (100%) rename {src => ahriman-web/src}/ahriman/web/schemas/search_schema.py (100%) rename {src => ahriman-web/src}/ahriman/web/schemas/sse_schema.py (100%) rename {src => ahriman-web/src}/ahriman/web/schemas/status_schema.py (100%) rename {src => ahriman-web/src}/ahriman/web/schemas/update_flags_schema.py (100%) rename {src => ahriman-web/src}/ahriman/web/schemas/worker_schema.py (100%) rename {src => ahriman-web/src}/ahriman/web/server_info.py (100%) rename {src/ahriman/web/views/v1 => ahriman-web/src/ahriman/web/views}/__init__.py (100%) rename {src/ahriman/web/views/v1/auditlog => ahriman-web/src/ahriman/web/views/api}/__init__.py (100%) rename {src => ahriman-web/src}/ahriman/web/views/api/docs.py (100%) rename {src => ahriman-web/src}/ahriman/web/views/api/swagger.py (100%) rename {src => ahriman-web/src}/ahriman/web/views/base.py (100%) rename {src => ahriman-web/src}/ahriman/web/views/index.py (100%) rename {src => ahriman-web/src}/ahriman/web/views/static.py (100%) rename {src => ahriman-web/src}/ahriman/web/views/status_view_guard.py (100%) rename {src/ahriman/web/views/v1/distributed => ahriman-web/src/ahriman/web/views/v1}/__init__.py (100%) rename {src/ahriman/web/views/v1/packages => ahriman-web/src/ahriman/web/views/v1/auditlog}/__init__.py (100%) rename {src => ahriman-web/src}/ahriman/web/views/v1/auditlog/event_bus.py (100%) rename {src => ahriman-web/src}/ahriman/web/views/v1/auditlog/events.py (100%) rename {src/ahriman/web/views/v1/service => ahriman-web/src/ahriman/web/views/v1/distributed}/__init__.py (100%) rename {src => ahriman-web/src}/ahriman/web/views/v1/distributed/workers.py (100%) rename {src/ahriman/web/views/v1/status => ahriman-web/src/ahriman/web/views/v1/packages}/__init__.py (100%) rename {src => ahriman-web/src}/ahriman/web/views/v1/packages/archives.py (100%) rename {src => ahriman-web/src}/ahriman/web/views/v1/packages/changes.py (100%) rename {src => ahriman-web/src}/ahriman/web/views/v1/packages/dependencies.py (100%) rename {src => ahriman-web/src}/ahriman/web/views/v1/packages/hold.py (100%) rename {src => ahriman-web/src}/ahriman/web/views/v1/packages/logs.py (100%) rename {src => ahriman-web/src}/ahriman/web/views/v1/packages/package.py (100%) rename {src => ahriman-web/src}/ahriman/web/views/v1/packages/packages.py (100%) rename {src => ahriman-web/src}/ahriman/web/views/v1/packages/patch.py (100%) rename {src => ahriman-web/src}/ahriman/web/views/v1/packages/patches.py (100%) rename {src/ahriman/web/views/v1/user => ahriman-web/src/ahriman/web/views/v1/service}/__init__.py (100%) rename {src => ahriman-web/src}/ahriman/web/views/v1/service/add.py (100%) rename {src => ahriman-web/src}/ahriman/web/views/v1/service/config.py (100%) rename {src => ahriman-web/src}/ahriman/web/views/v1/service/logs.py (100%) rename {src => ahriman-web/src}/ahriman/web/views/v1/service/pgp.py (100%) rename {src => ahriman-web/src}/ahriman/web/views/v1/service/process.py (100%) rename {src => ahriman-web/src}/ahriman/web/views/v1/service/rebuild.py (100%) rename {src => ahriman-web/src}/ahriman/web/views/v1/service/remove.py (100%) rename {src => ahriman-web/src}/ahriman/web/views/v1/service/request.py (100%) rename {src => ahriman-web/src}/ahriman/web/views/v1/service/rollback.py (100%) rename {src => ahriman-web/src}/ahriman/web/views/v1/service/search.py (100%) rename {src => ahriman-web/src}/ahriman/web/views/v1/service/update.py (100%) rename {src => ahriman-web/src}/ahriman/web/views/v1/service/upload.py (100%) rename {src/ahriman/web/views/v2 => ahriman-web/src/ahriman/web/views/v1/status}/__init__.py (100%) rename {src => ahriman-web/src}/ahriman/web/views/v1/status/info.py (100%) rename {src => ahriman-web/src}/ahriman/web/views/v1/status/metrics.py (100%) rename {src => ahriman-web/src}/ahriman/web/views/v1/status/repositories.py (100%) rename {src => ahriman-web/src}/ahriman/web/views/v1/status/status.py (100%) rename {src/ahriman/web/views/v2/packages => ahriman-web/src/ahriman/web/views/v1/user}/__init__.py (100%) rename {src => ahriman-web/src}/ahriman/web/views/v1/user/login.py (100%) rename {src => ahriman-web/src}/ahriman/web/views/v1/user/logout.py (100%) rename {src/ahriman/web/views/v2/status => ahriman-web/src/ahriman/web/views/v2}/__init__.py (100%) create mode 100644 ahriman-web/src/ahriman/web/views/v2/packages/__init__.py rename {src => ahriman-web/src}/ahriman/web/views/v2/packages/logs.py (100%) create mode 100644 ahriman-web/src/ahriman/web/views/v2/status/__init__.py rename {src => ahriman-web/src}/ahriman/web/views/v2/status/info.py (100%) rename {src => ahriman-web/src}/ahriman/web/web.py (100%) rename {tests => ahriman-web/tests}/ahriman/application/handlers/test_handler_web.py (96%) rename {tests => ahriman-web/tests}/ahriman/core/auth/conftest.py (100%) rename {tests => ahriman-web/tests}/ahriman/core/auth/test_auth.py (100%) rename {tests => ahriman-web/tests}/ahriman/core/auth/test_helpers.py (100%) rename {tests => ahriman-web/tests}/ahriman/core/auth/test_mapping.py (100%) rename {tests => ahriman-web/tests}/ahriman/core/auth/test_oauth.py (100%) rename {tests => ahriman-web/tests}/ahriman/core/auth/test_pam.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/apispec/test_apispec.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/apispec/test_decorators.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/apispec/test_info.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/conftest.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/middlewares/conftest.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/middlewares/test_auth_handler.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/middlewares/test_etag_handler.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/middlewares/test_exception_handler.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/middlewares/test_metrics_handler.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/middlewares/test_request_id_handler.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/schemas/test_any_schema.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/schemas/test_aur_package_schema.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/schemas/test_auth_info_schema.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/schemas/test_auth_schema.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/schemas/test_auto_refresh_interval_schema.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/schemas/test_build_options_schema.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/schemas/test_changes_schema.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/schemas/test_configuration_schema.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/schemas/test_counters_schema.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/schemas/test_dependencies_schema.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/schemas/test_error_schema.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/schemas/test_event_bus_filter_schema.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/schemas/test_event_schema.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/schemas/test_event_search_schema.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/schemas/test_file_schema.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/schemas/test_hold_schema.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/schemas/test_info_schema.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/schemas/test_info_v2_schema.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/schemas/test_internal_status_schema.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/schemas/test_log_schema.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/schemas/test_login_schema.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/schemas/test_logs_rotate_schema.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/schemas/test_logs_schema.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/schemas/test_logs_search_schema.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/schemas/test_oauth2_schema.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/schemas/test_package_name_schema.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/schemas/test_package_names_schema.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/schemas/test_package_patch_schema.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/schemas/test_package_properties_schema.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/schemas/test_package_schema.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/schemas/test_package_status_schema.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/schemas/test_package_version_schema.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/schemas/test_packager_schema.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/schemas/test_pagination_schema.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/schemas/test_patch_name_schema.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/schemas/test_patch_schema.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/schemas/test_pgp_key_id_schema.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/schemas/test_pgp_key_schema.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/schemas/test_process_id_schema.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/schemas/test_process_schema.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/schemas/test_remote_schema.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/schemas/test_repository_id_schema.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/schemas/test_repository_stats_schema.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/schemas/test_rollback_schema.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/schemas/test_search_schema.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/schemas/test_sse_schema.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/schemas/test_status_schema.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/schemas/test_update_flags_schema.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/schemas/test_worker_schema.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/test_cors.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/test_keys.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/test_routes.py (92%) rename {tests => ahriman-web/tests}/ahriman/web/test_server_info.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/test_web.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/views/api/test_view_api_docs.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/views/api/test_view_api_swagger.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/views/conftest.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/views/test_status_view_guard.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/views/test_view_base.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/views/test_view_index.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/views/test_view_static.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/views/v1/auditlog/test_view_v1_auditlog_event_bus.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/views/v1/auditlog/test_view_v1_auditlog_events.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/views/v1/distributed/test_view_v1_distributed_workers.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/views/v1/packages/test_view_v1_packages_archives.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/views/v1/packages/test_view_v1_packages_changes.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/views/v1/packages/test_view_v1_packages_dependencies.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/views/v1/packages/test_view_v1_packages_hold.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/views/v1/packages/test_view_v1_packages_logs.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/views/v1/packages/test_view_v1_packages_package.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/views/v1/packages/test_view_v1_packages_packages.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/views/v1/packages/test_view_v1_packages_patch.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/views/v1/packages/test_view_v1_packages_patches.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/views/v1/service/test_view_v1_service_add.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/views/v1/service/test_view_v1_service_config.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/views/v1/service/test_view_v1_service_logs.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/views/v1/service/test_view_v1_service_pgp.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/views/v1/service/test_view_v1_service_process.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/views/v1/service/test_view_v1_service_rebuild.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/views/v1/service/test_view_v1_service_remove.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/views/v1/service/test_view_v1_service_request.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/views/v1/service/test_view_v1_service_rollback.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/views/v1/service/test_view_v1_service_search.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/views/v1/service/test_view_v1_service_update.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/views/v1/service/test_view_v1_service_upload.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/views/v1/status/test_view_v1_status_info.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/views/v1/status/test_view_v1_status_metrics.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/views/v1/status/test_view_v1_status_repositories.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/views/v1/status/test_view_v1_status_status.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/views/v1/user/test_view_v1_user_login.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/views/v1/user/test_view_v1_user_logout.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/views/v2/packages/test_view_v2_packages_logs.py (100%) rename {tests => ahriman-web/tests}/ahriman/web/views/v2/status/test_view_v2_status_info.py (100%) create mode 100644 ahriman-web/tests/conftest.py delete mode 100644 subpackages.py delete mode 100644 tests/ahriman/conftest.py delete mode 100644 tests/ahriman/test_tests.py delete mode 120000 tests/testresources/web/templates create mode 120000 tests/testresources/web/templates/api.jinja2 create mode 120000 tests/testresources/web/templates/build-status create mode 120000 tests/testresources/web/templates/build-status-classic.jinja2 create mode 120000 tests/testresources/web/templates/build-status.jinja2 create mode 120000 tests/testresources/web/templates/email-index.jinja2 create mode 120000 tests/testresources/web/templates/error.jinja2 create mode 120000 tests/testresources/web/templates/repo-index.jinja2 create mode 120000 tests/testresources/web/templates/rss.jinja2 create mode 120000 tests/testresources/web/templates/shell create mode 120000 tests/testresources/web/templates/static create mode 120000 tests/testresources/web/templates/telegram-index.jinja2 create mode 120000 tests/testresources/web/templates/utils 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