Created
June 29, 2020 16:51
-
-
Save Samathy/69a7321880a1b9b4876296743f37ad0c to your computer and use it in GitHub Desktop.
Checks requirements.in files for upgradeable packages.
This file contains 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