forked from TensorLayer/tensorlayer3
69 lines
2.0 KiB
Python
69 lines
2.0 KiB
Python
import argparse
|
|
import requests
|
|
import logging
|
|
|
|
import pip._internal
|
|
|
|
if __name__ == "__main__":
|
|
|
|
parser = argparse.ArgumentParser(description='Get the nth version of a given package')
|
|
parser.add_argument('--package', type=str, required=True, help='The PyPI you want to inspect')
|
|
parser.add_argument('--nth_last_version', type=int, default=1, help='The nth last package will be retrieved')
|
|
parser.add_argument('--prerelease', help='Get PreRelease Package Version', action='store_true')
|
|
parser.add_argument('--debug', help='Print debug information', action='store_true')
|
|
|
|
args = parser.parse_args()
|
|
|
|
# create logger
|
|
logger = logging.getLogger("PyPI_CLI")
|
|
|
|
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
|
|
|
|
ch = logging.StreamHandler()
|
|
ch.setLevel(logging.DEBUG)
|
|
ch.setFormatter(formatter)
|
|
logger.addHandler(ch)
|
|
|
|
if args.debug:
|
|
logger.setLevel(logging.DEBUG)
|
|
|
|
logger.debug("Package: %s" % args.package)
|
|
logger.debug("nth_last_version: %s" % args.nth_last_version)
|
|
logger.debug("prerelease: %s" % args.prerelease)
|
|
logger.debug("debug: %s" % args.debug)
|
|
|
|
finder = pip._internal.index.PackageFinder(
|
|
[],
|
|
['https://pypi.python.org/simple'],
|
|
session=requests.Session()
|
|
)
|
|
results = finder.find_all_candidates(args.package)
|
|
tmp_versions = [str(p.version) for p in results]
|
|
|
|
logger.debug("%s" % tmp_versions)
|
|
|
|
versions = list()
|
|
for el in tmp_versions:
|
|
if el not in versions:
|
|
versions.append(el)
|
|
|
|
pos = -1
|
|
nth_version = 1
|
|
|
|
while True:
|
|
fetched_version = versions[pos]
|
|
|
|
logger.debug("Version: %s" % fetched_version)
|
|
|
|
if nth_version == args.nth_last_version:
|
|
if args.prerelease or not ("rc" in fetched_version or "a" in fetched_version or "b" in fetched_version):
|
|
break
|
|
else:
|
|
pos -= 1
|
|
continue
|
|
|
|
pos -= 1
|
|
nth_version += 1
|
|
|
|
print(fetched_version)
|