create_nightly_json.py 1.7 KB

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