Created
June 29, 2020 16:51
Checks requirements.in files for upgradeable packages.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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