1010. ScriptFunctions
1111Import Alien
1212
13+
1314getversion () {
15+
1416 local prog=$( echo " $1 " | sed ' s,\(.*\),\L\1,g' )
15- local proginfo=$( $pip list | sed ' s,\(.*\),\L\1,g' | grep " ^${prog} " )
17+ local proginfo=$( $pip list 2> /dev/null | sed ' s,\(.*\),\L\1,g' | grep " ^${prog} " )
1618 if [ -z " $proginfo " ]
1719 then exit 1
1820 else echo " $proginfo " | cut -d\( -f2 | cut -d\) -f1
@@ -23,21 +25,28 @@ getinstallversion() {
2325 prog=" $1 "
2426 versions=($( python${python_major} - << EOF
2527import json
28+ from packaging.version import Version
29+
2630try:
2731 from urllib2 import urlopen, Request
28- except ImportError:
32+ def load_json(res):
33+ return json.load(res)
34+
35+ except ModuleNotFoundError:
2936 from urllib.request import urlopen, Request
30- from pkg_resources import parse_version
37+ def load_json(res):
38+ return json.loads('\n'.join([l.decode() for l in res.readlines()]))
39+
3140def available_versions(prog):
3241 try:
33- url = "https://pypi.python.org/pypi/%s/json" %prog
34- data = json.load (urlopen(Request(url)))
35- versions = list(data["releases"].keys())
36- # sort available versions newest to oldest
37- versions.sort(key=parse_version, reverse=True)
38- return versions
39- except:
40- return ''
42+ url = "https://pypi.python.org/pypi/%s/json" %prog
43+ data = load_json (urlopen(Request(url)))
44+ versions = list(data["releases"].keys())
45+ versions. sort(key=Version, reverse=True)
46+ return versions
47+
48+ except Exception as e :
49+ return []
4150print("\n".join(available_versions("$prog ")))
4251EOF
4352 ) )
@@ -97,9 +106,14 @@ prog="$2"
97106
98107case " $command " in
99108 --getversion)
100- echo $( getversion " $2 " )
109+ ver=$( getversion " $2 " )
110+ [ $? -eq 0 ] && echo $ver || exit $? # propagate the error
101111 ;;
102112 --getinstallversion)
113+ [ -z " $( getversion ' packaging' ) " ] && {
114+ echo " pip module 'packaging' (see PEP440) not found, installing it first" >&2
115+ install packaging >&2 || exit 1
116+ }
103117 echo $( getinstallversion " $2 " " $3 " " $4 " )
104118 ;;
105119 --greater-than)
@@ -112,7 +126,7 @@ case "$command" in
112126 lower=" $3 "
113127 upper=" $4 "
114128 ver=$( getversion " $2 " )
115- In_Version_Range " $lower " " $ver " " $upper "
129+ In_Version_Range " $lower " " $ver " " $upper "
116130 ;;
117131 --have-manager)
118132 which pip${python_major} > /dev/null 2>&1 || exit 1
0 commit comments