From a16e3d7629ce7771fff791643bc76aa60df0d62a Mon Sep 17 00:00:00 2001 From: Joseph Rawson Date: Sun, 13 Oct 2019 18:01:50 -0500 Subject: [PATCH] simple workaround for package names containing dashes --- pip_upgrader/packages_status_detector.py | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/pip_upgrader/packages_status_detector.py b/pip_upgrader/packages_status_detector.py index a65347b..93f2656 100644 --- a/pip_upgrader/packages_status_detector.py +++ b/pip_upgrader/packages_status_detector.py @@ -229,16 +229,36 @@ def _parse_pypi_json_package_info(self, package_name, current_version, response) 'upload_time': upload_time }, 'success' - def _parse_simple_html_package_info(self, package_name, current_version, response): + def _get_simple_html_package_info_versions(self, package_name, response): """ :type package_name: str - :type current_version: version.Version :type response: requests.models.Response """ pattern = r'.*{name}-([A-z0-9\.-]*)(?:-py|\.tar).*<\/a>'.format(name=re.escape(package_name)) versions_match = re.findall(pattern, response.content.decode('utf-8'), flags=re.IGNORECASE) all_versions = [version.parse(vers) for vers in versions_match] + return all_versions + + def _parse_simple_html_package_info(self, package_name, current_version, response): + """ + :type package_name: str + :type current_version: version.Version + :type response: requests.models.Response + """ + all_versions = self._get_simple_html_package_info_versions( + package_name, response) + if not all_versions: + # print("{}: NO VERSIONS AVAILLABLE".format( package_name)) + fixed_name = package_name + # if we find a dash, presume earlier name used an underscore + if '-' in package_name: + fixed_name = package_name.replace('-', '_') + all_versions = self._get_simple_html_package_info_versions( + fixed_name, response) + if not all_versions: + raise RuntimeError("Unable to retrieve versions for {}".format(package_name)) + filtered_versions = [vers for vers in all_versions if not vers.is_prerelease and not vers.is_postrelease] if not filtered_versions: # pragma: nocover