httpie-cli/docs/packaging/brew/brew-deps.py

81 lines
2.2 KiB
Python
Raw Normal View History

2018-11-02 17:18:04 +01:00
#!/usr/bin/env python3
2016-08-13 22:40:01 +02:00
"""
2019-02-03 15:08:29 +01:00
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.
2016-08-13 22:40:01 +02:00
2019-02-03 15:08:29 +01:00
<https://github.com/Homebrew/homebrew-core/blob/master/Formula/httpie.rb>
2016-08-13 22:40:01 +02:00
"""
import hashlib
import requests
2021-02-06 11:54:15 +01:00
VERSIONS = {
# By default, we use the latest packages. But sometimes Requests has a maximum supported versions.
# Take a look here before making a release: <https://github.com/psf/requests/blob/master/setup.py>
'idna': '3.2',
2021-02-06 11:54:15 +01:00
}
# Note: Keep that list sorted.
2016-08-13 22:40:01 +02:00
PACKAGES = [
'certifi',
'charset-normalizer',
'defusedxml',
2016-08-13 22:40:01 +02:00
'httpie',
'idna',
2019-02-03 14:26:05 +01:00
'Pygments',
'PySocks',
2018-11-02 17:18:04 +01:00
'requests',
'requests-toolbelt',
2018-11-02 17:18:04 +01:00
'urllib3',
2016-08-13 22:40:01 +02:00
]
def get_package_meta(package_name):
2021-02-06 11:54:15 +01:00
api_url = f'https://pypi.org/pypi/{package_name}/json'
2016-08-13 22:40:01 +02:00
resp = requests.get(api_url).json()
hasher = hashlib.sha256()
2021-02-06 11:54:15 +01:00
version = VERSIONS.get(package_name)
if package_name not in VERSIONS:
# Latest version
release_bundle = resp['urls']
else:
release_bundle = resp['releases'][version]
for release in release_bundle:
2016-08-13 22:40:01 +02:00
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:
2019-08-31 15:17:10 +02:00
raise RuntimeError(f'{package_name}: download not found: {resp}')
2016-08-13 22:40:01 +02:00
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')
2018-11-02 17:18:04 +01:00
print('')
if __name__ == '__main__':
main()