/usr/lib/python2.7/dist-packages/humanize/filesize.py is in python-humanize 0.5.1-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | #!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Bits & Bytes related humanization."""
suffixes = {
'decimal': ('kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'),
'binary': ('KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB'),
'gnu': "KMGTPEZY",
}
def naturalsize(value, binary=False, gnu=False, format='%.1f'):
"""Format a number of byteslike a human readable filesize (eg. 10 kB). By
default, decimal suffixes (kB, MB) are used. Passing binary=true will use
binary suffixes (KiB, MiB) are used and the base will be 2**10 instead of
10**3. If ``gnu`` is True, the binary argument is ignored and GNU-style
(ls -sh style) prefixes are used (K, M) with the 2**10 definition.
Non-gnu modes are compatible with jinja2's ``filesizeformat`` filter."""
if gnu: suffix = suffixes['gnu']
elif binary: suffix = suffixes['binary']
else: suffix = suffixes['decimal']
base = 1024 if (gnu or binary) else 1000
bytes = float(value)
if bytes == 1 and not gnu: return '1 Byte'
elif bytes < base and not gnu: return '%d Bytes' % bytes
elif bytes < base and gnu: return '%dB' % bytes
for i,s in enumerate(suffix):
unit = base ** (i+2)
if bytes < unit and not gnu:
return (format + ' %s') % ((base * bytes / unit), s)
elif bytes < unit and gnu:
return (format + '%s') % ((base * bytes / unit), s)
if gnu:
return (format + '%s') % ((base * bytes / unit), s)
return (format + ' %s') % ((base * bytes / unit), s)
|