Пример #1
0
 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')
Пример #2
0
 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')
Пример #3
0
 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")
Пример #4
0
 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')
Пример #5
0
 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')
Пример #6
0
 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")
Пример #7
0
    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)
Пример #8
0
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
Пример #9
0
    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)