what.utils.file
1import os.path 2import hashlib 3 4import progressbar 5import urllib.request 6 7class MyProgressBar(): 8 def __init__(self): 9 self.pbar = None 10 11 def __call__(self, block_num, block_size, total_size): 12 if not self.pbar: 13 self.pbar=progressbar.ProgressBar(maxval=total_size) 14 self.pbar.start() 15 16 downloaded = block_num * block_size 17 if downloaded < total_size: 18 self.pbar.update(downloaded) 19 else: 20 self.pbar.finish() 21 22def download_file(file_name, path, url, hash): 23 print('Downloading', os.path.join(path, file_name)) 24 25 try: 26 try: 27 urllib.request.urlretrieve(url, os.path.join(path, file_name), MyProgressBar()) 28 except Exception as e: 29 print(e) 30 except (Exception, KeyboardInterrupt): 31 if os.path.exists(os.path.join(path, file_name)): 32 os.remove(os.path.join(path, file_name)) 33 raise 34 35 # Validate download if succeeded and user provided an expected hash 36 sha256_hash = hashlib.sha256() 37 with open(os.path.join(path, file_name),"rb") as f: 38 for byte_block in iter(lambda: f.read(4096),b""): 39 sha256_hash.update(byte_block) 40 if (sha256_hash.hexdigest() == hash): 41 print("Model {} downloaded".format(os.path.join(path, file_name))) 42 else: 43 print('Incomplete or corrupted file detected.') 44 45def get_file(file_name, path, url, hash): 46 if os.path.isfile(os.path.join(path, file_name)): 47 sha256_hash = hashlib.sha256() 48 with open(os.path.join(path, file_name),"rb") as f: 49 for byte_block in iter(lambda: f.read(4096),b""): 50 sha256_hash.update(byte_block) 51 if (sha256_hash.hexdigest() == hash): 52 print("Model {} already exists".format(os.path.join(path, file_name))) 53 else: 54 redownload = input("File corrupted, Redownload? [Y/n]") 55 if len(redownload) == 0: 56 redownload = 'y' 57 else: 58 while not redownload in ['y', 'n']: 59 redownload = input("File corrupted, Redownload? [y or n]") 60 61 if redownload == 'y': 62 download_file(file_name, path, url, hash) 63 64 else: 65 download_file(file_name, path, url, hash)
class
MyProgressBar:
8class MyProgressBar(): 9 def __init__(self): 10 self.pbar = None 11 12 def __call__(self, block_num, block_size, total_size): 13 if not self.pbar: 14 self.pbar=progressbar.ProgressBar(maxval=total_size) 15 self.pbar.start() 16 17 downloaded = block_num * block_size 18 if downloaded < total_size: 19 self.pbar.update(downloaded) 20 else: 21 self.pbar.finish()
def
download_file(file_name, path, url, hash):
23def download_file(file_name, path, url, hash): 24 print('Downloading', os.path.join(path, file_name)) 25 26 try: 27 try: 28 urllib.request.urlretrieve(url, os.path.join(path, file_name), MyProgressBar()) 29 except Exception as e: 30 print(e) 31 except (Exception, KeyboardInterrupt): 32 if os.path.exists(os.path.join(path, file_name)): 33 os.remove(os.path.join(path, file_name)) 34 raise 35 36 # Validate download if succeeded and user provided an expected hash 37 sha256_hash = hashlib.sha256() 38 with open(os.path.join(path, file_name),"rb") as f: 39 for byte_block in iter(lambda: f.read(4096),b""): 40 sha256_hash.update(byte_block) 41 if (sha256_hash.hexdigest() == hash): 42 print("Model {} downloaded".format(os.path.join(path, file_name))) 43 else: 44 print('Incomplete or corrupted file detected.')
def
get_file(file_name, path, url, hash):
46def get_file(file_name, path, url, hash): 47 if os.path.isfile(os.path.join(path, file_name)): 48 sha256_hash = hashlib.sha256() 49 with open(os.path.join(path, file_name),"rb") as f: 50 for byte_block in iter(lambda: f.read(4096),b""): 51 sha256_hash.update(byte_block) 52 if (sha256_hash.hexdigest() == hash): 53 print("Model {} already exists".format(os.path.join(path, file_name))) 54 else: 55 redownload = input("File corrupted, Redownload? [Y/n]") 56 if len(redownload) == 0: 57 redownload = 'y' 58 else: 59 while not redownload in ['y', 'n']: 60 redownload = input("File corrupted, Redownload? [y or n]") 61 62 if redownload == 'y': 63 download_file(file_name, path, url, hash) 64 65 else: 66 download_file(file_name, path, url, hash)