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

code refactoring

parent 623e9356
Branches
No related tags found
1 merge request!1Add py script
Pipeline #7924 passed
...@@ -9,14 +9,14 @@ mdcheck: ...@@ -9,14 +9,14 @@ mdcheck:
- mdl *.md - mdl *.md
pylint: pylint:
#allow_failure: true
stage: test stage: test
image: it4innovations/docker-pycheck:latest image: it4innovations/docker-pycheck:latest
script: before_script:
- export PYTHONIOENCODING=UTF-8 - export PYTHONIOENCODING=UTF-8
- export LC_CTYPE=en_US.UTF-8 - export LC_CTYPE=en_US.UTF-8
- if [ -f pipupgradedependencies.egg-info/requires.txt ]; then pip install $(paste -d " " -s pipupgradedependencies.egg-info/requires.txt); fi - python setup.py egg_info
- pip install setuptools-git-version setuptools-markdown - pip install $(paste -d " " -s pipupgradedependencies.egg-info/requires.txt)
script:
- pylint $(find . -type f -name "*.py") - pylint $(find . -type f -name "*.py")
build: build:
...@@ -26,9 +26,9 @@ build: ...@@ -26,9 +26,9 @@ build:
expire_in: 1 day expire_in: 1 day
paths: paths:
- dist/pipupgradedependencies*tar.gz - dist/pipupgradedependencies*tar.gz
script: before_script:
- export PYTHONIOENCODING=UTF-8 - export PYTHONIOENCODING=UTF-8
- export LC_CTYPE=en_US.UTF-8 - export LC_CTYPE=en_US.UTF-8
- pip install setuptools-git-version setuptools-markdown script:
#- python setup.py --version #- python setup.py --version
- python setup.py sdist - python setup.py sdist
...@@ -8,22 +8,87 @@ import re ...@@ -8,22 +8,87 @@ import re
import subprocess import subprocess
import sys import sys
def find_dependencies(json_input, package): def upgrade_pip():
"""
pip install --upgrade pip
"""
try:
subprocess.check_call(["pip", "install", "--upgrade", "pip"], stderr=subprocess.STDOUT)
except subprocess.CalledProcessError:
sys.exit(1)
def upgrade_package(package, versions):
"""
pip install --upgrade "<package><versions>"
"""
try:
subprocess.check_call(
["pip", "install", "--upgrade",
"%s%s" % (package, "".join(versions))],
stderr=subprocess.STDOUT
)
except subprocess.CalledProcessError:
sys.exit(1)
def get_outdated_packages():
"""
pip list --outdated
"""
try:
outdated_packages = subprocess.check_output(
["pip", "list", "--outdated"],
stderr=subprocess.STDOUT
)
except subprocess.CalledProcessError:
sys.exit(1)
return [line.split()[0] for line in outdated_packages.strip().split("\n")[2:]]
def get_dependencies_tree():
"""
pipdeptree --json-tree
"""
try:
pipdeptree = subprocess.check_output(
["pipdeptree", "--json-tree"],
stderr=subprocess.STDOUT
)
except subprocess.CalledProcessError:
sys.exit(1)
return json.loads(pipdeptree.strip())
def find_dependencies(jsonpipdeptree, package):
""" """
find package dependencies in json tree find package dependencies in json tree
""" """
if isinstance(json_input, dict): if isinstance(jsonpipdeptree, dict):
keys = json_input.keys() keys = jsonpipdeptree.keys()
if 'package_name' in keys and 'required_version' in keys: if 'package_name' in keys and 'required_version' in keys:
if re.search(r'^%s$' % package, json_input['package_name'], re.IGNORECASE): if re.search(r'^%s$' % package, jsonpipdeptree['package_name'], re.IGNORECASE):
yield json_input['required_version'] yield jsonpipdeptree['required_version']
for child_val in find_dependencies(json_input['dependencies'], package): for child_val in find_dependencies(jsonpipdeptree['dependencies'], package):
yield child_val yield child_val
elif isinstance(json_input, list): elif isinstance(jsonpipdeptree, list):
for item in json_input: for item in jsonpipdeptree:
for item_val in find_dependencies(item, package): for item_val in find_dependencies(item, package):
yield item_val yield item_val
def filter_dependencies(package_list, jsonpipdeptree, exclude):
"""
return list of outdated packages that do not have strict dependency version
"""
filtered_dependencies = []
for package in package_list:
if package in exclude:
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]:
filtered_dependencies.append(
{'package': package,
'versions': [dep for dep in dependencies if 'Any' not in dep]}
)
return filtered_dependencies
def arg_parse(): def arg_parse():
""" """
argument parser argument parser
...@@ -38,63 +103,25 @@ def main(): ...@@ -38,63 +103,25 @@ def main():
""" """
main function main function
""" """
arg_parse()
os.environ["PYTHONWARNINGS"] = "ignore:DEPRECATION" os.environ["PYTHONWARNINGS"] = "ignore:DEPRECATION"
arg_parse()
try: upgrade_pip()
subprocess.check_call(["pip", "install", "--upgrade", "pip"], stderr=subprocess.STDOUT) outdated_packages = get_outdated_packages()
except subprocess.CalledProcessError:
sys.exit(1)
finished_upgrades = [] finished_upgrades = []
while True: while True:
try: filtered_outdated_packages = filter_dependencies(
outdated_packages = subprocess.check_output( outdated_packages, get_dependencies_tree(), finished_upgrades
["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:]]
try: try:
pipdeptree = subprocess.check_output( package = filtered_outdated_packages[-1]
["pipdeptree", "--json-tree"],
stderr=subprocess.STDOUT
)
except subprocess.CalledProcessError:
sys.exit(1)
pipdeptree = pipdeptree.strip()
jsonpipdeptree = json.loads(pipdeptree)
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:
package = possible_upgrades[-1]
except IndexError: except IndexError:
break break
finished_upgrades.append(package['package']) finished_upgrades.append(package['package'])
upgrade_package(package['package'], package['versions'])
try: if len(filtered_outdated_packages) == len(finished_upgrades):
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 break
print "Done." print "Done."
......
...@@ -25,8 +25,12 @@ setup( ...@@ -25,8 +25,12 @@ setup(
zip_safe=False, zip_safe=False,
version='0.0.1', version='0.0.1',
#version_format='{tag}', #version_format='{tag}',
#long_description_markdown_filename='README.md', long_description_markdown_filename='README.md',
#setup_requires=['setuptools-markdown', 'setuptools-markdown'], setup_requires=['setuptools-markdown'],
#setup_requires=['setuptools-git-version', 'setuptools-markdown'],
install_requires=[
'pipdeptree',
],
entry_points={ entry_points={
'console_scripts': [ 'console_scripts': [
'pipupgradedependencies = pipupgradedependencies.pipupgradedependencies:main', 'pipupgradedependencies = pipupgradedependencies.pipupgradedependencies:main',
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment