#!/usr/bin/env python3 """ Generate Ruby code with URLs and file hashes for packages from PyPi (i.e., httpie itself as well as its dependencies) to be included in the Homebrew formula after a new release of HTTPie has been published on PyPi. """ import hashlib import requests PACKAGES = [ 'httpie', 'Pygments', 'requests', 'certifi', 'urllib3', 'idna', 'chardet', 'PySocks', ] def get_package_meta(package_name): api_url = 'https://pypi.python.org/pypi/{}/json'.format(package_name) resp = requests.get(api_url).json() hasher = hashlib.sha256() for release in resp['urls']: download_url = release['url'] if download_url.endswith('.tar.gz'): hasher.update(requests.get(download_url).content) return { 'name': package_name, 'url': download_url, 'sha256': hasher.hexdigest(), } else: raise RuntimeError( '{}: download not found: {}'.format(package_name, resp)) def main(): package_meta_map = { package_name: get_package_meta(package_name) for package_name in PACKAGES } httpie_meta = package_meta_map.pop('httpie') print() print(' url "{url}"'.format(url=httpie_meta['url'])) print(' sha256 "{sha256}"'.format(sha256=httpie_meta['sha256'])) print() for dep_meta in package_meta_map.values(): print(' resource "{name}" do'.format(name=dep_meta['name'])) print(' url "{url}"'.format(url=dep_meta['url'])) print(' sha256 "{sha256}"'.format(sha256=dep_meta['sha256'])) print(' end') print('') if __name__ == '__main__': main()