Add some helpers to projectconfig_ruamellib

So that it's easier to use in our scripts, add some helper sugar.

First, add functions load and dump so that the library can be used
similarly to yaml without the need to construct an object first.

Then, remove the strip parameter and detect whether we're dumping
a list or not. That way people won't forget to pass or not pass
strip.

Change-Id: I204af8a89c37f36f0480de3a2e669b65354eb73c
This commit is contained in:
Monty Taylor 2019-04-10 13:11:23 +00:00
parent e7f77f283f
commit 1ffcd0242e
3 changed files with 16 additions and 13 deletions

View File

@ -17,11 +17,10 @@
import locale import locale
import sys import sys
import projectconfig_ruamellib import projectconfig_ruamellib as yaml
def main(): def main():
yaml = projectconfig_ruamellib.YAML(strip=False)
locale.setlocale(locale.LC_COLLATE, 'C') locale.setlocale(locale.LC_COLLATE, 'C')
chandata = yaml.load(open('gerritbot/channels.yaml')) chandata = yaml.load(open('gerritbot/channels.yaml'))

View File

@ -15,12 +15,11 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
import projectconfig_ruamellib import projectconfig_ruamellib as yaml
def main(): def main():
yaml = projectconfig_ruamellib.YAML()
data = yaml.load(open('gerrit/projects.yaml')) data = yaml.load(open('gerrit/projects.yaml'))
for project in data: for project in data:

View File

@ -21,18 +21,12 @@ def none_representer(dumper, data):
class YAML(object): class YAML(object):
def __init__(self, strip=True): def __init__(self):
"""Wrap construction of ruamel yaml object. """Wrap construction of ruamel yaml object."""
:param bool strip:
Whether or not to strip additional leading spaces at the beginning
of the line. This is only needed when the root object is a list.
"""
self.yaml = ruamel.yaml.YAML() self.yaml = ruamel.yaml.YAML()
self.yaml.allow_duplicate_keys = True self.yaml.allow_duplicate_keys = True
self.yaml.representer.add_representer(type(None), none_representer) self.yaml.representer.add_representer(type(None), none_representer)
self.yaml.indent(mapping=2, sequence=4, offset=2) self.yaml.indent(mapping=2, sequence=4, offset=2)
self.strip = strip
def load(self, stream): def load(self, stream):
return self.yaml.load(stream) return self.yaml.load(stream)
@ -48,6 +42,17 @@ class YAML(object):
return '\n'.join(newlines) return '\n'.join(newlines)
def dump(self, data, *args, **kwargs): def dump(self, data, *args, **kwargs):
if self.strip: if isinstance(data, list):
kwargs['transform'] = self.tr kwargs['transform'] = self.tr
self.yaml.dump(data, *args, **kwargs) self.yaml.dump(data, *args, **kwargs)
_yaml = YAML()
def load(*args, **kwargs):
return _yaml.load(*args, **kwargs)
def dump(*args, **kwargs):
return _yaml.dump(*args, **kwargs)