#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2016 Mike "KemoNine" Crosson # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # http://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import subprocess, sys, os, pprint, datetime, argparse, time base_path = os.path.dirname(os.path.realpath(__file__)) env = os.environ.copy() FNULL = open(os.devnull, 'w') wget_cmd = 'wget' bunzip2_cmd = 'bunzip2' if __name__ == '__main__': current_timestamp = datetime.datetime.now().strftime('%Y%m%d-%H%M') parser = argparse.ArgumentParser() parser.add_argument('--map-list', action='append', help='a text file with one map URL per line, can be specified more than once') parser.add_argument('--no-sleep', action='store_true', help='don\'t sleep between downloads -- WARNING you can easily run into throttling on mirrors if you use this option') parser.add_argument('--output-map-name', action='store', default='output', help='set the name of the map directory before Ymd-HM') parser.add_argument('--cached-maps-dir', action='store', help='The root directory where maps should be cached') args = parser.parse_args() if args.map_list is None or args.cached_maps_dir is None: print('You MUST specify at least one map-list AND cached-maps-dir') sys.exit(1) # Normalize map path directory based on CLI arg ahead of any path manipulations map_dl_dirs = [args.cached_maps_dir] if args.output_map_name is not None: map_dl_dirs.append(args.output_map_name) map_dl_dirs.append(current_timestamp) cached_maps_dir = os.path.abspath(os.path.join(*map_dl_dirs)) print('Downloading maps to : ' + cached_maps_dir) map_list = [] if args.map_list is not None: for alist in args.map_list: with open(alist, 'r') as maps: for line in maps: map_list.append(line.strip()) if args.map_list is not None: print('Downloading maps') for line in map_list: print(' ', end='') print(line) subprocess.run([wget_cmd, '-P', cached_maps_dir, line.strip()], stdout=FNULL, stderr=subprocess.STDOUT) if not args.no_sleep: print(' Sleeping to prevent throttle/blocking') time.sleep(300) # Seconds print('Decompressing maps (if necessary)') for dirpath, dirnames, filenames in os.walk(cached_maps_dir): for file in filenames: if file.endswith('bz2'): print(' ', end='') print(file) subprocess.run([bunzip2_cmd, os.path.join(dirpath, file)])