fix: Stop adding unwanted newlines in multiline strings

This patch set fixes an tools/updater.py YAML export issue in which pyyaml is
adding unwanted (multiple) newlines in multiline strings in the output. In
other words, currently, tools/updater.py keeps injecting additional newline
characters in multiline certificates, such that each newline is rendered, in
effect, as two newlines.

For example:

  -----BEGIN CERTIFICATE-----
  MIIDSDCCAjCgAwIBAgIUegkh/antB1XyDVHdP5dv+0MZyBcwDQYJKoZIhvcNAQEL
  BQAwKjETMBEGA1UEChMKS3ViZXJuZXRlczETMBEGA1UEAxMKa3ViZXJuZXRlczAe
  <snip>

Currently renders as:

  -----BEGIN CERTIFICATE-----

  MIIDSDCCAjCgAwIBAgIUegkh/antB1XyDVHdP5dv+0MZyBcwDQYJKoZIhvcNAQEL

  BQAwKjETMBEGA1UEChMKS3ViZXJuZXRlczETMBEGA1UEAxMKa3ViZXJuZXRlczAe
  <snip>

This patch set adds code to the updater.py tool to use the
solution prescribed in [0] to force pyyaml to ensure that the
rendered output for such multiline strings matches the original
input.

Change-Id: I8b5c5166a0a1b3d945281addd4f562368e1907c3
This commit is contained in:
Felipe Monteiro 2018-10-16 17:27:36 +02:00 committed by Kaspars Skels
parent 2e31790ace
commit 5a93c30c85
1 changed files with 20 additions and 0 deletions

View File

@ -92,6 +92,26 @@ image_repo_status = {}
dict_path = None dict_path = None
def __represent_multiline_yaml_str():
"""Compel ``yaml`` library to use block style literals for multi-line
strings to prevent unwanted multiple newlines.
"""
yaml.SafeDumper.org_represent_str = yaml.SafeDumper.represent_str
def repr_str(dumper, data):
if '\n' in data:
return dumper.represent_scalar(
'tag:yaml.org,2002:str', data, style='|')
return dumper.org_represent_str(data)
yaml.add_representer(str, repr_str, Dumper=yaml.SafeDumper)
__represent_multiline_yaml_str()
def inverse_dict(dic): def inverse_dict(dic):
"""Accepts dictionary, returns dictionary where keys become values, """Accepts dictionary, returns dictionary where keys become values,
and values become keys""" and values become keys"""