Source code for dbsnaplake.utils

# -*- coding: utf-8 -*-

MAGNITUDE_OF_DATA = {
    i: v for i, v in enumerate(["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"])
}


[docs]def repr_data_size( size_in_bytes, precision=2, ): """ Return human readable string represent of a file size. Doesn't support size greater than 1YB. For example: - 100 bytes => 100 B - 100,000 bytes => 97.66 KB - 100,000,000 bytes => 95.37 MB - 100,000,000,000 bytes => 93.13 GB - 100,000,000,000,000 bytes => 90.95 TB - 100,000,000,000,000,000 bytes => 88.82 PB - and more ... Magnitude of data:: 1000 kB kilobyte 1000 ** 2 MB megabyte 1000 ** 3 GB gigabyte 1000 ** 4 TB terabyte 1000 ** 5 PB petabyte 1000 ** 6 EB exabyte 1000 ** 7 ZB zettabyte 1000 ** 8 YB yottabyte :type size_in_bytes: int :type precision: int :rtype: str """ if size_in_bytes < 1024: return "%s B" % size_in_bytes index = 0 while 1: index += 1 size_in_bytes, mod = divmod(size_in_bytes, 1024) if size_in_bytes < 1024: break template = "{0:.%sf} {1}" % precision s = template.format(size_in_bytes + mod / 1024.0, MAGNITUDE_OF_DATA[index]) return s