download_assets.py 4.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #!/usr/bin/env python3
  2. import urllib.request
  3. import shutil
  4. import sys
  5. import os
  6. import zipfile
  7. DOWNLOAD_BASE_PATH = "assets/{}"
  8. ASSETS_BASE_URL = "https://raw.githubusercontent.com/Kelimion/compress-odin/master/tests/assets/{}/{}"
  9. PNG_IMAGES = [
  10. "basi0g01.png", "basi0g02.png", "basi0g04.png", "basi0g08.png", "basi0g16.png", "basi2c08.png",
  11. "basi2c16.png", "basi3p01.png", "basi3p02.png", "basi3p04.png", "basi3p08.png", "basi4a08.png",
  12. "basi4a16.png", "basi6a08.png", "basi6a16.png", "basn0g01.png", "basn0g02.png", "basn0g04.png",
  13. "basn0g08.png", "basn0g16.png", "basn2c08.png", "basn2c16.png", "basn3p01.png", "basn3p02.png",
  14. "basn3p04.png", "basn3p08.png", "basn4a08.png", "basn4a16.png", "basn6a08.png", "basn6a16.png",
  15. "bgai4a08.png", "bgai4a16.png", "bgan6a08.png", "bgan6a16.png", "bgbn4a08.png", "bggn4a16.png",
  16. "bgwn6a08.png", "bgyn6a16.png", "ccwn2c08.png", "ccwn3p08.png", "cdfn2c08.png", "cdhn2c08.png",
  17. "cdsn2c08.png", "cdun2c08.png", "ch1n3p04.png", "ch2n3p08.png", "cm0n0g04.png", "cm7n0g04.png",
  18. "cm9n0g04.png", "cs3n2c16.png", "cs3n3p08.png", "cs5n2c08.png", "cs5n3p08.png", "cs8n2c08.png",
  19. "cs8n3p08.png", "ct0n0g04.png", "ct1n0g04.png", "cten0g04.png", "ctfn0g04.png", "ctgn0g04.png",
  20. "cthn0g04.png", "ctjn0g04.png", "ctzn0g04.png", "exif2c08.png", "f00n0g08.png", "f00n2c08.png",
  21. "f01n0g08.png", "f01n2c08.png", "f02n0g08.png", "f02n2c08.png", "f03n0g08.png", "f03n2c08.png",
  22. "f04n0g08.png", "f04n2c08.png", "f99n0g04.png", "g03n0g16.png", "g03n2c08.png", "g03n3p04.png",
  23. "g04n0g16.png", "g04n2c08.png", "g04n3p04.png", "g05n0g16.png", "g05n2c08.png", "g05n3p04.png",
  24. "g07n0g16.png", "g07n2c08.png", "g07n3p04.png", "g10n0g16.png", "g10n2c08.png", "g10n3p04.png",
  25. "g25n0g16.png", "g25n2c08.png", "g25n3p04.png", "oi1n0g16.png", "oi1n2c16.png", "oi2n0g16.png",
  26. "oi2n2c16.png", "oi4n0g16.png", "oi4n2c16.png", "oi9n0g16.png", "oi9n2c16.png", "pp0n2c16.png",
  27. "pp0n6a08.png", "ps1n0g08.png", "ps1n2c16.png", "ps2n0g08.png", "ps2n2c16.png", "s01i3p01.png",
  28. "s01n3p01.png", "s02i3p01.png", "s02n3p01.png", "s03i3p01.png", "s03n3p01.png", "s04i3p01.png",
  29. "s04n3p01.png", "s05i3p02.png", "s05n3p02.png", "s06i3p02.png", "s06n3p02.png", "s07i3p02.png",
  30. "s07n3p02.png", "s08i3p02.png", "s08n3p02.png", "s09i3p02.png", "s09n3p02.png", "s32i3p04.png",
  31. "s32n3p04.png", "s33i3p04.png", "s33n3p04.png", "s34i3p04.png", "s34n3p04.png", "s35i3p04.png",
  32. "s35n3p04.png", "s36i3p04.png", "s36n3p04.png", "s37i3p04.png", "s37n3p04.png", "s38i3p04.png",
  33. "s38n3p04.png", "s39i3p04.png", "s39n3p04.png", "s40i3p04.png", "s40n3p04.png", "tbbn0g04.png",
  34. "tbbn2c16.png", "tbbn3p08.png", "tbgn2c16.png", "tbgn3p08.png", "tbrn2c08.png", "tbwn0g16.png",
  35. "tbwn3p08.png", "tbyn3p08.png", "tm3n3p02.png", "tp0n0g08.png", "tp0n2c08.png", "tp0n3p08.png",
  36. "tp1n3p08.png", "xc1n0g08.png", "xc9n2c08.png", "xcrn0g04.png", "xcsn0g01.png", "xd0n2c08.png",
  37. "xd3n2c08.png", "xd9n2c08.png", "xdtn0g01.png", "xhdn0g08.png", "xlfn0g04.png", "xs1n0g01.png",
  38. "xs2n0g01.png", "xs4n0g01.png", "xs7n0g01.png", "z00n2c08.png", "z03n2c08.png", "z06n2c08.png",
  39. "z09n2c08.png",
  40. "PngSuite.png", "logo-slim.png", "emblem-1024.png"
  41. ]
  42. def try_download_file(url, out_file):
  43. try:
  44. with urllib.request.urlopen(url) as response, open(out_file, 'wb') as of:
  45. shutil.copyfileobj(response, of)
  46. print("... ", out_file)
  47. except urllib.error.HTTPError:
  48. print("Could not download", url)
  49. return 1
  50. def try_download_and_unpack_zip(suite):
  51. url = ASSETS_BASE_URL.format(suite, "{}.zip".format(suite))
  52. out_file = DOWNLOAD_BASE_PATH.format(suite) + "/{}.zip".format(suite)
  53. print("\tDownloading {} to {}.".format(url, out_file))
  54. if try_download_file(url, out_file) is not None:
  55. print("Could not download ZIP file")
  56. return 1
  57. # Try opening the ZIP file and extracting the test images
  58. try:
  59. with zipfile.ZipFile(out_file) as z:
  60. for file in z.filelist:
  61. filename = file.filename
  62. extract_path = DOWNLOAD_BASE_PATH.format(suite)
  63. print("\t\tExtracting: {}".format(filename))
  64. z.extract(file, extract_path)
  65. except:
  66. print("Could not extract ZIP file")
  67. return 2
  68. def main():
  69. print("Downloading PNG assets")
  70. # Make PNG assets path
  71. try:
  72. path = DOWNLOAD_BASE_PATH.format("PNG")
  73. os.makedirs(path)
  74. except FileExistsError:
  75. pass
  76. # Try downloading and unpacking the PNG assets
  77. r = try_download_and_unpack_zip("PNG")
  78. if r is not None:
  79. return r
  80. # We could fall back on downloading the PNG files individually, but it's slow
  81. print("Done downloading PNG assets")
  82. return 0
  83. if __name__ == '__main__':
  84. sys.exit(main())