Skip to content

Instantly share code, notes, and snippets.

@Samathy
Created June 29, 2020 16:51
Show Gist options
  • Save Samathy/69a7321880a1b9b4876296743f37ad0c to your computer and use it in GitHub Desktop.
Save Samathy/69a7321880a1b9b4876296743f37ad0c to your computer and use it in GitHub Desktop.
Checks requirements.in files for upgradeable packages.
import argparse
import requirements
import requests
import json
# Requires requirements-parser, requests.
class package:
def __init__(self, package):
pypi_response = requests.get("https://pypi.org/pypi/{}/json".format(package))
self.package = pypi_response.json() if pypi_response.status_code == 200 else None
@property
def name(self):
return self.package["info"]["name"]
def current_version(self):
return self.package["info"]["version"]
def release(self, version):
return self.package["releases"][version]
def pythons_supported(self, version):
pythons = []
for p in self.package["releases"][version]:
pythons.append(p["python_version"])
return pythons
def supports_python_version(self, python_version="3.8"):
return python_version in self.pythons_supported(self.current_version())
def upgradeable(self, local_package_version, python_version="3.8"):
if (self.supports_python_version() or self.supports_python_version("py3") or self.supports_python_version("py2.3")) and self.current_version() != local_package_version :
return True
def local_version(self, version=None):
if version is not None:
self.local_version = version
else:
return self.local_version
def main():
parser = argparse.ArgumentParser()
parser.add_argument("--req", nargs=1, action="store", required=True)
args = parser.parse_args()
print("Checking requirements file: {}".format(args.req[0]))
upgradeable = []
for req in requirements.parse(open(args.req[0], "r").read()):
print(req.name, req.specs, req.extras)
name = req.name
version = req.specs[0][1] if len(req.specs) != 0 else None
if version != None:
pypi_package = package(name)
print("Name: {}, Current Version{}".format(name, version))
print("Top Version on PyPi: {}".format(pypi_package.current_version()))
print("Supports 3.8?: {}".format(pypi_package.supports_python_version("3.8")))
print("Versions suported: {}".format(pypi_package.pythons_supported(pypi_package.current_version())))
if pypi_package.upgradeable(version):
upgradeable.append(pypi_package)
pypi_package.local_version(version=version)
print("\n\nUpgradeable Packages:")
for p in upgradeable:
print("{} {}->{}".format(p.name, p.local_version, p.current_version()))
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment