From 765bbf486f45289b7b2610d224a49e226016463e Mon Sep 17 00:00:00 2001 From: Evgenii Alekseev Date: Sat, 28 Jun 2025 22:07:59 +0300 Subject: [PATCH] feat: port to new AUR API --- src/ahriman/core/alpm/remote/aur.py | 19 +++++++--------- tests/ahriman/core/alpm/remote/test_aur.py | 25 ++++++++-------------- 2 files changed, 17 insertions(+), 27 deletions(-) diff --git a/src/ahriman/core/alpm/remote/aur.py b/src/ahriman/core/alpm/remote/aur.py index d7df1a91..374a0783 100644 --- a/src/ahriman/core/alpm/remote/aur.py +++ b/src/ahriman/core/alpm/remote/aur.py @@ -97,20 +97,17 @@ class AUR(Remote): Returns: list[AURPackage]: response parsed to package list + + Raises: + PackageInfoError: if multiple arguments are passed """ - query: list[tuple[str, str]] = [ - ("type", request_type), - ("v", self.DEFAULT_RPC_VERSION), - ] + if len(args) != 1: + raise PackageInfoError("AUR API requires exactly one argument to search") - arg_query = "arg[]" if len(args) > 1 else "arg" - for arg in args: - query.append((arg_query, arg)) + url = f"{self.DEFAULT_RPC_URL}/v{self.DEFAULT_RPC_VERSION}/{request_type}/{args[0]}" + query = list(kwargs.items()) - for key, value in kwargs.items(): - query.append((key, value)) - - response = self.make_request("GET", self.DEFAULT_RPC_URL, params=query) + response = self.make_request("GET", url, params=query) return self.parse_response(response.json()) def package_info(self, package_name: str, *, pacman: Pacman | None) -> AURPackage: diff --git a/tests/ahriman/core/alpm/remote/test_aur.py b/tests/ahriman/core/alpm/remote/test_aur.py index b8722962..50b50183 100644 --- a/tests/ahriman/core/alpm/remote/test_aur.py +++ b/tests/ahriman/core/alpm/remote/test_aur.py @@ -76,24 +76,18 @@ def test_aur_request(aur: AUR, aur_package_ahriman: AURPackage, request_mock = mocker.patch("ahriman.core.alpm.remote.AUR.make_request", return_value=response_mock) assert aur.aur_request("info", "ahriman") == [aur_package_ahriman] - request_mock.assert_called_once_with( - "GET", "https://aur.archlinux.org/rpc", - params=[("type", "info"), ("v", "5"), ("arg", "ahriman")]) + request_mock.assert_called_once_with("GET", "https://aur.archlinux.org/rpc/v5/info/ahriman", params=[]) -def test_aur_request_multi_arg(aur: AUR, aur_package_ahriman: AURPackage, - mocker: MockerFixture, resource_path_root: Path) -> None: +def test_aur_request_multi_arg(aur: AUR) -> None: """ - must perform request to AUR with multiple args + must raise PackageInfoError if invalid amount of arguments supplied """ - response_mock = MagicMock() - response_mock.json.return_value = json.loads(_get_response(resource_path_root)) - request_mock = mocker.patch("ahriman.core.alpm.remote.AUR.make_request", return_value=response_mock) + with pytest.raises(PackageInfoError): + aur.aur_request("search", "ahriman", "is", "cool") - assert aur.aur_request("search", "ahriman", "is", "cool") == [aur_package_ahriman] - request_mock.assert_called_once_with( - "GET", "https://aur.archlinux.org/rpc", - params=[("type", "search"), ("v", "5"), ("arg[]", "ahriman"), ("arg[]", "is"), ("arg[]", "cool")]) + with pytest.raises(PackageInfoError): + aur.aur_request("search") def test_aur_request_with_kwargs(aur: AUR, aur_package_ahriman: AURPackage, @@ -106,9 +100,8 @@ def test_aur_request_with_kwargs(aur: AUR, aur_package_ahriman: AURPackage, request_mock = mocker.patch("ahriman.core.alpm.remote.AUR.make_request", return_value=response_mock) assert aur.aur_request("search", "ahriman", by="name") == [aur_package_ahriman] - request_mock.assert_called_once_with( - "GET", "https://aur.archlinux.org/rpc", - params=[("type", "search"), ("v", "5"), ("arg", "ahriman"), ("by", "name")]) + request_mock.assert_called_once_with("GET", "https://aur.archlinux.org/rpc/v5/search/ahriman", + params=[("by", "name")]) def test_aur_request_failed(aur: AUR, mocker: MockerFixture) -> None: