Advertisement
DeaD_EyE

Unit-Converter as decorator

Jun 7th, 2016
205
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.93 KB | None | 0 0
  1. #!/usr/bin/env python3
  2. import math
  3. import functools
  4. import argparse
  5. import sys
  6.  
  7. def convert(func):
  8.     units = ['B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB']
  9.     @functools.wraps(func)
  10.     def inner(*args, **kwargs):
  11.         size = func(*args, **kwargs)
  12.         index = int(math.log(size, 1024))
  13.         div = math.pow(1024, index)
  14.         try:
  15.             return '{:.2f} {}'.format(size/div, units[index])
  16.         except IndexError:
  17.             return '{:.2f} * 2^{} Byte'.format(size/div, index*10)
  18.     return inner
  19.  
  20. @convert
  21. def get_size(size):
  22.     return size
  23.  
  24. if __name__ == '__main__':
  25.     if not sys.stdin.isatty():
  26.         size = int(sys.stdin.read())
  27.     else:
  28.         parser = argparse.ArgumentParser(description='Convert from Bytes')
  29.         parser.add_argument('size', type=int, help='size to convert')
  30.         args = parser.parse_args()
  31.         size = args.size
  32.     print(get_size(size))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement