You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
catcli/catcli/utils.py

79 lines
1.9 KiB
Python

"""
author: deadc0de6 (https://github.com/deadc0de6)
Copyright (c) 2017, deadc0de6
helpers
"""
import os
import hashlib
import tempfile
import subprocess
import datetime
# local imports
from catcli.logger import Logger
def md5sum(path):
'''calculate md5 sum of a file'''
p = os.path.realpath(path)
if not os.path.exists(p):
Logger.err('\nmd5sum - file does not exist: {}'.format(p))
return None
try:
with open(p, mode='rb') as f:
d = hashlib.md5()
while True:
buf = f.read(4096)
if not buf:
break
d.update(buf)
return d.hexdigest()
except PermissionError:
pass
except OSError as e:
Logger.err('md5sum error: {}'.format(e))
return None
def size_to_str(size, raw=True):
'''convert size to string, optionally human readable'''
div = 1024.
suf = ['B', 'K', 'M', 'G', 'T', 'P']
if raw or size < div:
return '{}'.format(size)
for i in suf:
if size < div:
return '{:.1f}{}'.format(size, i)
size = size / div
return '{:.1f}{}'.format(size, suf[-1])
def epoch_to_str(epoch):
'''convert epoch to string'''
if not epoch:
return ''
fmt = '%Y-%m-%d %H:%M:%S'
t = datetime.datetime.fromtimestamp(float(epoch))
return t.strftime(fmt)
def ask(question):
'''ask the user what to do'''
resp = input('{} [y|N] ? '.format(question))
return resp.lower() == 'y'
def edit(string):
'''edit the information with the default EDITOR'''
string = string.encode('utf-8')
EDITOR = os.environ.get('EDITOR', 'vim')
with tempfile.NamedTemporaryFile(prefix='catcli', suffix='.tmp') as f:
f.write(string)
f.flush()
subprocess.call([EDITOR, f.name])
f.seek(0)
new = f.read()
return new.decode('utf-8')