create_nightly_json.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import subprocess
  2. import sys
  3. import json
  4. import datetime
  5. import urllib.parse
  6. def main():
  7. files_by_date = {}
  8. files_lines = execute_cli("b2 ls --long odin-binaries nightly").split("\n")
  9. for x in files_lines:
  10. parts = x.split(" ", 1)
  11. if parts[0]:
  12. json_str = execute_cli(f"b2 get-file-info {parts[0]}")
  13. data = json.loads(json_str)
  14. name = remove_prefix(data['fileName'], "nightly/")
  15. url = f"https://f001.backblazeb2.com/file/odin-binaries/nightly/{urllib.parse.quote_plus(name)}"
  16. sha1 = data['contentSha1']
  17. ts = int(data['fileInfo']['src_last_modified_millis'])
  18. date = datetime.datetime.fromtimestamp(ts/1000).strftime('%Y-%m-%d')
  19. if date not in files_by_date.keys():
  20. files_by_date[date] = []
  21. files_by_date[date].append({
  22. 'name': name,
  23. 'url': url,
  24. 'sha1': sha1,
  25. })
  26. now = datetime.datetime.utcnow().isoformat()
  27. print(json.dumps({
  28. 'last_updated' : now,
  29. 'files': files_by_date
  30. }, sort_keys=True, indent=4))
  31. def remove_prefix(text, prefix):
  32. return text[text.startswith(prefix) and len(prefix):]
  33. def execute_cli(command):
  34. sb = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE)
  35. return sb.stdout.read().decode("utf-8");
  36. if __name__ == '__main__':
  37. sys.exit(main())