izzylib/IzzyLib/misc.py
2020-05-23 11:26:50 -04:00

89 lines
2.3 KiB
Python

'''Miscellaneous functions'''
import random, string, sys, os, shlex, subprocess
from os.path import abspath, dirname, basename, isdir, isfile
from os import environ as env
from datetime import datetime
from . import logging
def boolean(v, fail=True):
if type(v) in [dict, list, tuple]:
raise ValueError(f'Value is not a string, boolean, int, or nonetype: {value}')
'''make the value lowercase if it's a string'''
value = v.lower() if isinstance(v, str) else v
if value in [1, True, 'on', 'y', 'yes', 'true', 'enable']:
'''convert string to True'''
return True
elif value in [0, False, None, 'off', 'n', 'no', 'false', 'disable', '']:
'''convert string to False'''
return False
elif not fail:
'''just return the value'''
return value
else:
raise ValueError(f'Value cannot be converted to a boolean: {value}')
def randomgen(chars=20):
if not isinstance(chars, int):
raise TypeError(f'Character length must be an integer, not a {type(char)}')
return ''.join(random.choices(string.ascii_letters + string.digits, k=chars))
def formatUTC(timestamp=None):
date = datetime.fromtimestamp(timestamp) if timestamp else datetime.utcnow()
return date.strftime('%a, %d %b %Y %H:%M:%S GMT')
def config_dir(modpath=None):
if env.get('CONFDIR'):
'''set the storage path to the environment variable if it exists'''
stor_path = abspath(env['CONFDIR'])
else:
stor_path = f'{os.getcwd()}'
if modpath and not env.get('CONFDIR'):
modname = basename(dirname(modpath))
if isdir(f'{stor_path}/{modname}'):
'''set the storage path to CWD/data if the module or script is in the working dir'''
stor_path += '/data'
if not isdir (stor_path):
os.makedirs(stor_path, exist_ok=True)
return stor_path
def sudo(cmd, password, user=None):
### Please don't pur your password in plain text in a script
### Use a module like 'getpass' to get the password instead
if isinstance(cmd, list):
cmd = ' '.join(cmd)
elif not isinstance(cmd, str):
raise ValueError('Command is not a list or string')
euser = os.environ.get('USER')
cmd = ' '.join(['sudo', '-u', user, cmd]) if user and euser != user else 'sudo ' + cmd
sudocmd = ' '.join(['echo', f'{password}', '|', cmd])
proc = subprocess.Popen(['/usr/bin/env', 'bash', '-c', sudocmd])
return proc
def merp():
log = logging.getLogger('merp-heck', {'level': 'merp', 'date': False})
log.merp('heck')