def testDisplayDataSizeFactor1024(self): self.assertEqual(output.display_data_size(103), '103.00 B') self.assertEqual(output.display_data_size(1024**1), '1.02 KB') self.assertEqual(output.display_data_size(1024**2), '1.05 MB') self.assertEqual(output.display_data_size(1024**3), '1.07 GB') self.assertEqual(output.display_data_size(1024**4), '1.10 TB') self.assertEqual(output.display_data_size(1024**5), '1.13 PB') self.assertEqual(output.display_data_size(1024**6), '1152.92 PB')
def test_display_data_size_factor_1024(self): self.assertEqual(output.display_data_size(103), "103.00 B") self.assertEqual(output.display_data_size(1024**1), "1.02 KB") self.assertEqual(output.display_data_size(1024**2), "1.05 MB") self.assertEqual(output.display_data_size(1024**3), "1.07 GB") self.assertEqual(output.display_data_size(1024**4), "1.10 TB") self.assertEqual(output.display_data_size(1024**5), "1.13 PB") self.assertEqual(output.display_data_size(1024**6), "1152.92 PB")
def testDisplayDataSizeFactor1000(self): self.assertEqual(output.display_data_size(1000**1), '1.00 KB') self.assertEqual(output.display_data_size(1000**2), '1.00 MB') self.assertEqual(output.display_data_size(1000**3), '1.00 GB') self.assertEqual(output.display_data_size(1000**4), '1.00 TB') self.assertEqual(output.display_data_size(1000**5), '1.00 PB') self.assertEqual(output.display_data_size(1000**6), '1000.00 PB')
def test_display_data_size_factor_1000(self): self.assertEqual(output.display_data_size(1000**1), "1.00 KB") self.assertEqual(output.display_data_size(1000**2), "1.00 MB") self.assertEqual(output.display_data_size(1000**3), "1.00 GB") self.assertEqual(output.display_data_size(1000**4), "1.00 TB") self.assertEqual(output.display_data_size(1000**5), "1.00 PB") self.assertEqual(output.display_data_size(1000**6), "1000.00 PB")
def handle_list(self, config): days = config.get("assets.list.days") size_filter = config.get("assets.list.size_filter") if self._count_filter_args(config) == 2: msg = ("You should choose --by-size-filter or --by-days. " "For help, run: avocado assets list --help") LOG_UI.error(msg) return exit_codes.AVOCADO_FAIL cache_dirs = config.get("datadir.paths.cache_dirs") try: assets = None if days is not None: assets = Asset.get_assets_unused_for_days(days, cache_dirs) elif size_filter is not None: assets = Asset.get_assets_by_size(size_filter, cache_dirs) elif assets is None: assets = Asset.get_all_assets(cache_dirs) except (FileNotFoundError, OSError) as e: LOG_UI.error("Could get assets: %s", e) return exit_codes.AVOCADO_FAIL matrix = [] for asset in assets: stat = os.stat(asset) basename = os.path.basename(asset) hash_path = f"{asset}-CHECKSUM" atime = datetime.fromtimestamp(stat.st_atime) _, checksum = Asset.read_hash_from_file(hash_path) matrix.append(( basename, str(checksum or "unknown")[:10], atime.strftime("%Y-%m-%d %H:%M:%S"), display_data_size(stat.st_size), )) header = ("asset", "checksum", "atime", "size") output = list(iter_tabular_output(matrix, header)) if len(output) == 1: LOG_UI.info("No asset found in your cache system.") else: for line in output: LOG_UI.info(line)
def url_download_interactive(url, output_file, title="", chunk_size=102400): """ Interactively downloads a given file url to a given output file. :type url: string :param url: URL for the file to be download :type output_file: string :param output_file: file name or absolute path on which to save the file to :type title: string :param title: optional title to go along the progress bar :type chunk_size: integer :param chunk_size: amount of data to read at a time """ output_dir = os.path.dirname(output_file) with open(output_file, "w+b") as open_output_file: input_file = urlopen(url) try: file_size = int(input_file.headers["Content-Length"]) except KeyError: raise ValueError("Could not find file size in HTTP headers") log.info( "Downloading %s, %s to %s", os.path.basename(url), output.display_data_size(file_size), output_dir, ) progress_bar = output.ProgressBar(maximum=file_size, title=title) # Download the file, while interactively updating the progress progress_bar.draw() while True: data = input_file.read(chunk_size) if data: progress_bar.append_amount(len(data)) open_output_file.write(data) else: progress_bar.update_amount(file_size) break
def handle_list(self, config): days = config.get('assets.list.days') size_filter = config.get('assets.list.size_filter') if (days is not None and size_filter is not None): msg = ("You should choose --by-size-filter or --by-days. " "For help, run: avocado assets list --help") LOG_UI.error(msg) return # IMO, this should get data from config instead. See #4443 cache_dirs = data_dir.get_cache_dirs() try: assets = None if days is not None: assets = Asset.get_assets_unused_for_days(days, cache_dirs) elif size_filter is not None: assets = Asset.get_assets_by_size(size_filter, cache_dirs) elif assets is None: assets = Asset.get_all_assets(cache_dirs) except (FileNotFoundError, OSError) as e: LOG_UI.error("Could get assets: %s", e) return matrix = [] for asset in assets: stat = os.stat(asset) basename = os.path.basename(asset) hash_path = "{}-CHECKSUM".format(asset) atime = datetime.fromtimestamp(stat.st_atime) _, checksum = Asset.read_hash_from_file(hash_path) matrix.append((basename, str(checksum or "unknown")[:10], atime.strftime('%Y-%m-%d %H:%M:%S'), display_data_size(stat.st_size))) header = ("asset", "checksum", "atime", "size") output = list(iter_tabular_output(matrix, header)) if len(output) == 1: LOG_UI.info("No asset found in your cache system.") else: for line in output: LOG_UI.info(line)