def serialize_config(config, escape_dollar=False, original=None): yaml = YAML(typ='rt') if escape_dollar: yaml.representer.add_representer(str, serialize_string_escape_dollar) yaml.representer.add_representer(six.text_type, serialize_string_escape_dollar) else: yaml.representer.add_representer(str, serialize_string) yaml.representer.add_representer(six.text_type, serialize_string) yaml.representer.add_representer(Config, serialize_dict_type) yaml.representer.add_representer(ManifestItemVersion, serialize_dict_type) yaml.default_flow_style = False yaml.sort_keys = False yaml.preserve_quotes = True yaml.explicit_start = True yaml.sort_base_mapping_type_on_output = False yaml.indent(mapping=2, sequence=4, offset=2) ret = io.StringIO("") yaml.dump(config, ret) return ret.getvalue()
import io import re import docker from ruamel.yaml import YAML from ruamel.yaml.comments import CommentedMap from toolz import get y = YAML(typ='rt') y.default_flow_style = False y.sort_base_mapping_type_on_output = False y.indent(offset=2) def render(container_names, version=3): struct = {} networks = [] for cname in container_names: cfile, networks = _generate(cname) struct.update(cfile) with io.StringIO() as buffer: if version == 1: y.dump(CommentedMap(struct), buffer) elif version == 3: d = CommentedMap({'version': '3', 'services': struct}) if networks: d.update({'networks': networks})