feat: port to new AUR API

This commit is contained in:
2025-06-28 22:07:59 +03:00
parent a3c54afb82
commit 765bbf486f
2 changed files with 17 additions and 27 deletions

View File

@ -97,20 +97,17 @@ class AUR(Remote):
Returns: Returns:
list[AURPackage]: response parsed to package list list[AURPackage]: response parsed to package list
Raises:
PackageInfoError: if multiple arguments are passed
""" """
query: list[tuple[str, str]] = [ if len(args) != 1:
("type", request_type), raise PackageInfoError("AUR API requires exactly one argument to search")
("v", self.DEFAULT_RPC_VERSION),
]
arg_query = "arg[]" if len(args) > 1 else "arg" url = f"{self.DEFAULT_RPC_URL}/v{self.DEFAULT_RPC_VERSION}/{request_type}/{args[0]}"
for arg in args: query = list(kwargs.items())
query.append((arg_query, arg))
for key, value in kwargs.items(): response = self.make_request("GET", url, params=query)
query.append((key, value))
response = self.make_request("GET", self.DEFAULT_RPC_URL, params=query)
return self.parse_response(response.json()) return self.parse_response(response.json())
def package_info(self, package_name: str, *, pacman: Pacman | None) -> AURPackage: def package_info(self, package_name: str, *, pacman: Pacman | None) -> AURPackage:

View File

@ -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) request_mock = mocker.patch("ahriman.core.alpm.remote.AUR.make_request", return_value=response_mock)
assert aur.aur_request("info", "ahriman") == [aur_package_ahriman] assert aur.aur_request("info", "ahriman") == [aur_package_ahriman]
request_mock.assert_called_once_with( request_mock.assert_called_once_with("GET", "https://aur.archlinux.org/rpc/v5/info/ahriman", params=[])
"GET", "https://aur.archlinux.org/rpc",
params=[("type", "info"), ("v", "5"), ("arg", "ahriman")])
def test_aur_request_multi_arg(aur: AUR, aur_package_ahriman: AURPackage, def test_aur_request_multi_arg(aur: AUR) -> None:
mocker: MockerFixture, resource_path_root: Path) -> None:
""" """
must perform request to AUR with multiple args must raise PackageInfoError if invalid amount of arguments supplied
""" """
response_mock = MagicMock() with pytest.raises(PackageInfoError):
response_mock.json.return_value = json.loads(_get_response(resource_path_root)) aur.aur_request("search", "ahriman", "is", "cool")
request_mock = mocker.patch("ahriman.core.alpm.remote.AUR.make_request", return_value=response_mock)
assert aur.aur_request("search", "ahriman", "is", "cool") == [aur_package_ahriman] with pytest.raises(PackageInfoError):
request_mock.assert_called_once_with( aur.aur_request("search")
"GET", "https://aur.archlinux.org/rpc",
params=[("type", "search"), ("v", "5"), ("arg[]", "ahriman"), ("arg[]", "is"), ("arg[]", "cool")])
def test_aur_request_with_kwargs(aur: AUR, aur_package_ahriman: AURPackage, 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) 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] assert aur.aur_request("search", "ahriman", by="name") == [aur_package_ahriman]
request_mock.assert_called_once_with( request_mock.assert_called_once_with("GET", "https://aur.archlinux.org/rpc/v5/search/ahriman",
"GET", "https://aur.archlinux.org/rpc", params=[("by", "name")])
params=[("type", "search"), ("v", "5"), ("arg", "ahriman"), ("by", "name")])
def test_aur_request_failed(aur: AUR, mocker: MockerFixture) -> None: def test_aur_request_failed(aur: AUR, mocker: MockerFixture) -> None: