rename classes in order to make documentation reference work

This commit is contained in:
Evgenii Alekseev 2022-04-18 05:30:02 +03:00
parent 03633d47ea
commit 5030395025
19 changed files with 188 additions and 175 deletions

View File

@ -13,28 +13,28 @@ ahriman.application.application.application module
:show-inheritance:
:private-members:
ahriman.application.application.packages module
-----------------------------------------------
ahriman.application.application.application\_packages module
------------------------------------------------------------
.. automodule:: ahriman.application.application.packages
.. automodule:: ahriman.application.application.application_packages
:members:
:no-undoc-members:
:show-inheritance:
:private-members:
ahriman.application.application.properties module
-------------------------------------------------
ahriman.application.application.application\_properties module
--------------------------------------------------------------
.. automodule:: ahriman.application.application.properties
.. automodule:: ahriman.application.application.application_properties
:members:
:no-undoc-members:
:show-inheritance:
:private-members:
ahriman.application.application.repository module
-------------------------------------------------
ahriman.application.application.application\_repository module
--------------------------------------------------------------
.. automodule:: ahriman.application.application.repository
.. automodule:: ahriman.application.application.application_repository
:members:
:no-undoc-members:
:show-inheritance:

View File

@ -193,10 +193,10 @@ ahriman.application.handlers.update module
:show-inheritance:
:private-members:
ahriman.application.handlers.user module
----------------------------------------
ahriman.application.handlers.users module
-----------------------------------------
.. automodule:: ahriman.application.handlers.user
.. automodule:: ahriman.application.handlers.users
:members:
:no-undoc-members:
:show-inheritance:

View File

@ -22,19 +22,19 @@ ahriman.core.repository.executor module
:show-inheritance:
:private-members:
ahriman.core.repository.properties module
ahriman.core.repository.repository module
-----------------------------------------
.. automodule:: ahriman.core.repository.properties
.. automodule:: ahriman.core.repository.repository
:members:
:no-undoc-members:
:show-inheritance:
:private-members:
ahriman.core.repository.repository module
-----------------------------------------
ahriman.core.repository.repository\_properties module
-----------------------------------------------------
.. automodule:: ahriman.core.repository.repository
.. automodule:: ahriman.core.repository.repository_properties
:members:
:no-undoc-members:
:show-inheritance:

View File

@ -661,7 +661,7 @@ def _set_user_add_parser(root: SubParserAction) -> argparse.ArgumentParser:
parser.add_argument("-r", "--role", help="user access level",
type=UserAccess, choices=UserAccess, default=UserAccess.Read)
parser.add_argument("-s", "--secure", help="set file permissions to user-only", action="store_true")
parser.set_defaults(handler=handlers.User, action=Action.Update, architecture=[""], lock=None, no_report=True,
parser.set_defaults(handler=handlers.Users, action=Action.Update, architecture=[""], lock=None, no_report=True,
quiet=True, unsafe=True)
return parser
@ -682,7 +682,7 @@ def _set_user_list_parser(root: SubParserAction) -> argparse.ArgumentParser:
parser.add_argument("username", help="filter users by username", nargs="?")
parser.add_argument("-e", "--exit-code", help="return non-zero exit status if result is empty", action="store_true")
parser.add_argument("-r", "--role", help="filter users by role", type=UserAccess, choices=UserAccess)
parser.set_defaults(handler=handlers.User, action=Action.List, architecture=[""], lock=None, no_report=True, # nosec
parser.set_defaults(handler=handlers.Users, action=Action.List, architecture=[""], lock=None, no_report=True, # nosec
password="", quiet=True, unsafe=True)
return parser
@ -702,7 +702,7 @@ def _set_user_remove_parser(root: SubParserAction) -> argparse.ArgumentParser:
formatter_class=_formatter)
parser.add_argument("username", help="username for web service")
parser.add_argument("-s", "--secure", help="set file permissions to user-only", action="store_true")
parser.set_defaults(handler=handlers.User, action=Action.Remove, architecture=[""], lock=None, no_report=True, # nosec
parser.set_defaults(handler=handlers.Users, action=Action.Remove, architecture=[""], lock=None, no_report=True, # nosec
password="", quiet=True, unsafe=True)
return parser

View File

@ -19,12 +19,12 @@
#
from typing import Set
from ahriman.application.application.packages import Packages
from ahriman.application.application.repository import Repository
from ahriman.application.application.application_packages import ApplicationPackages
from ahriman.application.application.application_repository import ApplicationRepository
from ahriman.models.result import Result
class Application(Packages, Repository):
class Application(ApplicationPackages, ApplicationRepository):
"""
base application class
"""

View File

@ -23,7 +23,7 @@ import shutil
from pathlib import Path
from typing import Any, Iterable, Set
from ahriman.application.application.properties import Properties
from ahriman.application.application.application_properties import ApplicationProperties
from ahriman.core.build_tools.sources import Sources
from ahriman.core.util import package_like, tmpdir
from ahriman.models.package import Package
@ -31,7 +31,7 @@ from ahriman.models.package_source import PackageSource
from ahriman.models.result import Result
class Packages(Properties):
class ApplicationPackages(ApplicationProperties):
"""
package control class
"""

View File

@ -24,7 +24,7 @@ from ahriman.core.database.sqlite import SQLite
from ahriman.core.repository import Repository
class Properties:
class ApplicationProperties:
"""
application base properties class

View File

@ -22,7 +22,7 @@ import shutil
from pathlib import Path
from typing import Callable, Iterable, List
from ahriman.application.application.properties import Properties
from ahriman.application.application.application_properties import ApplicationProperties
from ahriman.core.build_tools.sources import Sources
from ahriman.core.formatters.update_printer import UpdatePrinter
from ahriman.core.tree import Tree
@ -30,7 +30,7 @@ from ahriman.models.package import Package
from ahriman.models.result import Result
class Repository(Properties):
class ApplicationRepository(ApplicationProperties):
"""
repository control class
"""

View File

@ -39,5 +39,5 @@ from ahriman.application.handlers.status_update import StatusUpdate
from ahriman.application.handlers.sync import Sync
from ahriman.application.handlers.unsafe_commands import UnsafeCommands
from ahriman.application.handlers.update import Update
from ahriman.application.handlers.user import User
from ahriman.application.handlers.users import Users
from ahriman.application.handlers.web import Web

View File

@ -28,10 +28,10 @@ from ahriman.core.configuration import Configuration
from ahriman.core.database.sqlite import SQLite
from ahriman.core.formatters.user_printer import UserPrinter
from ahriman.models.action import Action
from ahriman.models.user import User as MUser
from ahriman.models.user import User
class User(Handler):
class Users(Handler):
"""
user management handler
"""
@ -54,30 +54,30 @@ class User(Handler):
database = SQLite.load(configuration)
if args.action == Action.Update:
salt = User.get_salt(configuration)
user = User.user_create(args)
salt = Users.get_salt(configuration)
user = Users.user_create(args)
auth_configuration = User.configuration_get(configuration.include)
auth_configuration = Users.configuration_get(configuration.include)
User.configuration_create(auth_configuration, user, salt, args.as_service, args.secure)
Users.configuration_create(auth_configuration, user, salt, args.as_service, args.secure)
database.user_update(user.hash_password(salt))
elif args.action == Action.List:
users = database.user_list(args.username, args.role)
User.check_if_empty(args.exit_code, not users)
Users.check_if_empty(args.exit_code, not users)
for user in users:
UserPrinter(user).print(verbose=True)
elif args.action == Action.Remove:
database.user_remove(args.username)
@staticmethod
def configuration_create(configuration: Configuration, user: MUser, salt: str,
def configuration_create(configuration: Configuration, user: User, salt: str,
as_service_user: bool, secure: bool) -> None:
"""
enable configuration if it has been disabled
Args:
configuration(Configuration): configuration instance
user(MUser): user descriptor
user(User): user descriptor
salt(str): password hash salt
as_service_user(bool): add user as service user, also set password and user to configuration
secure(bool): if true then set file permissions to 0o600
@ -86,7 +86,7 @@ class User(Handler):
if as_service_user:
configuration.set_option("web", "username", user.username)
configuration.set_option("web", "password", user.password)
User.configuration_write(configuration, secure)
Users.configuration_write(configuration, secure)
@staticmethod
def configuration_get(include_path: Path) -> Configuration:
@ -136,10 +136,10 @@ class User(Handler):
"""
if salt := configuration.get("auth", "salt", fallback=None):
return salt
return MUser.generate_password(salt_length)
return User.generate_password(salt_length)
@staticmethod
def user_create(args: argparse.Namespace) -> MUser:
def user_create(args: argparse.Namespace) -> User:
"""
create user descriptor from arguments
@ -147,9 +147,9 @@ class User(Handler):
args(argparse.Namespace): command line args
Returns:
MUser: built user descriptor
User: built user descriptor
"""
user = MUser(args.username, args.password, args.role)
user = User(args.username, args.password, args.role)
if user.password is None:
user.password = getpass.getpass()
return user

View File

@ -22,10 +22,10 @@ import shutil
from pathlib import Path
from typing import List
from ahriman.core.repository.properties import Properties
from ahriman.core.repository.repository_properties import RepositoryProperties
class Cleaner(Properties):
class Cleaner(RepositoryProperties):
"""
trait to clean common repository objects
"""

View File

@ -29,7 +29,7 @@ from ahriman.core.status.client import Client
from ahriman.core.util import check_user
class Properties:
class RepositoryProperties:
"""
repository internal objects holder

View File

@ -2,15 +2,15 @@ import pytest
from pytest_mock import MockerFixture
from ahriman.application.application.packages import Packages
from ahriman.application.application.properties import Properties
from ahriman.application.application.repository import Repository
from ahriman.application.application.application_packages import ApplicationPackages
from ahriman.application.application.application_properties import ApplicationProperties
from ahriman.application.application.application_repository import ApplicationRepository
from ahriman.core.configuration import Configuration
from ahriman.core.database.sqlite import SQLite
@pytest.fixture
def application_packages(configuration: Configuration, database: SQLite, mocker: MockerFixture) -> Packages:
def application_packages(configuration: Configuration, database: SQLite, mocker: MockerFixture) -> ApplicationPackages:
"""
fixture for application with package functions
@ -20,15 +20,16 @@ def application_packages(configuration: Configuration, database: SQLite, mocker:
mocker(MockerFixture): mocker object
Returns:
Packages: application test instance
ApplicationPackages: application test instance
"""
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
mocker.patch("ahriman.core.database.sqlite.SQLite.load", return_value=database)
return Packages("x86_64", configuration, no_report=True, unsafe=False)
return ApplicationPackages("x86_64", configuration, no_report=True, unsafe=False)
@pytest.fixture
def application_properties(configuration: Configuration, database: SQLite, mocker: MockerFixture) -> Properties:
def application_properties(configuration: Configuration, database: SQLite,
mocker: MockerFixture) -> ApplicationProperties:
"""
fixture for application with properties only
@ -38,15 +39,16 @@ def application_properties(configuration: Configuration, database: SQLite, mocke
mocker(MockerFixture): mocker object
Returns:
Properties: application test instance
ApplicationProperties: application test instance
"""
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
mocker.patch("ahriman.core.database.sqlite.SQLite.load", return_value=database)
return Properties("x86_64", configuration, no_report=True, unsafe=False)
return ApplicationProperties("x86_64", configuration, no_report=True, unsafe=False)
@pytest.fixture
def application_repository(configuration: Configuration, database: SQLite, mocker: MockerFixture) -> Repository:
def application_repository(configuration: Configuration, database: SQLite,
mocker: MockerFixture) -> ApplicationRepository:
"""
fixture for application with repository functions
@ -56,8 +58,8 @@ def application_repository(configuration: Configuration, database: SQLite, mocke
mocker(MockerFixture): mocker object
Returns:
Repository: application test instance
ApplicationRepository: application test instance
"""
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
mocker.patch("ahriman.core.database.sqlite.SQLite.load", return_value=database)
return Repository("x86_64", configuration, no_report=True, unsafe=False)
return ApplicationRepository("x86_64", configuration, no_report=True, unsafe=False)

View File

@ -4,14 +4,14 @@ from pathlib import Path
from pytest_mock import MockerFixture
from unittest.mock import MagicMock
from ahriman.application.application.packages import Packages
from ahriman.application.application.application_packages import ApplicationPackages
from ahriman.models.package import Package
from ahriman.models.package_description import PackageDescription
from ahriman.models.package_source import PackageSource
from ahriman.models.result import Result
def test_finalize(application_packages: Packages) -> None:
def test_finalize(application_packages: ApplicationPackages) -> None:
"""
must raise NotImplemented for missing finalize method
"""
@ -19,7 +19,7 @@ def test_finalize(application_packages: Packages) -> None:
application_packages._finalize([])
def test_known_packages(application_packages: Packages) -> None:
def test_known_packages(application_packages: ApplicationPackages) -> None:
"""
must raise NotImplemented for missing known_packages method
"""
@ -27,7 +27,10 @@ def test_known_packages(application_packages: Packages) -> None:
application_packages._known_packages()
def test_add_archive(application_packages: Packages, package_ahriman: Package, mocker: MockerFixture) -> None:
def test_add_archive(
application_packages: ApplicationPackages,
package_ahriman: Package,
mocker: MockerFixture) -> None:
"""
must add package from archive
"""
@ -37,13 +40,14 @@ def test_add_archive(application_packages: Packages, package_ahriman: Package, m
Path(package_ahriman.base), application_packages.repository.paths.packages / package_ahriman.base)
def test_add_aur(application_packages: Packages, package_ahriman: Package, mocker: MockerFixture) -> None:
def test_add_aur(application_packages: ApplicationPackages, package_ahriman: Package, mocker: MockerFixture) -> None:
"""
must add package from AUR
"""
mocker.patch("ahriman.models.package.Package.load", return_value=package_ahriman)
load_mock = mocker.patch("ahriman.core.build_tools.sources.Sources.load")
dependencies_mock = mocker.patch("ahriman.application.application.packages.Packages._process_dependencies")
dependencies_mock = mocker.patch(
"ahriman.application.application.application_packages.ApplicationPackages._process_dependencies")
build_queue_mock = mocker.patch("ahriman.core.database.sqlite.SQLite.build_queue_insert")
application_packages._add_aur(package_ahriman.base, set(), False)
@ -55,7 +59,10 @@ def test_add_aur(application_packages: Packages, package_ahriman: Package, mocke
build_queue_mock.assert_called_once_with(package_ahriman)
def test_add_directory(application_packages: Packages, package_ahriman: Package, mocker: MockerFixture) -> None:
def test_add_directory(
application_packages: ApplicationPackages,
package_ahriman: Package,
mocker: MockerFixture) -> None:
"""
must add packages from directory
"""
@ -69,14 +76,15 @@ def test_add_directory(application_packages: Packages, package_ahriman: Package,
copy_mock.assert_called_once_with(filename, application_packages.repository.paths.packages / filename.name)
def test_add_local(application_packages: Packages, package_ahriman: Package, mocker: MockerFixture) -> None:
def test_add_local(application_packages: ApplicationPackages, package_ahriman: Package, mocker: MockerFixture) -> None:
"""
must add package from local sources
"""
mocker.patch("ahriman.models.package.Package.load", return_value=package_ahriman)
init_mock = mocker.patch("ahriman.core.build_tools.sources.Sources.init")
copytree_mock = mocker.patch("shutil.copytree")
dependencies_mock = mocker.patch("ahriman.application.application.packages.Packages._process_dependencies")
dependencies_mock = mocker.patch(
"ahriman.application.application.application_packages.ApplicationPackages._process_dependencies")
build_queue_mock = mocker.patch("ahriman.core.database.sqlite.SQLite.build_queue_insert")
application_packages._add_local(package_ahriman.base, set(), False)
@ -87,7 +95,7 @@ def test_add_local(application_packages: Packages, package_ahriman: Package, moc
build_queue_mock.assert_called_once_with(package_ahriman)
def test_add_remote(application_packages: Packages, package_description_ahriman: PackageDescription,
def test_add_remote(application_packages: ApplicationPackages, package_description_ahriman: PackageDescription,
mocker: MockerFixture) -> None:
"""
must add package from remote source
@ -104,109 +112,120 @@ def test_add_remote(application_packages: Packages, package_description_ahriman:
response_mock.raise_for_status.assert_called_once_with()
def test_process_dependencies(application_packages: Packages, mocker: MockerFixture) -> None:
def test_process_dependencies(application_packages: ApplicationPackages, mocker: MockerFixture) -> None:
"""
must process dependencies addition
"""
missing = {"python"}
path = Path("local")
dependencies_mock = mocker.patch("ahriman.models.package.Package.dependencies", return_value=missing)
add_mock = mocker.patch("ahriman.application.application.packages.Packages.add")
add_mock = mocker.patch("ahriman.application.application.application_packages.ApplicationPackages.add")
application_packages._process_dependencies(path, set(), False)
dependencies_mock.assert_called_once_with(path)
add_mock.assert_called_once_with(missing, PackageSource.AUR, False)
def test_process_dependencies_missing(application_packages: Packages, mocker: MockerFixture) -> None:
def test_process_dependencies_missing(application_packages: ApplicationPackages, mocker: MockerFixture) -> None:
"""
must process dependencies addition only for missing packages
"""
path = Path("local")
dependencies_mock = mocker.patch("ahriman.models.package.Package.dependencies",
return_value={"python", "python-aiohttp"})
add_mock = mocker.patch("ahriman.application.application.packages.Packages.add")
add_mock = mocker.patch("ahriman.application.application.application_packages.ApplicationPackages.add")
application_packages._process_dependencies(path, {"python"}, False)
dependencies_mock.assert_called_once_with(path)
add_mock.assert_called_once_with({"python-aiohttp"}, PackageSource.AUR, False)
def test_process_dependencies_skip(application_packages: Packages, mocker: MockerFixture) -> None:
def test_process_dependencies_skip(application_packages: ApplicationPackages, mocker: MockerFixture) -> None:
"""
must skip dependencies processing
"""
dependencies_mock = mocker.patch("ahriman.models.package.Package.dependencies")
add_mock = mocker.patch("ahriman.application.application.packages.Packages.add")
add_mock = mocker.patch("ahriman.application.application.application_packages.ApplicationPackages.add")
application_packages._process_dependencies(Path("local"), set(), True)
dependencies_mock.assert_not_called()
add_mock.assert_not_called()
def test_add_add_archive(application_packages: Packages, package_ahriman: Package, mocker: MockerFixture) -> None:
def test_add_add_archive(application_packages: ApplicationPackages, package_ahriman: Package,
mocker: MockerFixture) -> None:
"""
must add package from archive via add function
"""
mocker.patch("ahriman.application.application.packages.Packages._known_packages", return_value=set())
add_mock = mocker.patch("ahriman.application.application.packages.Packages._add_archive")
mocker.patch("ahriman.application.application.application_packages.ApplicationPackages._known_packages",
return_value=set())
add_mock = mocker.patch("ahriman.application.application.application_packages.ApplicationPackages._add_archive")
application_packages.add([package_ahriman.base], PackageSource.Archive, False)
add_mock.assert_called_once_with(package_ahriman.base, set(), False)
def test_add_add_aur(application_packages: Packages, package_ahriman: Package, mocker: MockerFixture) -> None:
def test_add_add_aur(
application_packages: ApplicationPackages,
package_ahriman: Package,
mocker: MockerFixture) -> None:
"""
must add package from AUR via add function
"""
mocker.patch("ahriman.application.application.packages.Packages._known_packages", return_value=set())
add_mock = mocker.patch("ahriman.application.application.packages.Packages._add_aur")
mocker.patch("ahriman.application.application.application_packages.ApplicationPackages._known_packages",
return_value=set())
add_mock = mocker.patch("ahriman.application.application.application_packages.ApplicationPackages._add_aur")
application_packages.add([package_ahriman.base], PackageSource.AUR, True)
add_mock.assert_called_once_with(package_ahriman.base, set(), True)
def test_add_add_directory(application_packages: Packages, package_ahriman: Package, mocker: MockerFixture) -> None:
def test_add_add_directory(application_packages: ApplicationPackages, package_ahriman: Package,
mocker: MockerFixture) -> None:
"""
must add packages from directory via add function
"""
mocker.patch("ahriman.application.application.packages.Packages._known_packages", return_value=set())
add_mock = mocker.patch("ahriman.application.application.packages.Packages._add_directory")
mocker.patch("ahriman.application.application.application_packages.ApplicationPackages._known_packages",
return_value=set())
add_mock = mocker.patch("ahriman.application.application.application_packages.ApplicationPackages._add_directory")
application_packages.add([package_ahriman.base], PackageSource.Directory, False)
add_mock.assert_called_once_with(package_ahriman.base, set(), False)
def test_add_add_local(application_packages: Packages, package_ahriman: Package, mocker: MockerFixture) -> None:
def test_add_add_local(application_packages: ApplicationPackages, package_ahriman: Package,
mocker: MockerFixture) -> None:
"""
must add package from local sources via add function
"""
mocker.patch("ahriman.application.application.packages.Packages._known_packages", return_value=set())
add_mock = mocker.patch("ahriman.application.application.packages.Packages._add_local")
mocker.patch("ahriman.application.application.application_packages.ApplicationPackages._known_packages",
return_value=set())
add_mock = mocker.patch("ahriman.application.application.application_packages.ApplicationPackages._add_local")
application_packages.add([package_ahriman.base], PackageSource.Local, False)
add_mock.assert_called_once_with(package_ahriman.base, set(), False)
def test_add_add_remote(application_packages: Packages, package_description_ahriman: PackageDescription,
def test_add_add_remote(application_packages: ApplicationPackages, package_description_ahriman: PackageDescription,
mocker: MockerFixture) -> None:
"""
must add package from remote source via add function
"""
mocker.patch("ahriman.application.application.packages.Packages._known_packages", return_value=set())
add_mock = mocker.patch("ahriman.application.application.packages.Packages._add_remote")
mocker.patch("ahriman.application.application.application_packages.ApplicationPackages._known_packages",
return_value=set())
add_mock = mocker.patch("ahriman.application.application.application_packages.ApplicationPackages._add_remote")
url = f"https://host/{package_description_ahriman.filename}"
application_packages.add([url], PackageSource.Remote, False)
add_mock.assert_called_once_with(url, set(), False)
def test_remove(application_packages: Packages, mocker: MockerFixture) -> None:
def test_remove(application_packages: ApplicationPackages, mocker: MockerFixture) -> None:
"""
must remove package
"""
executor_mock = mocker.patch("ahriman.core.repository.executor.Executor.process_remove")
finalize_mock = mocker.patch("ahriman.application.application.packages.Packages._finalize")
finalize_mock = mocker.patch("ahriman.application.application.application_packages.ApplicationPackages._finalize")
application_packages.remove([])
executor_mock.assert_called_once_with([])

View File

@ -1,7 +1,7 @@
from ahriman.application.application.properties import Properties
from ahriman.application.application.application_properties import ApplicationProperties
def test_create_tree(application_properties: Properties) -> None:
def test_create_tree(application_properties: ApplicationProperties) -> None:
"""
must have repository attribute
"""

View File

@ -3,13 +3,13 @@ import pytest
from pytest_mock import MockerFixture
from unittest import mock
from ahriman.application.application.repository import Repository
from ahriman.application.application.application_repository import ApplicationRepository
from ahriman.core.tree import Leaf, Tree
from ahriman.models.package import Package
from ahriman.models.result import Result
def test_finalize(application_repository: Repository) -> None:
def test_finalize(application_repository: ApplicationRepository) -> None:
"""
must raise NotImplemented for missing finalize method
"""
@ -17,7 +17,7 @@ def test_finalize(application_repository: Repository) -> None:
application_repository._finalize([])
def test_clean_cache(application_repository: Repository, mocker: MockerFixture) -> None:
def test_clean_cache(application_repository: ApplicationRepository, mocker: MockerFixture) -> None:
"""
must clean cache directory
"""
@ -26,7 +26,7 @@ def test_clean_cache(application_repository: Repository, mocker: MockerFixture)
clear_mock.assert_called_once_with()
def test_clean_chroot(application_repository: Repository, mocker: MockerFixture) -> None:
def test_clean_chroot(application_repository: ApplicationRepository, mocker: MockerFixture) -> None:
"""
must clean chroot directory
"""
@ -35,7 +35,7 @@ def test_clean_chroot(application_repository: Repository, mocker: MockerFixture)
clear_mock.assert_called_once_with()
def test_clean_manual(application_repository: Repository, mocker: MockerFixture) -> None:
def test_clean_manual(application_repository: ApplicationRepository, mocker: MockerFixture) -> None:
"""
must clean manual directory
"""
@ -44,7 +44,7 @@ def test_clean_manual(application_repository: Repository, mocker: MockerFixture)
clear_mock.assert_called_once_with()
def test_clean_packages(application_repository: Repository, mocker: MockerFixture) -> None:
def test_clean_packages(application_repository: ApplicationRepository, mocker: MockerFixture) -> None:
"""
must clean packages directory
"""
@ -53,7 +53,7 @@ def test_clean_packages(application_repository: Repository, mocker: MockerFixtur
clear_mock.assert_called_once_with()
def test_report(application_repository: Repository, mocker: MockerFixture) -> None:
def test_report(application_repository: ApplicationRepository, mocker: MockerFixture) -> None:
"""
must generate report
"""
@ -62,7 +62,7 @@ def test_report(application_repository: Repository, mocker: MockerFixture) -> No
executor_mock.assert_called_once_with(["a"], [])
def test_sign(application_repository: Repository, package_ahriman: Package, package_python_schedule: Package,
def test_sign(application_repository: ApplicationRepository, package_ahriman: Package, package_python_schedule: Package,
mocker: MockerFixture) -> None:
"""
must sign world
@ -70,9 +70,10 @@ def test_sign(application_repository: Repository, package_ahriman: Package, pack
mocker.patch("ahriman.core.repository.repository.Repository.packages",
return_value=[package_ahriman, package_python_schedule])
copy_mock = mocker.patch("shutil.copy")
update_mock = mocker.patch("ahriman.application.application.repository.Repository.update")
update_mock = mocker.patch("ahriman.application.application.application_repository.ApplicationRepository.update")
sign_repository_mock = mocker.patch("ahriman.core.sign.gpg.GPG.process_sign_repository")
finalize_mock = mocker.patch("ahriman.application.application.repository.Repository._finalize")
finalize_mock = mocker.patch(
"ahriman.application.application.application_repository.ApplicationRepository._finalize")
application_repository.sign([])
copy_mock.assert_has_calls([
@ -84,29 +85,31 @@ def test_sign(application_repository: Repository, package_ahriman: Package, pack
finalize_mock.assert_called_once_with(Result())
def test_sign_skip(application_repository: Repository, package_ahriman: Package, mocker: MockerFixture) -> None:
def test_sign_skip(application_repository: ApplicationRepository, package_ahriman: Package,
mocker: MockerFixture) -> None:
"""
must skip sign packages with empty filename
"""
package_ahriman.packages[package_ahriman.base].filename = None
mocker.patch("ahriman.core.repository.repository.Repository.packages", return_value=[package_ahriman])
mocker.patch("ahriman.application.application.repository.Repository.update")
mocker.patch("ahriman.application.application.repository.Repository._finalize")
mocker.patch("ahriman.application.application.application_repository.ApplicationRepository.update")
mocker.patch("ahriman.application.application.application_repository.ApplicationRepository._finalize")
application_repository.sign([])
def test_sign_specific(application_repository: Repository, package_ahriman: Package, package_python_schedule: Package,
mocker: MockerFixture) -> None:
def test_sign_specific(application_repository: ApplicationRepository, package_ahriman: Package,
package_python_schedule: Package, mocker: MockerFixture) -> None:
"""
must sign only specified packages
"""
mocker.patch("ahriman.core.repository.repository.Repository.packages",
return_value=[package_ahriman, package_python_schedule])
copy_mock = mocker.patch("shutil.copy")
update_mock = mocker.patch("ahriman.application.application.repository.Repository.update")
update_mock = mocker.patch("ahriman.application.application.application_repository.ApplicationRepository.update")
sign_repository_mock = mocker.patch("ahriman.core.sign.gpg.GPG.process_sign_repository")
finalize_mock = mocker.patch("ahriman.application.application.repository.Repository._finalize")
finalize_mock = mocker.patch(
"ahriman.application.application.application_repository.ApplicationRepository._finalize")
filename = package_ahriman.packages[package_ahriman.base].filepath
application_repository.sign([package_ahriman.base])
@ -118,7 +121,7 @@ def test_sign_specific(application_repository: Repository, package_ahriman: Pack
finalize_mock.assert_called_once_with(Result())
def test_sync(application_repository: Repository, mocker: MockerFixture) -> None:
def test_sync(application_repository: ApplicationRepository, mocker: MockerFixture) -> None:
"""
must sync to remote
"""
@ -127,7 +130,8 @@ def test_sync(application_repository: Repository, mocker: MockerFixture) -> None
executor_mock.assert_called_once_with(["a"], [])
def test_unknown_no_aur(application_repository: Repository, package_ahriman: Package, mocker: MockerFixture) -> None:
def test_unknown_no_aur(application_repository: ApplicationRepository, package_ahriman: Package,
mocker: MockerFixture) -> None:
"""
must return empty list in case if there is locally stored PKGBUILD
"""
@ -140,7 +144,7 @@ def test_unknown_no_aur(application_repository: Repository, package_ahriman: Pac
assert not application_repository.unknown()
def test_unknown_no_aur_no_local(application_repository: Repository, package_ahriman: Package,
def test_unknown_no_aur_no_local(application_repository: ApplicationRepository, package_ahriman: Package,
mocker: MockerFixture) -> None:
"""
must return list of packages missing in aur and in local storage
@ -153,7 +157,8 @@ def test_unknown_no_aur_no_local(application_repository: Repository, package_ahr
assert packages == list(package_ahriman.packages.keys())
def test_unknown_no_local(application_repository: Repository, package_ahriman: Package, mocker: MockerFixture) -> None:
def test_unknown_no_local(application_repository: ApplicationRepository, package_ahriman: Package,
mocker: MockerFixture) -> None:
"""
must return empty list in case if there is package in AUR
"""
@ -164,7 +169,7 @@ def test_unknown_no_local(application_repository: Repository, package_ahriman: P
assert not application_repository.unknown()
def test_update(application_repository: Repository, package_ahriman: Package, result: Result,
def test_update(application_repository: ApplicationRepository, package_ahriman: Package, result: Result,
mocker: MockerFixture) -> None:
"""
must process package updates
@ -177,7 +182,8 @@ def test_update(application_repository: Repository, package_ahriman: Package, re
mocker.patch("ahriman.models.package.Package.load", return_value=package_ahriman)
build_mock = mocker.patch("ahriman.core.repository.executor.Executor.process_build", return_value=result)
update_mock = mocker.patch("ahriman.core.repository.executor.Executor.process_update", return_value=result)
finalize_mock = mocker.patch("ahriman.application.application.repository.Repository._finalize")
finalize_mock = mocker.patch(
"ahriman.application.application.application_repository.ApplicationRepository._finalize")
application_repository.update([package_ahriman])
build_mock.assert_called_once_with([package_ahriman])
@ -185,7 +191,8 @@ def test_update(application_repository: Repository, package_ahriman: Package, re
finalize_mock.assert_has_calls([mock.call(result), mock.call(result)])
def test_update_empty(application_repository: Repository, package_ahriman: Package, mocker: MockerFixture) -> None:
def test_update_empty(application_repository: ApplicationRepository, package_ahriman: Package,
mocker: MockerFixture) -> None:
"""
must skip updating repository if no packages supplied
"""
@ -202,7 +209,8 @@ def test_update_empty(application_repository: Repository, package_ahriman: Packa
update_mock.assert_not_called()
def test_updates_all(application_repository: Repository, package_ahriman: Package, mocker: MockerFixture) -> None:
def test_updates_all(application_repository: ApplicationRepository, package_ahriman: Package,
mocker: MockerFixture) -> None:
"""
must get updates for all
"""
@ -218,7 +226,7 @@ def test_updates_all(application_repository: Repository, package_ahriman: Packag
updates_manual_mock.assert_called_once_with()
def test_updates_disabled(application_repository: Repository, mocker: MockerFixture) -> None:
def test_updates_disabled(application_repository: ApplicationRepository, mocker: MockerFixture) -> None:
"""
must get updates without anything
"""
@ -233,7 +241,7 @@ def test_updates_disabled(application_repository: Repository, mocker: MockerFixt
updates_manual_mock.assert_not_called()
def test_updates_no_aur(application_repository: Repository, mocker: MockerFixture) -> None:
def test_updates_no_aur(application_repository: ApplicationRepository, mocker: MockerFixture) -> None:
"""
must get updates without aur
"""
@ -248,7 +256,7 @@ def test_updates_no_aur(application_repository: Repository, mocker: MockerFixtur
updates_manual_mock.assert_called_once_with()
def test_updates_no_local(application_repository: Repository, mocker: MockerFixture) -> None:
def test_updates_no_local(application_repository: ApplicationRepository, mocker: MockerFixture) -> None:
"""
must get updates without local packages
"""
@ -263,7 +271,7 @@ def test_updates_no_local(application_repository: Repository, mocker: MockerFixt
updates_manual_mock.assert_called_once_with()
def test_updates_no_manual(application_repository: Repository, mocker: MockerFixture) -> None:
def test_updates_no_manual(application_repository: ApplicationRepository, mocker: MockerFixture) -> None:
"""
must get updates without manual
"""
@ -278,7 +286,7 @@ def test_updates_no_manual(application_repository: Repository, mocker: MockerFix
updates_manual_mock.assert_not_called()
def test_updates_no_vcs(application_repository: Repository, mocker: MockerFixture) -> None:
def test_updates_no_vcs(application_repository: ApplicationRepository, mocker: MockerFixture) -> None:
"""
must get updates without VCS
"""
@ -293,7 +301,7 @@ def test_updates_no_vcs(application_repository: Repository, mocker: MockerFixtur
updates_manual_mock.assert_called_once_with()
def test_updates_with_filter(application_repository: Repository, mocker: MockerFixture) -> None:
def test_updates_with_filter(application_repository: ApplicationRepository, mocker: MockerFixture) -> None:
"""
must get updates with filter
"""

View File

@ -4,12 +4,12 @@ import pytest
from pathlib import Path
from pytest_mock import MockerFixture
from ahriman.application.handlers import User
from ahriman.application.handlers import Users
from ahriman.core.configuration import Configuration
from ahriman.core.database.sqlite import SQLite
from ahriman.core.exceptions import InitializeException
from ahriman.models.action import Action
from ahriman.models.user import User as MUser
from ahriman.models.user import User
from ahriman.models.user_access import UserAccess
@ -38,16 +38,16 @@ def test_run(args: argparse.Namespace, configuration: Configuration, database: S
must run command
"""
args = _default_args(args)
user = MUser(args.username, args.password, args.role)
user = User(args.username, args.password, args.role)
mocker.patch("ahriman.core.database.sqlite.SQLite.load", return_value=database)
mocker.patch("ahriman.models.user.User.hash_password", return_value=user)
get_auth_configuration_mock = mocker.patch("ahriman.application.handlers.User.configuration_get")
create_configuration_mock = mocker.patch("ahriman.application.handlers.User.configuration_create")
create_user_mock = mocker.patch("ahriman.application.handlers.User.user_create", return_value=user)
get_salt_mock = mocker.patch("ahriman.application.handlers.User.get_salt", return_value="salt")
get_auth_configuration_mock = mocker.patch("ahriman.application.handlers.Users.configuration_get")
create_configuration_mock = mocker.patch("ahriman.application.handlers.Users.configuration_create")
create_user_mock = mocker.patch("ahriman.application.handlers.Users.user_create", return_value=user)
get_salt_mock = mocker.patch("ahriman.application.handlers.Users.get_salt", return_value="salt")
update_mock = mocker.patch("ahriman.core.database.sqlite.SQLite.user_update")
User.run(args, "x86_64", configuration, True, False)
Users.run(args, "x86_64", configuration, True, False)
get_auth_configuration_mock.assert_called_once_with(configuration.include)
create_configuration_mock.assert_called_once_with(pytest.helpers.anyvar(int), pytest.helpers.anyvar(int),
pytest.helpers.anyvar(int), args.as_service, args.secure)
@ -67,7 +67,7 @@ def test_run_list(args: argparse.Namespace, configuration: Configuration, databa
check_mock = mocker.patch("ahriman.application.handlers.handler.Handler.check_if_empty")
list_mock = mocker.patch("ahriman.core.database.sqlite.SQLite.user_list", return_value=[user])
User.run(args, "x86_64", configuration, True, False)
Users.run(args, "x86_64", configuration, True, False)
list_mock.assert_called_once_with("user", args.role)
check_mock.assert_called_once_with(False, False)
@ -84,7 +84,7 @@ def test_run_empty_exception(args: argparse.Namespace, configuration: Configurat
mocker.patch("ahriman.core.database.sqlite.SQLite.user_list", return_value=[])
check_mock = mocker.patch("ahriman.application.handlers.handler.Handler.check_if_empty")
User.run(args, "x86_64", configuration, True, False)
Users.run(args, "x86_64", configuration, True, False)
check_mock.assert_called_once_with(True, True)
@ -98,36 +98,36 @@ def test_run_remove(args: argparse.Namespace, configuration: Configuration, data
mocker.patch("ahriman.core.database.sqlite.SQLite.load", return_value=database)
remove_mock = mocker.patch("ahriman.core.database.sqlite.SQLite.user_remove")
User.run(args, "x86_64", configuration, True, False)
Users.run(args, "x86_64", configuration, True, False)
remove_mock.assert_called_once_with(args.username)
def test_configuration_create(configuration: Configuration, user: MUser, mocker: MockerFixture) -> None:
def test_configuration_create(configuration: Configuration, user: User, mocker: MockerFixture) -> None:
"""
must correctly create configuration file
"""
mocker.patch("pathlib.Path.open")
set_mock = mocker.patch("ahriman.core.configuration.Configuration.set_option")
write_mock = mocker.patch("ahriman.application.handlers.User.configuration_write")
write_mock = mocker.patch("ahriman.application.handlers.Users.configuration_write")
User.configuration_create(configuration, user, "salt", False, False)
Users.configuration_create(configuration, user, "salt", False, False)
set_mock.assert_called_once_with("auth", "salt", pytest.helpers.anyvar(int))
write_mock.assert_called_once_with(configuration, False)
def test_configuration_create_with_plain_password(
configuration: Configuration,
user: MUser,
user: User,
mocker: MockerFixture) -> None:
"""
must set plain text password and user for the service
"""
mocker.patch("pathlib.Path.open")
User.configuration_create(configuration, user, "salt", True, False)
Users.configuration_create(configuration, user, "salt", True, False)
generated = MUser.from_option(user.username, user.password).hash_password("salt")
service = MUser.from_option(configuration.get("web", "username"), configuration.get("web", "password"))
generated = User.from_option(user.username, user.password).hash_password("salt")
service = User.from_option(configuration.get("web", "username"), configuration.get("web", "password"))
assert generated.username == service.username
assert generated.check_credentials(service.password, configuration.get("auth", "salt"))
@ -140,7 +140,7 @@ def test_configuration_get(mocker: MockerFixture) -> None:
mocker.patch("pathlib.Path.is_file", return_value=True)
read_mock = mocker.patch("ahriman.core.configuration.Configuration.read")
assert User.configuration_get(Path("path"))
assert Users.configuration_get(Path("path"))
read_mock.assert_called_once_with(Path("path") / "auth.ini")
@ -152,7 +152,7 @@ def test_configuration_write(configuration: Configuration, mocker: MockerFixture
write_mock = mocker.patch("ahriman.core.configuration.Configuration.write")
chmod_mock = mocker.patch("pathlib.Path.chmod")
User.configuration_write(configuration, secure=True)
Users.configuration_write(configuration, secure=True)
write_mock.assert_called_once_with(pytest.helpers.anyvar(int))
chmod_mock.assert_called_once_with(0o600)
@ -165,7 +165,7 @@ def test_configuration_write_insecure(configuration: Configuration, mocker: Mock
mocker.patch("ahriman.core.configuration.Configuration.write")
chmod_mock = mocker.patch("pathlib.Path.chmod")
User.configuration_write(configuration, secure=False)
Users.configuration_write(configuration, secure=False)
chmod_mock.assert_not_called()
@ -177,14 +177,14 @@ def test_configuration_write_not_loaded(configuration: Configuration, mocker: Mo
mocker.patch("pathlib.Path.open")
with pytest.raises(InitializeException):
User.configuration_write(configuration, secure=True)
Users.configuration_write(configuration, secure=True)
def test_get_salt_read(configuration: Configuration) -> None:
"""
must read salt from configuration
"""
assert User.get_salt(configuration) == "salt"
assert Users.get_salt(configuration) == "salt"
def test_get_salt_generate(configuration: Configuration) -> None:
@ -193,17 +193,17 @@ def test_get_salt_generate(configuration: Configuration) -> None:
"""
configuration.remove_option("auth", "salt")
salt = User.get_salt(configuration, 16)
salt = Users.get_salt(configuration, 16)
assert salt
assert len(salt) == 16
def test_user_create(args: argparse.Namespace, user: MUser) -> None:
def test_user_create(args: argparse.Namespace, user: User) -> None:
"""
must create user
"""
args = _default_args(args)
generated = User.user_create(args)
generated = Users.user_create(args)
assert generated.username == user.username
assert generated.access == user.access
@ -216,7 +216,7 @@ def test_user_create_getpass(args: argparse.Namespace, mocker: MockerFixture) ->
args.password = None
getpass_mock = mocker.patch("getpass.getpass", return_value="password")
generated = User.user_create(args)
generated = Users.user_create(args)
getpass_mock.assert_called_once_with()
assert generated.password == "password"
@ -226,4 +226,4 @@ def test_disallow_auto_architecture_run() -> None:
"""
must not allow multi architecture run
"""
assert not User.ALLOW_AUTO_ARCHITECTURE_RUN
assert not Users.ALLOW_AUTO_ARCHITECTURE_RUN

View File

@ -7,7 +7,6 @@ from ahriman.core.database.sqlite import SQLite
from ahriman.core.repository import Repository
from ahriman.core.repository.cleaner import Cleaner
from ahriman.core.repository.executor import Executor
from ahriman.core.repository.properties import Properties
from ahriman.core.repository.update_handler import UpdateHandler
@ -66,21 +65,6 @@ def repository(configuration: Configuration, database: SQLite, mocker: MockerFix
return Repository("x86_64", configuration, database, no_report=True, unsafe=False)
@pytest.fixture
def properties(configuration: Configuration, database: SQLite) -> Properties:
"""
fixture for properties
Args:
configuration(Configuration): configuration fixture
database(SQLite): database fixture
Returns:
Properties: properties test instance
"""
return Properties("x86_64", configuration, database, no_report=True, unsafe=False)
@pytest.fixture
def update_handler(configuration: Configuration, database: SQLite, mocker: MockerFixture) -> UpdateHandler:
"""

View File

@ -3,7 +3,7 @@ from pytest_mock import MockerFixture
from ahriman.core.configuration import Configuration
from ahriman.core.database.sqlite import SQLite
from ahriman.core.exceptions import UnsafeRun
from ahriman.core.repository.properties import Properties
from ahriman.core.repository.repository_properties import RepositoryProperties
from ahriman.core.status.web_client import WebClient
@ -11,9 +11,9 @@ def test_create_tree_on_load(configuration: Configuration, database: SQLite, moc
"""
must create tree on load
"""
mocker.patch("ahriman.core.repository.properties.check_user")
mocker.patch("ahriman.core.repository.repository_properties.check_user")
tree_create_mock = mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
Properties("x86_64", configuration, database, True, False)
RepositoryProperties("x86_64", configuration, database, True, False)
tree_create_mock.assert_called_once_with()
@ -22,9 +22,9 @@ def test_create_tree_on_load_unsafe(configuration: Configuration, database: SQLi
"""
must not create tree on load in case if user differs from the root owner
"""
mocker.patch("ahriman.core.repository.properties.check_user", side_effect=UnsafeRun(0, 1))
mocker.patch("ahriman.core.repository.repository_properties.check_user", side_effect=UnsafeRun(0, 1))
tree_create_mock = mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
Properties("x86_64", configuration, database, True, False)
RepositoryProperties("x86_64", configuration, database, True, False)
tree_create_mock.assert_not_called()
@ -35,7 +35,7 @@ def test_create_dummy_report_client(configuration: Configuration, database: SQLi
"""
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
load_mock = mocker.patch("ahriman.core.status.client.Client.load")
properties = Properties("x86_64", configuration, database, True, False)
properties = RepositoryProperties("x86_64", configuration, database, True, False)
load_mock.assert_not_called()
assert not isinstance(properties.reporter, WebClient)
@ -47,6 +47,6 @@ def test_create_full_report_client(configuration: Configuration, database: SQLit
"""
mocker.patch("ahriman.models.repository_paths.RepositoryPaths.tree_create")
load_mock = mocker.patch("ahriman.core.status.client.Client.load")
Properties("x86_64", configuration, database, False, False)
RepositoryProperties("x86_64", configuration, database, False, False)
load_mock.assert_called_once_with(configuration)