Skip to content
Snippets Groups Projects
Commit eb6f480c authored by Marek Chrastina's avatar Marek Chrastina
Browse files

Merge branch 'dev' into 'master'

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

See merge request !7
parents a7dba0d0 0b707db9
No related branches found
No related tags found
1 merge request!7If only bdist is available, check if python_version satisfied python platform version
Pipeline #11159 passed
...@@ -48,17 +48,31 @@ build: ...@@ -48,17 +48,31 @@ build:
- gitchangelog | sed -r '1,/^# Changelog$/s/^(# Changelog)$/#\1/' >> README.md - gitchangelog | sed -r '1,/^# Changelog$/s/^(# Changelog)$/#\1/' >> README.md
- python setup.py sdist - python setup.py sdist
Install test: python safety:
stage: check
image: it4innovations/docker-pycheck:latest
before_script:
- virtualenv .venv
script:
- source .venv/bin/activate
- pip install --upgrade pip setuptools
- pip install dist/pipdeps*tar.gz
- pip list
- pip freeze | safety check --stdin --full-report
install test:
stage: check stage: check
image: it4innovations/docker-pypi:latest image: it4innovations/docker-pypi:latest
before_script: before_script:
- virtualenv .venv - virtualenv .venv
script: script:
- source .venv/bin/activate - source .venv/bin/activate
- pip install --upgrade pip setuptools
- pip install dist/pipdeps*tar.gz - pip install dist/pipdeps*tar.gz
- pip list - pip list
- pipdeps -l || true - pipdeps --list || true
- pipdeps -u - pipdeps --table || true
- pipdeps --upgrade
version check: version check:
stage: check stage: check
......
...@@ -14,16 +14,22 @@ situations. Currently, package extras are not finished. ...@@ -14,16 +14,22 @@ situations. Currently, package extras are not finished.
## Usage ## Usage
```console ```console
$ pipdeps.py --help $ pipdeps --help
usage: pipdeps.py [-h] (-l | -u | -s SHOW [SHOW ...]) usage: pipdeps [-h] [-e [EXCLUDE [EXCLUDE ...]]]
(-l | -t | -u | -s [SHOW [SHOW ...]])
Pipdeps shows/upgrades outdated packages with respect to existing Pipdeps shows/upgrades outdated packages with respect to existing
dependencies. dependencies.
optional arguments: optional arguments:
-h, --help show this help message and exit -h, --help show this help message and exit
-l, --list show upgradeable packages and versions -e [EXCLUDE [EXCLUDE ...]], --exclude [EXCLUDE [EXCLUDE ...]]
Space-separated list of excluded package (and
version). Format package==version or package for all
versions
-l, --list show list of upgradeable packages and versions
-t, --table show table of upgradeable packages and versions
-u, --upgrade upgrade upgradeable packages -u, --upgrade upgrade upgradeable packages
-s SHOW [SHOW ...], --show SHOW [SHOW ...] -s [SHOW [SHOW ...]], --show [SHOW [SHOW ...]]
show detailed info about upgradeable packages show detailed info about upgradeable packages
``` ```
...@@ -39,10 +39,17 @@ def arg_parse(): ...@@ -39,10 +39,17 @@ def arg_parse():
description="Pipdeps shows/upgrades outdated packages with respect to existing \ description="Pipdeps shows/upgrades outdated packages with respect to existing \
dependencies." 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 = parser.add_mutually_exclusive_group(required=True)
group.add_argument('-l', '--list', group.add_argument('-l', '--list',
action='store_true', 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', group.add_argument('-u', '--upgrade',
action='store_true', action='store_true',
help="upgrade upgradeable packages") help="upgrade upgradeable packages")
...@@ -51,6 +58,14 @@ def arg_parse(): ...@@ -51,6 +58,14 @@ def arg_parse():
help="show detailed info about upgradeable packages") help="show detailed info about upgradeable packages")
return parser.parse_args() 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): def upgrade_package(data):
""" """
pip install --upgrade "<package>==<versions>" pip install --upgrade "<package>==<versions>"
...@@ -223,9 +238,9 @@ def select_upkgs(data, rkey): ...@@ -223,9 +238,9 @@ def select_upkgs(data, rkey):
result.append(pkg) result.append(pkg)
return result return result
def print_list(data): def print_table(data):
""" """
Print upgradeable versions Print table upgradeable versions
""" """
upkgs = select_upkgs(data, 'upgradeable_version') upkgs = select_upkgs(data, 'upgradeable_version')
if not upkgs: if not upkgs:
...@@ -234,10 +249,22 @@ def print_list(data): ...@@ -234,10 +249,22 @@ def print_list(data):
tab_data = [] tab_data = []
for pkg in sorted(upkgs): for pkg in sorted(upkgs):
tab_data.append([pkg, data[pkg]['installed_version'], data[pkg]['upgradeable_version']]) tab_data.append([pkg, data[pkg]['installed_version'], data[pkg]['upgradeable_version']])
print tabulate.tabulate( print tabulate.tabulate(tab_data,
tab_data, ['package', 'installed_version', 'upgradeable_version'])
['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 return 1
def write_metadata(tmp_file): def write_metadata(tmp_file):
...@@ -431,17 +458,23 @@ def get_available_vers(package): ...@@ -431,17 +458,23 @@ def get_available_vers(package):
try: try:
data = get_json("https://pypi.python.org/pypi/%s/json" % (package)) data = get_json("https://pypi.python.org/pypi/%s/json" % (package))
except urllib2.HTTPError, err: 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) raise urllib2.HTTPError(err.url, err.code, None, err.hdrs, err.fp)
releases = data["releases"].keys() releases = data["releases"].keys()
for release in releases: for release in releases:
requires_python = [] requires_python, python_version, packagetype = [], [], []
for item in data["releases"][release]: for item in data["releases"][release]:
python_version.append(item['python_version'])
packagetype.append(item['packagetype'])
if item['requires_python'] is not None: if item['requires_python'] is not None:
for reqpyt in item['requires_python'].split(","): for reqpyt in item['requires_python'].split(","):
requires_python.append(reqpyt.strip()) requires_python.append(reqpyt.strip())
if requires_python: if requires_python:
requires_python = list(set(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): if is_version(release) and is_in_specifiers(PY_VER, requires_python):
versions.append(release) versions.append(release)
return sorted(versions, key=packaging.specifiers.LegacyVersion, reverse=True) return sorted(versions, key=packaging.specifiers.LegacyVersion, reverse=True)
...@@ -624,6 +657,33 @@ def get_hards(data, package_no_news): ...@@ -624,6 +657,33 @@ def get_hards(data, package_no_news):
'extras': list(set(extras))} 'extras': list(set(extras))}
return out 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): def del_hards(data):
""" """
Return list of packages and their versions that does not satisfy Return list of packages and their versions that does not satisfy
...@@ -1089,7 +1149,9 @@ def main(): ...@@ -1089,7 +1149,9 @@ def main():
""" """
os.environ["PYTHONWARNINGS"] = "ignore:DEPRECATION" os.environ["PYTHONWARNINGS"] = "ignore:DEPRECATION"
arguments = arg_parse() arguments = arg_parse()
excludes = get_excludes(arguments.exclude)
packages_data = get_pkg_data() packages_data = get_pkg_data()
packages_data = move_incompatible(packages_data, del_excls(packages_data, excludes))
packages_data = first_loop(packages_data) packages_data = first_loop(packages_data)
i_branch = ibranch(packages_data) i_branch = ibranch(packages_data)
...@@ -1100,6 +1162,8 @@ def main(): ...@@ -1100,6 +1162,8 @@ def main():
check_co_branches(packages_data) check_co_branches(packages_data)
check_extras(packages_data) check_extras(packages_data)
if arguments.table:
sys.exit(print_table(packages_data))
if arguments.list: if arguments.list:
sys.exit(print_list(packages_data)) sys.exit(print_list(packages_data))
if arguments.show is not None: if arguments.show is not None:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment