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

Commit 6e9f089

Browse files
authored
Fix the google compatibility badge (#120)
1 parent ec87a23 commit 6e9f089

4 files changed

Lines changed: 43 additions & 39 deletions

File tree

badge_server/badge_server.py

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -396,26 +396,41 @@ def run_check():
396396
if package_name in configs.PKG_LIST:
397397
result = _get_pair_status_for_packages(pkg_sets)
398398
else:
399-
for pkg_set in pkg_sets:
400-
for py_ver in [2, 3]:
401-
py_version = PY_VER_MAPPING[py_ver]
402-
res = checker.check(pkg_set, str(py_ver))
403-
status = res.get('result')
399+
version_and_res = {
400+
'py2': {
401+
'status': 'SUCCESS',
402+
'details': {},
403+
},
404+
'py3': {
405+
'status': 'SUCCESS',
406+
'details': {},
407+
}
408+
}
409+
410+
for py_ver in [2, 3]:
411+
results = list(checker.get_pairwise_compatibility(
412+
py_ver, pkg_sets))
413+
py_version = PY_VER_MAPPING[py_ver]
414+
415+
for res in results:
416+
logging.warning(res)
417+
status = res[0].get('result')
418+
package = res[0].get('packages')[1]
404419
if status != 'SUCCESS':
405420
# Ignore the package that not support for given py_ver
406-
if pkg_set[1] in \
421+
if package in \
407422
configs.PKG_PY_VERSION_NOT_SUPPORTED.get(
408423
py_ver):
409424
continue
410425
# Status showing one of the check failures
411-
default_version_and_res[
426+
version_and_res[
412427
py_version]['status'] = res.get('result')
413428
description = res.get('description')
414429
details = EMPTY_DETAILS if description is None \
415430
else description
416-
default_version_and_res[
417-
py_version]['details'][pkg_set[1]] = details
418-
result = default_version_and_res
431+
version_and_res[
432+
py_version]['details'][package] = details
433+
result = version_and_res
419434

420435
# Write the result to memory store
421436
redis_client.set(

compatibility_lib/compatibility_lib/compatibility_checker.py

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@
1616

1717
import itertools
1818
import concurrent.futures
19-
import urllib.request
2019
import json
20+
import requests
2121
import retrying
2222

2323
from compatibility_lib import configs
@@ -32,17 +32,13 @@ def __init__(self, max_workers=20):
3232

3333
def check(self, packages, python_version):
3434
"""Call the checker server to get back status results."""
35-
data = json.dumps({
35+
data = {
3636
'python-version': python_version,
37-
'packages': packages
38-
}).encode('utf-8')
37+
'package': packages
38+
}
39+
result = requests.get(SERVER_URL, params=data)
3940

40-
check_request = urllib.request.Request(SERVER_URL, data)
41-
42-
with urllib.request.urlopen(check_request) as f:
43-
result = json.loads(f.read().decode('utf-8'))
44-
45-
return result
41+
return json.loads(result.content.decode('utf-8'))
4642

4743
@retrying.retry(wait_exponential_multiplier=5000,
4844
wait_exponential_max=20000)
@@ -65,11 +61,12 @@ def get_self_compatibility(self, python_version, packages=None):
6561
for result in zip(pkg_set_results):
6662
yield result
6763

68-
def get_pairwise_compatibility(self, python_version):
64+
def get_pairwise_compatibility(self, python_version, pkg_sets=None):
6965
"""Get pairwise compatibility data for each pair of packages."""
66+
if pkg_sets is None:
67+
pkg_sets = itertools.combinations(configs.PKG_LIST, 2)
7068
with concurrent.futures.ThreadPoolExecutor(
7169
max_workers=self.max_workers) as p:
72-
pkg_sets = itertools.combinations(configs.PKG_LIST, 2)
7370
pkg_set_results = p.map(
7471
self.retrying_check,
7572
((list(pkg_set), python_version) for pkg_set in pkg_sets))

compatibility_lib/compatibility_lib/test_compatibility_checker.py

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -31,31 +31,22 @@ def test_check(self):
3131

3232
data = {
3333
'python-version': python_version,
34-
'packages': packages
34+
'package': packages
3535
}
3636

37-
request = mock.Mock()
38-
39-
mock_request = mock.Mock()
40-
mock_request.Request.return_value = request
41-
42-
urlopen_res = mock.Mock()
43-
mock_request.urlopen.return_value = urlopen_res
44-
json_mock = mock.Mock()
45-
json_mock.read.return_value = b'{}'
46-
urlopen_res.__enter__ = mock.Mock(return_value=json_mock)
47-
urlopen_res.__exit__ = mock.Mock(return_value=None)
37+
mock_requests = mock.Mock()
38+
mock_response = mock.Mock(content=b'{}')
39+
mock_requests.get.return_value = mock_response
4840

4941
patch_request = mock.patch(
50-
'compatibility_lib.compatibility_checker.urllib.request',
51-
mock_request)
42+
'compatibility_lib.compatibility_checker.requests',
43+
mock_requests)
5244

5345
with patch_request:
5446
checker.check(packages, python_version)
5547

56-
mock_request.Request.assert_called_with(
57-
compatibility_checker.SERVER_URL, json.dumps(data).encode('utf-8'))
58-
mock_request.urlopen.assert_called_with(request)
48+
mock_requests.get.assert_called_with(
49+
compatibility_checker.SERVER_URL, params=data)
5950

6051
def _mock_retrying_check(self, *args):
6152
packages = args[0][0]

requirements-test.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,6 @@ Jinja2==2.10
44
mock==2.0.0
55
pytest==3.6.1
66
redis==2.10.6
7+
requests==2.19.1
78
retrying==1.3.3
89
wrapt==1.10.11

0 commit comments

Comments
 (0)