CloudBender/cloudbender/utils.py

61 lines
1.5 KiB
Python
Raw Normal View History

2018-11-22 18:31:59 +00:00
import os
import copy
import logging
import boto3
logger = logging.getLogger(__name__)
2018-11-22 18:31:59 +00:00
def dict_merge(a, b):
""" Deep merge to allow proper inheritance for config files"""
if not a:
return b
if not b:
return a
if not isinstance(a, dict) or not isinstance(b, dict):
2018-11-22 18:31:59 +00:00
raise TypeError
result = copy.deepcopy(a)
for k, v in b.items():
if k in result and isinstance(result[k], dict):
result[k] = dict_merge(result[k], v)
2018-11-22 18:31:59 +00:00
else:
result[k] = copy.deepcopy(v)
return result
def ensure_dir(path):
"""Creates dir if it does not already exist."""
if not os.path.exists(path):
os.makedirs(path)
logger.info('Created directory: %s', path)
def setup_logging(debug):
if debug:
our_level = logging.DEBUG
logging.getLogger("botocore").setLevel(logging.INFO)
2018-11-22 18:31:59 +00:00
boto3.set_stream_logger('')
2019-01-21 15:24:18 +00:00
formatter = logging.Formatter(
fmt="[%(asctime)s] %(name)s %(message)s",
datefmt="%Y-%m-%d %H:%M:%S"
)
2018-11-22 18:31:59 +00:00
else:
our_level = logging.INFO
logging.getLogger("botocore").setLevel(logging.CRITICAL)
2019-01-21 15:24:18 +00:00
formatter = logging.Formatter(
fmt="[%(asctime)s] %(message)s",
datefmt="%Y-%m-%d %H:%M:%S"
)
2018-11-22 18:31:59 +00:00
log_handler = logging.StreamHandler()
log_handler.setFormatter(formatter)
logger = logging.getLogger("cloudbender")
logger.addHandler(log_handler)
logger.setLevel(our_level)
return logger