Skip to content

Commit ce6c364

Browse files
committed
Added method to fetch project versions using PyPi API, removed hardcoded versions in tests.
1 parent b5221e5 commit ce6c364

File tree

2 files changed

+36
-0
lines changed

2 files changed

+36
-0
lines changed

l2tdevtools/download_helpers/pypi.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
from __future__ import unicode_literals
55

6+
import json
67
import re
78

89
# pylint: disable=wrong-import-position
@@ -78,6 +79,38 @@ def _GetAvailableVersions(self, version_strings):
7879

7980
return available_versions
8081

82+
def GetLatestVersionWithAPI(self, project_name, version_definition):
83+
"""Retrieves the latest version for a given project using the PyPi API.
84+
85+
Args:
86+
project_name (str): name of the project.
87+
version_definition (ProjectVersionDefinition): project version definition
88+
or None.
89+
90+
Returns:
91+
str: latest version number or None if not available.
92+
"""
93+
earliest_version = None
94+
latest_version = None
95+
96+
if version_definition:
97+
earliest_version = version_definition.GetEarliestVersion()
98+
if earliest_version and earliest_version[0] == '==':
99+
return '.'.join(earliest_version[1:])
100+
101+
latest_version = version_definition.GetLatestVersion()
102+
103+
pypi_url = 'https://pypi.org/pypi/{0:s}/json'.format(project_name)
104+
page_content = self.DownloadPageContent(pypi_url)
105+
106+
api_data = json.loads(page_content)
107+
releases = api_data.get('releases', {})
108+
version_strings = releases.keys()
109+
available_versions = self._GetAvailableVersions(version_strings)
110+
111+
return self._GetLatestVersion(
112+
earliest_version, latest_version, available_versions)
113+
81114
def GetLatestVersion(self, unused_project_name, version_definition):
82115
"""Retrieves the latest version number for a given project name.
83116

tests/download_helpers/pypi.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ def testGetLatestVersion(self):
3030

3131
latest_version = download_helper.GetLatestVersion(self._PROJECT_NAME, None)
3232

33+
latest_version = download_helper.GetLatestVersionWithAPI(
34+
self._PROJECT_NAME, None)
35+
3336
self.assertEqual(latest_version, self._PROJECT_VERSION)
3437

3538
def testGetDownloadURL(self):

0 commit comments

Comments
 (0)