in awscli/customizations/configure/writer.py [0:0]
def _update_section_contents(self, contents, section_name, new_values):
# First, find the line where the section_name is defined.
# This will be the value of i.
new_values = new_values.copy()
# ``contents`` is a list of file line contents.
section_start_line_num = self._find_section_start(contents,
section_name)
# If we get here, then we've found the section. We now need
# to figure out if we're updating a value or adding a new value.
# There's 2 cases. Either we're setting a normal scalar value
# of, we're setting a nested value.
last_matching_line = section_start_line_num
j = last_matching_line + 1
while j < len(contents):
line = contents[j]
if self.SECTION_REGEX.search(line) is not None:
# We've hit a new section which means the config key is
# not in the section. We need to add it here.
self._insert_new_values(line_number=last_matching_line,
contents=contents,
new_values=new_values)
return
match = self.OPTION_REGEX.search(line)
if match is not None:
last_matching_line = j
key_name = match.group(1).strip()
if key_name in new_values:
# We've found the line that defines the option name.
# if the value is not a dict, then we can write the line
# out now.
if not isinstance(new_values[key_name], dict):
option_value = new_values[key_name]
new_line = '%s = %s\n' % (key_name, option_value)
contents[j] = new_line
del new_values[key_name]
else:
j = self._update_subattributes(
j, contents, new_values[key_name],
len(match.group(1)) - len(match.group(1).lstrip()))
return
j += 1
if new_values:
if not contents[-1].endswith('\n'):
contents.append('\n')
self._insert_new_values(line_number=last_matching_line + 1,
contents=contents,
new_values=new_values)