From 2ea8a4a07f90bada8ec309f79c5ffaaa874e4df7 Mon Sep 17 00:00:00 2001 From: Evgenii Alekseev Date: Fri, 5 Jan 2024 17:31:55 +0200 Subject: [PATCH] test: add pytlint imports plugin and fix errors --- .pylintrc | 1 + pylint_plugins/definition_order.py | 46 ++-- pylint_plugins/import_order.py | 196 ++++++++++++++++++ src/ahriman/application/handlers/__init__.py | 3 +- src/ahriman/application/handlers/add.py | 2 +- src/ahriman/application/handlers/backup.py | 2 +- src/ahriman/application/handlers/change.py | 2 +- src/ahriman/application/handlers/clean.py | 2 +- src/ahriman/application/handlers/daemon.py | 2 +- src/ahriman/application/handlers/dump.py | 2 +- src/ahriman/application/handlers/help.py | 2 +- .../application/handlers/key_import.py | 2 +- src/ahriman/application/handlers/patch.py | 2 +- src/ahriman/application/handlers/rebuild.py | 2 +- src/ahriman/application/handlers/remove.py | 2 +- .../application/handlers/remove_unknown.py | 2 +- .../application/handlers/repositories.py | 2 +- src/ahriman/application/handlers/restore.py | 2 +- src/ahriman/application/handlers/run.py | 2 +- src/ahriman/application/handlers/search.py | 4 +- .../application/handlers/service_updates.py | 2 +- src/ahriman/application/handlers/setup.py | 2 +- src/ahriman/application/handlers/shell.py | 2 +- src/ahriman/application/handlers/sign.py | 2 +- src/ahriman/application/handlers/status.py | 2 +- .../application/handlers/status_update.py | 2 +- src/ahriman/application/handlers/structure.py | 2 +- .../application/handlers/tree_migrate.py | 2 +- src/ahriman/application/handlers/triggers.py | 2 +- .../application/handlers/unsafe_commands.py | 2 +- src/ahriman/application/handlers/update.py | 2 +- src/ahriman/application/handlers/users.py | 2 +- src/ahriman/application/handlers/validate.py | 2 +- src/ahriman/application/handlers/versions.py | 2 +- src/ahriman/application/handlers/web.py | 2 +- src/ahriman/core/alpm/remote/__init__.py | 3 +- src/ahriman/core/alpm/remote/aur.py | 2 +- src/ahriman/core/alpm/remote/official.py | 2 +- .../core/alpm/remote/official_syncdb.py | 2 +- .../core/database/operations/__init__.py | 2 - .../database/operations/auth_operations.py | 2 +- .../database/operations/build_operations.py | 2 +- .../database/operations/changes_operations.py | 2 +- .../database/operations/logs_operations.py | 2 +- .../database/operations/package_operations.py | 2 +- .../database/operations/patch_operations.py | 2 +- src/ahriman/core/formatters/__init__.py | 3 +- .../core/formatters/changes_printer.py | 2 +- src/ahriman/core/formatters/string_printer.py | 2 +- src/ahriman/core/log/journal_handler.py | 2 +- src/ahriman/core/report/report_trigger.py | 2 +- src/ahriman/models/result.py | 2 +- src/ahriman/models/user.py | 2 +- src/ahriman/web/schemas/__init__.py | 2 +- .../web/schemas/package_status_schema.py | 32 +-- src/ahriman/web/views/base.py | 2 +- .../web/views/v1/distributed/workers.py | 2 +- src/ahriman/web/views/v1/service/update.py | 2 +- src/ahriman/web/views/v1/status/packages.py | 2 +- src/ahriman/web/views/v1/status/status.py | 2 +- .../migrations/test_m001_package_source.py | 2 +- tests/ahriman/core/formatters/conftest.py | 2 +- tests/ahriman/models/test_package_source.py | 2 +- tests/ahriman/web/conftest.py | 13 +- tests/ahriman/web/views/test_view_base.py | 2 +- 65 files changed, 302 insertions(+), 111 deletions(-) create mode 100644 pylint_plugins/import_order.py diff --git a/.pylintrc b/.pylintrc index 9ce72fd9..b19c2614 100644 --- a/.pylintrc +++ b/.pylintrc @@ -83,6 +83,7 @@ limit-inference-results=100 # usually to register additional checkers. load-plugins=pylint.extensions.docparams, definition_order, + import_order, # Pickle collected data for later comparisons. persistent=yes diff --git a/pylint_plugins/definition_order.py b/pylint_plugins/definition_order.py index 2c56183d..e86685e5 100644 --- a/pylint_plugins/definition_order.py +++ b/pylint_plugins/definition_order.py @@ -25,19 +25,19 @@ from pylint.lint import PyLinter from typing import Any -class MethodTypeOrder(StrEnum): +class MethodType(StrEnum): """ method type enumeration Attributes: - Class(MethodTypeOrder): (class attribute) class method - Delete(MethodTypeOrder): (class attribute) destructor-like methods - Init(MethodTypeOrder): (class attribute) initialization method - Magic(MethodTypeOrder): (class attribute) other magical methods - New(MethodTypeOrder): (class attribute) constructor method - Normal(MethodTypeOrder): (class attribute) usual method - Property(MethodTypeOrder): (class attribute) property method - Static(MethodTypeOrder): (class attribute) static method + Class(MethodType): (class attribute) class method + Delete(MethodType): (class attribute) destructor-like methods + Init(MethodType): (class attribute) initialization method + Magic(MethodType): (class attribute) other magical methods + New(MethodType): (class attribute) constructor method + Normal(MethodType): (class attribute) usual method + Property(MethodType): (class attribute) property method + Static(MethodType): (class attribute) static method """ Class = "classmethod" @@ -59,20 +59,20 @@ class DefinitionOrder(BaseRawFileChecker): """ DECORATED_METHODS_ORDER = { - "cached_property": MethodTypeOrder.Property, - "classmethod": MethodTypeOrder.Class, - "property": MethodTypeOrder.Property, - "staticmethod": MethodTypeOrder.Static, + "cached_property": MethodType.Property, + "classmethod": MethodType.Class, + "property": MethodType.Property, + "staticmethod": MethodType.Static, } - name = "method-ordering" msgs = { "W6001": ( "Invalid method order %s, expected %s", "methods-out-of-order", "Methods are defined out of recommended order.", - ) + ), } + name = "method-ordering" options = ( ( "method-type-order", @@ -114,7 +114,7 @@ class DefinitionOrder(BaseRawFileChecker): return list(filter(is_defined_function, source)) @staticmethod - def resolve_type(function: nodes.FunctionDef) -> MethodTypeOrder: + def resolve_type(function: nodes.FunctionDef) -> MethodType: """ resolve type of the function @@ -122,15 +122,15 @@ class DefinitionOrder(BaseRawFileChecker): function(nodes.FunctionDef): function definition Returns: - MethodTypeOrder: resolved function type + MethodType: resolved function type """ # init methods if function.name in ("__init__", "__post_init__"): - return MethodTypeOrder.Init + return MethodType.Init if function.name in ("__new__",): - return MethodTypeOrder.New + return MethodType.New if function.name in ("__del__",): - return MethodTypeOrder.Delete + return MethodType.Delete # decorated methods decorators = [] @@ -142,10 +142,10 @@ class DefinitionOrder(BaseRawFileChecker): # magic methods if function.name.startswith("__") and function.name.endswith("__"): - return MethodTypeOrder.Magic + return MethodType.Magic # normal method - return MethodTypeOrder.Normal + return MethodType.Normal def check_class(self, clazz: nodes.ClassDef) -> None: """ @@ -184,7 +184,7 @@ class DefinitionOrder(BaseRawFileChecker): try: function_type_index = self.linter.config.method_type_order.index(function_type) except ValueError: - function_type_index = 10 # not in the list + function_type_index = len(self.linter.config.method_type_order) # not in the list return function_type_index, function.name diff --git a/pylint_plugins/import_order.py b/pylint_plugins/import_order.py new file mode 100644 index 00000000..06bfd622 --- /dev/null +++ b/pylint_plugins/import_order.py @@ -0,0 +1,196 @@ +# +# Copyright (c) 2021-2023 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 . +# +from astroid import nodes +from collections.abc import Iterable +from enum import StrEnum +from pylint.checkers import BaseRawFileChecker +from pylint.lint import PyLinter +from typing import Any + + +class ImportType(StrEnum): + """ + import type enumeration + + Attributes: + Package(MethodTypeOrder): (class attribute) package import + PackageFrom(MethodTypeOrder): (class attribute) package import, from clause + System(ImportType): (class attribute) system installed packages + SystemFrom(MethodTypeOrder): (class attribute) system installed packages, from clause + """ + + Package = "package" + PackageFrom = "package-from" + System = "system" + SystemFrom = "system-from" + + +class ImportOrder(BaseRawFileChecker): + """ + check if imports are defined in recommended order + """ + + msgs = { + "W6002": ( + "Invalid import order %s, expected before %s", + "imports-out-of-order", + "Imports are defined out of recommended order.", + ), + "W6003": ( + "Import contains more than one package: %s", + "multiple-package-imports", + "Multiple package imports are not allowed.", + ), + "W6004": ( + "Invalid from import order %s, expected %s", + "from-imports-out-of-order", + "From imports are defined out of recommended order.", + ), + } + name = "import-ordering" + options = ( + ( + "import-type-order", + { + "default": [ + "system", + "system-from", + "package", + "package-from", + ], + "type": "csv", + "metavar": "", + "help": "Import types order to check.", + }, + ), + ( + "root-module", + { + "default": "ahriman", + "type": "string", + "help": "Root module name", + } + ) + ) + + @staticmethod + def imports(source: Iterable[Any], start_lineno: int = 0) -> list[nodes.Import | nodes.ImportFrom]: + """ + extract import nodes from list of raw nodes + + Args: + source(Iterable[Any]): all available nodes + start_lineno(int, optional): minimal allowed line number (Default value = 0) + + Returns: + list[nodes.Import | nodes.ImportFrom]: list of import nodes + """ + + def is_defined_import(imports: Any) -> bool: + return isinstance(imports, (nodes.Import, nodes.ImportFrom)) \ + and imports.lineno is not None \ + and imports.lineno >= start_lineno + + return list(filter(is_defined_import, source)) + + def check_from_imports(self, imports: nodes.ImportFrom) -> None: + """ + check import from statement + + Args: + imports(nodes.ImportFrom): import from node + """ + imported = [names for names, _ in imports.names] + for real, expected in zip(imported, sorted(imported)): + if real == expected: + continue + self.add_message("from-imports-out-of-order", line=imports.lineno, args=(real, expected)) + break + + def check_imports(self, imports: list[nodes.Import | nodes.ImportFrom], root_package: str) -> None: + """ + check imports + + Args: + imports(list[nodes.Import | nodes.ImportFrom]): list of imports in their defined order + root_package(str): root package name + """ + last_statement: tuple[int, str] | None = None + + for statement in imports: + # define types and perform specific checks + if isinstance(statement, nodes.ImportFrom): + import_name = statement.modname + root, *_ = import_name.split(".", maxsplit=1) + import_type = ImportType.PackageFrom if root_package == root else ImportType.SystemFrom + # check from import itself + self.check_from_imports(statement) + else: + import_name = next(name for name, _ in statement.names) + root, *_ = import_name.split(".", maxsplit=1)[0] + import_type = ImportType.Package if root_package == root else ImportType.System + # check import itself + self.check_package_imports(statement) + + # extract index + try: + import_type_index = self.linter.config.import_type_order.index(import_type) + except ValueError: + import_type_index = len(self.linter.config.import_type_order) + + # check ordering if possible + if last_statement is not None: + _, last_statement_name = last_statement + if last_statement > (import_type_index, import_name): + self.add_message("imports-out-of-order", line=statement.lineno, + args=(import_name, last_statement_name)) + + # update the last value + last_statement = import_type_index, import_name + + def check_package_imports(self, imports: nodes.Import) -> None: + """ + check package import + + Args: + imports(nodes.Import): package import node + """ + if len(imports.names) != 1: + self.add_message("multiple-package-imports", line=imports.lineno, args=(imports.names,)) + + def process_module(self, node: nodes.Module) -> None: + """ + process module + + Args: + node(nodes.Module): module node to check + """ + root_module, *_ = node.qname().split(".") + self.check_imports(self.imports(node.values()), root_module) + + +def register(linter: PyLinter) -> None: + """ + register custom checker + + Args: + linter(PyLinter): linter in which checker should be registered + """ + linter.register_checker(ImportOrder(linter)) diff --git a/src/ahriman/application/handlers/__init__.py b/src/ahriman/application/handlers/__init__.py index b207689f..0c731648 100644 --- a/src/ahriman/application/handlers/__init__.py +++ b/src/ahriman/application/handlers/__init__.py @@ -17,14 +17,13 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . # -from ahriman.application.handlers.handler import Handler - from ahriman.application.handlers.add import Add from ahriman.application.handlers.backup import Backup from ahriman.application.handlers.change import Change from ahriman.application.handlers.clean import Clean from ahriman.application.handlers.daemon import Daemon from ahriman.application.handlers.dump import Dump +from ahriman.application.handlers.handler import Handler from ahriman.application.handlers.help import Help from ahriman.application.handlers.key_import import KeyImport from ahriman.application.handlers.patch import Patch diff --git a/src/ahriman/application/handlers/add.py b/src/ahriman/application/handlers/add.py index 002353e1..0c687028 100644 --- a/src/ahriman/application/handlers/add.py +++ b/src/ahriman/application/handlers/add.py @@ -20,7 +20,7 @@ import argparse from ahriman.application.application import Application -from ahriman.application.handlers import Handler +from ahriman.application.handlers.handler import Handler from ahriman.core.configuration import Configuration from ahriman.models.packagers import Packagers from ahriman.models.pkgbuild_patch import PkgbuildPatch diff --git a/src/ahriman/application/handlers/backup.py b/src/ahriman/application/handlers/backup.py index 7c3b9f4a..b0e4a1d9 100644 --- a/src/ahriman/application/handlers/backup.py +++ b/src/ahriman/application/handlers/backup.py @@ -23,7 +23,7 @@ import pwd from pathlib import Path from tarfile import TarFile -from ahriman.application.handlers import Handler +from ahriman.application.handlers.handler import Handler from ahriman.core.configuration import Configuration from ahriman.core.database import SQLite from ahriman.models.repository_id import RepositoryId diff --git a/src/ahriman/application/handlers/change.py b/src/ahriman/application/handlers/change.py index efa6cefc..cac737ea 100644 --- a/src/ahriman/application/handlers/change.py +++ b/src/ahriman/application/handlers/change.py @@ -20,7 +20,7 @@ import argparse from ahriman.application.application import Application -from ahriman.application.handlers import Handler +from ahriman.application.handlers.handler import Handler from ahriman.core.configuration import Configuration from ahriman.core.formatters import ChangesPrinter from ahriman.models.action import Action diff --git a/src/ahriman/application/handlers/clean.py b/src/ahriman/application/handlers/clean.py index 75c52509..49b7a56c 100644 --- a/src/ahriman/application/handlers/clean.py +++ b/src/ahriman/application/handlers/clean.py @@ -20,7 +20,7 @@ import argparse from ahriman.application.application import Application -from ahriman.application.handlers import Handler +from ahriman.application.handlers.handler import Handler from ahriman.core.configuration import Configuration from ahriman.models.repository_id import RepositoryId diff --git a/src/ahriman/application/handlers/daemon.py b/src/ahriman/application/handlers/daemon.py index f16c3d68..4979ab4c 100644 --- a/src/ahriman/application/handlers/daemon.py +++ b/src/ahriman/application/handlers/daemon.py @@ -21,7 +21,7 @@ import argparse from ahriman.application.application import Application from ahriman.application.application.updates_iterator import FixedUpdatesIterator, UpdatesIterator -from ahriman.application.handlers import Handler +from ahriman.application.handlers.handler import Handler from ahriman.application.handlers.update import Update from ahriman.core.configuration import Configuration from ahriman.models.repository_id import RepositoryId diff --git a/src/ahriman/application/handlers/dump.py b/src/ahriman/application/handlers/dump.py index 1c2ce799..1226d6fc 100644 --- a/src/ahriman/application/handlers/dump.py +++ b/src/ahriman/application/handlers/dump.py @@ -19,7 +19,7 @@ # import argparse -from ahriman.application.handlers import Handler +from ahriman.application.handlers.handler import Handler from ahriman.core.configuration import Configuration from ahriman.core.formatters import ConfigurationPathsPrinter, ConfigurationPrinter, StringPrinter from ahriman.models.repository_id import RepositoryId diff --git a/src/ahriman/application/handlers/help.py b/src/ahriman/application/handlers/help.py index 839b9137..793564ae 100644 --- a/src/ahriman/application/handlers/help.py +++ b/src/ahriman/application/handlers/help.py @@ -19,7 +19,7 @@ # import argparse -from ahriman.application.handlers import Handler +from ahriman.application.handlers.handler import Handler from ahriman.core.configuration import Configuration from ahriman.models.repository_id import RepositoryId diff --git a/src/ahriman/application/handlers/key_import.py b/src/ahriman/application/handlers/key_import.py index c8746e6d..16ae8001 100644 --- a/src/ahriman/application/handlers/key_import.py +++ b/src/ahriman/application/handlers/key_import.py @@ -20,7 +20,7 @@ import argparse from ahriman.application.application import Application -from ahriman.application.handlers import Handler +from ahriman.application.handlers.handler import Handler from ahriman.core.configuration import Configuration from ahriman.models.repository_id import RepositoryId diff --git a/src/ahriman/application/handlers/patch.py b/src/ahriman/application/handlers/patch.py index 6400c2f4..220a97e4 100644 --- a/src/ahriman/application/handlers/patch.py +++ b/src/ahriman/application/handlers/patch.py @@ -23,7 +23,7 @@ import sys from pathlib import Path from ahriman.application.application import Application -from ahriman.application.handlers import Handler +from ahriman.application.handlers.handler import Handler from ahriman.core.build_tools.sources import Sources from ahriman.core.configuration import Configuration from ahriman.core.formatters import PatchPrinter diff --git a/src/ahriman/application/handlers/rebuild.py b/src/ahriman/application/handlers/rebuild.py index f0df1465..5313c5b0 100644 --- a/src/ahriman/application/handlers/rebuild.py +++ b/src/ahriman/application/handlers/rebuild.py @@ -20,7 +20,7 @@ import argparse from ahriman.application.application import Application -from ahriman.application.handlers import Handler +from ahriman.application.handlers.handler import Handler from ahriman.core.configuration import Configuration from ahriman.models.build_status import BuildStatusEnum from ahriman.models.package import Package diff --git a/src/ahriman/application/handlers/remove.py b/src/ahriman/application/handlers/remove.py index 263cb53d..033f34ca 100644 --- a/src/ahriman/application/handlers/remove.py +++ b/src/ahriman/application/handlers/remove.py @@ -20,7 +20,7 @@ import argparse from ahriman.application.application import Application -from ahriman.application.handlers import Handler +from ahriman.application.handlers.handler import Handler from ahriman.core.configuration import Configuration from ahriman.models.repository_id import RepositoryId diff --git a/src/ahriman/application/handlers/remove_unknown.py b/src/ahriman/application/handlers/remove_unknown.py index cf5e9747..d062416e 100644 --- a/src/ahriman/application/handlers/remove_unknown.py +++ b/src/ahriman/application/handlers/remove_unknown.py @@ -20,7 +20,7 @@ import argparse from ahriman.application.application import Application -from ahriman.application.handlers import Handler +from ahriman.application.handlers.handler import Handler from ahriman.core.configuration import Configuration from ahriman.core.formatters import StringPrinter from ahriman.models.repository_id import RepositoryId diff --git a/src/ahriman/application/handlers/repositories.py b/src/ahriman/application/handlers/repositories.py index 2460ec94..049d777e 100644 --- a/src/ahriman/application/handlers/repositories.py +++ b/src/ahriman/application/handlers/repositories.py @@ -19,7 +19,7 @@ # import argparse -from ahriman.application.handlers import Handler +from ahriman.application.handlers.handler import Handler from ahriman.core.configuration import Configuration from ahriman.core.formatters import RepositoryPrinter from ahriman.models.repository_id import RepositoryId diff --git a/src/ahriman/application/handlers/restore.py b/src/ahriman/application/handlers/restore.py index 6bd33391..6f07cd71 100644 --- a/src/ahriman/application/handlers/restore.py +++ b/src/ahriman/application/handlers/restore.py @@ -21,7 +21,7 @@ import argparse from tarfile import TarFile -from ahriman.application.handlers import Handler +from ahriman.application.handlers.handler import Handler from ahriman.core.configuration import Configuration from ahriman.models.repository_id import RepositoryId diff --git a/src/ahriman/application/handlers/run.py b/src/ahriman/application/handlers/run.py index 49d90424..13108318 100644 --- a/src/ahriman/application/handlers/run.py +++ b/src/ahriman/application/handlers/run.py @@ -20,7 +20,7 @@ import argparse import shlex -from ahriman.application.handlers import Handler +from ahriman.application.handlers.handler import Handler from ahriman.core.configuration import Configuration from ahriman.models.repository_id import RepositoryId diff --git a/src/ahriman/application/handlers/search.py b/src/ahriman/application/handlers/search.py index 4eab6823..c3fab7a2 100644 --- a/src/ahriman/application/handlers/search.py +++ b/src/ahriman/application/handlers/search.py @@ -19,10 +19,10 @@ # import argparse -from dataclasses import fields from collections.abc import Callable, Iterable +from dataclasses import fields -from ahriman.application.handlers import Handler +from ahriman.application.handlers.handler import Handler from ahriman.core.alpm.remote import AUR, Official from ahriman.core.configuration import Configuration from ahriman.core.exceptions import OptionError diff --git a/src/ahriman/application/handlers/service_updates.py b/src/ahriman/application/handlers/service_updates.py index 8956ec14..1d608462 100644 --- a/src/ahriman/application/handlers/service_updates.py +++ b/src/ahriman/application/handlers/service_updates.py @@ -20,7 +20,7 @@ import argparse from ahriman import __version__ -from ahriman.application.handlers import Handler +from ahriman.application.handlers.handler import Handler from ahriman.core.configuration import Configuration from ahriman.core.formatters import UpdatePrinter from ahriman.models.package import Package diff --git a/src/ahriman/application/handlers/setup.py b/src/ahriman/application/handlers/setup.py index 469505d4..2d61982c 100644 --- a/src/ahriman/application/handlers/setup.py +++ b/src/ahriman/application/handlers/setup.py @@ -24,7 +24,7 @@ from pwd import getpwuid from urllib.parse import quote_plus as urlencode from ahriman.application.application import Application -from ahriman.application.handlers import Handler +from ahriman.application.handlers.handler import Handler from ahriman.core.configuration import Configuration from ahriman.core.exceptions import MissingArchitectureError from ahriman.models.repository_id import RepositoryId diff --git a/src/ahriman/application/handlers/shell.py b/src/ahriman/application/handlers/shell.py index c52b2f87..c7ae94c6 100644 --- a/src/ahriman/application/handlers/shell.py +++ b/src/ahriman/application/handlers/shell.py @@ -23,7 +23,7 @@ import sys from pathlib import Path -from ahriman.application.handlers import Handler +from ahriman.application.handlers.handler import Handler from ahriman.core.configuration import Configuration from ahriman.core.formatters import StringPrinter from ahriman.models.repository_id import RepositoryId diff --git a/src/ahriman/application/handlers/sign.py b/src/ahriman/application/handlers/sign.py index ae603515..50af427b 100644 --- a/src/ahriman/application/handlers/sign.py +++ b/src/ahriman/application/handlers/sign.py @@ -20,7 +20,7 @@ import argparse from ahriman.application.application import Application -from ahriman.application.handlers import Handler +from ahriman.application.handlers.handler import Handler from ahriman.core.configuration import Configuration from ahriman.models.repository_id import RepositoryId diff --git a/src/ahriman/application/handlers/status.py b/src/ahriman/application/handlers/status.py index b0e5c180..caa1c79d 100644 --- a/src/ahriman/application/handlers/status.py +++ b/src/ahriman/application/handlers/status.py @@ -22,7 +22,7 @@ import argparse from collections.abc import Callable from ahriman.application.application import Application -from ahriman.application.handlers import Handler +from ahriman.application.handlers.handler import Handler from ahriman.core.configuration import Configuration from ahriman.core.formatters import PackagePrinter, StatusPrinter from ahriman.models.build_status import BuildStatus diff --git a/src/ahriman/application/handlers/status_update.py b/src/ahriman/application/handlers/status_update.py index c52f9236..3b1637b0 100644 --- a/src/ahriman/application/handlers/status_update.py +++ b/src/ahriman/application/handlers/status_update.py @@ -20,7 +20,7 @@ import argparse from ahriman.application.application import Application -from ahriman.application.handlers import Handler +from ahriman.application.handlers.handler import Handler from ahriman.core.configuration import Configuration from ahriman.models.action import Action from ahriman.models.repository_id import RepositoryId diff --git a/src/ahriman/application/handlers/structure.py b/src/ahriman/application/handlers/structure.py index 42a6ca00..efb2d11e 100644 --- a/src/ahriman/application/handlers/structure.py +++ b/src/ahriman/application/handlers/structure.py @@ -20,7 +20,7 @@ import argparse from ahriman.application.application import Application -from ahriman.application.handlers import Handler +from ahriman.application.handlers.handler import Handler from ahriman.core.configuration import Configuration from ahriman.core.formatters import StringPrinter, TreePrinter from ahriman.core.tree import Tree diff --git a/src/ahriman/application/handlers/tree_migrate.py b/src/ahriman/application/handlers/tree_migrate.py index 57e944aa..e29598fd 100644 --- a/src/ahriman/application/handlers/tree_migrate.py +++ b/src/ahriman/application/handlers/tree_migrate.py @@ -19,7 +19,7 @@ # import argparse -from ahriman.application.handlers import Handler +from ahriman.application.handlers.handler import Handler from ahriman.core.configuration import Configuration from ahriman.models.repository_id import RepositoryId from ahriman.models.repository_paths import RepositoryPaths diff --git a/src/ahriman/application/handlers/triggers.py b/src/ahriman/application/handlers/triggers.py index 60afff44..f3739d90 100644 --- a/src/ahriman/application/handlers/triggers.py +++ b/src/ahriman/application/handlers/triggers.py @@ -20,7 +20,7 @@ import argparse from ahriman.application.application import Application -from ahriman.application.handlers import Handler +from ahriman.application.handlers.handler import Handler from ahriman.core.configuration import Configuration from ahriman.models.repository_id import RepositoryId from ahriman.models.result import Result diff --git a/src/ahriman/application/handlers/unsafe_commands.py b/src/ahriman/application/handlers/unsafe_commands.py index f463ead5..80cffa02 100644 --- a/src/ahriman/application/handlers/unsafe_commands.py +++ b/src/ahriman/application/handlers/unsafe_commands.py @@ -19,7 +19,7 @@ # import argparse -from ahriman.application.handlers import Handler +from ahriman.application.handlers.handler import Handler from ahriman.core.configuration import Configuration from ahriman.core.formatters import StringPrinter from ahriman.models.repository_id import RepositoryId diff --git a/src/ahriman/application/handlers/update.py b/src/ahriman/application/handlers/update.py index 63c83398..359394b1 100644 --- a/src/ahriman/application/handlers/update.py +++ b/src/ahriman/application/handlers/update.py @@ -22,7 +22,7 @@ import argparse from collections.abc import Callable from ahriman.application.application import Application -from ahriman.application.handlers import Handler +from ahriman.application.handlers.handler import Handler from ahriman.core.configuration import Configuration from ahriman.models.packagers import Packagers from ahriman.models.repository_id import RepositoryId diff --git a/src/ahriman/application/handlers/users.py b/src/ahriman/application/handlers/users.py index 875ec110..244d0fc2 100644 --- a/src/ahriman/application/handlers/users.py +++ b/src/ahriman/application/handlers/users.py @@ -20,7 +20,7 @@ import argparse import getpass -from ahriman.application.handlers import Handler +from ahriman.application.handlers.handler import Handler from ahriman.core.configuration import Configuration from ahriman.core.database import SQLite from ahriman.core.exceptions import PasswordError diff --git a/src/ahriman/application/handlers/validate.py b/src/ahriman/application/handlers/validate.py index e83818ed..63d9e51d 100644 --- a/src/ahriman/application/handlers/validate.py +++ b/src/ahriman/application/handlers/validate.py @@ -22,7 +22,7 @@ import copy from typing import Any -from ahriman.application.handlers import Handler +from ahriman.application.handlers.handler import Handler from ahriman.core.configuration import Configuration from ahriman.core.configuration.schema import CONFIGURATION_SCHEMA, ConfigurationSchema from ahriman.core.configuration.validator import Validator diff --git a/src/ahriman/application/handlers/versions.py b/src/ahriman/application/handlers/versions.py index 33ee46ab..a187734e 100644 --- a/src/ahriman/application/handlers/versions.py +++ b/src/ahriman/application/handlers/versions.py @@ -25,7 +25,7 @@ from collections.abc import Generator from importlib import metadata from ahriman import __version__ -from ahriman.application.handlers import Handler +from ahriman.application.handlers.handler import Handler from ahriman.core.configuration import Configuration from ahriman.core.formatters import VersionPrinter from ahriman.models.repository_id import RepositoryId diff --git a/src/ahriman/application/handlers/web.py b/src/ahriman/application/handlers/web.py index 34b25aee..5a8b71a6 100644 --- a/src/ahriman/application/handlers/web.py +++ b/src/ahriman/application/handlers/web.py @@ -21,7 +21,7 @@ import argparse from collections.abc import Generator -from ahriman.application.handlers import Handler +from ahriman.application.handlers.handler import Handler from ahriman.core.configuration import Configuration from ahriman.core.spawn import Spawn from ahriman.core.triggers import TriggerLoader diff --git a/src/ahriman/core/alpm/remote/__init__.py b/src/ahriman/core/alpm/remote/__init__.py index edfa49d0..55172566 100644 --- a/src/ahriman/core/alpm/remote/__init__.py +++ b/src/ahriman/core/alpm/remote/__init__.py @@ -17,8 +17,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . # -from ahriman.core.alpm.remote.remote import Remote - from ahriman.core.alpm.remote.aur import AUR from ahriman.core.alpm.remote.official import Official from ahriman.core.alpm.remote.official_syncdb import OfficialSyncdb +from ahriman.core.alpm.remote.remote import Remote diff --git a/src/ahriman/core/alpm/remote/aur.py b/src/ahriman/core/alpm/remote/aur.py index 8aeeb159..7672a0d1 100644 --- a/src/ahriman/core/alpm/remote/aur.py +++ b/src/ahriman/core/alpm/remote/aur.py @@ -20,7 +20,7 @@ from typing import Any from ahriman.core.alpm.pacman import Pacman -from ahriman.core.alpm.remote import Remote +from ahriman.core.alpm.remote.remote import Remote from ahriman.core.exceptions import PackageInfoError, UnknownPackageError from ahriman.models.aur_package import AURPackage diff --git a/src/ahriman/core/alpm/remote/official.py b/src/ahriman/core/alpm/remote/official.py index c281691b..b48ca5b8 100644 --- a/src/ahriman/core/alpm/remote/official.py +++ b/src/ahriman/core/alpm/remote/official.py @@ -20,7 +20,7 @@ from typing import Any from ahriman.core.alpm.pacman import Pacman -from ahriman.core.alpm.remote import Remote +from ahriman.core.alpm.remote.remote import Remote from ahriman.core.exceptions import PackageInfoError, UnknownPackageError from ahriman.models.aur_package import AURPackage diff --git a/src/ahriman/core/alpm/remote/official_syncdb.py b/src/ahriman/core/alpm/remote/official_syncdb.py index 4ddf0a6c..b1aaf150 100644 --- a/src/ahriman/core/alpm/remote/official_syncdb.py +++ b/src/ahriman/core/alpm/remote/official_syncdb.py @@ -18,7 +18,7 @@ # along with this program. If not, see . # from ahriman.core.alpm.pacman import Pacman -from ahriman.core.alpm.remote import Official +from ahriman.core.alpm.remote.official import Official from ahriman.core.exceptions import UnknownPackageError from ahriman.models.aur_package import AURPackage diff --git a/src/ahriman/core/database/operations/__init__.py b/src/ahriman/core/database/operations/__init__.py index b988de0a..579465fd 100644 --- a/src/ahriman/core/database/operations/__init__.py +++ b/src/ahriman/core/database/operations/__init__.py @@ -17,8 +17,6 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . # -from ahriman.core.database.operations.operations import Operations - from ahriman.core.database.operations.auth_operations import AuthOperations from ahriman.core.database.operations.build_operations import BuildOperations from ahriman.core.database.operations.changes_operations import ChangesOperations diff --git a/src/ahriman/core/database/operations/auth_operations.py b/src/ahriman/core/database/operations/auth_operations.py index 9badb27b..432d03fb 100644 --- a/src/ahriman/core/database/operations/auth_operations.py +++ b/src/ahriman/core/database/operations/auth_operations.py @@ -19,7 +19,7 @@ # from sqlite3 import Connection -from ahriman.core.database.operations import Operations +from ahriman.core.database.operations.operations import Operations from ahriman.models.user import User from ahriman.models.user_access import UserAccess diff --git a/src/ahriman/core/database/operations/build_operations.py b/src/ahriman/core/database/operations/build_operations.py index 2a2beff2..9d87debd 100644 --- a/src/ahriman/core/database/operations/build_operations.py +++ b/src/ahriman/core/database/operations/build_operations.py @@ -19,7 +19,7 @@ # from sqlite3 import Connection -from ahriman.core.database.operations import Operations +from ahriman.core.database.operations.operations import Operations from ahriman.models.package import Package from ahriman.models.repository_id import RepositoryId diff --git a/src/ahriman/core/database/operations/changes_operations.py b/src/ahriman/core/database/operations/changes_operations.py index 6552f359..d5e4dac8 100644 --- a/src/ahriman/core/database/operations/changes_operations.py +++ b/src/ahriman/core/database/operations/changes_operations.py @@ -19,7 +19,7 @@ # from sqlite3 import Connection -from ahriman.core.database.operations import Operations +from ahriman.core.database.operations.operations import Operations from ahriman.models.changes import Changes from ahriman.models.repository_id import RepositoryId diff --git a/src/ahriman/core/database/operations/logs_operations.py b/src/ahriman/core/database/operations/logs_operations.py index 4a7f4ca3..862c5d6f 100644 --- a/src/ahriman/core/database/operations/logs_operations.py +++ b/src/ahriman/core/database/operations/logs_operations.py @@ -19,7 +19,7 @@ # from sqlite3 import Connection -from ahriman.core.database.operations import Operations +from ahriman.core.database.operations.operations import Operations from ahriman.models.log_record_id import LogRecordId from ahriman.models.repository_id import RepositoryId diff --git a/src/ahriman/core/database/operations/package_operations.py b/src/ahriman/core/database/operations/package_operations.py index a1a0cf64..812d0009 100644 --- a/src/ahriman/core/database/operations/package_operations.py +++ b/src/ahriman/core/database/operations/package_operations.py @@ -20,7 +20,7 @@ from collections.abc import Generator, Iterable from sqlite3 import Connection -from ahriman.core.database.operations import Operations +from ahriman.core.database.operations.operations import Operations from ahriman.models.build_status import BuildStatus from ahriman.models.package import Package from ahriman.models.package_description import PackageDescription diff --git a/src/ahriman/core/database/operations/patch_operations.py b/src/ahriman/core/database/operations/patch_operations.py index eaee368c..e657a346 100644 --- a/src/ahriman/core/database/operations/patch_operations.py +++ b/src/ahriman/core/database/operations/patch_operations.py @@ -20,7 +20,7 @@ from collections import defaultdict from sqlite3 import Connection -from ahriman.core.database.operations import Operations +from ahriman.core.database.operations.operations import Operations from ahriman.models.pkgbuild_patch import PkgbuildPatch diff --git a/src/ahriman/core/formatters/__init__.py b/src/ahriman/core/formatters/__init__.py index a988babb..dfcee20a 100644 --- a/src/ahriman/core/formatters/__init__.py +++ b/src/ahriman/core/formatters/__init__.py @@ -17,8 +17,6 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . # -from ahriman.core.formatters.printer import Printer - from ahriman.core.formatters.aur_printer import AurPrinter from ahriman.core.formatters.build_printer import BuildPrinter from ahriman.core.formatters.changes_printer import ChangesPrinter @@ -26,6 +24,7 @@ from ahriman.core.formatters.configuration_paths_printer import ConfigurationPat from ahriman.core.formatters.configuration_printer import ConfigurationPrinter from ahriman.core.formatters.package_printer import PackagePrinter from ahriman.core.formatters.patch_printer import PatchPrinter +from ahriman.core.formatters.printer import Printer from ahriman.core.formatters.repository_printer import RepositoryPrinter from ahriman.core.formatters.status_printer import StatusPrinter from ahriman.core.formatters.string_printer import StringPrinter diff --git a/src/ahriman/core/formatters/changes_printer.py b/src/ahriman/core/formatters/changes_printer.py index ad596d4a..a0532582 100644 --- a/src/ahriman/core/formatters/changes_printer.py +++ b/src/ahriman/core/formatters/changes_printer.py @@ -17,7 +17,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . # -from ahriman.core.formatters import Printer +from ahriman.core.formatters.printer import Printer from ahriman.models.changes import Changes from ahriman.models.property import Property diff --git a/src/ahriman/core/formatters/string_printer.py b/src/ahriman/core/formatters/string_printer.py index b548b447..7e498534 100644 --- a/src/ahriman/core/formatters/string_printer.py +++ b/src/ahriman/core/formatters/string_printer.py @@ -17,7 +17,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . # -from ahriman.core.formatters import Printer +from ahriman.core.formatters.printer import Printer class StringPrinter(Printer): diff --git a/src/ahriman/core/log/journal_handler.py b/src/ahriman/core/log/journal_handler.py index 442b484c..792c7d6a 100644 --- a/src/ahriman/core/log/journal_handler.py +++ b/src/ahriman/core/log/journal_handler.py @@ -17,7 +17,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . # -from logging import NullHandler +from logging import NullHandler # pylint: disable=imports-out-of-order from typing import Any diff --git a/src/ahriman/core/report/report_trigger.py b/src/ahriman/core/report/report_trigger.py index c9e52966..2be51a16 100644 --- a/src/ahriman/core/report/report_trigger.py +++ b/src/ahriman/core/report/report_trigger.py @@ -18,8 +18,8 @@ # along with this program. If not, see . # from ahriman.core.configuration import Configuration -from ahriman.core.triggers import Trigger from ahriman.core.report.report import Report +from ahriman.core.triggers import Trigger from ahriman.models.package import Package from ahriman.models.repository_id import RepositoryId from ahriman.models.result import Result diff --git a/src/ahriman/models/result.py b/src/ahriman/models/result.py index b4867b0b..38c9a407 100644 --- a/src/ahriman/models/result.py +++ b/src/ahriman/models/result.py @@ -19,7 +19,7 @@ # from __future__ import annotations -from collections.abc import Iterable, Callable +from collections.abc import Callable, Iterable from typing import Any, Self from ahriman.models.package import Package diff --git a/src/ahriman/models/user.py b/src/ahriman/models/user.py index 0fff8954..399c670d 100644 --- a/src/ahriman/models/user.py +++ b/src/ahriman/models/user.py @@ -17,9 +17,9 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . # -from secrets import token_urlsafe as generate_password from dataclasses import dataclass, replace from passlib.hash import sha512_crypt +from secrets import token_urlsafe as generate_password from typing import Self from ahriman.models.user_access import UserAccess diff --git a/src/ahriman/web/schemas/__init__.py b/src/ahriman/web/schemas/__init__.py index 1fc34d94..3b3e4bd6 100644 --- a/src/ahriman/web/schemas/__init__.py +++ b/src/ahriman/web/schemas/__init__.py @@ -35,7 +35,7 @@ from ahriman.web.schemas.package_names_schema import PackageNamesSchema from ahriman.web.schemas.package_patch_schema import PackagePatchSchema from ahriman.web.schemas.package_properties_schema import PackagePropertiesSchema from ahriman.web.schemas.package_schema import PackageSchema -from ahriman.web.schemas.package_status_schema import PackageStatusSimplifiedSchema, PackageStatusSchema +from ahriman.web.schemas.package_status_schema import PackageStatusSchema, PackageStatusSimplifiedSchema from ahriman.web.schemas.pagination_schema import PaginationSchema from ahriman.web.schemas.patch_name_schema import PatchNameSchema from ahriman.web.schemas.patch_schema import PatchSchema diff --git a/src/ahriman/web/schemas/package_status_schema.py b/src/ahriman/web/schemas/package_status_schema.py index 54702610..b5a97490 100644 --- a/src/ahriman/web/schemas/package_status_schema.py +++ b/src/ahriman/web/schemas/package_status_schema.py @@ -25,22 +25,6 @@ from ahriman.web.schemas.repository_id_schema import RepositoryIdSchema from ahriman.web.schemas.status_schema import StatusSchema -class PackageStatusSimplifiedSchema(Schema): - """ - special request package status schema - """ - - package = fields.Nested(PackageSchema(), metadata={ - "description": "Package description", - }) - status = fields.Enum(BuildStatusEnum, by_value=True, required=True, metadata={ - "description": "Current status", - }) - repository = fields.Nested(RepositoryIdSchema(), required=True, metadata={ - "description": "Repository identifier", - }) - - class PackageStatusSchema(Schema): """ response package status schema @@ -55,3 +39,19 @@ class PackageStatusSchema(Schema): repository = fields.Nested(RepositoryIdSchema(), required=True, metadata={ "description": "Repository identifier", }) + + +class PackageStatusSimplifiedSchema(Schema): + """ + special request package status schema + """ + + package = fields.Nested(PackageSchema(), metadata={ + "description": "Package description", + }) + status = fields.Enum(BuildStatusEnum, by_value=True, required=True, metadata={ + "description": "Current status", + }) + repository = fields.Nested(RepositoryIdSchema(), required=True, metadata={ + "description": "Repository identifier", + }) diff --git a/src/ahriman/web/views/base.py b/src/ahriman/web/views/base.py index 3374640b..061c9370 100644 --- a/src/ahriman/web/views/base.py +++ b/src/ahriman/web/views/base.py @@ -17,8 +17,8 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . # -from aiohttp_cors import CorsViewMixin # type: ignore[import-untyped] from aiohttp.web import HTTPBadRequest, HTTPNotFound, Request, StreamResponse, View +from aiohttp_cors import CorsViewMixin # type: ignore[import-untyped] from collections.abc import Awaitable, Callable from typing import TypeVar diff --git a/src/ahriman/web/views/v1/distributed/workers.py b/src/ahriman/web/views/v1/distributed/workers.py index 314e106a..bb0bbd23 100644 --- a/src/ahriman/web/views/v1/distributed/workers.py +++ b/src/ahriman/web/views/v1/distributed/workers.py @@ -19,8 +19,8 @@ # import aiohttp_apispec # type: ignore[import-untyped] -from collections.abc import Callable from aiohttp.web import HTTPBadRequest, HTTPNoContent, Response, json_response +from collections.abc import Callable from ahriman.models.user_access import UserAccess from ahriman.models.worker import Worker diff --git a/src/ahriman/web/views/v1/service/update.py b/src/ahriman/web/views/v1/service/update.py index 0c2411ca..a18997e2 100644 --- a/src/ahriman/web/views/v1/service/update.py +++ b/src/ahriman/web/views/v1/service/update.py @@ -22,7 +22,7 @@ import aiohttp_apispec # type: ignore[import-untyped] from aiohttp.web import HTTPBadRequest, Response, json_response from ahriman.models.user_access import UserAccess -from ahriman.web.schemas import AuthSchema, ErrorSchema, ProcessIdSchema, UpdateFlagsSchema, RepositoryIdSchema +from ahriman.web.schemas import AuthSchema, ErrorSchema, ProcessIdSchema, RepositoryIdSchema, UpdateFlagsSchema from ahriman.web.views.base import BaseView diff --git a/src/ahriman/web/views/v1/status/packages.py b/src/ahriman/web/views/v1/status/packages.py index 0e598ac0..e39cf9ff 100644 --- a/src/ahriman/web/views/v1/status/packages.py +++ b/src/ahriman/web/views/v1/status/packages.py @@ -20,8 +20,8 @@ import aiohttp_apispec # type: ignore[import-untyped] import itertools -from collections.abc import Callable from aiohttp.web import HTTPNoContent, Response, json_response +from collections.abc import Callable from ahriman.models.build_status import BuildStatus from ahriman.models.package import Package diff --git a/src/ahriman/web/views/v1/status/status.py b/src/ahriman/web/views/v1/status/status.py index 057b5f07..7fd518d9 100644 --- a/src/ahriman/web/views/v1/status/status.py +++ b/src/ahriman/web/views/v1/status/status.py @@ -26,7 +26,7 @@ from ahriman.models.build_status import BuildStatusEnum from ahriman.models.counters import Counters from ahriman.models.internal_status import InternalStatus from ahriman.models.user_access import UserAccess -from ahriman.web.schemas import AuthSchema, ErrorSchema, InternalStatusSchema, StatusSchema, RepositoryIdSchema +from ahriman.web.schemas import AuthSchema, ErrorSchema, InternalStatusSchema, RepositoryIdSchema, StatusSchema from ahriman.web.views.base import BaseView from ahriman.web.views.status_view_guard import StatusViewGuard diff --git a/tests/ahriman/core/database/migrations/test_m001_package_source.py b/tests/ahriman/core/database/migrations/test_m001_package_source.py index 67d79e85..4977d8ce 100644 --- a/tests/ahriman/core/database/migrations/test_m001_package_source.py +++ b/tests/ahriman/core/database/migrations/test_m001_package_source.py @@ -1,7 +1,7 @@ import pytest -from sqlite3 import Connection from pytest_mock import MockerFixture +from sqlite3 import Connection from unittest.mock import call as MockCall from ahriman.core.configuration import Configuration diff --git a/tests/ahriman/core/formatters/conftest.py b/tests/ahriman/core/formatters/conftest.py index 89d057f4..90402d76 100644 --- a/tests/ahriman/core/formatters/conftest.py +++ b/tests/ahriman/core/formatters/conftest.py @@ -2,7 +2,7 @@ import pytest from pathlib import Path -from ahriman.core.formatters import AurPrinter, ChangesPrinter, ConfigurationPrinter, ConfigurationPathsPrinter, \ +from ahriman.core.formatters import AurPrinter, ChangesPrinter, ConfigurationPathsPrinter, ConfigurationPrinter, \ PackagePrinter, PatchPrinter, RepositoryPrinter, StatusPrinter, StringPrinter, TreePrinter, UpdatePrinter, \ UserPrinter, ValidationPrinter, VersionPrinter from ahriman.models.aur_package import AURPackage diff --git a/tests/ahriman/models/test_package_source.py b/tests/ahriman/models/test_package_source.py index 27c18b53..5ab67312 100644 --- a/tests/ahriman/models/test_package_source.py +++ b/tests/ahriman/models/test_package_source.py @@ -1,6 +1,6 @@ from collections.abc import Callable -from pytest_mock import MockerFixture from pathlib import Path +from pytest_mock import MockerFixture from ahriman.models.package_description import PackageDescription from ahriman.models.package_source import PackageSource diff --git a/tests/ahriman/web/conftest.py b/tests/ahriman/web/conftest.py index 8078ce80..379ebae9 100644 --- a/tests/ahriman/web/conftest.py +++ b/tests/ahriman/web/conftest.py @@ -1,16 +1,15 @@ import pytest -from asyncio import BaseEventLoop -from aiohttp.web import Application, Resource, UrlMappingMatchInfo from aiohttp.test_utils import TestClient +from aiohttp.web import Application, Resource, UrlMappingMatchInfo +from asyncio import BaseEventLoop from collections.abc import Awaitable, Callable from marshmallow import Schema from pytest_mock import MockerFixture from typing import Any from unittest.mock import MagicMock, Mock -import ahriman.core.auth.helpers - +from ahriman.core.auth import helpers from ahriman.core.auth.oauth import OAuth from ahriman.core.configuration import Configuration from ahriman.core.database import SQLite @@ -130,7 +129,7 @@ def application(configuration: Configuration, spawner: Spawn, database: SQLite, configuration.set_option("web", "port", "8080") mocker.patch("ahriman.core.database.SQLite.load", return_value=database) mocker.patch("aiohttp_apispec.setup_aiohttp_apispec") - mocker.patch.object(ahriman.core.auth.helpers, "_has_aiohttp_security", False) + mocker.patch.object(helpers, "_has_aiohttp_security", False) _, repository_id = configuration.check_loaded() return setup_server(configuration, spawner, [repository_id]) @@ -156,7 +155,7 @@ def application_with_auth(configuration: Configuration, user: User, spawner: Spa configuration.set_option("web", "port", "8080") mocker.patch("ahriman.core.database.SQLite.load", return_value=database) mocker.patch("aiohttp_apispec.setup_aiohttp_apispec") - mocker.patch.object(ahriman.core.auth.helpers, "_has_aiohttp_security", True) + mocker.patch.object(helpers, "_has_aiohttp_security", True) _, repository_id = configuration.check_loaded() application = setup_server(configuration, spawner, [repository_id]) @@ -185,7 +184,7 @@ def application_with_debug(configuration: Configuration, spawner: Spawn, databas configuration.set_option("web", "port", "8080") mocker.patch("ahriman.core.database.SQLite.load", return_value=database) mocker.patch("aiohttp_apispec.setup_aiohttp_apispec") - mocker.patch.object(ahriman.core.auth.helpers, "_has_aiohttp_security", False) + mocker.patch.object(helpers, "_has_aiohttp_security", False) _, repository_id = configuration.check_loaded() return setup_server(configuration, spawner, [repository_id]) diff --git a/tests/ahriman/web/views/test_view_base.py b/tests/ahriman/web/views/test_view_base.py index acf691c6..cb74933a 100644 --- a/tests/ahriman/web/views/test_view_base.py +++ b/tests/ahriman/web/views/test_view_base.py @@ -1,8 +1,8 @@ import pytest -from multidict import MultiDict from aiohttp.test_utils import TestClient from aiohttp.web import HTTPBadRequest, HTTPNotFound +from multidict import MultiDict from pytest_mock import MockerFixture from unittest.mock import AsyncMock