#!/usr/bin/env python3 # Written by Martin Fischer and licensed under MIT. from multiprocessing.dummy import Pool import toml import requests sess = requests.session() sess.headers['user-agent'] = 'cargo_check.py' tasks = [] with open('Cargo.toml') as f: data = toml.load(f) for name, info in data['dependencies'].items(): version = info if isinstance(info, str) else info.get('version') tasks.append((name, version)) def check_package(info): name, version = info res = sess.get('https://crates.io/api/v1/crates/{}'.format(name)) latest_version = res.json()['versions'][0] if latest_version['yanked']: print(name, 'was yanked') elif not latest_version['num'].startswith(version): print('{} is outdated ({}), {} is available'.format(name, version, latest_version['num'])) pool = Pool() pool.map(check_package, tasks)