Index: source/libvpx/test/android/get_files.py |
=================================================================== |
--- source/libvpx/test/android/get_files.py (revision 0) |
+++ source/libvpx/test/android/get_files.py (revision 0) |
@@ -0,0 +1,118 @@ |
+# Copyright (c) 2013 The WebM project authors. All Rights Reserved. |
+# |
+# Use of this source code is governed by a BSD-style license |
+# that can be found in the LICENSE file in the root of the source |
+# tree. An additional intellectual property rights grant can be found |
+# in the file PATENTS. All contributing project authors may |
+# be found in the AUTHORS file in the root of the source tree. |
+# |
+# This simple script pulls test files from the webm homepage |
+# It is intelligent enough to only pull files if |
+# 1) File / test_data folder does not exist |
+# 2) SHA mismatch |
+ |
+import pycurl |
+import csv |
+import hashlib |
+import re |
+import os.path |
+import time |
+import itertools |
+import sys |
+import getopt |
+ |
+#globals |
+url = '' |
+file_list_path = '' |
+local_resource_path = '' |
+ |
+# Helper functions: |
+# A simple function which returns the sha hash of a file in hex |
+def get_file_sha(filename): |
+ try: |
+ sha_hash = hashlib.sha1() |
+ with open(filename, 'rb') as file: |
+ buf = file.read(HASH_CHUNK) |
+ while len(buf) > 0: |
+ sha_hash.update(buf) |
+ buf = file.read(HASH_CHUNK) |
+ return sha_hash.hexdigest() |
+ except IOError: |
+ print "Error reading " + filename |
+ |
+# Downloads a file from a url, and then checks the sha against the passed |
+# in sha |
+def download_and_check_sha(url, filename, sha): |
+ path = os.path.join(local_resource_path, filename) |
+ fp = open(path, "wb") |
+ curl = pycurl.Curl() |
+ curl.setopt(pycurl.URL, url + "/" + filename) |
+ curl.setopt(pycurl.WRITEDATA, fp) |
+ curl.perform() |
+ curl.close() |
+ fp.close() |
+ return get_file_sha(path) == sha |
+ |
+#constants |
+ftp_retries = 3 |
+ |
+SHA_COL = 0 |
+NAME_COL = 1 |
+EXPECTED_COL = 2 |
+HASH_CHUNK = 65536 |
+ |
+# Main script |
+try: |
+ opts, args = \ |
+ getopt.getopt(sys.argv[1:], \ |
+ "u:i:o:", ["url=", "input_csv=", "output_dir="]) |
+except: |
+ print 'get_files.py -u <url> -i <input_csv> -o <output_dir>' |
+ sys.exit(2) |
+ |
+for opt, arg in opts: |
+ if opt == '-u': |
+ url = arg |
+ elif opt in ("-i", "--input_csv"): |
+ file_list_path = os.path.join(arg) |
+ elif opt in ("-o", "--output_dir"): |
+ local_resource_path = os.path.join(arg) |
+ |
+if len(sys.argv) != 7: |
+ print "Expects two paths and a url!" |
+ exit(1) |
+ |
+if not os.path.isdir(local_resource_path): |
+ os.makedirs(local_resource_path) |
+ |
+file_list_csv = open(file_list_path, "rb") |
+ |
+# Our 'csv' file uses multiple spaces as a delimiter, python's |
+# csv class only uses single character delimiters, so we convert them below |
+file_list_reader = csv.reader((re.sub(' +', ' ', line) \ |
+ for line in file_list_csv), delimiter = ' ') |
+ |
+file_shas = [] |
+file_names = [] |
+ |
+for row in file_list_reader: |
+ if len(row) != EXPECTED_COL: |
+ continue |
+ file_shas.append(row[SHA_COL]) |
+ file_names.append(row[NAME_COL]) |
+ |
+file_list_csv.close() |
+ |
+# Download files, only if they don't already exist and have correct shas |
+for filename, sha in itertools.izip(file_names, file_shas): |
+ path = os.path.join(local_resource_path, filename) |
+ if os.path.isfile(path) \ |
+ and get_file_sha(path) == sha: |
+ print path + ' exists, skipping' |
+ continue |
+ for retry in range(0, ftp_retries): |
+ print "Downloading " + path |
+ if not download_and_check_sha(url, filename, sha): |
+ print "Sha does not match, retrying..." |
+ else: |
+ break |