diff --git a/openstack_governance/projects.py b/openstack_governance/projects.py index f9775655a..2acbaf3a3 100644 --- a/openstack_governance/projects.py +++ b/openstack_governance/projects.py @@ -10,23 +10,17 @@ # License for the specific language governing permissions and limitations # under the License. -import yaml -import yamlordereddictloader + +from openstack_governance import yamltools def load_project_file(filename='reference/projects.yaml'): + yaml = yamltools.YAML() with open(filename, 'r', encoding='utf-8') as f: - return yaml.load( - f.read(), - Loader=yamlordereddictloader.Loader, - ) + return yaml.load(f) def write_project_file(data, filename='reference/projects.yaml'): + yaml = yamltools.YAML() with open(filename, 'w', encoding='utf-8') as f: - yaml.dump( - data, - f, - default_flow_style=False, - Dumper=yamlordereddictloader.Dumper, - ) + yaml.dump(data, f) diff --git a/openstack_governance/yamltools.py b/openstack_governance/yamltools.py new file mode 100644 index 000000000..81ef6985f --- /dev/null +++ b/openstack_governance/yamltools.py @@ -0,0 +1,40 @@ +# Copyright (c) 2015 Hewlett-Packard Development Company, L.P. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +import ruamel.yaml + + +def none_representer(dumper, data): + return dumper.represent_scalar('tag:yaml.org,2002:null', 'null') + + +class YAML(object): + def __init__(self): + self.yaml = ruamel.yaml.YAML(typ='rt') + self.yaml.width = 256 + self.yaml.allow_duplicate_keys = True + self.yaml.representer.add_representer(type(None), none_representer) + self.yaml.indent(mapping=2, sequence=4, offset=2) + self.yaml.Constructor.add_constructor( + '!encrypted/pkcs1-oaep', + ruamel.yaml.SafeConstructor.construct_yaml_seq, + ) + + def load(self, stream): + return self.yaml.load(stream) + + def dump(self, data, *args, **kwargs): + self.yaml.dump(data, *args, **kwargs) diff --git a/requirements.txt b/requirements.txt index c766810c7..077beb729 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,3 +6,4 @@ PyYAML>=3.1.0 six>=1.9.0 yamlordereddictloader mwclient==0.8.1 +ruamel.yaml \ No newline at end of file