in ccmlib/common.py [0:0]
def parse_settings(args, literal_yaml=False):
settings = {}
if literal_yaml:
for s in args:
settings = dict(settings, **yaml.safe_load(s))
else:
for s in args:
if is_win():
# Allow for absolute path on Windows for value in key/value pair
splitted = s.split(':', 1)
else:
splitted = s.split(':')
if len(splitted) != 2:
raise ArgumentError("A new setting should be of the form 'key: value', got " + s)
key = splitted[0].strip()
val = splitted[1].strip()
# ok, that's not super beautiful
if val.lower() == "true":
val = True
elif val.lower() == "false":
val = False
else:
try:
val = int(val)
except ValueError:
pass
splitted = key.split('.')
split_length = len(splitted)
if split_length >= 2:
# Where we are currently at in the dict.
tree_pos = settings
# Iterate over each split and build structure as needed.
for pos in range(split_length):
split = splitted[pos]
if pos == split_length - 1:
# If at the last split, set value.
tree_pos[split] = val
else:
# If not at last split, create a new dict at the current
# position for this split if it doesn't already exist
# and update the current position.
if split not in tree_pos:
tree_pos[split] = {}
tree_pos = tree_pos[split]
else:
settings[key] = val
return settings