Skip to content
Snippets Groups Projects

If only bdist is available, check if python_version satisfied python platform version

Merged Marek Chrastina requested to merge dev into master
Files
3
+ 73
9
@@ -39,10 +39,17 @@ def arg_parse():
description="Pipdeps shows/upgrades outdated packages with respect to existing \
dependencies."
)
parser.add_argument('-e', '--exclude',
nargs='*',
help="Space-separated list of excluded package (and version). \
Format package==version or package for all versions")
group = parser.add_mutually_exclusive_group(required=True)
group.add_argument('-l', '--list',
action='store_true',
help="show upgradeable packages and versions")
help="show list of upgradeable packages and versions")
group.add_argument('-t', '--table',
action='store_true',
help="show table of upgradeable packages and versions")
group.add_argument('-u', '--upgrade',
action='store_true',
help="upgrade upgradeable packages")
@@ -51,6 +58,14 @@ def arg_parse():
help="show detailed info about upgradeable packages")
return parser.parse_args()
def get_excludes(data):
"""
Parse argument excludes into array of (pkg, ver)
"""
if data is None:
return []
return [pkg.split("==") for pkg in data]
def upgrade_package(data):
"""
pip install --upgrade "<package>==<versions>"
@@ -223,9 +238,9 @@ def select_upkgs(data, rkey):
result.append(pkg)
return result
def print_list(data):
def print_table(data):
"""
Print upgradeable versions
Print table upgradeable versions
"""
upkgs = select_upkgs(data, 'upgradeable_version')
if not upkgs:
@@ -234,10 +249,22 @@ def print_list(data):
tab_data = []
for pkg in sorted(upkgs):
tab_data.append([pkg, data[pkg]['installed_version'], data[pkg]['upgradeable_version']])
print tabulate.tabulate(
tab_data,
['package', 'installed_version', 'upgradeable_version']
)
print tabulate.tabulate(tab_data,
['package', 'installed_version', 'upgradeable_version'])
return 1
def print_list(data):
"""
Print list upgradeable versions
"""
upkgs = select_upkgs(data, 'upgradeable_version')
if not upkgs:
print "There is nothing to upgrade."
return 0
list_data = []
for pkg in sorted(upkgs):
list_data.append("%s==%s" % (pkg, data[pkg]['upgradeable_version']))
print " ".join(list_data,)
return 1
def write_metadata(tmp_file):
@@ -431,17 +458,23 @@ def get_available_vers(package):
try:
data = get_json("https://pypi.python.org/pypi/%s/json" % (package))
except urllib2.HTTPError, err:
print "%s %s" % (err, err.url)
print "{} {}".format(err, err.url)
raise urllib2.HTTPError(err.url, err.code, None, err.hdrs, err.fp)
releases = data["releases"].keys()
for release in releases:
requires_python = []
requires_python, python_version, packagetype = [], [], []
for item in data["releases"][release]:
python_version.append(item['python_version'])
packagetype.append(item['packagetype'])
if item['requires_python'] is not None:
for reqpyt in item['requires_python'].split(","):
requires_python.append(reqpyt.strip())
if requires_python:
requires_python = list(set(requires_python))
if len(packagetype) == 1 and packagetype[0] == 'bdist_wheel' and len(python_version) == 1:
pyt_ver = re.search(r"^py([0-9])", python_version[0])
if pyt_ver is not None and not is_in_specifiers(PY_VER, [">= %s" % pyt_ver.group(1)]):
continue
if is_version(release) and is_in_specifiers(PY_VER, requires_python):
versions.append(release)
return sorted(versions, key=packaging.specifiers.LegacyVersion, reverse=True)
@@ -624,6 +657,33 @@ def get_hards(data, package_no_news):
'extras': list(set(extras))}
return out
def del_excls(data, excludes):
"""
Return list of packages and their versions that are excluded by argument
"""
to_delete = []
_package_no_news, package_with_news = single_multi(data)
package_not_installed = not_installed(data)
for exc in excludes:
try:
exc_pkg, exc_ver = exc[0], exc[1]
except IndexError:
exc_pkg, exc_ver = exc[0], None
if exc_pkg not in package_with_news+package_not_installed:
print "Warning! Excluded package {} has no upgrades. Ignoring".format(exc_pkg)
continue
vers = [ver for ver, _ver_data in data[exc_pkg]['new_version'].iteritems()]
if exc_ver is not None and exc_ver not in vers:
print "Warning! Excluded package {}=={} is not upgradable. Ignoring".format(exc_pkg,
exc_ver)
continue
if exc_ver is None:
for ver in vers:
to_delete.append((exc_pkg, ver))
else:
to_delete.append((exc_pkg, exc_ver))
return to_delete
def del_hards(data):
"""
Return list of packages and their versions that does not satisfy
@@ -1089,7 +1149,9 @@ def main():
"""
os.environ["PYTHONWARNINGS"] = "ignore:DEPRECATION"
arguments = arg_parse()
excludes = get_excludes(arguments.exclude)
packages_data = get_pkg_data()
packages_data = move_incompatible(packages_data, del_excls(packages_data, excludes))
packages_data = first_loop(packages_data)
i_branch = ibranch(packages_data)
@@ -1100,6 +1162,8 @@ def main():
check_co_branches(packages_data)
check_extras(packages_data)
if arguments.table:
sys.exit(print_table(packages_data))
if arguments.list:
sys.exit(print_list(packages_data))
if arguments.show is not None:
Loading