From dee58b43c459eb8cc46f5bb780340657996c156a Mon Sep 17 00:00:00 2001 From: Jiangge Zhang Date: Mon, 8 Jun 2015 00:52:30 +0800 Subject: [PATCH] Add wheel/python-version/python-implementation/status badage for PyPI. To replace the pypipins: https://github.com/badges/pypipins/issues/39 --- server.js | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ try.html | 16 +++++++++++++ 2 files changed, 83 insertions(+) diff --git a/server.js b/server.js index 54a76091e5231..729a5bded785a 100644 --- a/server.js +++ b/server.js @@ -1481,6 +1481,73 @@ cache(function(data, match, sendBadge, request) { badgeData.colorscheme = 'blue'; } sendBadge(format, badgeData); + } else if (info == 'wheel') { + var releases = data.releases[data.info.version]; + var hasWheel = false; + for (var i in releases) { + if (releases[i].packagetype == 'wheel' || + releases[i].packagetype == 'bdist_wheel') { + hasWheel = true; + break; + } + } + badgeData.text[0] = 'wheel'; + badgeData.text[1] = hasWheel ? 'yes' : 'no'; + badgeData.colorscheme = hasWheel ? 'brightgreen' : 'red'; + sendBadge(format, badgeData); + } else if (info == 'py_versions') { + var versions = []; + var pattern = /^Programming Language \:\: Python \:\: (\d\.\d)$/; + for (var i in data.info.classifiers) { + var matched = pattern.exec(data.info.classifiers[i]); + if (matched && matched[1]) { + versions.push(matched[1]); + } + } + if (!versions.length) { + versions.push('not found'); + } + badgeData.text[0] = 'python'; + badgeData.text[1] = versions.sort().join(', '); + badgeData.colorscheme = 'blue'; + sendBadge(format, badgeData); + } else if (info == 'implementation') { + var implementations = []; + var pattern = /^Programming Language \:\: Python \:\: Implementation \:\: (\S+)$/; + for (var i in data.info.classifiers) { + var matched = pattern.exec(data.info.classifiers[i]); + if (matched && matched[1]) { + implementations.push(matched[1].toLowerCase()); + } + } + if (!implementations.length) { + implementations.push('cpython'); // assume CPython + } + badgeData.text[0] = 'implementation'; + badgeData.text[1] = implementations.sort().join(', '); + badgeData.colorscheme = 'blue'; + sendBadge(format, badgeData); + } else if (info == 'status') { + var pattern = /^Development Status \:\: ([1-7]) - (\S+)$/; + var statusColors = { + '1': 'red', '2': 'red', '3': 'red', '4': 'yellow', + '5': 'brightgreen', '6': 'brightgreen', '7': 'red'}; + var statusCode = '1', statusText = 'unknown'; + for (var i in data.info.classifiers) { + var matched = pattern.exec(data.info.classifiers[i]); + if (matched && matched[1] && matched[2]) { + statusCode = matched[1]; + statusText = matched[2].toLowerCase().replace('-', '--'); + if (statusText == 'production/stable') { + statusText = 'stable'; + } + break; + } + } + badgeData.text[0] = 'status'; + badgeData.text[1] = statusText; + badgeData.colorscheme = statusColors[statusCode]; + sendBadge(format, badgeData); } } catch(e) { badgeData.text[1] = 'invalid'; diff --git a/try.html b/try.html index cba121ca5555f..6ac6f2587c59c 100644 --- a/try.html +++ b/try.html @@ -518,6 +518,22 @@

Miscellaneous

https://img.shields.io/pypi/l/Django.svg + PyPI: + + https://img.shields.io/pypi/wheel/Django.svg + + PyPI: + + https://img.shields.io/pypi/py_versions/Django.svg + + PyPI: + + https://img.shields.io/pypi/implementation/Django.svg + + PyPI: + + https://img.shields.io/pypi/status/Django.svg + Hex.pm: https://img.shields.io/hexpm/l/plug.svg