diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 08772850dddd2a5db6b48e39ae9772b991373a08..c2f06f9a58f6b9ba2a89f4950b377b45fd8fbe9f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -9,7 +9,7 @@ mdcheck: - mdl *.md pylint: - allow_failure: true + #allow_failure: true stage: test image: it4innovations/docker-pycheck:latest script: diff --git a/pipupgradedependencies/__init__.py b/pipupgradedependencies/__init__.py index de40ea7ca058e07a399acf61529d418c07eeee61..06e92937270afd1fa2e207d3e14a61293ad041c2 100644 --- a/pipupgradedependencies/__init__.py +++ b/pipupgradedependencies/__init__.py @@ -1 +1,4 @@ +""" +pipupgradedependencies init +""" __import__('pkg_resources').declare_namespace(__name__) diff --git a/pipupgradedependencies/pipupgradedependencies.py b/pipupgradedependencies/pipupgradedependencies.py index 19c0a5c8ab19e96d79038e53ea27b4464cb4a4c9..a5f1becfc0e7f51b4ed1d5748161ed4e529d6868 100644 --- a/pipupgradedependencies/pipupgradedependencies.py +++ b/pipupgradedependencies/pipupgradedependencies.py @@ -1,3 +1,6 @@ +""" +pipupgradedependencies +""" import argparse import json import os @@ -6,69 +9,95 @@ import subprocess import sys def find_dependencies(json_input, package): + """ + find package dependencies in json tree + """ if isinstance(json_input, dict): - keys = json_input.keys() - if 'package_name' in keys and 'required_version' in keys: - if re.search(r'^%s$' % package, json_input['package_name'], re.IGNORECASE): - yield json_input['required_version'] - for child_val in find_dependencies(json_input['dependencies'], package): - yield child_val + keys = json_input.keys() + if 'package_name' in keys and 'required_version' in keys: + if re.search(r'^%s$' % package, json_input['package_name'], re.IGNORECASE): + yield json_input['required_version'] + for child_val in find_dependencies(json_input['dependencies'], package): + yield child_val elif isinstance(json_input, list): for item in json_input: for item_val in find_dependencies(item, package): yield item_val + def arg_parse(): - parser = argparse.ArgumentParser(description="Pipupgradedependencies upgrades all outdated packages with respect to existing dependencies.") - parser_args = parser.parse_args() + """ + argument parser + """ + parser = argparse.ArgumentParser( + description="Pipupgradedependencies upgrades all outdated packages with respect to \ + existing dependencies." + ) + parser.parse_args() def main(): - arg_parse() - os.environ["PYTHONWARNINGS"] = "ignore:DEPRECATION" - - try: - subprocess.check_call(["pip", "install", "--upgrade", "pip"], stderr=subprocess.STDOUT) - except subprocess.CalledProcessError: - sys.exit(1) + """ + main function + """ + arg_parse() + os.environ["PYTHONWARNINGS"] = "ignore:DEPRECATION" - finished_upgrades = [] - while True: try: - outdated_packages = subprocess.check_output(["pip", "list", "--outdated"], stderr=subprocess.STDOUT) + subprocess.check_call(["pip", "install", "--upgrade", "pip"], stderr=subprocess.STDOUT) except subprocess.CalledProcessError: - sys.exit(1) - outdated_packages = [line.split()[0] for line in outdated_packages.strip().split("\n")[2:]] + sys.exit(1) - try: - pipdeptree = subprocess.check_output(["pipdeptree", "--json-tree"], stderr=subprocess.STDOUT) - except subprocess.CalledProcessError: - sys.exit(1) - pipdeptree = pipdeptree.strip() - jsonpipdeptree = json.loads(pipdeptree) + finished_upgrades = [] + while True: + try: + outdated_packages = subprocess.check_output( + ["pip", "list", "--outdated"], + stderr=subprocess.STDOUT + ) + except subprocess.CalledProcessError: + sys.exit(1) + outdated_packages = [line.split()[0] for line in outdated_packages.strip().split("\n")[2:]] - possible_upgrades = [] - for package in outdated_packages: - if package in finished_upgrades: - continue - package_dependencies = [ _ for _ in find_dependencies(jsonpipdeptree, package)] - package_dependencies = list(set(package_dependencies)) - if len(filter(lambda dependency: re.search(r'(^==.*|^\d.*)', dependency), package_dependencies)) == 0: - possible_upgrades.append({'package': package, 'dependencies': [ dependency for dependency in package_dependencies if 'Any' not in dependency]}) + try: + pipdeptree = subprocess.check_output( + ["pipdeptree", "--json-tree"], + stderr=subprocess.STDOUT + ) + except subprocess.CalledProcessError: + sys.exit(1) + pipdeptree = pipdeptree.strip() + jsonpipdeptree = json.loads(pipdeptree) - try: - package = possible_upgrades[-1] - except IndexError: - break - finished_upgrades.append(package['package']) + possible_upgrades = [] + for package in outdated_packages: + if package in finished_upgrades: + continue + dependencies = [_ for _ in find_dependencies(jsonpipdeptree, package)] + dependencies = list(set(dependencies)) + if not [dep for dep in dependencies if re.search(r'(^==.*|^\d.*)', dep) is not None]: + possible_upgrades.append( + {'package': package, + 'dependencies': [dep for dep in dependencies if 'Any' not in dep]} + ) - try: - subprocess.check_call(["pip", "install", "--upgrade", "%s%s" % (package['package'], "".join(package['dependencies']))], stderr=subprocess.STDOUT) - except subprocess.CalledProcessError: - sys.exit(1) + try: + package = possible_upgrades[-1] + except IndexError: + break + finished_upgrades.append(package['package']) + + try: + subprocess.check_call( + ["pip", "install", "--upgrade", + "%s%s" % (package['package'], "".join(package['dependencies']))], + stderr=subprocess.STDOUT + ) + except subprocess.CalledProcessError: + sys.exit(1) - if len(possible_upgrades) == len(finished_upgrades): - break + if len(possible_upgrades) == len(finished_upgrades): + break - print "Done." + print "Done." if __name__ == "__main__": - main() + main()