From 713cc63a0f1c37f362bfcf7d9ec78a136083f0ce Mon Sep 17 00:00:00 2001 From: Evgenii Alekseev Date: Fri, 7 Mar 2025 02:24:26 +0200 Subject: [PATCH] replace tuple with model --- .../database/operations/logs_operations.py | 26 ++++--- src/ahriman/core/log/http_log_handler.py | 3 +- src/ahriman/core/status/client.py | 13 ++-- src/ahriman/core/status/local_client.py | 15 ++--- src/ahriman/core/status/watcher.py | 6 +- src/ahriman/core/status/web_client.py | 24 +++---- src/ahriman/models/log_record.py | 38 +++++++++++ src/ahriman/web/views/v1/packages/logs.py | 6 +- src/ahriman/web/views/v2/packages/logs.py | 10 +-- .../operations/test_logs_operations.py | 67 ++++++++++--------- .../ahriman/core/log/test_http_log_handler.py | 3 +- tests/ahriman/core/status/test_client.py | 5 +- .../ahriman/core/status/test_local_client.py | 7 +- tests/ahriman/core/status/test_web_client.py | 20 ++++-- tests/ahriman/models/test_log_record.py | 0 15 files changed, 143 insertions(+), 100 deletions(-) create mode 100644 src/ahriman/models/log_record.py create mode 100644 tests/ahriman/models/test_log_record.py diff --git a/src/ahriman/core/database/operations/logs_operations.py b/src/ahriman/core/database/operations/logs_operations.py index 50645b00..975b5f62 100644 --- a/src/ahriman/core/database/operations/logs_operations.py +++ b/src/ahriman/core/database/operations/logs_operations.py @@ -20,6 +20,7 @@ from sqlite3 import Connection from ahriman.core.database.operations.operations import Operations +from ahriman.models.log_record import LogRecord from ahriman.models.log_record_id import LogRecordId from ahriman.models.repository_id import RepositoryId @@ -30,7 +31,7 @@ class LogsOperations(Operations): """ def logs_get(self, package_base: str, limit: int = -1, offset: int = 0, - repository_id: RepositoryId | None = None) -> list[tuple[LogRecordId, float, str]]: + repository_id: RepositoryId | None = None) -> list[LogRecord]: """ extract logs for specified package base @@ -41,13 +42,13 @@ class LogsOperations(Operations): repository_id(RepositoryId, optional): repository unique identifier override (Default value = None) Return: - list[tuple[LogRecordId, float, str]]: sorted package log records and their timestamps + list[LogRecord]: sorted package log records """ repository_id = repository_id or self._repository_id - def run(connection: Connection) -> list[tuple[LogRecordId, float, str]]: + def run(connection: Connection) -> list[LogRecord]: return [ - (LogRecordId(package_base, row["version"], row["process_id"]), row["created"], row["record"]) + LogRecord(LogRecordId(package_base, row["version"], row["process_id"]), row["created"], row["record"]) for row in connection.execute( """ select created, record, version, process_id from ( @@ -66,15 +67,12 @@ class LogsOperations(Operations): return self.with_connection(run) - def logs_insert(self, log_record_id: LogRecordId, created: float, record: str, - repository_id: RepositoryId | None = None) -> None: + def logs_insert(self, log_record: LogRecord, repository_id: RepositoryId | None = None) -> None: """ write new log record to database Args: - log_record_id(LogRecordId): current log record id - created(float): log created timestamp from log record attribute - record(str): log record + log_record(LogRecord): log record object repository_id(RepositoryId, optional): repository unique identifier override (Default value = None) """ repository_id = repository_id or self._repository_id @@ -88,12 +86,12 @@ class LogsOperations(Operations): (:package_base, :version, :created, :record, :repository, :process_id) """, { - "package_base": log_record_id.package_base, - "version": log_record_id.version, - "created": created, - "record": record, + "package_base": log_record.log_record_id.package_base, + "version": log_record.log_record_id.version, + "created": log_record.created, + "record": log_record.message, "repository": repository_id.id, - "process_id": log_record_id.process_id, + "process_id": log_record.log_record_id.process_id, } ) diff --git a/src/ahriman/core/log/http_log_handler.py b/src/ahriman/core/log/http_log_handler.py index 2377478f..18b67d83 100644 --- a/src/ahriman/core/log/http_log_handler.py +++ b/src/ahriman/core/log/http_log_handler.py @@ -24,6 +24,7 @@ from typing import Self from ahriman.core.configuration import Configuration from ahriman.core.status import Client +from ahriman.models.log_record import LogRecord from ahriman.models.repository_id import RepositoryId @@ -95,7 +96,7 @@ class HttpLogHandler(logging.Handler): return # in case if no package base supplied we need just skip log message try: - self.reporter.package_logs_add(log_record_id, record.created, record.getMessage()) + self.reporter.package_logs_add(LogRecord(log_record_id, record.created, record.getMessage())) except Exception: if self.suppress_errors: return diff --git a/src/ahriman/core/status/client.py b/src/ahriman/core/status/client.py index abc78a15..948b0a91 100644 --- a/src/ahriman/core/status/client.py +++ b/src/ahriman/core/status/client.py @@ -27,7 +27,7 @@ from ahriman.models.changes import Changes from ahriman.models.dependencies import Dependencies from ahriman.models.event import Event, EventType from ahriman.models.internal_status import InternalStatus -from ahriman.models.log_record_id import LogRecordId +from ahriman.models.log_record import LogRecord from ahriman.models.package import Package from ahriman.models.pkgbuild_patch import PkgbuildPatch from ahriman.models.repository_id import RepositoryId @@ -194,19 +194,16 @@ class Client: """ raise NotImplementedError - def package_logs_add(self, log_record_id: LogRecordId, created: float, message: str) -> None: + def package_logs_add(self, log_record: LogRecord) -> None: """ post log record Args: - log_record_id(LogRecordId): log record id - created(float): log created timestamp - message(str): log message + log_record(LogRecord): log record """ # this method does not raise NotImplementedError because it is actively used as dummy client for http log - def package_logs_get(self, package_base: str, limit: int = -1, - offset: int = 0) -> list[tuple[LogRecordId, float, str]]: + def package_logs_get(self, package_base: str, limit: int = -1, offset: int = 0) -> list[LogRecord]: """ get package logs @@ -216,7 +213,7 @@ class Client: offset(int, optional): records offset (Default value = 0) Returns: - list[tuple[LogRecordId, float, str]]: package logs + list[LogRecord]: package logs Raises: NotImplementedError: not implemented method diff --git a/src/ahriman/core/status/local_client.py b/src/ahriman/core/status/local_client.py index b58a7a60..c3266ae4 100644 --- a/src/ahriman/core/status/local_client.py +++ b/src/ahriman/core/status/local_client.py @@ -23,7 +23,7 @@ from ahriman.models.build_status import BuildStatus, BuildStatusEnum from ahriman.models.changes import Changes from ahriman.models.dependencies import Dependencies from ahriman.models.event import Event, EventType -from ahriman.models.log_record_id import LogRecordId +from ahriman.models.log_record import LogRecord from ahriman.models.package import Package from ahriman.models.pkgbuild_patch import PkgbuildPatch from ahriman.models.repository_id import RepositoryId @@ -143,19 +143,16 @@ class LocalClient(Client): return packages return [(package, status) for package, status in packages if package.base == package_base] - def package_logs_add(self, log_record_id: LogRecordId, created: float, message: str) -> None: + def package_logs_add(self, log_record: LogRecord) -> None: """ post log record Args: - log_record_id(LogRecordId): log record id - created(float): log created timestamp - message(str): log message + log_record(LogRecord): log record """ - self.database.logs_insert(log_record_id, created, message, self.repository_id) + self.database.logs_insert(log_record, self.repository_id) - def package_logs_get(self, package_base: str, limit: int = -1, - offset: int = 0) -> list[tuple[LogRecordId, float, str]]: + def package_logs_get(self, package_base: str, limit: int = -1, offset: int = 0) -> list[LogRecord]: """ get package logs @@ -165,7 +162,7 @@ class LocalClient(Client): offset(int, optional): records offset (Default value = 0) Returns: - list[tuple[LogRecordId, float, str]]: package logs + list[LogRecord]: package logs """ return self.database.logs_get(package_base, limit, offset, self.repository_id) diff --git a/src/ahriman/core/status/watcher.py b/src/ahriman/core/status/watcher.py index 04014cf9..525fd05d 100644 --- a/src/ahriman/core/status/watcher.py +++ b/src/ahriman/core/status/watcher.py @@ -28,7 +28,7 @@ from ahriman.models.build_status import BuildStatus, BuildStatusEnum from ahriman.models.changes import Changes from ahriman.models.dependencies import Dependencies from ahriman.models.event import Event, EventType -from ahriman.models.log_record_id import LogRecordId +from ahriman.models.log_record import LogRecord from ahriman.models.package import Package from ahriman.models.pkgbuild_patch import PkgbuildPatch @@ -107,9 +107,9 @@ class Watcher(LazyLogging): except KeyError: raise UnknownPackageError(package_base) from None - package_logs_add: Callable[[LogRecordId, float, str], None] + package_logs_add: Callable[[LogRecord], None] - package_logs_get: Callable[[str, int, int], list[tuple[LogRecordId, float, str]]] + package_logs_get: Callable[[str, int, int], list[LogRecord]] package_logs_remove: Callable[[str, str | None], None] diff --git a/src/ahriman/core/status/web_client.py b/src/ahriman/core/status/web_client.py index e29f5c9b..32414f4e 100644 --- a/src/ahriman/core/status/web_client.py +++ b/src/ahriman/core/status/web_client.py @@ -29,6 +29,7 @@ from ahriman.models.changes import Changes from ahriman.models.dependencies import Dependencies from ahriman.models.event import Event, EventType from ahriman.models.internal_status import InternalStatus +from ahriman.models.log_record import LogRecord from ahriman.models.log_record_id import LogRecordId from ahriman.models.package import Package from ahriman.models.pkgbuild_patch import PkgbuildPatch @@ -306,30 +307,27 @@ class WebClient(Client, SyncAhrimanClient): return [] - def package_logs_add(self, log_record_id: LogRecordId, created: float, message: str) -> None: + def package_logs_add(self, log_record: LogRecord) -> None: """ post log record Args: - log_record_id(LogRecordId): log record id - created(float): log created timestamp - message(str): log message + log_record(LogRecord): log record """ payload = { - "created": created, - "message": message, - "process_id": log_record_id.process_id, - "version": log_record_id.version, + "created": log_record.created, + "message": log_record.message, + "process_id": log_record.log_record_id.process_id, + "version": log_record.log_record_id.version, } # this is special case, because we would like to do not suppress exception here # in case of exception raised it will be handled by upstream HttpLogHandler # In the other hand, we force to suppress all http logs here to avoid cyclic reporting - self.make_request("POST", self._logs_url(log_record_id.package_base), + self.make_request("POST", self._logs_url(log_record.log_record_id.package_base), params=self.repository_id.query(), json=payload, suppress_errors=True) - def package_logs_get(self, package_base: str, limit: int = -1, - offset: int = 0) -> list[tuple[LogRecordId, float, str]]: + def package_logs_get(self, package_base: str, limit: int = -1, offset: int = 0) -> list[LogRecord]: """ get package logs @@ -339,7 +337,7 @@ class WebClient(Client, SyncAhrimanClient): offset(int, optional): records offset (Default value = 0) Returns: - list[tuple[LogRecordId, float, str]]: package logs + list[LogRecord]: package logs """ query = self.repository_id.query() + [("limit", str(limit)), ("offset", str(offset))] @@ -348,7 +346,7 @@ class WebClient(Client, SyncAhrimanClient): response_json = response.json() return [ - ( + LogRecord( LogRecordId(package_base, record["version"], record["process_id"]), record["created"], record["message"] diff --git a/src/ahriman/models/log_record.py b/src/ahriman/models/log_record.py new file mode 100644 index 00000000..c2eeca7d --- /dev/null +++ b/src/ahriman/models/log_record.py @@ -0,0 +1,38 @@ +# +# Copyright (c) 2021-2025 ahriman team. +# +# This file is part of ahriman +# (see https://github.com/arcan1s/ahriman). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +from dataclasses import dataclass + +from ahriman.models.log_record_id import LogRecordId + + +@dataclass(frozen=True) +class LogRecord: + """ + log record + + Attributes: + log_record_id(LogRecordId): log record identifier + created(float): log record creation timestamp + message(str): log record message + """ + + log_record_id: LogRecordId + created: float + message: str diff --git a/src/ahriman/web/views/v1/packages/logs.py b/src/ahriman/web/views/v1/packages/logs.py index 1e253fa2..7985019d 100644 --- a/src/ahriman/web/views/v1/packages/logs.py +++ b/src/ahriman/web/views/v1/packages/logs.py @@ -21,6 +21,7 @@ from aiohttp.web import HTTPBadRequest, HTTPNoContent, HTTPNotFound, Response, j from ahriman.core.exceptions import UnknownPackageError from ahriman.core.utils import pretty_datetime +from ahriman.models.log_record import LogRecord from ahriman.models.log_record_id import LogRecordId from ahriman.models.user_access import UserAccess from ahriman.web.apispec.decorators import apidocs @@ -96,7 +97,7 @@ class LogsView(StatusViewGuard, BaseView): response = { "package_base": package_base, "status": status.view(), - "logs": "\n".join(f"[{pretty_datetime(created)}] {message}" for _, created, message in logs) + "logs": "\n".join(f"[{pretty_datetime(log_record.created)}] {log_record.message}" for log_record in logs) } return json_response(response) @@ -130,6 +131,7 @@ class LogsView(StatusViewGuard, BaseView): # either read from process identifier from payload or assign to the current process identifier process_id = data.get("process_id", LogRecordId("", "").process_id) - self.service().package_logs_add(LogRecordId(package_base, version, process_id), created, record) + log_record = LogRecord(LogRecordId(package_base, version, process_id), created, record) + self.service().package_logs_add(log_record) raise HTTPNoContent diff --git a/src/ahriman/web/views/v2/packages/logs.py b/src/ahriman/web/views/v2/packages/logs.py index feae6f2e..4355e016 100644 --- a/src/ahriman/web/views/v2/packages/logs.py +++ b/src/ahriman/web/views/v2/packages/logs.py @@ -65,10 +65,10 @@ class LogsView(StatusViewGuard, BaseView): response = [ { - "created": created, - "message": message, - "version": log_record_id.version, - "process_id": log_record_id.process_id, - } for log_record_id, created, message in logs + "created": log_record.created, + "message": log_record.message, + "version": log_record.log_record_id.version, + "process_id": log_record.log_record_id.process_id, + } for log_record in logs ] return json_response(response) diff --git a/tests/ahriman/core/database/operations/test_logs_operations.py b/tests/ahriman/core/database/operations/test_logs_operations.py index efeb7d6d..5257955d 100644 --- a/tests/ahriman/core/database/operations/test_logs_operations.py +++ b/tests/ahriman/core/database/operations/test_logs_operations.py @@ -1,4 +1,5 @@ from ahriman.core.database import SQLite +from ahriman.models.log_record import LogRecord from ahriman.models.log_record_id import LogRecordId from ahriman.models.package import Package from ahriman.models.repository_id import RepositoryId @@ -9,16 +10,16 @@ def test_logs_insert_remove_version(database: SQLite, package_ahriman: Package, """ must clear version specific package logs """ - database.logs_insert(LogRecordId(package_ahriman.base, "1"), 42.0, "message 1") - database.logs_insert(LogRecordId(package_ahriman.base, "2"), 43.0, "message 2") - database.logs_insert(LogRecordId(package_python_schedule.base, "1"), 42.0, "message 3") + database.logs_insert(LogRecord(LogRecordId(package_ahriman.base, "1"), 42.0, "message 1")) + database.logs_insert(LogRecord(LogRecordId(package_ahriman.base, "2"), 43.0, "message 2")) + database.logs_insert(LogRecord(LogRecordId(package_python_schedule.base, "1"), 42.0, "message 3")) database.logs_remove(package_ahriman.base, "1") assert database.logs_get(package_ahriman.base) == [ - (LogRecordId(package_ahriman.base, "1"), 42.0, "message 1"), + LogRecord(LogRecordId(package_ahriman.base, "1"), 42.0, "message 1"), ] assert database.logs_get(package_python_schedule.base) == [ - (LogRecordId(package_python_schedule.base, "1"), 42.0, "message 3"), + LogRecord(LogRecordId(package_python_schedule.base, "1"), 42.0, "message 3"), ] @@ -26,27 +27,29 @@ def test_logs_insert_remove_multi(database: SQLite, package_ahriman: Package) -> """ must clear logs for specified repository """ - database.logs_insert(LogRecordId(package_ahriman.base, "1"), 42.0, "message 1") - database.logs_insert(LogRecordId(package_ahriman.base, "1"), 43.0, "message 2", + database.logs_insert(LogRecord(LogRecordId(package_ahriman.base, "1"), 42.0, "message 1")) + database.logs_insert(LogRecord(LogRecordId(package_ahriman.base, "1"), 43.0, "message 2"), RepositoryId("i686", database._repository_id.name)) database.logs_remove(package_ahriman.base, None, RepositoryId("i686", database._repository_id.name)) assert not database.logs_get(package_ahriman.base, repository_id=RepositoryId("i686", database._repository_id.name)) - assert database.logs_get(package_ahriman.base) == [(LogRecordId(package_ahriman.base, "1"), 42.0, "message 1")] + assert database.logs_get(package_ahriman.base) == [ + LogRecord(LogRecordId(package_ahriman.base, "1"), 42.0, "message 1"), + ] def test_logs_insert_remove_full(database: SQLite, package_ahriman: Package, package_python_schedule: Package) -> None: """ must clear full package logs """ - database.logs_insert(LogRecordId(package_ahriman.base, "1"), 42.0, "message 1") - database.logs_insert(LogRecordId(package_ahriman.base, "2"), 43.0, "message 2") - database.logs_insert(LogRecordId(package_python_schedule.base, "1"), 42.0, "message 3") + database.logs_insert(LogRecord(LogRecordId(package_ahriman.base, "1"), 42.0, "message 1")) + database.logs_insert(LogRecord(LogRecordId(package_ahriman.base, "2"), 43.0, "message 2")) + database.logs_insert(LogRecord(LogRecordId(package_python_schedule.base, "1"), 42.0, "message 3")) database.logs_remove(package_ahriman.base, None) assert not database.logs_get(package_ahriman.base) assert database.logs_get(package_python_schedule.base) == [ - (LogRecordId(package_python_schedule.base, "1"), 42.0, "message 3"), + LogRecord(LogRecordId(package_python_schedule.base, "1"), 42.0, "message 3"), ] @@ -54,11 +57,11 @@ def test_logs_insert_get(database: SQLite, package_ahriman: Package) -> None: """ must insert and get package logs """ - database.logs_insert(LogRecordId(package_ahriman.base, "1"), 43.0, "message 2") - database.logs_insert(LogRecordId(package_ahriman.base, "1"), 42.0, "message 1") + database.logs_insert(LogRecord(LogRecordId(package_ahriman.base, "1"), 43.0, "message 2")) + database.logs_insert(LogRecord(LogRecordId(package_ahriman.base, "1"), 42.0, "message 1")) assert database.logs_get(package_ahriman.base) == [ - (LogRecordId(package_ahriman.base, "1"), 42.0, "message 1"), - (LogRecordId(package_ahriman.base, "1"), 43.0, "message 2"), + LogRecord(LogRecordId(package_ahriman.base, "1"), 42.0, "message 1"), + LogRecord(LogRecordId(package_ahriman.base, "1"), 43.0, "message 2"), ] @@ -66,10 +69,10 @@ def test_logs_insert_get_pagination(database: SQLite, package_ahriman: Package) """ must insert and get package logs with pagination """ - database.logs_insert(LogRecordId(package_ahriman.base, "1"), 42.0, "message 1") - database.logs_insert(LogRecordId(package_ahriman.base, "1"), 43.0, "message 2") + database.logs_insert(LogRecord(LogRecordId(package_ahriman.base, "1"), 42.0, "message 1")) + database.logs_insert(LogRecord(LogRecordId(package_ahriman.base, "1"), 43.0, "message 2")) assert database.logs_get(package_ahriman.base, 1, 1) == [ - (LogRecordId(package_ahriman.base, "1"), 42.0, "message 1"), + LogRecord(LogRecordId(package_ahriman.base, "1"), 42.0, "message 1"), ] @@ -77,16 +80,16 @@ def test_logs_insert_get_multi(database: SQLite, package_ahriman: Package) -> No """ must insert and get package logs for multiple repositories """ - database.logs_insert(LogRecordId(package_ahriman.base, "1"), 42.0, "message 1") - database.logs_insert(LogRecordId(package_ahriman.base, "1"), 43.0, "message 2", + database.logs_insert(LogRecord(LogRecordId(package_ahriman.base, "1"), 42.0, "message 1")) + database.logs_insert(LogRecord(LogRecordId(package_ahriman.base, "1"), 43.0, "message 2"), RepositoryId("i686", database._repository_id.name)) assert database.logs_get(package_ahriman.base, repository_id=RepositoryId("i686", database._repository_id.name)) == [ - (LogRecordId(package_ahriman.base, "1"), 43.0, "message 2"), + LogRecord(LogRecordId(package_ahriman.base, "1"), 43.0, "message 2"), ] assert database.logs_get(package_ahriman.base) == [ - (LogRecordId(package_ahriman.base, "1"), 42.0, "message 1"), + LogRecord(LogRecordId(package_ahriman.base, "1"), 42.0, "message 1"), ] @@ -94,9 +97,9 @@ def test_logs_rotate_remove_all(database: SQLite, package_ahriman: Package) -> N """ must remove all records when rotating with keep_last_records is 0 """ - database.logs_insert(LogRecordId(package_ahriman.base, "1"), 42.0, "message 1") - database.logs_insert(LogRecordId(package_ahriman.base, "1"), 43.0, "message 2") - database.logs_insert(LogRecordId(package_ahriman.base, "2"), 44.0, "message 3") + database.logs_insert(LogRecord(LogRecordId(package_ahriman.base, "1"), 42.0, "message 1")) + database.logs_insert(LogRecord(LogRecordId(package_ahriman.base, "1"), 43.0, "message 2")) + database.logs_insert(LogRecord(LogRecordId(package_ahriman.base, "2"), 44.0, "message 3")) database.logs_rotate(0) assert not database.logs_get(package_ahriman.base) @@ -106,16 +109,16 @@ def test_logs_rotate_remove_duplicates(database: SQLite, package_ahriman: Packag """ must remove duplicate records while preserving the most recent one for each package version """ - database.logs_insert(LogRecordId(package_ahriman.base, "1", "p1"), 42.0, "message 1") - database.logs_insert(LogRecordId(package_ahriman.base, "1", "p2"), 43.0, "message 2") - database.logs_insert(LogRecordId(package_ahriman.base, "1", "p3"), 44.0, "message 3") - database.logs_insert(LogRecordId(package_ahriman.base, "2", "p1"), 45.0, "message 4") + database.logs_insert(LogRecord(LogRecordId(package_ahriman.base, "1", "p1"), 42.0, "message 1")) + database.logs_insert(LogRecord(LogRecordId(package_ahriman.base, "1", "p2"), 43.0, "message 2")) + database.logs_insert(LogRecord(LogRecordId(package_ahriman.base, "1", "p3"), 44.0, "message 3")) + database.logs_insert(LogRecord(LogRecordId(package_ahriman.base, "2", "p1"), 45.0, "message 4")) database.logs_rotate(2) logs = database.logs_get(package_ahriman.base) assert len(logs) == 2 assert logs == [ - (LogRecordId(package_ahriman.base, "1", "p3"), 44.0, "message 3"), - (LogRecordId(package_ahriman.base, "2", "p1"), 45.0, "message 4"), + LogRecord(LogRecordId(package_ahriman.base, "1", "p3"), 44.0, "message 3"), + LogRecord(LogRecordId(package_ahriman.base, "2", "p1"), 45.0, "message 4"), ] diff --git a/tests/ahriman/core/log/test_http_log_handler.py b/tests/ahriman/core/log/test_http_log_handler.py index 224f5881..d8ba6d3e 100644 --- a/tests/ahriman/core/log/test_http_log_handler.py +++ b/tests/ahriman/core/log/test_http_log_handler.py @@ -4,6 +4,7 @@ from pytest_mock import MockerFixture from ahriman.core.configuration import Configuration from ahriman.core.log.http_log_handler import HttpLogHandler +from ahriman.models.log_record import LogRecord from ahriman.models.log_record_id import LogRecordId from ahriman.models.package import Package @@ -51,7 +52,7 @@ def test_emit(configuration: Configuration, log_record: logging.LogRecord, packa handler = HttpLogHandler(repository_id, configuration, report=False, suppress_errors=False) handler.emit(log_record) - log_mock.assert_called_once_with(log_record_id, log_record.created, log_record.getMessage()) + log_mock.assert_called_once_with(LogRecord(log_record_id, log_record.created, log_record.getMessage())) def test_emit_failed(configuration: Configuration, log_record: logging.LogRecord, package_ahriman: Package, diff --git a/tests/ahriman/core/status/test_client.py b/tests/ahriman/core/status/test_client.py index ff2f0589..3462855f 100644 --- a/tests/ahriman/core/status/test_client.py +++ b/tests/ahriman/core/status/test_client.py @@ -13,6 +13,7 @@ from ahriman.models.changes import Changes from ahriman.models.dependencies import Dependencies from ahriman.models.event import Event from ahriman.models.internal_status import InternalStatus +from ahriman.models.log_record import LogRecord from ahriman.models.log_record_id import LogRecordId from ahriman.models.package import Package from ahriman.models.pkgbuild_patch import PkgbuildPatch @@ -112,7 +113,7 @@ def test_event_get(client: Client) -> None: client.event_get(None, None) -def test_logs_rotate(client: Client, package_ahriman: Package) -> None: +def test_logs_rotate(client: Client) -> None: """ must do not raise exception on logs rotation call """ @@ -164,7 +165,7 @@ def test_package_logs_add(client: Client, package_ahriman: Package, log_record: must process log record addition without exception """ log_record_id = LogRecordId(package_ahriman.base, package_ahriman.version) - client.package_logs_add(log_record_id, log_record.created, log_record.getMessage()) + client.package_logs_add(LogRecord(log_record_id, log_record.created, log_record.getMessage())) def test_package_logs_get(client: Client, package_ahriman: Package) -> None: diff --git a/tests/ahriman/core/status/test_local_client.py b/tests/ahriman/core/status/test_local_client.py index 082126a8..87326e1a 100644 --- a/tests/ahriman/core/status/test_local_client.py +++ b/tests/ahriman/core/status/test_local_client.py @@ -8,6 +8,7 @@ from ahriman.models.build_status import BuildStatus, BuildStatusEnum from ahriman.models.changes import Changes from ahriman.models.dependencies import Dependencies from ahriman.models.event import Event, EventType +from ahriman.models.log_record import LogRecord from ahriman.models.log_record_id import LogRecordId from ahriman.models.package import Package from ahriman.models.pkgbuild_patch import PkgbuildPatch @@ -112,10 +113,10 @@ def test_package_logs_add(local_client: LocalClient, package_ahriman: Package, l """ logs_mock = mocker.patch("ahriman.core.database.SQLite.logs_insert") log_record_id = LogRecordId(package_ahriman.base, package_ahriman.version) + record = LogRecord(log_record_id, log_record.created, log_record.getMessage()) - local_client.package_logs_add(log_record_id, log_record.created, log_record.getMessage()) - logs_mock.assert_called_once_with(log_record_id, log_record.created, log_record.getMessage(), - local_client.repository_id) + local_client.package_logs_add(record) + logs_mock.assert_called_once_with(record, local_client.repository_id) def test_package_logs_get(local_client: LocalClient, package_ahriman: Package, mocker: MockerFixture) -> None: diff --git a/tests/ahriman/core/status/test_web_client.py b/tests/ahriman/core/status/test_web_client.py index 05ce6516..f2110464 100644 --- a/tests/ahriman/core/status/test_web_client.py +++ b/tests/ahriman/core/status/test_web_client.py @@ -12,6 +12,7 @@ from ahriman.models.changes import Changes from ahriman.models.dependencies import Dependencies from ahriman.models.event import Event, EventType from ahriman.models.internal_status import InternalStatus +from ahriman.models.log_record import LogRecord from ahriman.models.log_record_id import LogRecordId from ahriman.models.package import Package from ahriman.models.pkgbuild_patch import PkgbuildPatch @@ -605,9 +606,10 @@ def test_package_logs_add(web_client: WebClient, log_record: logging.LogRecord, "process_id": LogRecordId.process_id, "version": package_ahriman.version, } + record = LogRecord(LogRecordId(package_ahriman.base, package_ahriman.version), + log_record.created, log_record.getMessage()) - web_client.package_logs_add(LogRecordId(package_ahriman.base, package_ahriman.version), - log_record.created, log_record.getMessage()) + web_client.package_logs_add(record) requests_mock.assert_called_once_with("POST", pytest.helpers.anyvar(str, True), params=web_client.repository_id.query(), json=payload, suppress_errors=True) @@ -619,9 +621,11 @@ def test_package_logs_add_failed(web_client: WebClient, log_record: logging.LogR """ mocker.patch("requests.Session.request", side_effect=Exception()) log_record.package_base = package_ahriman.base + record = LogRecord(LogRecordId(package_ahriman.base, package_ahriman.version), + log_record.created, log_record.getMessage()) + with pytest.raises(Exception): - web_client.package_logs_add(LogRecordId(package_ahriman.base, package_ahriman.version), - log_record.created, log_record.getMessage()) + web_client.package_logs_add(record) def test_package_logs_add_failed_http_error(web_client: WebClient, log_record: logging.LogRecord, @@ -631,9 +635,11 @@ def test_package_logs_add_failed_http_error(web_client: WebClient, log_record: l """ mocker.patch("requests.Session.request", side_effect=requests.HTTPError()) log_record.package_base = package_ahriman.base + record = LogRecord(LogRecordId(package_ahriman.base, package_ahriman.version), + log_record.created, log_record.getMessage()) + with pytest.raises(Exception): - web_client.package_logs_add(LogRecordId(package_ahriman.base, package_ahriman.version), - log_record.created, log_record.getMessage()) + web_client.package_logs_add(record) def test_package_logs_get(web_client: WebClient, package_ahriman: Package, mocker: MockerFixture) -> None: @@ -656,7 +662,7 @@ def test_package_logs_get(web_client: WebClient, package_ahriman: Package, mocke requests_mock.assert_called_once_with("GET", pytest.helpers.anyvar(str, True), params=web_client.repository_id.query() + [("limit", "1"), ("offset", "2")]) assert result == [ - (LogRecordId(package_ahriman.base, package_ahriman.version), message["created"], message["message"]), + LogRecord(LogRecordId(package_ahriman.base, package_ahriman.version), message["created"], message["message"]), ] diff --git a/tests/ahriman/models/test_log_record.py b/tests/ahriman/models/test_log_record.py new file mode 100644 index 00000000..e69de29b