Skip to content
This repository was archived by the owner on Oct 21, 2022. It is now read-only.

Commit d633ec2

Browse files
authored
Handle corner cases for utils (#124)
1 parent 2096ab8 commit d633ec2

3 files changed

Lines changed: 32 additions & 6 deletions

File tree

compatibility_lib/compatibility_lib/dependency_highlighter.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@
1414

1515
import concurrent.futures
1616
import enum
17+
import logging
1718
import re
1819

1920
from compatibility_lib import compatibility_checker
20-
from compatibility_lib import compatibility_store
2121
from compatibility_lib import configs
2222
from compatibility_lib import utils
2323

@@ -154,11 +154,23 @@ def check_package(self, package_name):
154154
try:
155155
install = _sanitize_release_tag(info['installed_version'])
156156
except UnstableReleaseError as err:
157+
install = None
157158
priority = Priority(PriorityLevel.HIGH_PRIORITY, str(err))
158159

160+
159161
if not info['is_latest'] or priority.level != PriorityLevel.UP_TO_DATE:
162+
current_time = info['current_time']
163+
latest_version_time = info['latest_version_time']
164+
165+
# Skip the check if release timestamp is None.
166+
if current_time is None or latest_version_time is None:
167+
logging.warning(
168+
'Release time for dependency {} is not available.'
169+
.format(name))
170+
continue
171+
160172
latest = _sanitize_release_tag(info['latest_version'])
161-
elapsed_time = info['current_time']-info['latest_version_time']
173+
elapsed_time = current_time - latest_version_time
162174

163175
if priority.level == PriorityLevel.UP_TO_DATE:
164176
priority = self._get_update_priority(

compatibility_lib/compatibility_lib/test_utils.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,11 @@ def test_get_dependency_info_endpoint(self):
106106
class Test__parse_datetime(unittest.TestCase):
107107

108108
def test__parse_datetime(self):
109-
date_string = '2018-08-16T15:42:04.351677'
110-
expected = '2018-08-16 00:00:00'
111-
res = utils._parse_datetime(date_string)
112-
self.assertEqual(str(res), expected)
109+
date_string = '2018-08-16T15:42:04.351677'
110+
expected = '2018-08-16 00:00:00'
111+
res = utils._parse_datetime(date_string)
112+
self.assertEqual(str(res), expected)
113+
114+
def test__parse_datetime_empty(self):
115+
res = utils._parse_datetime(None)
116+
self.assertIsNone(res)

compatibility_lib/compatibility_lib/utils.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,13 @@ def _get_from_endpoint(self, package_name):
9090
result = [item for item in _result]
9191
depinfo = result[0][0].get('dependency_info')
9292

93+
# depinfo can be None if there is an exception during pip install.
94+
if depinfo is None:
95+
logging.warning(
96+
"Could not get the dependency info of package {} from server."
97+
.format(package_name))
98+
return {}
99+
93100
fields = ('installed_version_time',
94101
'current_time', 'latest_version_time')
95102
for pkgname in depinfo.keys():
@@ -123,6 +130,9 @@ def _parse_datetime(date_string):
123130
Returns:
124131
the date as a datetime obj
125132
"""
133+
if date_string is None:
134+
return None
135+
126136
date_string = date_string.replace('T', ' ')
127137
short_date = date_string.split(' ')[0]
128138
return datetime.strptime(short_date, DATETIME_FORMAT)

0 commit comments

Comments
 (0)