Skip to content

Instantly share code, notes, and snippets.

@jnbrunet
Last active June 6, 2020 08:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jnbrunet/3903d6c4916f29b4f406094686a703ff to your computer and use it in GitHub Desktop.
Save jnbrunet/3903d6c4916f29b4f406094686a703ff to your computer and use it in GitHub Desktop.
#!python
from __future__ import print_function
import sys, re, argparse
def get_releases():
data = {}
if sys.version_info[0] < 3:
import urllib, json
data = json.loads(urllib.urlopen("https://api.github.com/repos/sofa-framework/sofa/releases").read())
else:
import urllib.request, json
with urllib.request.urlopen("https://api.github.com/repos/sofa-framework/sofa/releases") as url:
data = json.loads(url.read().decode())
releases = {}
for entry in data:
version = entry['target_commitish']
tag = entry['tag_name']
if version not in releases:
releases[version] = {}
assets = entry['assets']
for asset in assets:
asset_name = asset['name']
asset_key = asset_name.replace(tag, '').replace('__', '_')
if not asset_key in releases[version]:
releases[version][asset_key] = {}
releases[version][asset_key][tag] = asset['download_count']
return releases
def print_short():
data = get_releases()
releases = []
systems = ['Linux', 'Windows', 'MacOS']
for release in sorted(data.keys(), reverse=True):
assets = data[release]
systems_count = {}
for system in systems : systems_count[system] = 0
for asset, versions in assets.items():
asset_count = 0
for version_count in versions.values(): asset_count += version_count
if re.search('linux', asset, re.IGNORECASE):
systems_count['Linux'] += asset_count
elif re.search('mac', asset, re.IGNORECASE) or re.search('darwin', asset, re.IGNORECASE):
systems_count['MacOS'] += asset_count
elif re.search('win', asset, re.IGNORECASE):
systems_count['Windows'] += asset_count
else:
raise Exception('Unkown system for asset "{}"'.format(asset))
releases.append((release, systems_count))
print("{:{align}{width}}\t".format('', align='<', width=7), end='')
print('\t'.join(systems))
for release, release_systems in releases:
print("{:{align}{width}}\t".format(release, align='<', width=7), end='')
print('\t'.join(['{:{align}{width}}'.format(release_systems[system], align='^', width=len(system)) for system in systems]))
def print_verbose():
releases = get_releases()
for version in sorted(releases.keys(), reverse=True):
if not releases[version].keys():
continue
tags = list(releases[version].values())[0].keys()
print("{:{align}{width}}\t".format('', align='<', width=10), end='')
col_lengths = [len(k) for k in releases[version].keys()]
col_totals = [0 for k in releases[version].keys()]
for i, asset in zip(range(len(releases[version].keys())), releases[version].keys()):
print("{:{align}{width}}\t".format(asset, align='^', width=col_lengths[i]), end='')
for count in releases[version][asset].values():
col_totals[i] += count
print()
for tag in sorted(tags, reverse=True):
print("{:{align}{width}}\t".format(tag, align='<', width=10), end='')
for i, asset in zip(range(len(releases[version].keys())), releases[version].keys()):
print("{:{align}{width}}\t".format(releases[version][asset][tag], align='^', width=col_lengths[i]),
end='')
print()
print("{:{align}{width}}\t".format('Total', align='<', width=10), end='')
for i, asset in zip(range(len(releases[version].keys())), releases[version].keys()):
print("{:{align}{width}}\t".format(col_totals[i], align='^', width=col_lengths[i]), end='')
print('\n')
def main():
parser = argparse.ArgumentParser()
parser.add_argument('-v', '--verbose', action='store_true')
args = parser.parse_args()
if args.verbose:
print_verbose()
else:
print_short()
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment