|
| 1 | +import argparse |
| 2 | +import subprocess |
| 3 | +import sys |
| 4 | +import time |
| 5 | + |
| 6 | +DEFAULT_TIMEOUT = 60 * 30 # 30 min |
| 7 | +DEFAULT_INTERVAL = 5 |
| 8 | +DEFAULT_INDEX_URL = 'https://pypi.python.org/pypi' |
| 9 | + |
| 10 | + |
| 11 | +def wait(package, version, index_url=DEFAULT_INDEX_URL, timeout=DEFAULT_TIMEOUT, interval=DEFAULT_INTERVAL): |
| 12 | + give_up_time = time.time() + timeout |
| 13 | + while True: |
| 14 | + output = subprocess.check_output([sys.executable, '-m', 'pip', 'search', '--index', index_url, package]) |
| 15 | + output = output.decode() |
| 16 | + |
| 17 | + # output looks like: 'awscrt (0.3.1) - A common runtime for AWS Python projects\n...' |
| 18 | + if output.startswith('{} ({})'.format(package, version)): |
| 19 | + return True |
| 20 | + |
| 21 | + if time.time() >= give_up_time: |
| 22 | + return False |
| 23 | + |
| 24 | + time.sleep(interval) |
| 25 | + |
| 26 | + |
| 27 | +if __name__ == '__main__': |
| 28 | + parser = argparse.ArgumentParser() |
| 29 | + parser.add_argument('package', help="Packet name") |
| 30 | + parser.add_argument('version', help="Package version") |
| 31 | + parser.add_argument('--index', default=DEFAULT_INDEX_URL, metavar='<url>', |
| 32 | + help="Base URL of Python Package Index. (default {})".format(DEFAULT_INDEX_URL)) |
| 33 | + parser.add_argument('--timeout', type=float, default=DEFAULT_TIMEOUT, metavar='<sec>', |
| 34 | + help="Give up after N seconds.") |
| 35 | + parser.add_argument('--interval', type=float, default=DEFAULT_INTERVAL, metavar='<sec>', |
| 36 | + help="Query PyPI every N seconds") |
| 37 | + args = parser.parse_args() |
| 38 | + |
| 39 | + if wait(args.package, args.version, args.index, args.timeout, args.interval): |
| 40 | + print('{} {} is available in pypi'.format(args.package, args.version)) |
| 41 | + else: |
| 42 | + exit("Timed out waiting for pypi to report {} {} as latest".format(args.package, args.version)) |
0 commit comments