From d9d59bee680bddbfacc61ec389b5015f79ff162c Mon Sep 17 00:00:00 2001 From: Daniel Date: Thu, 3 Mar 2022 23:54:43 +1100 Subject: Fix #1018 (#1021) * Fix #1018 * Fix flake8 Co-authored-by: Daniel Girtler --- archinstall/lib/packages/packages.py | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) (limited to 'archinstall/lib/packages/packages.py') diff --git a/archinstall/lib/packages/packages.py b/archinstall/lib/packages/packages.py index b2c8ab8e..d5834f43 100644 --- a/archinstall/lib/packages/packages.py +++ b/archinstall/lib/packages/packages.py @@ -1,25 +1,35 @@ import json import ssl -import urllib.request from typing import Dict, Any, Tuple, List +from urllib.error import HTTPError +from urllib.parse import urlencode +from urllib.request import urlopen from ..exceptions import PackageError, SysCallError from ..models.dataclasses import PackageSearch, PackageSearchResult, LocalPackage from ..pacman import run_pacman -BASE_URL_PKG_SEARCH = 'https://archlinux.org/packages/search/json/?name={package}' +BASE_URL_PKG_SEARCH = 'https://archlinux.org/packages/search/json/' # BASE_URL_PKG_CONTENT = 'https://archlinux.org/packages/search/json/' -BASE_GROUP_URL = 'https://archlinux.org/groups/search/json/?name={group}' +BASE_GROUP_URL = 'https://archlinux.org/groups/search/json/' -def group_search(name :str) -> List[PackageSearchResult]: - # TODO UPSTREAM: Implement /json/ for the groups search +def _make_request(url: str, params: Dict) -> Any: ssl_context = ssl.create_default_context() ssl_context.check_hostname = False ssl_context.verify_mode = ssl.CERT_NONE + + encoded = urlencode(params) + full_url = f'{url}?{encoded}' + + return urlopen(full_url, context=ssl_context) + + +def group_search(name :str) -> List[PackageSearchResult]: + # TODO UPSTREAM: Implement /json/ for the groups search try: - response = urllib.request.urlopen(BASE_GROUP_URL.format(group=name), context=ssl_context) - except urllib.error.HTTPError as err: + response = _make_request(BASE_GROUP_URL, {'name': name}) + except HTTPError as err: if err.code == 404: return [] else: @@ -38,10 +48,7 @@ def package_search(package :str) -> PackageSearch: """ # TODO UPSTREAM: Implement bulk search, either support name=X&name=Y or split on space (%20 or ' ') # TODO: utilize pacman cache first, upstream second. - ssl_context = ssl.create_default_context() - ssl_context.check_hostname = False - ssl_context.verify_mode = ssl.CERT_NONE - response = urllib.request.urlopen(BASE_URL_PKG_SEARCH.format(package=package), context=ssl_context) + response = _make_request(BASE_URL_PKG_SEARCH, {'name': package}) if response.code != 200: raise PackageError(f"Could not locate package: [{response.code}] {response}") -- cgit v1.2.3-54-g00ecf