Source code for now.utils.common.helpers
import signal
import sys
from collections.abc import MutableMapping
[docs]def flatten_dict(d, parent_key='', sep='__'):
"""
This function converts a nested dictionary into a dictionary of attirbutes using '__' as a separator.
Example:
{'a': {'b': {'c': 1, 'd': 2}}} -> {'a__b__c': 1, 'a__b__c': 2}
"""
items = []
for k, v in d.items():
new_key = parent_key + sep + k if parent_key else k
if isinstance(v, MutableMapping):
items.extend(flatten_dict(v, new_key, sep=sep).items())
else:
# TODO for now, we just have string values, str(v) should be removed once we support numeric values
items.append((new_key, str(v)))
return dict(items)
[docs]def hide_string_chars(s):
return ''.join(['*' for _ in range(len(s) - 4)]) + s[len(s) - 4 :] if s else None
[docs]def to_camel_case(text):
"""Convert text to camel case in great coding style"""
s = text.replace("_", " ")
s = s.split()
return ''.join(i.capitalize() for i in s)
[docs]def my_handler(signum, frame, spinner):
with spinner.hidden():
sys.stdout.write("Program terminated!\n")
spinner.stop()
exit(0)
[docs]class BetterEnum:
def __iter__(self):
return [getattr(self, x) for x in dir(self) if ('__' not in x)].__iter__()
sigmap = {signal.SIGINT: my_handler, signal.SIGTERM: my_handler}